(function(t, e, i) {
    function n(i, r) {
        var s = e[i];
        if (!s) {
            var o = t[i];
            if (!o) return;
            var a = {};
            s = e[i] = {
                exports: a
            }, o[0]((function(t) {
                return n(o[1][t] || t)
            }), s, a)
        }
        return s.exports
    }
    for (var r = 0; r < i.length; r++) n(i[r])
})({
    1: [(function(t, e, i) {
        "use strict";
        t("../core/platform/CCClass");
        var n = t("../core/utils/misc");
        cc.Action = cc.Class({
            name: "cc.Action",
            ctor: function() {
                this.originalTarget = null, this.target = null, this.tag = cc.Action.TAG_INVALID
            },
            clone: function() {
                var t = new cc.Action;
                return t.originalTarget = null, t.target = null, t.tag = this.tag, t
            },
            isDone: function() {
                return !0
            },
            startWithTarget: function(t) {
                this.originalTarget = t, this.target = t
            },
            stop: function() {
                this.target = null
            },
            step: function(t) {
                cc.logID(1006)
            },
            update: function(t) {
                cc.logID(1007)
            },
            getTarget: function() {
                return this.target
            },
            setTarget: function(t) {
                this.target = t
            },
            getOriginalTarget: function() {
                return this.originalTarget
            },
            setOriginalTarget: function(t) {
                this.originalTarget = t
            },
            getTag: function() {
                return this.tag
            },
            setTag: function(t) {
                this.tag = t
            },
            retain: function() {},
            release: function() {}
        }), cc.Action.TAG_INVALID = -1, cc.FiniteTimeAction = cc.Class({
            name: "cc.FiniteTimeAction",
            extends: cc.Action,
            ctor: function() {
                this._duration = 0
            },
            getDuration: function() {
                return this._duration * (this._timesForRepeat || 1)
            },
            setDuration: function(t) {
                this._duration = t
            },
            reverse: function() {
                return cc.logID(1008), null
            },
            clone: function() {
                return new cc.FiniteTimeAction
            }
        }), cc.Speed = cc.Class({
            name: "cc.Speed",
            extends: cc.Action,
            ctor: function(t, e) {
                this._speed = 0, this._innerAction = null, t && this.initWithAction(t, e)
            },
            getSpeed: function() {
                return this._speed
            },
            setSpeed: function(t) {
                this._speed = t
            },
            initWithAction: function(t, e) {
                return t ? (this._innerAction = t, this._speed = e, !0) : (cc.errorID(1021), !1)
            },
            clone: function() {
                var t = new cc.Speed;
                return t.initWithAction(this._innerAction.clone(), this._speed), t
            },
            startWithTarget: function(t) {
                cc.Action.prototype.startWithTarget.call(this, t), this._innerAction.startWithTarget(t)
            },
            stop: function() {
                this._innerAction.stop(), cc.Action.prototype.stop.call(this)
            },
            step: function(t) {
                this._innerAction.step(t * this._speed)
            },
            isDone: function() {
                return this._innerAction.isDone()
            },
            reverse: function() {
                return new cc.Speed(this._innerAction.reverse(), this._speed)
            },
            setInnerAction: function(t) {
                this._innerAction !== t && (this._innerAction = t)
            },
            getInnerAction: function() {
                return this._innerAction
            }
        }), cc.speed = function(t, e) {
            return new cc.Speed(t, e)
        }, cc.Follow = cc.Class({
            name: "cc.Follow",
            extends: cc.Action,
            ctor: function(t, e) {
                this._followedNode = null, this._boundarySet = !1, this._boundaryFullyCovered = !1, this._halfScreenSize = null, this._fullScreenSize = null, this.leftBoundary = 0, this.rightBoundary = 0, this.topBoundary = 0, this.bottomBoundary = 0, this._worldRect = cc.rect(0, 0, 0, 0), t && (e ? this.initWithTarget(t, e) : this.initWithTarget(t))
            },
            clone: function() {
                var t = new cc.Follow,
                    e = this._worldRect,
                    i = new cc.Rect(e.x, e.y, e.width, e.height);
                return t.initWithTarget(this._followedNode, i), t
            },
            isBoundarySet: function() {
                return this._boundarySet
            },
            setBoudarySet: function(t) {
                this._boundarySet = t
            },
            initWithTarget: function(t, e) {
                if (!t) return cc.errorID(1022), !1;
                e = e || cc.rect(0, 0, 0, 0), this._followedNode = t, this._worldRect = e, this._boundarySet = !(0 === e.width && 0 === e.height), this._boundaryFullyCovered = !1;
                var i = cc.winSize;
                return this._fullScreenSize = cc.v2(i.width, i.height), this._halfScreenSize = this._fullScreenSize.mul(.5), this._boundarySet && (this.leftBoundary = -(e.x + e.width - this._fullScreenSize.x), this.rightBoundary = -e.x, this.topBoundary = -e.y, this.bottomBoundary = -(e.y + e.height - this._fullScreenSize.y), this.rightBoundary < this.leftBoundary && (this.rightBoundary = this.leftBoundary = (this.leftBoundary + this.rightBoundary) / 2), this.topBoundary < this.bottomBoundary && (this.topBoundary = this.bottomBoundary = (this.topBoundary + this.bottomBoundary) / 2), this.topBoundary === this.bottomBoundary && this.leftBoundary === this.rightBoundary && (this._boundaryFullyCovered = !0)), !0
            },
            step: function(t) {
                var e = this.target.convertToWorldSpaceAR(cc.Vec2.ZERO),
                    i = this._followedNode.convertToWorldSpaceAR(cc.Vec2.ZERO),
                    r = e.sub(i),
                    s = this.target.parent.convertToNodeSpaceAR(r.add(this._halfScreenSize));
                if (this._boundarySet) {
                    if (this._boundaryFullyCovered) return;
                    this.target.setPosition(n.clampf(s.x, this.leftBoundary, this.rightBoundary), n.clampf(s.y, this.bottomBoundary, this.topBoundary))
                } else this.target.setPosition(s.x, s.y)
            },
            isDone: function() {
                return !this._followedNode.activeInHierarchy
            },
            stop: function() {
                this.target = null, cc.Action.prototype.stop.call(this)
            }
        }), cc.follow = function(t, e) {
            return new cc.Follow(t, e)
        }
    }), {
        "../core/platform/CCClass": 198,
        "../core/utils/misc": 300
    }],
    2: [(function(t, e, i) {
        "use strict";

        function n(t, e, i, n, r, s) {
            var o = s * s,
                a = o * s,
                l = (1 - r) / 2,
                h = l * (2 * o - a - s),
                c = l * (-a + o) + (2 * a - 3 * o + 1),
                u = l * (a - 2 * o + s) + (-2 * a + 3 * o),
                _ = l * (a - o),
                f = t.x * h + e.x * c + i.x * u + n.x * _,
                d = t.y * h + e.y * c + i.y * u + n.y * _;
            return cc.v2(f, d)
        }

        function r(t, e) {
            return t[Math.min(t.length - 1, Math.max(e, 0))]
        }

        function s(t) {
            for (var e = [], i = t.length - 1; i >= 0; i--) e.push(cc.v2(t[i].x, t[i].y));
            return e
        }

        function o(t) {
            for (var e = [], i = 0; i < t.length; i++) e.push(cc.v2(t[i].x, t[i].y));
            return e
        }
        cc.CardinalSplineTo = cc.Class({
            name: "cc.CardinalSplineTo",
            extends: cc.ActionInterval,
            ctor: function(t, e, i) {
                this._points = [], this._deltaT = 0, this._tension = 0, this._previousPosition = null, this._accumulatedDiff = null, void 0 !== i && cc.CardinalSplineTo.prototype.initWithDuration.call(this, t, e, i)
            },
            initWithDuration: function(t, e, i) {
                return e && 0 !== e.length ? !!cc.ActionInterval.prototype.initWithDuration.call(this, t) && (this.setPoints(e), this._tension = i, !0) : (cc.errorID(1024), !1)
            },
            clone: function() {
                var t = new cc.CardinalSplineTo;
                return t.initWithDuration(this._duration, o(this._points), this._tension), t
            },
            startWithTarget: function(t) {
                cc.ActionInterval.prototype.startWithTarget.call(this, t), this._deltaT = 1 / (this._points.length - 1), this._previousPosition = cc.v2(this.target.x, this.target.y), this._accumulatedDiff = cc.v2(0, 0)
            },
            update: function(t) {
                var e, i;
                t = this._computeEaseTime(t);
                var s = this._points;
                if (1 === t) e = s.length - 1, i = 1;
                else {
                    var o = this._deltaT;
                    i = (t - o * (e = 0 | t / o)) / o
                }
                var a, l, h = n(r(s, e - 1), r(s, e - 0), r(s, e + 1), r(s, e + 2), this._tension, i);
                if (cc.macro.ENABLE_STACKABLE_ACTIONS && (a = this.target.x - this._previousPosition.x, l = this.target.y - this._previousPosition.y, 0 !== a || 0 !== l)) {
                    var c = this._accumulatedDiff;
                    a = c.x + a, l = c.y + l, c.x = a, c.y = l, h.x += a, h.y += l
                }
                this.updatePosition(h)
            },
            reverse: function() {
                var t = s(this._points);
                return cc.cardinalSplineTo(this._duration, t, this._tension)
            },
            updatePosition: function(t) {
                this.target.setPosition(t), this._previousPosition = t
            },
            getPoints: function() {
                return this._points
            },
            setPoints: function(t) {
                this._points = t
            }
        }), cc.cardinalSplineTo = function(t, e, i) {
            return new cc.CardinalSplineTo(t, e, i)
        }, cc.CardinalSplineBy = cc.Class({
            name: "cc.CardinalSplineBy",
            extends: cc.CardinalSplineTo,
            ctor: function(t, e, i) {
                this._startPosition = cc.v2(0, 0), void 0 !== i && this.initWithDuration(t, e, i)
            },
            startWithTarget: function(t) {
                cc.CardinalSplineTo.prototype.startWithTarget.call(this, t), this._startPosition.x = t.x, this._startPosition.y = t.y
            },
            reverse: function() {
                for (var t, e = this._points.slice(), i = e[0], n = 1; n < e.length; ++n) t = e[n], e[n] = t.sub(i), i = t;
                var r = s(e);
                i = r[r.length - 1], r.pop(), i.x = -i.x, i.y = -i.y, r.unshift(i);
                for (n = 1; n < r.length; ++n)(t = r[n]).x = -t.x, t.y = -t.y, t.x += i.x, t.y += i.y, r[n] = t, i = t;
                return cc.cardinalSplineBy(this._duration, r, this._tension)
            },
            updatePosition: function(t) {
                var e = this._startPosition,
                    i = t.x + e.x,
                    n = t.y + e.y;
                this._previousPosition.x = i, this._previousPosition.y = n, this.target.setPosition(i, n)
            },
            clone: function() {
                var t = new cc.CardinalSplineBy;
                return t.initWithDuration(this._duration, o(this._points), this._tension), t
            }
        }), cc.cardinalSplineBy = function(t, e, i) {
            return new cc.CardinalSplineBy(t, e, i)
        }, cc.CatmullRomTo = cc.Class({
            name: "cc.CatmullRomTo",
            extends: cc.CardinalSplineTo,
            ctor: function(t, e) {
                e && this.initWithDuration(t, e)
            },
            initWithDuration: function(t, e) {
                return cc.CardinalSplineTo.prototype.initWithDuration.call(this, t, e, .5)
            },
            clone: function() {
                var t = new cc.CatmullRomTo;
                return t.initWithDuration(this._duration, o(this._points)), t
            }
        }), cc.catmullRomTo = function(t, e) {
            return new cc.CatmullRomTo(t, e)
        }, cc.CatmullRomBy = cc.Class({
            name: "cc.CatmullRomBy",
            extends: cc.CardinalSplineBy,
            ctor: function(t, e) {
                e && this.initWithDuration(t, e)
            },
            initWithDuration: function(t, e) {
                return cc.CardinalSplineTo.prototype.initWithDuration.call(this, t, e, .5)
            },
            clone: function() {
                var t = new cc.CatmullRomBy;
                return t.initWithDuration(this._duration, o(this._points)), t
            }
        }), cc.catmullRomBy = function(t, e) {
            return new cc.CatmullRomBy(t, e)
        }
    }), {}],
    3: [(function(t, e, i) {
        "use strict";
        cc.easeIn = function(t) {
            return {
                _rate: t,
                easing: function(t) {
                    return Math.pow(t, this._rate)
                },
                reverse: function() {
                    return cc.easeIn(1 / this._rate)
                }
            }
        }, cc.easeOut = function(t) {
            return {
                _rate: t,
                easing: function(t) {
                    return Math.pow(t, 1 / this._rate)
                },
                reverse: function() {
                    return cc.easeOut(1 / this._rate)
                }
            }
        }, cc.easeInOut = function(t) {
            return {
                _rate: t,
                easing: function(t) {
                    return (t *= 2) < 1 ? .5 * Math.pow(t, this._rate) : 1 - .5 * Math.pow(2 - t, this._rate)
                },
                reverse: function() {
                    return cc.easeInOut(this._rate)
                }
            }
        };
        var n = {
            easing: function(t) {
                return 0 === t ? 0 : Math.pow(2, 10 * (t - 1))
            },
            reverse: function() {
                return r
            }
        };
        cc.easeExponentialIn = function() {
            return n
        };
        var r = {
            easing: function(t) {
                return 1 === t ? 1 : 1 - Math.pow(2, -10 * t)
            },
            reverse: function() {
                return n
            }
        };
        cc.easeExponentialOut = function() {
            return r
        };
        var s = {
            easing: function(t) {
                return 1 !== t && 0 !== t ? (t *= 2) < 1 ? .5 * Math.pow(2, 10 * (t - 1)) : .5 * (2 - Math.pow(2, -10 * (t - 1))) : t
            },
            reverse: function() {
                return s
            }
        };
        cc.easeExponentialInOut = function() {
            return s
        };
        var o = {
            easing: function(t) {
                return 0 === t || 1 === t ? t : -1 * Math.cos(t * Math.PI / 2) + 1
            },
            reverse: function() {
                return a
            }
        };
        cc.easeSineIn = function() {
            return o
        };
        var a = {
            easing: function(t) {
                return 0 === t || 1 === t ? t : Math.sin(t * Math.PI / 2)
            },
            reverse: function() {
                return o
            }
        };
        cc.easeSineOut = function() {
            return a
        };
        var l = {
            easing: function(t) {
                return 0 === t || 1 === t ? t : -.5 * (Math.cos(Math.PI * t) - 1)
            },
            reverse: function() {
                return l
            }
        };
        cc.easeSineInOut = function() {
            return l
        };
        var h = {
            easing: function(t) {
                return 0 === t || 1 === t ? t : (t -= 1, -Math.pow(2, 10 * t) * Math.sin((t - .075) * Math.PI * 2 / .3))
            },
            reverse: function() {
                return c
            }
        };
        cc.easeElasticIn = function(t) {
            return t && .3 !== t ? {
                _period: t,
                easing: function(t) {
                    return 0 === t || 1 === t ? t : (t -= 1, -Math.pow(2, 10 * t) * Math.sin((t - this._period / 4) * Math.PI * 2 / this._period))
                },
                reverse: function() {
                    return cc.easeElasticOut(this._period)
                }
            } : h
        };
        var c = {
            easing: function(t) {
                return 0 === t || 1 === t ? t : Math.pow(2, -10 * t) * Math.sin((t - .075) * Math.PI * 2 / .3) + 1
            },
            reverse: function() {
                return h
            }
        };

        function u(t) {
            return t < 1 / 2.75 ? 7.5625 * t * t : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + .75 : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375 : 7.5625 * (t -= 2.625 / 2.75) * t + .984375
        }
        cc.easeElasticOut = function(t) {
            return t && .3 !== t ? {
                _period: t,
                easing: function(t) {
                    return 0 === t || 1 === t ? t : Math.pow(2, -10 * t) * Math.sin((t - this._period / 4) * Math.PI * 2 / this._period) + 1
                },
                reverse: function() {
                    return cc.easeElasticIn(this._period)
                }
            } : c
        }, cc.easeElasticInOut = function(t) {
            return {
                _period: t = t || .3,
                easing: function(t) {
                    var e = 0,
                        i = this._period;
                    if (0 === t || 1 === t) e = t;
                    else {
                        t *= 2, i || (i = this._period = .3 * 1.5);
                        var n = i / 4;
                        e = (t -= 1) < 0 ? -.5 * Math.pow(2, 10 * t) * Math.sin((t - n) * Math.PI * 2 / i) : Math.pow(2, -10 * t) * Math.sin((t - n) * Math.PI * 2 / i) * .5 + 1
                    }
                    return e
                },
                reverse: function() {
                    return cc.easeElasticInOut(this._period)
                }
            }
        };
        var _ = {
            easing: function(t) {
                return 1 - u(1 - t)
            },
            reverse: function() {
                return f
            }
        };
        cc.easeBounceIn = function() {
            return _
        };
        var f = {
            easing: function(t) {
                return u(t)
            },
            reverse: function() {
                return _
            }
        };
        cc.easeBounceOut = function() {
            return f
        };
        var d = {
            easing: function(t) {
                return t < .5 ? .5 * (1 - u(1 - (t *= 2))) : .5 * u(2 * t - 1) + .5
            },
            reverse: function() {
                return d
            }
        };
        cc.easeBounceInOut = function() {
            return d
        };
        var p = {
            easing: function(t) {
                return 0 === t || 1 === t ? t : t * t * (2.70158 * t - 1.70158)
            },
            reverse: function() {
                return m
            }
        };
        cc.easeBackIn = function() {
            return p
        };
        var m = {
            easing: function(t) {
                return (t -= 1) * t * (2.70158 * t + 1.70158) + 1
            },
            reverse: function() {
                return p
            }
        };
        cc.easeBackOut = function() {
            return m
        };
        var y = {
            easing: function(t) {
                return (t *= 2) < 1 ? t * t * (3.5949095 * t - 2.5949095) / 2 : (t -= 2) * t * (3.5949095 * t + 2.5949095) / 2 + 1
            },
            reverse: function() {
                return y
            }
        };
        cc.easeBackInOut = function() {
            return y
        }, cc.easeBezierAction = function(t, e, i, n) {
            return {
                easing: function(r) {
                    return Math.pow(1 - r, 3) * t + 3 * r * Math.pow(1 - r, 2) * e + 3 * Math.pow(r, 2) * (1 - r) * i + Math.pow(r, 3) * n
                },
                reverse: function() {
                    return cc.easeBezierAction(n, i, e, t)
                }
            }
        };
        var v = {
            easing: function(t) {
                return Math.pow(t, 2)
            },
            reverse: function() {
                return v
            }
        };
        cc.easeQuadraticActionIn = function() {
            return v
        };
        var g = {
            easing: function(t) {
                return -t * (t - 2)
            },
            reverse: function() {
                return g
            }
        };
        cc.easeQuadraticActionOut = function() {
            return g
        };
        var x = {
            easing: function(t) {
                return (t *= 2) < 1 ? t * t * .5 : -.5 * (--t * (t - 2) - 1)
            },
            reverse: function() {
                return x
            }
        };
        cc.easeQuadraticActionInOut = function() {
            return x
        };
        var b = {
            easing: function(t) {
                return t * t * t * t
            },
            reverse: function() {
                return b
            }
        };
        cc.easeQuarticActionIn = function() {
            return b
        };
        var A = {
            easing: function(t) {
                return -((t -= 1) * t * t * t - 1)
            },
            reverse: function() {
                return A
            }
        };
        cc.easeQuarticActionOut = function() {
            return A
        };
        var C = {
            easing: function(t) {
                return (t *= 2) < 1 ? .5 * t * t * t * t : -.5 * ((t -= 2) * t * t * t - 2)
            },
            reverse: function() {
                return C
            }
        };
        cc.easeQuarticActionInOut = function() {
            return C
        };
        var T = {
            easing: function(t) {
                return t * t * t * t * t
            },
            reverse: function() {
                return T
            }
        };
        cc.easeQuinticActionIn = function() {
            return T
        };
        var S = {
            easing: function(t) {
                return (t -= 1) * t * t * t * t + 1
            },
            reverse: function() {
                return S
            }
        };
        cc.easeQuinticActionOut = function() {
            return S
        };
        var w = {
            easing: function(t) {
                return (t *= 2) < 1 ? .5 * t * t * t * t * t : .5 * ((t -= 2) * t * t * t * t + 2)
            },
            reverse: function() {
                return w
            }
        };
        cc.easeQuinticActionInOut = function() {
            return w
        };
        var E = {
            easing: function(t) {
                return -1 * (Math.sqrt(1 - t * t) - 1)
            },
            reverse: function() {
                return E
            }
        };
        cc.easeCircleActionIn = function() {
            return E
        };
        var M = {
            easing: function(t) {
                return t -= 1, Math.sqrt(1 - t * t)
            },
            reverse: function() {
                return M
            }
        };
        cc.easeCircleActionOut = function() {
            return M
        };
        var D = {
            easing: function(t) {
                return (t *= 2) < 1 ? -.5 * (Math.sqrt(1 - t * t) - 1) : (t -= 2, .5 * (Math.sqrt(1 - t * t) + 1))
            },
            reverse: function() {
                return D
            }
        };
        cc.easeCircleActionInOut = function() {
            return D
        };
        var B = {
            easing: function(t) {
                return t * t * t
            },
            reverse: function() {
                return B
            }
        };
        cc.easeCubicActionIn = function() {
            return B
        };
        var I = {
            easing: function(t) {
                return (t -= 1) * t * t + 1
            },
            reverse: function() {
                return I
            }
        };
        cc.easeCubicActionOut = function() {
            return I
        };
        var P = {
            easing: function(t) {
                return (t *= 2) < 1 ? .5 * t * t * t : .5 * ((t -= 2) * t * t + 2)
            },
            reverse: function() {
                return P
            }
        };
        cc.easeCubicActionInOut = function() {
            return P
        }
    }), {}],
    4: [(function(t, e, i) {
        "use strict";
        cc.ActionInstant = cc.Class({
            name: "cc.ActionInstant",
            extends: cc.FiniteTimeAction,
            isDone: function() {
                return !0
            },
            step: function(t) {
                this.update(1)
            },
            update: function(t) {},
            reverse: function() {
                return this.clone()
            },
            clone: function() {
                return new cc.ActionInstant
            }
        }), cc.Show = cc.Class({
            name: "cc.Show",
            extends: cc.ActionInstant,
            update: function(t) {
                for (var e = this.target.getComponentsInChildren(cc.RenderComponent), i = 0; i < e.length; ++i) {
                    e[i].enabled = !0
                }
            },
            reverse: function() {
                return new cc.Hide
            },
            clone: function() {
                return new cc.Show
            }
        }), cc.show = function() {
            return new cc.Show
        }, cc.Hide = cc.Class({
            name: "cc.Hide",
            extends: cc.ActionInstant,
            update: function(t) {
                for (var e = this.target.getComponentsInChildren(cc.RenderComponent), i = 0; i < e.length; ++i) {
                    e[i].enabled = !1
                }
            },
            reverse: function() {
                return new cc.Show
            },
            clone: function() {
                return new cc.Hide
            }
        }), cc.hide = function() {
            return new cc.Hide
        }, cc.ToggleVisibility = cc.Class({
            name: "cc.ToggleVisibility",
            extends: cc.ActionInstant,
            update: function(t) {
                for (var e = this.target.getComponentsInChildren(cc.RenderComponent), i = 0; i < e.length; ++i) {
                    var n = e[i];
                    n.enabled = !n.enabled
                }
            },
            reverse: function() {
                return new cc.ToggleVisibility
            },
            clone: function() {
                return new cc.ToggleVisibility
            }
        }), cc.toggleVisibility = function() {
            return new cc.ToggleVisibility
        }, cc.RemoveSelf = cc.Class({
            name: "cc.RemoveSelf",
            extends: cc.ActionInstant,
            ctor: function(t) {
                this._isNeedCleanUp = !0, void 0 !== t && this.init(t)
            },
            update: function(t) {
                this.target.removeFromParent(this._isNeedCleanUp)
            },
            init: function(t) {
                return this._isNeedCleanUp = t, !0
            },
            reverse: function() {
                return new cc.RemoveSelf(this._isNeedCleanUp)
            },
            clone: function() {
                return new cc.RemoveSelf(this._isNeedCleanUp)
            }
        }), cc.removeSelf = function(t) {
            return new cc.RemoveSelf(t)
        }, cc.FlipX = cc.Class({
            name: "cc.FlipX",
            extends: cc.ActionInstant,
            ctor: function(t) {
                this._flippedX = !1, void 0 !== t && this.initWithFlipX(t)
            },
            initWithFlipX: function(t) {
                return this._flippedX = t, !0
            },
            update: function(t) {
                this.target.scaleX = Math.abs(this.target.scaleX) * (this._flippedX ? -1 : 1)
            },
            reverse: function() {
                return new cc.FlipX(!this._flippedX)
            },
            clone: function() {
                var t = new cc.FlipX;
                return t.initWithFlipX(this._flippedX), t
            }
        }), cc.flipX = function(t) {
            return new cc.FlipX(t)
        }, cc.FlipY = cc.Class({
            name: "cc.FlipY",
            extends: cc.ActionInstant,
            ctor: function(t) {
                this._flippedY = !1, void 0 !== t && this.initWithFlipY(t)
            },
            initWithFlipY: function(t) {
                return this._flippedY = t, !0
            },
            update: function(t) {
                this.target.scaleY = Math.abs(this.target.scaleY) * (this._flippedY ? -1 : 1)
            },
            reverse: function() {
                return new cc.FlipY(!this._flippedY)
            },
            clone: function() {
                var t = new cc.FlipY;
                return t.initWithFlipY(this._flippedY), t
            }
        }), cc.flipY = function(t) {
            return new cc.FlipY(t)
        }, cc.Place = cc.Class({
            name: "cc.Place",
            extends: cc.ActionInstant,
            ctor: function(t, e) {
                this._x = 0, this._y = 0, void 0 !== t && (void 0 !== t.x && (e = t.y, t = t.x), this.initWithPosition(t, e))
            },
            initWithPosition: function(t, e) {
                return this._x = t, this._y = e, !0
            },
            update: function(t) {
                this.target.setPosition(this._x, this._y)
            },
            clone: function() {
                var t = new cc.Place;
                return t.initWithPosition(this._x, this._y), t
            }
        }), cc.place = function(t, e) {
            return new cc.Place(t, e)
        }, cc.CallFunc = cc.Class({
            name: "cc.CallFunc",
            extends: cc.ActionInstant,
            ctor: function(t, e, i) {
                this._selectorTarget = null, this._function = null, this._data = null, this.initWithFunction(t, e, i)
            },
            initWithFunction: function(t, e, i) {
                return t && (this._function = t), e && (this._selectorTarget = e), void 0 !== i && (this._data = i), !0
            },
            execute: function() {
                this._function && this._function.call(this._selectorTarget, this.target, this._data)
            },
            update: function(t) {
                this.execute()
            },
            getTargetCallback: function() {
                return this._selectorTarget
            },
            setTargetCallback: function(t) {
                t !== this._selectorTarget && (this._selectorTarget && (this._selectorTarget = null), this._selectorTarget = t)
            },
            clone: function() {
                var t = new cc.CallFunc;
                return t.initWithFunction(this._function, this._selectorTarget, this._data), t
            }
        }), cc.callFunc = function(t, e, i) {
            return new cc.CallFunc(t, e, i)
        }
    }), {}],
    5: [(function(t, e, i) {
        "use strict";

        function n(t, e, i, n, r) {
            return Math.pow(1 - r, 3) * t + 3 * r * Math.pow(1 - r, 2) * e + 3 * Math.pow(r, 2) * (1 - r) * i + Math.pow(r, 3) * n
        }
        cc.ActionInterval = cc.Class({
            name: "cc.ActionInterval",
            extends: cc.FiniteTimeAction,
            ctor: function(t) {
                this.MAX_VALUE = 2, this._elapsed = 0, this._firstTick = !1, this._easeList = null, this._speed = 1, this._timesForRepeat = 1, this._repeatForever = !1, this._repeatMethod = !1, this._speedMethod = !1, void 0 !== t && cc.ActionInterval.prototype.initWithDuration.call(this, t)
            },
            getElapsed: function() {
                return this._elapsed
            },
            initWithDuration: function(t) {
                return this._duration = 0 === t ? cc.macro.FLT_EPSILON : t, this._elapsed = 0, this._firstTick = !0, !0
            },
            isDone: function() {
                return this._elapsed >= this._duration
            },
            _cloneDecoration: function(t) {
                t._repeatForever = this._repeatForever, t._speed = this._speed, t._timesForRepeat = this._timesForRepeat, t._easeList = this._easeList, t._speedMethod = this._speedMethod, t._repeatMethod = this._repeatMethod
            },
            _reverseEaseList: function(t) {
                if (this._easeList) {
                    t._easeList = [];
                    for (var e = 0; e < this._easeList.length; e++) t._easeList.push(this._easeList[e].reverse())
                }
            },
            clone: function() {
                var t = new cc.ActionInterval(this._duration);
                return this._cloneDecoration(t), t
            },
            easing: function(t) {
                this._easeList ? this._easeList.length = 0 : this._easeList = [];
                for (var e = 0; e < arguments.length; e++) this._easeList.push(arguments[e]);
                return this
            },
            _computeEaseTime: function(t) {
                var e = this._easeList;
                if (!e || 0 === e.length) return t;
                for (var i = 0, n = e.length; i < n; i++) t = e[i].easing(t);
                return t
            },
            step: function(t) {
                this._firstTick ? (this._firstTick = !1, this._elapsed = 0) : this._elapsed += t;
                var e = this._elapsed / (this._duration > 1.192092896e-7 ? this._duration : 1.192092896e-7);
                e = 1 > e ? e : 1, this.update(e > 0 ? e : 0), this._repeatMethod && this._timesForRepeat > 1 && this.isDone() && (this._repeatForever || this._timesForRepeat--, this.startWithTarget(this.target), this.step(this._elapsed - this._duration))
            },
            startWithTarget: function(t) {
                cc.Action.prototype.startWithTarget.call(this, t), this._elapsed = 0, this._firstTick = !0
            },
            reverse: function() {
                return cc.logID(1010), null
            },
            setAmplitudeRate: function(t) {
                cc.logID(1011)
            },
            getAmplitudeRate: function() {
                return cc.logID(1012), 0
            },
            speed: function(t) {
                return t <= 0 ? (cc.logID(1013), this) : (this._speedMethod = !0, this._speed *= t, this)
            },
            getSpeed: function() {
                return this._speed
            },
            setSpeed: function(t) {
                return this._speed = t, this
            },
            repeat: function(t) {
                return t = Math.round(t), isNaN(t) || t < 1 ? (cc.logID(1014), this) : (this._repeatMethod = !0, this._timesForRepeat *= t, this)
            },
            repeatForever: function() {
                return this._repeatMethod = !0, this._timesForRepeat = this.MAX_VALUE, this._repeatForever = !0, this
            }
        }), cc.actionInterval = function(t) {
            return new cc.ActionInterval(t)
        }, cc.Sequence = cc.Class({
            name: "cc.Sequence",
            extends: cc.ActionInterval,
            ctor: function(t) {
                this._actions = [], this._split = null, this._last = 0, this._reversed = !1;
                var e = t instanceof Array ? t : arguments;
                if (1 !== e.length) {
                    var i = e.length - 1;
                    if (i >= 0 && null == e[i] && cc.logID(1015), i >= 0) {
                        for (var n, r = e[0], s = 1; s < i; s++) e[s] && (n = r, r = cc.Sequence._actionOneTwo(n, e[s]));
                        this.initWithTwoActions(r, e[i])
                    }
                } else cc.errorID(1019)
            },
            initWithTwoActions: function(t, e) {
                if (!t || !e) return cc.errorID(1025), !1;
                var i = t._duration,
                    n = e._duration,
                    r = (i *= t._repeatMethod ? t._timesForRepeat : 1) + (n *= e._repeatMethod ? e._timesForRepeat : 1);
                return this.initWithDuration(r), this._actions[0] = t, this._actions[1] = e, !0
            },
            clone: function() {
                var t = new cc.Sequence;
                return this._cloneDecoration(t), t.initWithTwoActions(this._actions[0].clone(), this._actions[1].clone()), t
            },
            startWithTarget: function(t) {
                cc.ActionInterval.prototype.startWithTarget.call(this, t), this._split = this._actions[0]._duration / this._duration, this._split *= this._actions[0]._repeatMethod ? this._actions[0]._timesForRepeat : 1, this._last = -1
            },
            stop: function() {
                -1 !== this._last && this._actions[this._last].stop(), cc.Action.prototype.stop.call(this)
            },
            update: function(t) {
                var e, i, n = 0,
                    r = this._split,
                    s = this._actions,
                    o = this._last;
                (t = this._computeEaseTime(t)) < r ? (e = 0 !== r ? t / r : 1, 0 === n && 1 === o && this._reversed && (s[1].update(0), s[1].stop())) : (n = 1, e = 1 === r ? 1 : (t - r) / (1 - r), -1 === o && (s[0].startWithTarget(this.target), s[0].update(1), s[0].stop()), 0 === o && (s[0].update(1), s[0].stop())), i = s[n], o === n && i.isDone() || (o !== n && i.startWithTarget(this.target), e *= i._timesForRepeat, i.update(e > 1 ? e % 1 : e), this._last = n)
            },
            reverse: function() {
                var t = cc.Sequence._actionOneTwo(this._actions[1].reverse(), this._actions[0].reverse());
                return this._cloneDecoration(t), this._reverseEaseList(t), t._reversed = !0, t
            }
        }), cc.sequence = function(t) {
            var e = t instanceof Array ? t : arguments;
            if (1 === e.length) return cc.errorID(1019), null;
            var i = e.length - 1;
            i >= 0 && null == e[i] && cc.logID(1015);
            var n = null;
            if (i >= 0) {
                n = e[0];
                for (var r = 1; r <= i; r++) e[r] && (n = cc.Sequence._actionOneTwo(n, e[r]))
            }
            return n
        }, cc.Sequence._actionOneTwo = function(t, e) {
            var i = new cc.Sequence;
            return i.initWithTwoActions(t, e), i
        }, cc.Repeat = cc.Class({
            name: "cc.Repeat",
            extends: cc.ActionInterval,
            ctor: function(t, e) {
                this._times = 0, this._total = 0, this._nextDt = 0, this._actionInstant = !1, this._innerAction = null, void 0 !== e && this.initWithAction(t, e)
            },
            initWithAction: function(t, e) {
                var i = t._duration * e;
                return !!this.initWithDuration(i) && (this._times = e, this._innerAction = t, t instanceof cc.ActionInstant && (this._actionInstant = !0, this._times -= 1), this._total = 0, !0)
            },
            clone: function() {
                var t = new cc.Repeat;
                return this._cloneDecoration(t), t.initWithAction(this._innerAction.clone(), this._times), t
            },
            startWithTarget: function(t) {
                this._total = 0, this._nextDt = this._innerAction._duration / this._duration, cc.ActionInterval.prototype.startWithTarget.call(this, t), this._innerAction.startWithTarget(t)
            },
            stop: function() {
                this._innerAction.stop(), cc.Action.prototype.stop.call(this)
            },
            update: function(t) {
                t = this._computeEaseTime(t);
                var e = this._innerAction,
                    i = this._duration,
                    n = this._times,
                    r = this._nextDt;
                if (t >= r) {
                    for (; t > r && this._total < n;) e.update(1), this._total++, e.stop(), e.startWithTarget(this.target), r += e._duration / i, this._nextDt = r > 1 ? 1 : r;
                    t >= 1 && this._total < n && (e.update(1), this._total++), this._actionInstant || (this._total === n ? e.stop() : e.update(t - (r - e._duration / i)))
                } else e.update(t * n % 1)
            },
            isDone: function() {
                return this._total === this._times
            },
            reverse: function() {
                var t = new cc.Repeat(this._innerAction.reverse(), this._times);
                return this._cloneDecoration(t), this._reverseEaseList(t), t
            },
            setInnerAction: function(t) {
                this._innerAction !== t && (this._innerAction = t)
            },
            getInnerAction: function() {
                return this._innerAction
            }
        }), cc.repeat = function(t, e) {
            return new cc.Repeat(t, e)
        }, cc.RepeatForever = cc.Class({
            name: "cc.RepeatForever",
            extends: cc.ActionInterval,
            ctor: function(t) {
                this._innerAction = null, t && this.initWithAction(t)
            },
            initWithAction: function(t) {
                return t ? (this._innerAction = t, !0) : (cc.errorID(1026), !1)
            },
            clone: function() {
                var t = new cc.RepeatForever;
                return this._cloneDecoration(t), t.initWithAction(this._innerAction.clone()), t
            },
            startWithTarget: function(t) {
                cc.ActionInterval.prototype.startWithTarget.call(this, t), this._innerAction.startWithTarget(t)
            },
            step: function(t) {
                var e = this._innerAction;
                e.step(t), e.isDone() && (e.startWithTarget(this.target), e.step(e.getElapsed() - e._duration))
            },
            isDone: function() {
                return !1
            },
            reverse: function() {
                var t = new cc.RepeatForever(this._innerAction.reverse());
                return this._cloneDecoration(t), this._reverseEaseList(t), t
            },
            setInnerAction: function(t) {
                this._innerAction !== t && (this._innerAction = t)
            },
            getInnerAction: function() {
                return this._innerAction
            }
        }), cc.repeatForever = function(t) {
            return new cc.RepeatForever(t)
        }, cc.Spawn = cc.Class({
            name: "cc.Spawn",
            extends: cc.ActionInterval,
            ctor: function(t) {
                this._one = null, this._two = null;
                var e = t instanceof Array ? t : arguments;
                if (1 !== e.length) {
                    var i = e.length - 1;
                    if (i >= 0 && null == e[i] && cc.logID(1015), i >= 0) {
                        for (var n, r = e[0], s = 1; s < i; s++) e[s] && (n = r, r = cc.Spawn._actionOneTwo(n, e[s]));
                        this.initWithTwoActions(r, e[i])
                    }
                } else cc.errorID(1020)
            },
            initWithTwoActions: function(t, e) {
                if (!t || !e) return cc.errorID(1027), !1;
                var i = !1,
                    n = t._duration,
                    r = e._duration;
                return this.initWithDuration(Math.max(n, r)) && (this._one = t, this._two = e, n > r ? this._two = cc.Sequence._actionOneTwo(e, cc.delayTime(n - r)) : n < r && (this._one = cc.Sequence._actionOneTwo(t, cc.delayTime(r - n))), i = !0), i
            },
            clone: function() {
                var t = new cc.Spawn;
                return this._cloneDecoration(t), t.initWithTwoActions(this._one.clone(), this._two.clone()), t
            },
            startWithTarget: function(t) {
                cc.ActionInterval.prototype.startWithTarget.call(this, t), this._one.startWithTarget(t), this._two.startWithTarget(t)
            },
            stop: function() {
                this._one.stop(), this._two.stop(), cc.Action.prototype.stop.call(this)
            },
            update: function(t) {
                t = this._computeEaseTime(t), this._one && this._one.update(t), this._two && this._two.update(t)
            },
            reverse: function() {
                var t = cc.Spawn._actionOneTwo(this._one.reverse(), this._two.reverse());
                return this._cloneDecoration(t), this._reverseEaseList(t), t
            }
        }), cc.spawn = function(t) {
            var e = t instanceof Array ? t : arguments;
            if (1 === e.length) return cc.errorID(1020), null;
            e.length > 0 && null == e[e.length - 1] && cc.logID(1015);
            for (var i = e[0], n = 1; n < e.length; n++) null != e[n] && (i = cc.Spawn._actionOneTwo(i, e[n]));
            return i
        }, cc.Spawn._actionOneTwo = function(t, e) {
            var i = new cc.Spawn;
            return i.initWithTwoActions(t, e), i
        }, cc.RotateTo = cc.Class({
            name: "cc.RotateTo",
            extends: cc.ActionInterval,
            ctor: function(t, e) {
                this._startAngle = 0, this._dstAngle = 0, this._angle = 0, void 0 !== e && this.initWithDuration(t, e)
            },
            initWithDuration: function(t, e) {
                return !!cc.ActionInterval.prototype.initWithDuration.call(this, t) && (this._dstAngle = e, !0)
            },
            clone: function() {
                var t = new cc.RotateTo;
                return this._cloneDecoration(t), t.initWithDuration(this._duration, this._dstAngle), t
            },
            startWithTarget: function(t) {
                cc.ActionInterval.prototype.startWithTarget.call(this, t);
                var e = t.angle % 360,
                    i = cc.macro.ROTATE_ACTION_CCW ? this._dstAngle - e : e - this._dstAngle;
                i > 180 && (i -= 360), i < -180 && (i += 360), this._startAngle = e, this._angle = cc.macro.ROTATE_ACTION_CCW ? i : -i
            },
            reverse: function() {
                cc.logID(1016)
            },
            update: function(t) {
                t = this._computeEaseTime(t), this.target && (this.target.angle = this._startAngle + this._angle * t)
            }
        }), cc.rotateTo = function(t, e) {
            return new cc.RotateTo(t, e)
        }, cc.RotateBy = cc.Class({
            name: "cc.RotateBy",
            extends: cc.ActionInterval,
            ctor: function(t, e) {
                e *= cc.macro.ROTATE_ACTION_CCW ? 1 : -1, this._deltaAngle = 0, this._startAngle = 0, void 0 !== e && this.initWithDuration(t, e)
            },
            initWithDuration: function(t, e) {
                return !!cc.ActionInterval.prototype.initWithDuration.call(this, t) && (this._deltaAngle = e, !0)
            },
            clone: function() {
                var t = new cc.RotateBy;
                return this._cloneDecoration(t), t.initWithDuration(this._duration, this._deltaAngle), t
            },
            startWithTarget: function(t) {
                cc.ActionInterval.prototype.startWithTarget.call(this, t), this._startAngle = t.angle
            },
            update: function(t) {
                t = this._computeEaseTime(t), this.target && (this.target.angle = this._startAngle + this._deltaAngle * t)
            },
            reverse: function() {
                var t = new cc.RotateBy;
                return t.initWithDuration(this._duration, -this._deltaAngle), this._cloneDecoration(t), this._reverseEaseList(t), t
            }
        }), cc.rotateBy = function(t, e) {
            return new cc.RotateBy(t, e)
        }, cc.MoveBy = cc.Class({
            name: "cc.MoveBy",
            extends: cc.ActionInterval,
            ctor: function(t, e, i) {
                this._positionDelta = cc.v2(0, 0), this._startPosition = cc.v2(0, 0), this._previousPosition = cc.v2(0, 0), void 0 !== e && cc.MoveBy.prototype.initWithDuration.call(this, t, e, i)
            },
            initWithDuration: function(t, e, i) {
                return !!cc.ActionInterval.prototype.initWithDuration.call(this, t) && (void 0 !== e.x && (i = e.y, e = e.x), this._positionDelta.x = e, this._positionDelta.y = i, !0)
            },
            clone: function() {
                var t = new cc.MoveBy;
                return this._cloneDecoration(t), t.initWithDuration(this._duration, this._positionDelta), t
            },
            startWithTarget: function(t) {
                cc.ActionInterval.prototype.startWithTarget.call(this, t);
                var e = t.x,
                    i = t.y;
                this._previousPosition.x = e, this._previousPosition.y = i, this._startPosition.x = e, this._startPosition.y = i
            },
            update: function(t) {
                if (t = this._computeEaseTime(t), this.target) {
                    var e = this._positionDelta.x * t,
                        i = this._positionDelta.y * t,
                        n = this._startPosition;
                    if (cc.macro.ENABLE_STACKABLE_ACTIONS) {
                        var r = this.target.x,
                            s = this.target.y,
                            o = this._previousPosition;
                        n.x = n.x + r - o.x, n.y = n.y + s - o.y, e += n.x, i += n.y, o.x = e, o.y = i, this.target.setPosition(e, i)
                    } else this.target.setPosition(n.x + e, n.y + i)
                }
            },
            reverse: function() {
                var t = new cc.MoveBy(this._duration, cc.v2(-this._positionDelta.x, -this._positionDelta.y));
                return this._cloneDecoration(t), this._reverseEaseList(t), t
            }
        }), cc.moveBy = function(t, e, i) {
            return new cc.MoveBy(t, e, i)
        }, cc.MoveTo = cc.Class({
            name: "cc.MoveTo",
            extends: cc.MoveBy,
            ctor: function(t, e, i) {
                this._endPosition = cc.v2(0, 0), void 0 !== e && this.initWithDuration(t, e, i)
            },
            initWithDuration: function(t, e, i) {
                return !!cc.MoveBy.prototype.initWithDuration.call(this, t, e, i) && (void 0 !== e.x && (i = e.y, e = e.x), this._endPosition.x = e, this._endPosition.y = i, !0)
            },
            clone: function() {
                var t = new cc.MoveTo;
                return this._cloneDecoration(t), t.initWithDuration(this._duration, this._endPosition), t
            },
            startWithTarget: function(t) {
                cc.MoveBy.prototype.startWithTarget.call(this, t), this._positionDelta.x = this._endPosition.x - t.x, this._positionDelta.y = this._endPosition.y - t.y
            }
        }), cc.moveTo = function(t, e, i) {
            return new cc.MoveTo(t, e, i)
        }, cc.SkewTo = cc.Class({
            name: "cc.SkewTo",
            extends: cc.ActionInterval,
            ctor: function(t, e, i) {
                this._skewX = 0, this._skewY = 0, this._startSkewX = 0, this._startSkewY = 0, this._endSkewX = 0, this._endSkewY = 0, this._deltaX = 0, this._deltaY = 0, void 0 !== i && cc.SkewTo.prototype.initWithDuration.call(this, t, e, i)
            },
            initWithDuration: function(t, e, i) {
                var n = !1;
                return cc.ActionInterval.prototype.initWithDuration.call(this, t) && (this._endSkewX = e, this._endSkewY = i, n = !0), n
            },
            clone: function() {
                var t = new cc.SkewTo;
                return this._cloneDecoration(t), t.initWithDuration(this._duration, this._endSkewX, this._endSkewY), t
            },
            startWithTarget: function(t) {
                cc.ActionInterval.prototype.startWithTarget.call(this, t), this._startSkewX = t.skewX % 180, this._deltaX = this._endSkewX - this._startSkewX, this._deltaX > 180 && (this._deltaX -= 360), this._deltaX < -180 && (this._deltaX += 360), this._startSkewY = t.skewY % 360, this._deltaY = this._endSkewY - this._startSkewY, this._deltaY > 180 && (this._deltaY -= 360), this._deltaY < -180 && (this._deltaY += 360)
            },
            update: function(t) {
                t = this._computeEaseTime(t), this.target.skewX = this._startSkewX + this._deltaX * t, this.target.skewY = this._startSkewY + this._deltaY * t
            }
        }), cc.skewTo = function(t, e, i) {
            return new cc.SkewTo(t, e, i)
        }, cc.SkewBy = cc.Class({
            name: "cc.SkewBy",
            extends: cc.SkewTo,
            ctor: function(t, e, i) {
                void 0 !== i && this.initWithDuration(t, e, i)
            },
            initWithDuration: function(t, e, i) {
                var n = !1;
                return cc.SkewTo.prototype.initWithDuration.call(this, t, e, i) && (this._skewX = e, this._skewY = i, n = !0), n
            },
            clone: function() {
                var t = new cc.SkewBy;
                return this._cloneDecoration(t), t.initWithDuration(this._duration, this._skewX, this._skewY), t
            },
            startWithTarget: function(t) {
                cc.SkewTo.prototype.startWithTarget.call(this, t), this._deltaX = this._skewX, this._deltaY = this._skewY, this._endSkewX = this._startSkewX + this._deltaX, this._endSkewY = this._startSkewY + this._deltaY
            },
            reverse: function() {
                var t = new cc.SkewBy(this._duration, -this._skewX, -this._skewY);
                return this._cloneDecoration(t), this._reverseEaseList(t), t
            }
        }), cc.skewBy = function(t, e, i) {
            return new cc.SkewBy(t, e, i)
        }, cc.JumpBy = cc.Class({
            name: "cc.JumpBy",
            extends: cc.ActionInterval,
            ctor: function(t, e, i, n, r) {
                this._startPosition = cc.v2(0, 0), this._previousPosition = cc.v2(0, 0), this._delta = cc.v2(0, 0), this._height = 0, this._jumps = 0, void 0 !== n && cc.JumpBy.prototype.initWithDuration.call(this, t, e, i, n, r)
            },
            initWithDuration: function(t, e, i, n, r) {
                return !!cc.ActionInterval.prototype.initWithDuration.call(this, t) && (void 0 === r && (r = n, n = i, i = e.y, e = e.x), this._delta.x = e, this._delta.y = i, this._height = n, this._jumps = r, !0)
            },
            clone: function() {
                var t = new cc.JumpBy;
                return this._cloneDecoration(t), t.initWithDuration(this._duration, this._delta, this._height, this._jumps), t
            },
            startWithTarget: function(t) {
                cc.ActionInterval.prototype.startWithTarget.call(this, t);
                var e = t.x,
                    i = t.y;
                this._previousPosition.x = e, this._previousPosition.y = i, this._startPosition.x = e, this._startPosition.y = i
            },
            update: function(t) {
                if (t = this._computeEaseTime(t), this.target) {
                    var e = t * this._jumps % 1,
                        i = 4 * this._height * e * (1 - e);
                    i += this._delta.y * t;
                    var n = this._delta.x * t,
                        r = this._startPosition;
                    if (cc.macro.ENABLE_STACKABLE_ACTIONS) {
                        var s = this.target.x,
                            o = this.target.y,
                            a = this._previousPosition;
                        r.x = r.x + s - a.x, r.y = r.y + o - a.y, n += r.x, i += r.y, a.x = n, a.y = i, this.target.setPosition(n, i)
                    } else this.target.setPosition(r.x + n, r.y + i)
                }
            },
            reverse: function() {
                var t = new cc.JumpBy(this._duration, cc.v2(-this._delta.x, -this._delta.y), this._height, this._jumps);
                return this._cloneDecoration(t), this._reverseEaseList(t), t
            }
        }), cc.jumpBy = function(t, e, i, n, r) {
            return new cc.JumpBy(t, e, i, n, r)
        }, cc.JumpTo = cc.Class({
            name: "cc.JumpTo",
            extends: cc.JumpBy,
            ctor: function(t, e, i, n, r) {
                this._endPosition = cc.v2(0, 0), void 0 !== n && this.initWithDuration(t, e, i, n, r)
            },
            initWithDuration: function(t, e, i, n, r) {
                return !!cc.JumpBy.prototype.initWithDuration.call(this, t, e, i, n, r) && (void 0 === r && (i = e.y, e = e.x), this._endPosition.x = e, this._endPosition.y = i, !0)
            },
            startWithTarget: function(t) {
                cc.JumpBy.prototype.startWithTarget.call(this, t), this._delta.x = this._endPosition.x - this._startPosition.x, this._delta.y = this._endPosition.y - this._startPosition.y
            },
            clone: function() {
                var t = new cc.JumpTo;
                return this._cloneDecoration(t), t.initWithDuration(this._duration, this._endPosition, this._height, this._jumps), t
            }
        }), cc.jumpTo = function(t, e, i, n, r) {
            return new cc.JumpTo(t, e, i, n, r)
        }, cc.BezierBy = cc.Class({
            name: "cc.BezierBy",
            extends: cc.ActionInterval,
            ctor: function(t, e) {
                this._config = [], this._startPosition = cc.v2(0, 0), this._previousPosition = cc.v2(0, 0), e && cc.BezierBy.prototype.initWithDuration.call(this, t, e)
            },
            initWithDuration: function(t, e) {
                return !!cc.ActionInterval.prototype.initWithDuration.call(this, t) && (this._config = e, !0)
            },
            clone: function() {
                var t = new cc.BezierBy;
                this._cloneDecoration(t);
                for (var e = [], i = 0; i < this._config.length; i++) {
                    var n = this._config[i];
                    e.push(cc.v2(n.x, n.y))
                }
                return t.initWithDuration(this._duration, e), t
            },
            startWithTarget: function(t) {
                cc.ActionInterval.prototype.startWithTarget.call(this, t);
                var e = t.x,
                    i = t.y;
                this._previousPosition.x = e, this._previousPosition.y = i, this._startPosition.x = e, this._startPosition.y = i
            },
            update: function(t) {
                if (t = this._computeEaseTime(t), this.target) {
                    var e = this._config,
                        i = e[0].x,
                        r = e[1].x,
                        s = e[2].x,
                        o = e[0].y,
                        a = e[1].y,
                        l = e[2].y,
                        h = n(0, i, r, s, t),
                        c = n(0, o, a, l, t),
                        u = this._startPosition;
                    if (cc.macro.ENABLE_STACKABLE_ACTIONS) {
                        var _ = this.target.x,
                            f = this.target.y,
                            d = this._previousPosition;
                        u.x = u.x + _ - d.x, u.y = u.y + f - d.y, h += u.x, c += u.y, d.x = h, d.y = c, this.target.setPosition(h, c)
                    } else this.target.setPosition(u.x + h, u.y + c)
                }
            },
            reverse: function() {
                var t = this._config,
                    e = t[0].x,
                    i = t[0].y,
                    n = t[1].x,
                    r = t[1].y,
                    s = t[2].x,
                    o = t[2].y,
                    a = [cc.v2(n - s, r - o), cc.v2(e - s, i - o), cc.v2(-s, -o)],
                    l = new cc.BezierBy(this._duration, a);
                return this._cloneDecoration(l), this._reverseEaseList(l), l
            }
        }), cc.bezierBy = function(t, e) {
            return new cc.BezierBy(t, e)
        }, cc.BezierTo = cc.Class({
            name: "cc.BezierTo",
            extends: cc.BezierBy,
            ctor: function(t, e) {
                this._toConfig = [], e && this.initWithDuration(t, e)
            },
            initWithDuration: function(t, e) {
                return !!cc.ActionInterval.prototype.initWithDuration.call(this, t) && (this._toConfig = e, !0)
            },
            clone: function() {
                var t = new cc.BezierTo;
                return this._cloneDecoration(t), t.initWithDuration(this._duration, this._toConfig), t
            },
            startWithTarget: function(t) {
                cc.BezierBy.prototype.startWithTarget.call(this, t);
                var e = this._startPosition,
                    i = this._toConfig,
                    n = this._config;
                n[0] = i[0].sub(e), n[1] = i[1].sub(e), n[2] = i[2].sub(e)
            }
        }), cc.bezierTo = function(t, e) {
            return new cc.BezierTo(t, e)
        }, cc.ScaleTo = cc.Class({
            name: "cc.ScaleTo",
            extends: cc.ActionInterval,
            ctor: function(t, e, i) {
                this._scaleX = 1, this._scaleY = 1, this._startScaleX = 1, this._startScaleY = 1, this._endScaleX = 0, this._endScaleY = 0, this._deltaX = 0, this._deltaY = 0, void 0 !== e && cc.ScaleTo.prototype.initWithDuration.call(this, t, e, i)
            },
            initWithDuration: function(t, e, i) {
                return !!cc.ActionInterval.prototype.initWithDuration.call(this, t) && (this._endScaleX = e, this._endScaleY = null != i ? i : e, !0)
            },
            clone: function() {
                var t = new cc.ScaleTo;
                return this._cloneDecoration(t), t.initWithDuration(this._duration, this._endScaleX, this._endScaleY), t
            },
            startWithTarget: function(t) {
                cc.ActionInterval.prototype.startWithTarget.call(this, t), this._startScaleX = t.scaleX, this._startScaleY = t.scaleY, this._deltaX = this._endScaleX - this._startScaleX, this._deltaY = this._endScaleY - this._startScaleY
            },
            update: function(t) {
                t = this._computeEaseTime(t), this.target && (this.target.scaleX = this._startScaleX + this._deltaX * t, this.target.scaleY = this._startScaleY + this._deltaY * t)
            }
        }), cc.scaleTo = function(t, e, i) {
            return new cc.ScaleTo(t, e, i)
        }, cc.ScaleBy = cc.Class({
            name: "cc.ScaleBy",
            extends: cc.ScaleTo,
            startWithTarget: function(t) {
                cc.ScaleTo.prototype.startWithTarget.call(this, t), this._deltaX = this._startScaleX * this._endScaleX - this._startScaleX, this._deltaY = this._startScaleY * this._endScaleY - this._startScaleY
            },
            reverse: function() {
                var t = new cc.ScaleBy(this._duration, 1 / this._endScaleX, 1 / this._endScaleY);
                return this._cloneDecoration(t), this._reverseEaseList(t), t
            },
            clone: function() {
                var t = new cc.ScaleBy;
                return this._cloneDecoration(t), t.initWithDuration(this._duration, this._endScaleX, this._endScaleY), t
            }
        }), cc.scaleBy = function(t, e, i) {
            return new cc.ScaleBy(t, e, i)
        }, cc.Blink = cc.Class({
            name: "cc.Blink",
            extends: cc.ActionInterval,
            ctor: function(t, e) {
                this._times = 0, this._originalState = !1, void 0 !== e && this.initWithDuration(t, e)
            },
            initWithDuration: function(t, e) {
                return !!cc.ActionInterval.prototype.initWithDuration.call(this, t) && (this._times = e, !0)
            },
            clone: function() {
                var t = new cc.Blink;
                return this._cloneDecoration(t), t.initWithDuration(this._duration, this._times), t
            },
            update: function(t) {
                if (t = this._computeEaseTime(t), this.target && !this.isDone()) {
                    var e = 1 / this._times,
                        i = t % e;
                    this.target.opacity = i > e / 2 ? 255 : 0
                }
            },
            startWithTarget: function(t) {
                cc.ActionInterval.prototype.startWithTarget.call(this, t), this._originalState = t.opacity
            },
            stop: function() {
                this.target.opacity = this._originalState, cc.ActionInterval.prototype.stop.call(this)
            },
            reverse: function() {
                var t = new cc.Blink(this._duration, this._times);
                return this._cloneDecoration(t), this._reverseEaseList(t), t
            }
        }), cc.blink = function(t, e) {
            return new cc.Blink(t, e)
        }, cc.FadeTo = cc.Class({
            name: "cc.FadeTo",
            extends: cc.ActionInterval,
            ctor: function(t, e) {
                this._toOpacity = 0, this._fromOpacity = 0, void 0 !== e && cc.FadeTo.prototype.initWithDuration.call(this, t, e)
            },
            initWithDuration: function(t, e) {
                return !!cc.ActionInterval.prototype.initWithDuration.call(this, t) && (this._toOpacity = e, !0)
            },
            clone: function() {
                var t = new cc.FadeTo;
                return this._cloneDecoration(t), t.initWithDuration(this._duration, this._toOpacity), t
            },
            update: function(t) {
                t = this._computeEaseTime(t);
                var e = void 0 !== this._fromOpacity ? this._fromOpacity : 255;
                this.target.opacity = e + (this._toOpacity - e) * t
            },
            startWithTarget: function(t) {
                cc.ActionInterval.prototype.startWithTarget.call(this, t), this._fromOpacity = t.opacity
            }
        }), cc.fadeTo = function(t, e) {
            return new cc.FadeTo(t, e)
        }, cc.FadeIn = cc.Class({
            name: "cc.FadeIn",
            extends: cc.FadeTo,
            ctor: function(t) {
                null == t && (t = 0), this._reverseAction = null, this.initWithDuration(t, 255)
            },
            reverse: function() {
                var t = new cc.FadeOut;
                return t.initWithDuration(this._duration, 0), this._cloneDecoration(t), this._reverseEaseList(t), t
            },
            clone: function() {
                var t = new cc.FadeIn;
                return this._cloneDecoration(t), t.initWithDuration(this._duration, this._toOpacity), t
            },
            startWithTarget: function(t) {
                this._reverseAction && (this._toOpacity = this._reverseAction._fromOpacity), cc.FadeTo.prototype.startWithTarget.call(this, t)
            }
        }), cc.fadeIn = function(t) {
            return new cc.FadeIn(t)
        }, cc.FadeOut = cc.Class({
            name: "cc.FadeOut",
            extends: cc.FadeTo,
            ctor: function(t) {
                null == t && (t = 0), this._reverseAction = null, this.initWithDuration(t, 0)
            },
            reverse: function() {
                var t = new cc.FadeIn;
                return t._reverseAction = this, t.initWithDuration(this._duration, 255), this._cloneDecoration(t), this._reverseEaseList(t), t
            },
            clone: function() {
                var t = new cc.FadeOut;
                return this._cloneDecoration(t), t.initWithDuration(this._duration, this._toOpacity), t
            }
        }), cc.fadeOut = function(t) {
            return new cc.FadeOut(t)
        }, cc.TintTo = cc.Class({
            name: "cc.TintTo",
            extends: cc.ActionInterval,
            ctor: function(t, e, i, n) {
                this._to = cc.color(0, 0, 0), this._from = cc.color(0, 0, 0), e instanceof cc.Color && (n = e.b, i = e.g, e = e.r), void 0 !== n && this.initWithDuration(t, e, i, n)
            },
            initWithDuration: function(t, e, i, n) {
                return !!cc.ActionInterval.prototype.initWithDuration.call(this, t) && (this._to = cc.color(e, i, n), !0)
            },
            clone: function() {
                var t = new cc.TintTo;
                this._cloneDecoration(t);
                var e = this._to;
                return t.initWithDuration(this._duration, e.r, e.g, e.b), t
            },
            startWithTarget: function(t) {
                cc.ActionInterval.prototype.startWithTarget.call(this, t), this._from = this.target.color
            },
            update: function(t) {
                t = this._computeEaseTime(t);
                var e = this._from,
                    i = this._to;
                e && (this.target.color = cc.color(e.r + (i.r - e.r) * t, e.g + (i.g - e.g) * t, e.b + (i.b - e.b) * t))
            }
        }), cc.tintTo = function(t, e, i, n) {
            return new cc.TintTo(t, e, i, n)
        }, cc.TintBy = cc.Class({
            name: "cc.TintBy",
            extends: cc.ActionInterval,
            ctor: function(t, e, i, n) {
                this._deltaR = 0, this._deltaG = 0, this._deltaB = 0, this._fromR = 0, this._fromG = 0, this._fromB = 0, void 0 !== n && this.initWithDuration(t, e, i, n)
            },
            initWithDuration: function(t, e, i, n) {
                return !!cc.ActionInterval.prototype.initWithDuration.call(this, t) && (this._deltaR = e, this._deltaG = i, this._deltaB = n, !0)
            },
            clone: function() {
                var t = new cc.TintBy;
                return this._cloneDecoration(t), t.initWithDuration(this._duration, this._deltaR, this._deltaG, this._deltaB), t
            },
            startWithTarget: function(t) {
                cc.ActionInterval.prototype.startWithTarget.call(this, t);
                var e = t.color;
                this._fromR = e.r, this._fromG = e.g, this._fromB = e.b
            },
            update: function(t) {
                t = this._computeEaseTime(t), this.target.color = cc.color(this._fromR + this._deltaR * t, this._fromG + this._deltaG * t, this._fromB + this._deltaB * t)
            },
            reverse: function() {
                var t = new cc.TintBy(this._duration, -this._deltaR, -this._deltaG, -this._deltaB);
                return this._cloneDecoration(t), this._reverseEaseList(t), t
            }
        }), cc.tintBy = function(t, e, i, n) {
            return new cc.TintBy(t, e, i, n)
        }, cc.DelayTime = cc.Class({
            name: "cc.DelayTime",
            extends: cc.ActionInterval,
            update: function(t) {},
            reverse: function() {
                var t = new cc.DelayTime(this._duration);
                return this._cloneDecoration(t), this._reverseEaseList(t), t
            },
            clone: function() {
                var t = new cc.DelayTime;
                return this._cloneDecoration(t), t.initWithDuration(this._duration), t
            }
        }), cc.delayTime = function(t) {
            return new cc.DelayTime(t)
        }, cc.ReverseTime = cc.Class({
            name: "cc.ReverseTime",
            extends: cc.ActionInterval,
            ctor: function(t) {
                this._other = null, t && this.initWithAction(t)
            },
            initWithAction: function(t) {
                return t ? t === this._other ? (cc.errorID(1029), !1) : !!cc.ActionInterval.prototype.initWithDuration.call(this, t._duration) && (this._other = t, !0) : (cc.errorID(1028), !1)
            },
            clone: function() {
                var t = new cc.ReverseTime;
                return this._cloneDecoration(t), t.initWithAction(this._other.clone()), t
            },
            startWithTarget: function(t) {
                cc.ActionInterval.prototype.startWithTarget.call(this, t), this._other.startWithTarget(t)
            },
            update: function(t) {
                t = this._computeEaseTime(t), this._other && this._other.update(1 - t)
            },
            reverse: function() {
                return this._other.clone()
            },
            stop: function() {
                this._other.stop(), cc.Action.prototype.stop.call(this)
            }
        }), cc.reverseTime = function(t) {
            return new cc.ReverseTime(t)
        }, cc.TargetedAction = cc.Class({
            name: "cc.TargetedAction",
            extends: cc.ActionInterval,
            ctor: function(t, e) {
                this._action = null, this._forcedTarget = null, e && this.initWithTarget(t, e)
            },
            initWithTarget: function(t, e) {
                return !!this.initWithDuration(e._duration) && (this._forcedTarget = t, this._action = e, !0)
            },
            clone: function() {
                var t = new cc.TargetedAction;
                return this._cloneDecoration(t), t.initWithTarget(this._forcedTarget, this._action.clone()), t
            },
            startWithTarget: function(t) {
                cc.ActionInterval.prototype.startWithTarget.call(this, t), this._action.startWithTarget(this._forcedTarget)
            },
            stop: function() {
                this._action.stop()
            },
            update: function(t) {
                t = this._computeEaseTime(t), this._action.update(t)
            },
            getForcedTarget: function() {
                return this._forcedTarget
            },
            setForcedTarget: function(t) {
                this._forcedTarget !== t && (this._forcedTarget = t)
            }
        }), cc.targetedAction = function(t, e) {
            return new cc.TargetedAction(t, e)
        }
    }), {}],
    6: [(function(t, e, i) {
        "use strict";
        t("../core/platform/CCClass");
        var n = t("../core/platform/js"),
            r = function() {
                this.actions = [], this.target = null, this.actionIndex = 0, this.currentAction = null, this.paused = !1, this.lock = !1
            };
        cc.ActionManager = function() {
            this._hashTargets = n.createMap(!0), this._arrayTargets = [], this._currentTarget = null, cc.director._scheduler && cc.director._scheduler.enableForTarget(this)
        }, cc.ActionManager.prototype = {
            constructor: cc.ActionManager,
            _elementPool: [],
            _searchElementByTarget: function(t, e) {
                for (var i = 0; i < t.length; i++)
                    if (e === t[i].target) return t[i];
                return null
            },
            _getElement: function(t, e) {
                var i = this._elementPool.pop();
                return i || (i = new r), i.target = t, i.paused = !!e, i
            },
            _putElement: function(t) {
                t.actions.length = 0, t.actionIndex = 0, t.currentAction = null, t.paused = !1, t.target = null, t.lock = !1, this._elementPool.push(t)
            },
            addAction: function(t, e, i) {
                if (t && e) {
                    var n = this._hashTargets[e._id];
                    n ? n.actions || (n.actions = []) : (n = this._getElement(e, i), this._hashTargets[e._id] = n, this._arrayTargets.push(n)), n.actions.push(t), t.startWithTarget(e)
                } else cc.errorID(1e3)
            },
            removeAllActions: function() {
                for (var t = this._arrayTargets, e = 0; e < t.length; e++) {
                    var i = t[e];
                    i && this._putElement(i)
                }
                this._arrayTargets.length = 0, this._hashTargets = n.createMap(!0)
            },
            removeAllActionsFromTarget: function(t, e) {
                if (null != t) {
                    var i = this._hashTargets[t._id];
                    i && (i.actions.length = 0, this._deleteHashElement(i))
                }
            },
            removeAction: function(t) {
                if (null != t) {
                    var e = t.getOriginalTarget(),
                        i = this._hashTargets[e._id];
                    if (i) {
                        for (var n = 0; n < i.actions.length; n++)
                            if (i.actions[n] === t) {
                                i.actions.splice(n, 1), i.actionIndex >= n && i.actionIndex--;
                                break
                            }
                    } else cc.logID(1001)
                }
            },
            removeActionByTag: function(t, e) {
                t === cc.Action.TAG_INVALID && cc.logID(1002), cc.assertID(e, 1003);
                var i = this._hashTargets[e._id];
                if (i)
                    for (var n = i.actions.length, r = 0; r < n; ++r) {
                        var s = i.actions[r];
                        if (s && s.getTag() === t && s.getOriginalTarget() === e) {
                            this._removeActionAtIndex(r, i);
                            break
                        }
                    }
            },
            getActionByTag: function(t, e) {
                t === cc.Action.TAG_INVALID && cc.logID(1004);
                var i = this._hashTargets[e._id];
                if (i) {
                    if (null != i.actions)
                        for (var n = 0; n < i.actions.length; ++n) {
                            var r = i.actions[n];
                            if (r && r.getTag() === t) return r
                        }
                    cc.logID(1005, t)
                }
                return null
            },
            getNumberOfRunningActionsInTarget: function(t) {
                var e = this._hashTargets[t._id];
                return e && e.actions ? e.actions.length : 0
            },
            pauseTarget: function(t) {
                var e = this._hashTargets[t._id];
                e && (e.paused = !0)
            },
            resumeTarget: function(t) {
                var e = this._hashTargets[t._id];
                e && (e.paused = !1)
            },
            pauseAllRunningActions: function() {
                for (var t = [], e = this._arrayTargets, i = 0; i < e.length; i++) {
                    var n = e[i];
                    n && !n.paused && (n.paused = !0, t.push(n.target))
                }
                return t
            },
            resumeTargets: function(t) {
                if (t)
                    for (var e = 0; e < t.length; e++) t[e] && this.resumeTarget(t[e])
            },
            pauseTargets: function(t) {
                if (t)
                    for (var e = 0; e < t.length; e++) t[e] && this.pauseTarget(t[e])
            },
            purgeSharedManager: function() {
                cc.director.getScheduler().unscheduleUpdate(this)
            },
            _removeActionAtIndex: function(t, e) {
                e.actions[t];
                e.actions.splice(t, 1), e.actionIndex >= t && e.actionIndex--, 0 === e.actions.length && this._deleteHashElement(e)
            },
            _deleteHashElement: function(t) {
                var e = !1;
                if (t && !t.lock && this._hashTargets[t.target._id]) {
                    delete this._hashTargets[t.target._id];
                    for (var i = this._arrayTargets, n = 0, r = i.length; n < r; n++)
                        if (i[n] === t) {
                            i.splice(n, 1);
                            break
                        }
                    this._putElement(t), e = !0
                }
                return e
            },
            update: function(t) {
                for (var e, i = this._arrayTargets, n = 0; n < i.length; n++) {
                    if (this._currentTarget = i[n], !(e = this._currentTarget).paused && e.actions) {
                        for (e.lock = !0, e.actionIndex = 0; e.actionIndex < e.actions.length; e.actionIndex++)
                            if (e.currentAction = e.actions[e.actionIndex], e.currentAction) {
                                if (e.currentAction.step(t * (e.currentAction._speedMethod ? e.currentAction._speed : 1)), e.currentAction && e.currentAction.isDone()) {
                                    e.currentAction.stop();
                                    var r = e.currentAction;
                                    e.currentAction = null, this.removeAction(r)
                                }
                                e.currentAction = null
                            }
                        e.lock = !1
                    }
                    0 === e.actions.length && this._deleteHashElement(e) && n--
                }
            }
        }
    }), {
        "../core/platform/CCClass": 198,
        "../core/platform/js": 218
    }],
    7: [(function(t, e, i) {
        "use strict";
        t("./CCActionManager"), t("./CCAction"), t("./CCActionInterval"), t("./CCActionInstant"), t("./CCActionEase"), t("./CCActionCatmullRom"), t("./tween")
    }), {
        "./CCAction": 1,
        "./CCActionCatmullRom": 2,
        "./CCActionEase": 3,
        "./CCActionInstant": 4,
        "./CCActionInterval": 5,
        "./CCActionManager": 6,
        "./tween": 8
    }],
    8: [(function(t, e, i) {
        "use strict";
        var n = cc.Class({
                name: "cc.TweenAction",
                extends: cc.ActionInterval,
                ctor: function(t, e, i) {
                    if (this._opts = i = i || Object.create(null), this._props = Object.create(null), i.progress = i.progress || this.progress, i.easing && "string" == typeof i.easing) {
                        var n = i.easing;
                        i.easing = cc.easing[n], !i.easing && cc.warnID(1031, n)
                    }
                    var r = this._opts.relative;
                    for (var s in e) {
                        var o = e[s],
                            a = void 0,
                            l = void 0;
                        if (void 0 !== o.value && (o.easing || o.progress) && ("string" == typeof o.easing ? !(a = cc.easing[o.easing]) && cc.warnID(1031, o.easing) : a = o.easing, l = o.progress, o = o.value), "number" == typeof o || o.lerp && (!r || o.add || o.mul) && o.clone) {
                            var h = Object.create(null);
                            h.value = o, h.easing = a, h.progress = l, this._props[s] = h
                        } else cc.warn("Can not animate " + s + " property, because it do not have [lerp, (add|mul), clone] function.")
                    }
                    this._originProps = e, this.initWithDuration(t)
                },
                clone: function() {
                    var t = new n(this._duration, this._originProps, this._opts);
                    return this._cloneDecoration(t), t
                },
                startWithTarget: function(t) {
                    cc.ActionInterval.prototype.startWithTarget.call(this, t);
                    var e = !!this._opts.relative,
                        i = this._props;
                    for (var n in i) {
                        var r = t[n],
                            s = i[n];
                        "number" == typeof r ? (s.start = r, s.current = r, s.end = e ? r + s.value : s.value) : (s.start = r.clone(), s.current = r.clone(), s.end = e ? (r.add || r.mul).call(r, s.value) : s.value)
                    }
                },
                update: function(t) {
                    var e = this._opts,
                        i = t;
                    e.easing && (i = e.easing(t));
                    var n = this.target;
                    if (n) {
                        var r = this._props,
                            s = this._opts.progress;
                        for (var o in r) {
                            var a = r[o],
                                l = a.easing ? a.easing(t) : i,
                                h = a.current = (a.progress || s)(a.start, a.end, a.current, l);
                            n[o] = h
                        }
                    }
                },
                progress: function(t, e, i, n) {
                    return "number" == typeof t ? i = t + (e - t) * n : t.lerp(e, n, i), i
                }
            }),
            r = cc.Class({
                name: "cc.SetAction",
                extends: cc.ActionInstant,
                ctor: function(t) {
                    this._props = {}, void 0 !== t && this.init(t)
                },
                init: function(t) {
                    for (var e in t) this._props[e] = t[e];
                    return !0
                },
                update: function() {
                    var t = this._props,
                        e = this.target;
                    for (var i in t) e[i] = t[i]
                },
                clone: function() {
                    var t = new r;
                    return t.init(this._props), t
                }
            });

        function s(t) {
            this._actions = [], this._finalAction = null, this._target = t
        }
        s.prototype.then = function(t) {
            return t instanceof cc.Action ? this._actions.push(t.clone()) : this._actions.push(t._union()), this
        }, s.prototype.target = function(t) {
            return this._target = t, this
        }, s.prototype.start = function() {
            return this._target ? (this._finalAction && cc.director.getActionManager().removeAction(this._finalAction), this._finalAction = this._union(), cc.director.getActionManager().addAction(this._finalAction, this._target, !1), this) : (cc.warn("Please set target to tween first"), this)
        }, s.prototype.stop = function() {
            return this._finalAction && cc.director.getActionManager().removeAction(this._finalAction), this
        }, s.prototype.clone = function(t) {
            var e = this._union();
            return cc.tween(t).then(e.clone())
        }, s.prototype.union = function() {
            var t = this._union();
            return this._actions.length = 0, this._actions.push(t), this
        }, s.prototype._union = function() {
            var t = this._actions;
            return t = 1 === t.length ? t[0] : cc.sequence(t)
        };
        var o = [];

        function a(t) {
            return function() {
                o.length = 0;
                for (var e = arguments.length, i = 0; i < e; i++) {
                    var n = o[i] = arguments[i];
                    n instanceof s && (o[i] = n._union())
                }
                return t.apply(this, o)
            }
        }
        for (var l = {
                to: function(t, e, i) {
                    return (i = i || Object.create(null)).relative = !1, new n(t, e, i)
                },
                by: function(t, e, i) {
                    return (i = i || Object.create(null)).relative = !0, new n(t, e, i)
                },
                set: function(t) {
                    return new r(t)
                },
                delay: cc.delayTime,
                call: cc.callFunc,
                hide: cc.hide,
                show: cc.show,
                removeSelf: cc.removeSelf,
                sequence: a(cc.sequence),
                parallel: a(cc.spawn)
            }, h = {
                repeat: cc.repeat,
                repeatForever: function(t) {
                    return cc.repeat(t, 1e9)
                },
                reverseTime: cc.reverseTime
            }, c = Object.keys(l), u = function(t) {
                var e = c[t];
                s.prototype[e] = function() {
                    var t = l[e].apply(l, arguments);
                    return this._actions.push(t), this
                }
            }, _ = 0; _ < c.length; _++) u(_);
        c = Object.keys(h);
        var f = function(t) {
            var e = c[t];
            s.prototype[e] = function() {
                var t = this._actions,
                    i = arguments[arguments.length - 1],
                    n = arguments.length - 1;
                i instanceof cc.Tween ? i = i._union() : i instanceof cc.Action || (i = t[t.length - 1], t.length -= 1, n += 1);
                for (var r = [i], s = 0; s < n; s++) r.push(arguments[s]);
                return i = h[e].apply(this, r), t.push(i), this
            }
        };
        for (_ = 0; _ < c.length; _++) f(_);
        cc.tween = function(t) {
            return new s(t)
        }, cc.Tween = s
    }), {}],
    9: [(function(t, e, i) {
        "use strict";
        var n = cc.js,
            r = t("./playable"),
            s = t("./animation-curves"),
            o = s.EventAnimCurve,
            a = s.EventInfo,
            l = t("./types").WrapModeMask,
            h = t("../core/utils/binary-search").binarySearchEpsilon;

        function c(t, e) {
            r.call(this), this.target = t, this.animation = e, this._anims = new n.array.MutableForwardIterator([])
        }
        n.extend(c, r);
        var u = c.prototype;

        function _(t, e) {
            var i = e.clip;
            e.duration = i.duration, e.speed = i.speed, e.wrapMode = i.wrapMode, e.frameRate = i.sample, (e.wrapMode & l.Loop) === l.Loop ? e.repeatCount = 1 / 0 : e.repeatCount = 1;
            var n = e.curves = i.createCurves(e, t),
                r = i.events;
            if (r)
                for (var s = void 0, c = 0, u = r.length; c < u; c++) {
                    s || ((s = new o).target = t, n.push(s));
                    var _ = r[c],
                        f = _.frame / e.duration,
                        d = void 0,
                        p = h(s.ratios, f);
                    p >= 0 ? d = s.events[p] : (d = new a, s.ratios.push(f), s.events.push(d)), d.add(_.func, _.params)
                }
        }
        u.playState = function(t, e) {
            t.clip && (t.curveLoaded || _(this.target, t), t.animator = this, t.play(), "number" == typeof e && t.setTime(e), this.play())
        }, u.stopStatesExcept = function(t) {
            var e = this._anims,
                i = e.array;
            for (e.i = 0; e.i < i.length; ++e.i) {
                var n = i[e.i];
                n !== t && this.stopState(n)
            }
        }, u.addAnimation = function(t) {
            -1 === this._anims.array.indexOf(t) && this._anims.push(t), t._setEventTarget(this.animation)
        }, u.removeAnimation = function(t) {
            var e = this._anims.array.indexOf(t);
            e >= 0 ? (this._anims.fastRemoveAt(e), 0 === this._anims.array.length && this.stop()) : cc.errorID(3908), t.animator = null
        }, u.sample = function() {
            var t = this._anims,
                e = t.array;
            for (t.i = 0; t.i < e.length; ++t.i) {
                e[t.i].sample()
            }
        }, u.stopState = function(t) {
            t && t.stop()
        }, u.pauseState = function(t) {
            t && t.pause()
        }, u.resumeState = function(t) {
            t && t.resume(), this.isPaused && this.resume()
        }, u.setStateTime = function(t, e) {
            if (void 0 !== e) t && (t.setTime(e), t.sample());
            else {
                e = t;
                for (var i = this._anims.array, n = 0; n < i.length; ++n) {
                    var r = i[n];
                    r.setTime(e), r.sample()
                }
            }
        }, u.onStop = function() {
            var t = this._anims,
                e = t.array;
            for (t.i = 0; t.i < e.length; ++t.i) {
                e[t.i].stop()
            }
        }, u.onPause = function() {
            for (var t = this._anims.array, e = 0; e < t.length; ++e) {
                var i = t[e];
                i.pause(), i.animator = null
            }
        }, u.onResume = function() {
            for (var t = this._anims.array, e = 0; e < t.length; ++e) {
                var i = t[e];
                i.animator = this, i.resume()
            }
        }, u._reloadClip = function(t) {
            _(this.target, t)
        }, e.exports = c
    }), {
        "../core/utils/binary-search": 292,
        "./animation-curves": 11,
        "./playable": 18,
        "./types": 19
    }],
    10: [(function(t, e, i) {
        "use strict";
        var n = t("./types").WrapMode,
            r = t("./animation-curves"),
            s = r.DynamicAnimCurve,
            o = r.quickFindIndex,
            a = t("./motion-path-helper").sampleMotionPaths,
            l = t("../core/utils/binary-search").binarySearchEpsilon,
            h = cc.Class({
                name: "cc.AnimationClip",
                extends: cc.Asset,
                properties: {
                    _duration: {
                        default: 0,
                        type: cc.Float
                    },
                    duration: {
                        get: function() {
                            return this._duration
                        }
                    },
                    sample: {
                        default: 60
                    },
                    speed: {
                        default: 1
                    },
                    wrapMode: {
                        default: n.Normal
                    },
                    curveData: {
                        default: {},
                        visible: !1
                    },
                    events: {
                        default: [],
                        visible: !1
                    }
                },
                statics: {
                    createWithSpriteFrames: function(t, e) {
                        if (!Array.isArray(t)) return cc.errorID(3905), null;
                        var i = new h;
                        i.sample = e || i.sample, i._duration = t.length / i.sample;
                        for (var n = [], r = 1 / i.sample, s = 0, o = t.length; s < o; s++) n[s] = {
                            frame: s * r,
                            value: t[s]
                        };
                        return i.curveData = {
                            comps: {
                                "cc.Sprite": {
                                    spriteFrame: n
                                }
                            }
                        }, i
                    }
                },
                onLoad: function() {
                    this._duration = Number.parseFloat(this.duration), this.speed = Number.parseFloat(this.speed), this.wrapMode = Number.parseInt(this.wrapMode), this.frameRate = Number.parseFloat(this.sample)
                },
                createPropCurve: function(t, e, i) {
                    var n = [],
                        r = t instanceof cc.Node && "position" === e,
                        h = new s;
                    h.target = t, h.prop = e;
                    for (var c = 0, u = i.length; c < u; c++) {
                        var _ = i[c],
                            f = _.frame / this.duration;
                        h.ratios.push(f), r && n.push(_.motionPath);
                        var d = _.value;
                        h.values.push(d);
                        var p = _.curve;
                        if (p) {
                            if ("string" == typeof p) {
                                h.types.push(p);
                                continue
                            }
                            if (Array.isArray(p)) {
                                p[0] === p[1] && p[2] === p[3] ? h.types.push(s.Linear) : h.types.push(s.Bezier(p));
                                continue
                            }
                        }
                        h.types.push(s.Linear)
                    }
                    r && a(n, h, this.duration, this.sample, t);
                    for (var m = h.ratios, y = void 0, v = void 0, g = !0, x = 1, b = m.length; x < b; x++)
                        if (y = m[x] - m[x - 1], 1 === x) v = y;
                        else if (Math.abs(y - v) > 1e-6) {
                        g = !1;
                        break
                    }
                    h._findFrameIndex = g ? o : l;
                    var A = h.values[0];
                    return void 0 === A || null === A || h._lerp || ("number" == typeof A ? h._lerp = s.prototype._lerpNumber : A instanceof cc.Quat ? h._lerp = s.prototype._lerpQuat : A instanceof cc.Vec2 || A instanceof cc.Vec3 ? h._lerp = s.prototype._lerpVector : A.lerp && (h._lerp = s.prototype._lerpObject)), h
                },
                createTargetCurves: function(t, e, i) {
                    var n = e.props,
                        r = e.comps;
                    if (n)
                        for (var s in n) {
                            var o = n[s],
                                a = this.createPropCurve(t, s, o);
                            i.push(a)
                        }
                    if (r)
                        for (var l in r) {
                            var h = t.getComponent(l);
                            if (h) {
                                var c = r[l];
                                for (var u in c) {
                                    var _ = c[u],
                                        f = this.createPropCurve(h, u, _);
                                    i.push(f)
                                }
                            }
                        }
                },
                createCurves: function(t, e) {
                    var i = this.curveData,
                        n = i.paths,
                        r = [];
                    for (var s in this.createTargetCurves(e, i, r), n) {
                        var o = cc.find(s, e);
                        if (o) {
                            var a = n[s];
                            this.createTargetCurves(o, a, r)
                        }
                    }
                    return r
                }
            });
        cc.AnimationClip = e.exports = h
    }), {
        "../core/utils/binary-search": 292,
        "./animation-curves": 11,
        "./motion-path-helper": 17,
        "./types": 19
    }],
    11: [(function(t, e, i) {
        "use strict";
        var n = t("./bezier").bezierByTime,
            r = t("../core/utils/binary-search").binarySearchEpsilon,
            s = t("./types").WrapModeMask,
            o = t("./types").WrappedInfo;

        function a(t, e) {
            if ("string" == typeof e) {
                var i = cc.easing[e];
                i ? t = i(t) : cc.errorID(3906, e)
            } else Array.isArray(e) && (t = n(e, t));
            return t
        }
        var l = cc.Class({
            name: "cc.AnimCurve",
            sample: function(t, e, i) {},
            onTimeChangedManually: void 0
        });

        function h(t, e) {
            var i = t.length - 1;
            if (0 === i) return 0;
            var n = t[0];
            if (e < n) return 0;
            var r = t[i];
            if (e > r) return ~t.length;
            var s = (e = (e - n) / (r - n)) / (1 / i),
                o = 0 | s;
            return s - o < 1e-6 ? o : o + 1 - s < 1e-6 ? o + 1 : ~(o + 1)
        }
        var c = cc.Class({
            name: "cc.DynamicAnimCurve",
            extends: l,
            ctor: function() {
                this._cachedIndex = 0
            },
            properties: {
                target: null,
                prop: "",
                values: [],
                ratios: [],
                types: []
            },
            _findFrameIndex: r,
            _lerp: void 0,
            _lerpNumber: function(t, e, i) {
                return t + (e - t) * i
            },
            _lerpObject: function(t, e, i) {
                return t.lerp(e, i)
            },
            _lerpQuat: (function() {
                var t = cc.quat();
                return function(e, i, n) {
                    return e.lerp(i, n, t)
                }
            })(),
            _lerpVector: (function() {
                var t = cc.v3();
                return function(e, i, n) {
                    return e.lerp(i, n, t)
                }
            })(),
            sample: function(t, e, i) {
                var n = this.values,
                    r = this.ratios,
                    s = r.length;
                if (0 !== s) {
                    var o = !0,
                        l = this._cachedIndex;
                    if (l < 0 && (l = ~l) > 0 && l < r.length) {
                        var h = r[l - 1],
                            c = r[l];
                        e > h && e < c && (o = !1)
                    }
                    o && (this._cachedIndex = this._findFrameIndex(r, e));
                    var u = void 0,
                        _ = this._cachedIndex;
                    if (_ < 0)
                        if ((_ = ~_) <= 0) u = n[0];
                        else if (_ >= s) u = n[s - 1];
                    else {
                        var f = n[_ - 1];
                        if (this._lerp) {
                            var d = r[_ - 1],
                                p = r[_],
                                m = this.types[_ - 1],
                                y = (e - d) / (p - d);
                            m && (y = a(y, m));
                            var v = n[_];
                            u = this._lerp(f, v, y)
                        } else u = f
                    } else u = n[_];
                    this.target[this.prop] = u
                }
            }
        });
        c.Linear = null, c.Bezier = function(t) {
            return t
        };
        var u = function() {
            this.events = []
        };
        u.prototype.add = function(t, e) {
            this.events.push({
                func: t || "",
                params: e || []
            })
        };
        var _ = cc.Class({
            name: "cc.EventAnimCurve",
            extends: l,
            properties: {
                target: null,
                ratios: [],
                events: [],
                _wrappedInfo: {
                    default: function() {
                        return new o
                    }
                },
                _lastWrappedInfo: null,
                _ignoreIndex: NaN
            },
            _wrapIterations: function(t) {
                return t - (0 | t) == 0 && (t -= 1), 0 | t
            },
            sample: function(t, e, i) {
                var n = this.ratios.length,
                    a = i.getWrappedInfo(i.time, this._wrappedInfo),
                    l = a.direction,
                    h = r(this.ratios, a.ratio);
                if (h < 0 && (h = ~h - 1, l < 0 && (h += 1)), this._ignoreIndex !== h && (this._ignoreIndex = NaN), a.frameIndex = h, !this._lastWrappedInfo) return this._fireEvent(h), void(this._lastWrappedInfo = new o(a));
                var c = i.wrapMode,
                    u = this._wrapIterations(a.iterations),
                    _ = this._lastWrappedInfo,
                    f = this._wrapIterations(_.iterations),
                    d = _.frameIndex,
                    p = _.direction,
                    m = -1 !== f && u !== f;
                if (d === h && m && 1 === n) this._fireEvent(0);
                else if (d !== h || m) {
                    l = p;
                    do {
                        if (d !== h) {
                            if (-1 === l && 0 === d && h > 0 ? ((c & s.PingPong) === s.PingPong ? l *= -1 : d = n, f++) : 1 === l && d === n - 1 && h < n - 1 && ((c & s.PingPong) === s.PingPong ? l *= -1 : d = -1, f++), d === h) break;
                            if (f > u) break
                        }
                        d += l, cc.director.getAnimationManager().pushDelayEvent(this, "_fireEvent", [d])
                    } while (d !== h && d > -1 && d < n)
                }
                this._lastWrappedInfo.set(a)
            },
            _fireEvent: function(t) {
                if (!(t < 0 || t >= this.events.length || this._ignoreIndex === t)) {
                    var e = this.events[t].events;
                    if (this.target.isValid)
                        for (var i = this.target._components, n = 0; n < e.length; n++)
                            for (var r = e[n], s = r.func, o = 0; o < i.length; o++) {
                                var a = i[o],
                                    l = a[s];
                                l && l.apply(a, r.params)
                            }
                }
            },
            onTimeChangedManually: function(t, e) {
                this._lastWrappedInfo = null, this._ignoreIndex = NaN;
                var i = e.getWrappedInfo(t, this._wrappedInfo),
                    n = i.direction,
                    s = r(this.ratios, i.ratio);
                s < 0 && (s = ~s - 1, n < 0 && (s += 1), this._ignoreIndex = s)
            }
        });
        e.exports = {
            AnimCurve: l,
            DynamicAnimCurve: c,
            EventAnimCurve: _,
            EventInfo: u,
            computeRatioByType: a,
            quickFindIndex: h
        }
    }), {
        "../core/utils/binary-search": 292,
        "./bezier": 14,
        "./types": 19
    }],
    12: [(function(t, e, i) {
        "use strict";
        var n = cc.js,
            r = cc.Class({
                ctor: function() {
                    this._anims = new n.array.MutableForwardIterator([]), this._delayEvents = [], cc.director._scheduler && cc.director._scheduler.enableForTarget(this)
                },
                update: function(t) {
                    var e = this._anims,
                        i = e.array;
                    for (e.i = 0; e.i < i.length; ++e.i) {
                        var n = i[e.i];
                        n._isPlaying && !n._isPaused && n.update(t)
                    }
                    for (var r = this._delayEvents, s = 0; s < r.length; s++) {
                        var o = r[s];
                        o.target[o.func].apply(o.target, o.args)
                    }
                    r.length = 0
                },
                destruct: function() {},
                addAnimation: function(t) {
                    -1 === this._anims.array.indexOf(t) && this._anims.push(t)
                },
                removeAnimation: function(t) {
                    var e = this._anims.array.indexOf(t);
                    e >= 0 ? this._anims.fastRemoveAt(e) : cc.errorID(3907)
                },
                pushDelayEvent: function(t, e, i) {
                    this._delayEvents.push({
                        target: t,
                        func: e,
                        args: i
                    })
                }
            });
        cc.AnimationManager = e.exports = r
    }), {}],
    13: [(function(t, e, i) {
        "use strict";
        var n = cc.js,
            r = t("./playable"),
            s = t("./types"),
            o = s.WrappedInfo,
            a = s.WrapMode,
            l = s.WrapModeMask;

        function h(t, e) {
            r.call(this), this._currentFramePlayed = !1, this._delay = 0, this._delayTime = 0, this._wrappedInfo = new o, this._lastWrappedInfo = null, this._process = u, this._clip = t, this._name = e || t && t.name, this.animator = null, this.curves = [], this.delay = 0, this.repeatCount = 1, this.duration = 1, this.speed = 1, this.wrapMode = a.Normal, this.time = 0, this._target = null, this._lastframeEventOn = !1, this.emit = function() {
                for (var t = new Array(arguments.length), e = 0, i = t.length; e < i; e++) t[e] = arguments[e];
                cc.director.getAnimationManager().pushDelayEvent(this, "_emit", t)
            }
        }
        n.extend(h, r);
        var c = h.prototype;

        function u() {
            var t, e = this.sample();
            this._lastframeEventOn && (t = this._lastWrappedInfo ? this._lastWrappedInfo : this._lastWrappedInfo = new o(e), this.repeatCount > 1 && (0 | e.iterations) > (0 | t.iterations) && this.emit("lastframe", this), t.set(e));
            e.stopped && (this.stop(), this.emit("finished", this))
        }

        function _() {
            var t = this.time,
                e = this.duration;
            t > e ? 0 === (t %= e) && (t = e) : t < 0 && 0 !== (t %= e) && (t += e);
            for (var i = t / e, n = this.curves, r = 0, s = n.length; r < s; r++) {
                n[r].sample(t, i, this)
            }
            this._lastframeEventOn && (void 0 === this._lastIterations && (this._lastIterations = i), (this.time > 0 && this._lastIterations > i || this.time < 0 && this._lastIterations < i) && this.emit("lastframe", this), this._lastIterations = i)
        }
        c._emit = function(t, e) {
            this._target && this._target.isValid && this._target.emit(t, t, e)
        }, c.on = function(t, e, i) {
            return this._target && this._target.isValid ? ("lastframe" === t && (this._lastframeEventOn = !0), this._target.on(t, e, i)) : null
        }, c.once = function(t, e, i) {
            if (this._target && this._target.isValid) {
                "lastframe" === t && (this._lastframeEventOn = !0);
                var n = this;
                return this._target.once(t, (function(t) {
                    e.call(i, t), n._lastframeEventOn = !1
                }))
            }
            return null
        }, c.off = function(t, e, i) {
            this._target && this._target.isValid && ("lastframe" === t && (this._target.hasEventListener(t) || (this._lastframeEventOn = !1)), this._target.off(t, e, i))
        }, c._setEventTarget = function(t) {
            this._target = t
        }, c.onPlay = function() {
            this.setTime(0), this._delayTime = this._delay, cc.director.getAnimationManager().addAnimation(this), this.animator && this.animator.addAnimation(this), this.emit("play", this)
        }, c.onStop = function() {
            this.isPaused || cc.director.getAnimationManager().removeAnimation(this), this.animator && this.animator.removeAnimation(this), this.emit("stop", this)
        }, c.onResume = function() {
            cc.director.getAnimationManager().addAnimation(this), this.emit("resume", this)
        }, c.onPause = function() {
            cc.director.getAnimationManager().removeAnimation(this), this.emit("pause", this)
        }, c.setTime = function(t) {
            this._currentFramePlayed = !1, this.time = t || 0;
            for (var e = this.curves, i = 0, n = e.length; i < n; i++) {
                var r = e[i];
                r.onTimeChangedManually && r.onTimeChangedManually(t, this)
            }
        }, c.update = function(t) {
            this._delayTime > 0 && (this._delayTime -= t, this._delayTime > 0) || (this._currentFramePlayed ? this.time += t * this.speed : this._currentFramePlayed = !0, this._process())
        }, c._needRevers = function(t) {
            var e = this.wrapMode,
                i = !1;
            (e & l.PingPong) === l.PingPong && (t - (0 | t) == 0 && t > 0 && (t -= 1), 1 & t && (i = !i));
            return (e & l.Reverse) === l.Reverse && (i = !i), i
        }, c.getWrappedInfo = function(t, e) {
            e = e || new o;
            var i = !1,
                n = this.duration,
                r = this.repeatCount,
                s = t > 0 ? t / n : -t / n;
            if (s >= r) {
                s = r, i = !0;
                var a = r - (0 | r);
                0 === a && (a = 1), t = a * n * (t > 0 ? 1 : -1)
            }
            if (t > n) {
                var h = t % n;
                t = 0 === h ? n : h
            } else t < 0 && 0 !== (t %= n) && (t += n);
            var c = !1,
                u = this._wrapMode & l.ShouldWrap;
            u && (c = this._needRevers(s));
            var _ = c ? -1 : 1;
            return this.speed < 0 && (_ *= -1), u && c && (t = n - t), e.ratio = t / n, e.time = t, e.direction = _, e.stopped = i, e.iterations = s, e
        }, c.sample = function() {
            for (var t = this.getWrappedInfo(this.time, this._wrappedInfo), e = this.curves, i = 0, n = e.length; i < n; i++) {
                e[i].sample(t.time, t.ratio, this)
            }
            return t
        }, n.get(c, "clip", (function() {
            return this._clip
        })), n.get(c, "name", (function() {
            return this._name
        })), n.obsolete(c, "AnimationState.length", "duration"), n.getset(c, "curveLoaded", (function() {
            return this.curves.length > 0
        }), (function() {
            this.curves.length = 0
        })), n.getset(c, "wrapMode", (function() {
            return this._wrapMode
        }), (function(t) {
            this._wrapMode = t, this.time = 0, t & l.Loop ? this.repeatCount = 1 / 0 : this.repeatCount = 1
        })), n.getset(c, "repeatCount", (function() {
            return this._repeatCount
        }), (function(t) {
            this._repeatCount = t;
            var e = this._wrapMode & l.ShouldWrap,
                i = (this.wrapMode & l.Reverse) === l.Reverse;
            this._process = t !== 1 / 0 || e || i ? u : _
        })), n.getset(c, "delay", (function() {
            return this._delay
        }), (function(t) {
            this._delayTime = this._delay = t
        })), cc.AnimationState = e.exports = h
    }), {
        "./playable": 18,
        "./types": 19
    }],
    14: [(function(t, e, i) {
        "use strict";

        function n(t, e, i, n, r) {
            var s = 1 - r;
            return s * (s * (t + (3 * e - t) * r) + 3 * i * r * r) + n * r * r * r
        }
        var r = Math.cos,
            s = Math.acos,
            o = Math.max,
            a = 2 * Math.PI,
            l = Math.sqrt;

        function h(t) {
            return t < 0 ? -Math.pow(-t, 1 / 3) : Math.pow(t, 1 / 3)
        }

        function c(t, e) {
            var i, n, c, u, _ = e - 0,
                f = e - t[0],
                d = 3 * _,
                p = 3 * f,
                m = 3 * (e - t[2]),
                y = 1 / (-_ + p - m + (e - 1)),
                v = (d - 6 * f + m) * y,
                g = v * (1 / 3),
                x = (-d + p) * y,
                b = 1 / 3 * (3 * x - v * v),
                A = b * (1 / 3),
                C = (2 * v * v * v - 9 * v * x + 27 * (_ * y)) / 27,
                T = C / 2,
                S = T * T + A * A * A;
            if (S < 0) {
                var w = 1 / 3 * -b,
                    E = l(w * w * w),
                    M = -C / (2 * E),
                    D = s(M < -1 ? -1 : M > 1 ? 1 : M),
                    B = 2 * h(E);
                return n = B * r(D * (1 / 3)) - g, c = B * r((D + a) * (1 / 3)) - g, u = B * r((D + 2 * a) * (1 / 3)) - g, 0 <= n && n <= 1 ? 0 <= c && c <= 1 ? 0 <= u && u <= 1 ? o(n, c, u) : o(n, c) : 0 <= u && u <= 1 ? o(n, u) : n : 0 <= c && c <= 1 ? 0 <= u && u <= 1 ? o(c, u) : c : u
            }
            if (0 === S) return c = -(i = T < 0 ? h(-T) : -h(T)) - g, 0 <= (n = 2 * i - g) && n <= 1 ? 0 <= c && c <= 1 ? o(n, c) : n : c;
            var I = l(S);
            return n = (i = h(-T + I)) - h(T + I) - g
        }

        function u(t, e) {
            var i = c(t, e),
                n = t[1];
            return ((1 - i) * (n + (t[3] - n) * i) * 3 + i * i) * i
        }
        e.exports = {
            bezier: n,
            bezierByTime: u
        }
    }), {}],
    15: [(function(t, e, i) {
        "use strict";
        var n = {
            constant: function() {
                return 0
            },
            linear: function(t) {
                return t
            },
            quadIn: function(t) {
                return t * t
            },
            quadOut: function(t) {
                return t * (2 - t)
            },
            quadInOut: function(t) {
                return (t *= 2) < 1 ? .5 * t * t : -.5 * (--t * (t - 2) - 1)
            },
            cubicIn: function(t) {
                return t * t * t
            },
            cubicOut: function(t) {
                return --t * t * t + 1
            },
            cubicInOut: function(t) {
                return (t *= 2) < 1 ? .5 * t * t * t : .5 * ((t -= 2) * t * t + 2)
            },
            quartIn: function(t) {
                return t * t * t * t
            },
            quartOut: function(t) {
                return 1 - --t * t * t * t
            },
            quartInOut: function(t) {
                return (t *= 2) < 1 ? .5 * t * t * t * t : -.5 * ((t -= 2) * t * t * t - 2)
            },
            quintIn: function(t) {
                return t * t * t * t * t
            },
            quintOut: function(t) {
                return --t * t * t * t * t + 1
            },
            quintInOut: function(t) {
                return (t *= 2) < 1 ? .5 * t * t * t * t * t : .5 * ((t -= 2) * t * t * t * t + 2)
            },
            sineIn: function(t) {
                return 1 - Math.cos(t * Math.PI / 2)
            },
            sineOut: function(t) {
                return Math.sin(t * Math.PI / 2)
            },
            sineInOut: function(t) {
                return .5 * (1 - Math.cos(Math.PI * t))
            },
            expoIn: function(t) {
                return 0 === t ? 0 : Math.pow(1024, t - 1)
            },
            expoOut: function(t) {
                return 1 === t ? 1 : 1 - Math.pow(2, -10 * t)
            },
            expoInOut: function(t) {
                return 0 === t ? 0 : 1 === t ? 1 : (t *= 2) < 1 ? .5 * Math.pow(1024, t - 1) : .5 * (2 - Math.pow(2, -10 * (t - 1)))
            },
            circIn: function(t) {
                return 1 - Math.sqrt(1 - t * t)
            },
            circOut: function(t) {
                return Math.sqrt(1 - --t * t)
            },
            circInOut: function(t) {
                return (t *= 2) < 1 ? -.5 * (Math.sqrt(1 - t * t) - 1) : .5 * (Math.sqrt(1 - (t -= 2) * t) + 1)
            },
            elasticIn: function(t) {
                var e, i = .1;
                return 0 === t ? 0 : 1 === t ? 1 : (!i || i < 1 ? (i = 1, e = .1) : e = .4 * Math.asin(1 / i) / (2 * Math.PI), -i * Math.pow(2, 10 * (t -= 1)) * Math.sin((t - e) * (2 * Math.PI) / .4))
            },
            elasticOut: function(t) {
                var e, i = .1;
                return 0 === t ? 0 : 1 === t ? 1 : (!i || i < 1 ? (i = 1, e = .1) : e = .4 * Math.asin(1 / i) / (2 * Math.PI), i * Math.pow(2, -10 * t) * Math.sin((t - e) * (2 * Math.PI) / .4) + 1)
            },
            elasticInOut: function(t) {
                var e, i = .1;
                return 0 === t ? 0 : 1 === t ? 1 : (!i || i < 1 ? (i = 1, e = .1) : e = .4 * Math.asin(1 / i) / (2 * Math.PI), (t *= 2) < 1 ? i * Math.pow(2, 10 * (t -= 1)) * Math.sin((t - e) * (2 * Math.PI) / .4) * -.5 : i * Math.pow(2, -10 * (t -= 1)) * Math.sin((t - e) * (2 * Math.PI) / .4) * .5 + 1)
            },
            backIn: function(t) {
                var e = 1.70158;
                return t * t * ((e + 1) * t - e)
            },
            backOut: function(t) {
                var e = 1.70158;
                return --t * t * ((e + 1) * t + e) + 1
            },
            backInOut: function(t) {
                var e = 2.5949095;
                return (t *= 2) < 1 ? t * t * ((e + 1) * t - e) * .5 : .5 * ((t -= 2) * t * ((e + 1) * t + e) + 2)
            },
            bounceIn: function(t) {
                return 1 - n.bounceOut(1 - t)
            },
            bounceOut: function(t) {
                return t < 1 / 2.75 ? 7.5625 * t * t : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + .75 : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375 : 7.5625 * (t -= 2.625 / 2.75) * t + .984375
            },
            bounceInOut: function(t) {
                return t < .5 ? .5 * n.bounceIn(2 * t) : .5 * n.bounceOut(2 * t - 1) + .5
            },
            smooth: function(t) {
                return t <= 0 ? 0 : t >= 1 ? 1 : t * t * (3 - 2 * t)
            },
            fade: function(t) {
                return t <= 0 ? 0 : t >= 1 ? 1 : t * t * t * (t * (6 * t - 15) + 10)
            }
        };

        function r(t, e) {
            return function(i) {
                return i < .5 ? e(2 * i) / 2 : t(2 * i - 1) / 2 + .5
            }
        }
        n.quadOutIn = r(n.quadIn, n.quadOut), n.cubicOutIn = r(n.cubicIn, n.cubicOut), n.quartOutIn = r(n.quartIn, n.quartOut), n.quintOutIn = r(n.quintIn, n.quintOut), n.sineOutIn = r(n.sineIn, n.sineOut), n.expoOutIn = r(n.expoIn, n.expoOut), n.circOutIn = r(n.circIn, n.circOut), n.backOutIn = r(n.backIn, n.backOut), n.bounceIn = function(t) {
            return 1 - n.bounceOut(1 - t)
        }, n.bounceInOut = function(t) {
            return t < .5 ? .5 * n.bounceIn(2 * t) : .5 * n.bounceOut(2 * t - 1) + .5
        }, n.bounceOutIn = r(n.bounceIn, n.bounceOut), cc.easing = e.exports = n
    }), {}],
    16: [(function(t, e, i) {
        "use strict";
        t("./bezier"), t("./easing"), t("./types"), t("./motion-path-helper"), t("./animation-curves"), t("./animation-clip"), t("./animation-manager"), t("./animation-state"), t("./animation-animator")
    }), {
        "./animation-animator": 9,
        "./animation-clip": 10,
        "./animation-curves": 11,
        "./animation-manager": 12,
        "./animation-state": 13,
        "./bezier": 14,
        "./easing": 15,
        "./motion-path-helper": 17,
        "./types": 19
    }],
    17: [(function(t, e, i) {
        "use strict";
        var n = t("./animation-curves").DynamicAnimCurve,
            r = t("./animation-curves").computeRatioByType,
            s = t("./bezier").bezier,
            o = t("../core/utils/binary-search").binarySearchEpsilon,
            a = cc.v2;

        function l(t) {
            this.points = t || [], this.beziers = [], this.ratios = [], this.progresses = [], this.length = 0, this.computeBeziers()
        }

        function h() {
            this.start = a(), this.end = a(), this.startCtrlPoint = a(), this.endCtrlPoint = a()
        }

        function c(t) {
            if (!Array.isArray(t)) return !1;
            for (var e = 0, i = t.length; e < i; e++) {
                var n = t[e];
                if (!Array.isArray(n) || 6 !== n.length) return !1
            }
            return !0
        }

        function u(t, e, i, s, h) {
            function u(t) {
                return t instanceof cc.Vec2 ? { in: t,
                    pos: t,
                    out: t
                } : Array.isArray(t) && 6 === t.length ? { in: a(t[2], t[3]),
                    pos: a(t[0], t[1]),
                    out: a(t[4], t[5])
                } : { in: cc.Vec2.ZERO,
                    pos: cc.Vec2.ZERO,
                    out: cc.Vec2.ZERO
                }
            }
            var _ = e.values = e.values.map((function(t) {
                return Array.isArray(t) && (t = 2 === t.length ? cc.v2(t[0], t[1]) : cc.v3(t[0], t[1], t[2])), t
            }));
            if (0 !== t.length && 0 !== _.length) {
                for (var f = !1, d = 0; d < t.length; d++) {
                    var p = t[d];
                    if (p && !c(p) && (cc.errorID(3904, h ? h.name : "", "position", d), p = null), p && p.length > 0) {
                        f = !0;
                        break
                    }
                }
                if (f && 1 !== _.length) {
                    for (var m = e.types, y = e.ratios, v = e.values = [], g = e.types = [], x = e.ratios = [], b = 0, A = n.Linear, C = 0, T = t.length; C < T - 1; C++) {
                        var S, w = t[C],
                            E = y[C],
                            M = y[C + 1] - E,
                            D = _[C],
                            B = _[C + 1],
                            I = m[C],
                            P = [],
                            R = b / M,
                            O = 1 / (M * i * s);
                        if (w && w.length > 0) {
                            var L = [];
                            L.push(u(D));
                            for (var F = 0, N = w.length; F < N; F++) {
                                var V = u(w[F]);
                                L.push(V)
                            }
                            L.push(u(B));
                            var k = new l(L);
                            k.computeBeziers();
                            for (var G = k.progresses; 1 - R > 1e-6;) {
                                var U, z, j, W;
                                if ((S = r(S = R, I)) < 0) W = (0 - S) * (z = k.beziers[0]).getLength(), j = z.start.sub(z.endCtrlPoint).normalize(), U = z.start.add(j.mul(W));
                                else if (S > 1) W = (S - 1) * (z = k.beziers[k.beziers.length - 1]).getLength(), j = z.end.sub(z.startCtrlPoint).normalize(), U = z.end.add(j.mul(W));
                                else {
                                    var H = o(G, S);
                                    H < 0 && (H = ~H), S -= H > 0 ? G[H - 1] : 0, S /= k.ratios[H], U = k.beziers[H].getPointAt(S)
                                }
                                P.push(U), R += O
                            }
                        } else
                            for (; 1 - R > 1e-6;) S = r(S = R, I), P.push(D.lerp(B, S)), R += O;
                        A = "constant" === I ? I : n.Linear;
                        for (F = 0, N = P.length; F < N; F++) {
                            var X = E + b + O * F * M;
                            Y(P[F], A, X)
                        }
                        b = Math.abs(R - 1) > 1e-6 ? (R - 1) * M : 0
                    }
                    y[y.length - 1] !== x[x.length - 1] && Y(_[_.length - 1], A, y[y.length - 1])
                }
            }

            function Y(t, e, i) {
                v.push(t), g.push(e), x.push(i)
            }
        }
        l.prototype.computeBeziers = function() {
            var t;
            this.beziers.length = 0, this.ratios.length = 0, this.progresses.length = 0, this.length = 0;
            for (var e = 1; e < this.points.length; e++) {
                var i = this.points[e - 1],
                    n = this.points[e];
                (t = new h).start = i.pos, t.startCtrlPoint = i.out, t.end = n.pos, t.endCtrlPoint = n.in, this.beziers.push(t), this.length += t.getLength()
            }
            var r = 0;
            for (e = 0; e < this.beziers.length; e++) t = this.beziers[e], this.ratios[e] = t.getLength() / this.length, this.progresses[e] = r += this.ratios[e];
            return this.beziers
        }, h.prototype.getPointAt = function(t) {
            var e = this.getUtoTmapping(t);
            return this.getPoint(e)
        }, h.prototype.getPoint = function(t) {
            var e = s(this.start.x, this.startCtrlPoint.x, this.endCtrlPoint.x, this.end.x, t),
                i = s(this.start.y, this.startCtrlPoint.y, this.endCtrlPoint.y, this.end.y, t);
            return new a(e, i)
        }, h.prototype.getLength = function() {
            var t = this.getLengths();
            return t[t.length - 1]
        }, h.prototype.getLengths = function(t) {
            if (t || (t = this.__arcLengthDivisions ? this.__arcLengthDivisions : 200), this.cacheArcLengths && this.cacheArcLengths.length === t + 1) return this.cacheArcLengths;
            var e, i, n = [],
                r = this.getPoint(0),
                s = a(),
                o = 0;
            for (n.push(0), i = 1; i <= t; i++) e = this.getPoint(i / t), s.x = r.x - e.x, s.y = r.y - e.y, o += s.mag(), n.push(o), r = e;
            return this.cacheArcLengths = n, n
        }, h.prototype.getUtoTmapping = function(t, e) {
            var i, n = this.getLengths(),
                r = 0,
                s = n.length;
            i = e || t * n[s - 1];
            for (var o, a = 0, l = s - 1; a <= l;)
                if ((o = n[r = Math.floor(a + (l - a) / 2)] - i) < 0) a = r + 1;
                else {
                    if (!(o > 0)) {
                        l = r;
                        break
                    }
                    l = r - 1
                }
            if (n[r = l] === i) return r / (s - 1);
            var h = n[r];
            return (r + (i - h) / (n[r + 1] - h)) / (s - 1)
        }, e.exports = {
            sampleMotionPaths: u,
            Curve: l,
            Bezier: h
        }
    }), {
        "../core/utils/binary-search": 292,
        "./animation-curves": 11,
        "./bezier": 14
    }],
    18: [(function(t, e, i) {
        "use strict";
        var n = cc.js,
            r = t("../core/CCDebug");

        function s() {
            this._isPlaying = !1, this._isPaused = !1, this._stepOnce = !1
        }
        var o = s.prototype;
        n.get(o, "isPlaying", (function() {
            return this._isPlaying
        }), !0), n.get(o, "isPaused", (function() {
            return this._isPaused
        }), !0);
        var a = function() {};
        o.onPlay = a, o.onPause = a, o.onResume = a, o.onStop = a, o.onError = a, o.play = function() {
            this._isPlaying ? this._isPaused ? (this._isPaused = !1, this.onResume()) : this.onError(r.getError(3912)) : (this._isPlaying = !0, this.onPlay())
        }, o.stop = function() {
            this._isPlaying && (this._isPlaying = !1, this.onStop(), this._isPaused = !1)
        }, o.pause = function() {
            this._isPlaying && !this._isPaused && (this._isPaused = !0, this.onPause())
        }, o.resume = function() {
            this._isPlaying && this._isPaused && (this._isPaused = !1, this.onResume())
        }, o.step = function() {
            this.pause(), this._stepOnce = !0, this._isPlaying || this.play()
        }, e.exports = s
    }), {
        "../core/CCDebug": 49
    }],
    19: [(function(t, e, i) {
        "use strict";
        var n = {
                Loop: 2,
                ShouldWrap: 4,
                PingPong: 22,
                Reverse: 36
            },
            r = cc.Enum({
                Default: 0,
                Normal: 1,
                Reverse: n.Reverse,
                Loop: n.Loop,
                LoopReverse: n.Loop | n.Reverse,
                PingPong: n.PingPong,
                PingPongReverse: n.PingPong | n.Reverse
            });

        function s(t) {
            t ? this.set(t) : (this.ratio = 0, this.time = 0, this.direction = 1, this.stopped = !0, this.iterations = 0, this.frameIndex = void 0)
        }
        cc.WrapMode = r, s.prototype.set = function(t) {
            this.ratio = t.ratio, this.time = t.time, this.direction = t.direction, this.stopped = t.stopped, this.iterations = t.iterations, this.frameIndex = t.frameIndex
        }, e.exports = {
            WrapModeMask: n,
            WrapMode: r,
            WrappedInfo: s
        }
    }), {}],
    20: [(function(t, e, i) {
        "use strict";
        var n = t("../core/event/event-target"),
            r = t("../core/platform/CCSys"),
            s = t("../core/assets/CCAudioClip").LoadMode,
            o = !1,
            a = [],
            l = function t(e) {
                n.call(this), this._src = e, this._element = null, this.id = 0, this._volume = 1, this._loop = !1, this._nextTime = 0, this._state = t.State.INITIALZING, this._onended = function() {
                    this._state = t.State.STOPPED, this.emit("ended")
                }.bind(this)
            };
        cc.js.extend(l, n), l.State = {
            ERROR: -1,
            INITIALZING: 0,
            PLAYING: 1,
            PAUSED: 2,
            STOPPED: 3
        }, (function(t) {
            t._bindEnded = function(t) {
                t = t || this._onended;
                var e = this._element;
                this._src && e instanceof HTMLAudioElement ? e.addEventListener("ended", t) : e.onended = t
            }, t._unbindEnded = function() {
                var t = this._element;
                t instanceof HTMLAudioElement ? t.removeEventListener("ended", this._onended) : t && (t.onended = null)
            }, t._onLoaded = function() {
                this._createElement(), this.setVolume(this._volume), this.setLoop(this._loop), 0 !== this._nextTime && this.setCurrentTime(this._nextTime), this.getState() === l.State.PLAYING ? this.play() : this._state = l.State.INITIALZING
            }, t._createElement = function() {
                var t = this._src._nativeAsset;
                t instanceof HTMLAudioElement ? (this._element || (this._element = document.createElement("audio")), this._element.src = t.src) : this._element = new c(t, this)
            }, t.play = function() {
                this._state = l.State.PLAYING, this._element && (this._bindEnded(), this._element.play(), this._touchToPlay())
            }, t._touchToPlay = function() {
                if (this._src && this._src.loadMode === s.DOM_AUDIO && this._element.paused && a.push({
                        instance: this,
                        offset: 0,
                        audio: this._element
                    }), !o) {
                    o = !0;
                    var t = "ontouchend" in window ? "touchend" : "mousedown";
                    cc.game.canvas.addEventListener(t, (function() {
                        for (var t = void 0; t = a.pop();) t.audio.play(t.offset)
                    }))
                }
            }, t.destroy = function() {
                this._element = null
            }, t.pause = function() {
                this._element && this.getState() === l.State.PLAYING && (this._unbindEnded(), this._element.pause(), this._state = l.State.PAUSED)
            }, t.resume = function() {
                this._element && this.getState() === l.State.PAUSED && (this._bindEnded(), this._element.play(), this._state = l.State.PLAYING)
            }, t.stop = function() {
                if (this._element) {
                    this._element.pause();
                    try {
                        this._element.currentTime = 0
                    } catch (t) {}
                    for (var t = 0; t < a.length; t++)
                        if (a[t].instance === this) {
                            a.splice(t, 1);
                            break
                        }
                    this._unbindEnded(), this.emit("stop"), this._state = l.State.STOPPED
                }
            }, t.setLoop = function(t) {
                this._loop = t, this._element && (this._element.loop = t)
            }, t.getLoop = function() {
                return this._loop
            }, t.setVolume = function(t) {
                this._volume = t, this._element && (this._element.volume = t)
            }, t.getVolume = function() {
                return this._volume
            }, t.setCurrentTime = function(t) {
                if (this._element) {
                    this._nextTime = 0, this._unbindEnded(), this._bindEnded(function() {
                        this._bindEnded()
                    }.bind(this));
                    try {
                        this._element.currentTime = t
                    } catch (i) {
                        var e = this._element;
                        if (e.addEventListener) {
                            e.addEventListener("loadedmetadata", (function i() {
                                e.removeEventListener("loadedmetadata", i), e.currentTime = t
                            }))
                        }
                    }
                } else this._nextTime = t
            }, t.getCurrentTime = function() {
                return this._element ? this._element.currentTime : 0
            }, t.getDuration = function() {
                return this._element ? this._element.duration : 0
            }, t.getState = function() {
                return this._forceUpdatingState(), this._state
            }, t._forceUpdatingState = function() {
                var t = this._element;
                t && (l.State.PLAYING === this._state && t.paused ? this._state = l.State.STOPPED : l.State.STOPPED !== this._state || t.paused || (this._state = l.State.PLAYING))
            }, Object.defineProperty(t, "src", {
                get: function() {
                    return this._src
                },
                set: function(t) {
                    if (this._unbindEnded(), t)
                        if (this._src = t, t.loaded) this._onLoaded();
                        else {
                            var e = this;
                            t.once("load", (function() {
                                t === e._src && e._onLoaded()
                            })), cc.loader.load({
                                url: t.nativeUrl,
                                skips: ["Loader"]
                            }, (function(e, i) {
                                e ? cc.error(e) : t.loaded || (t._nativeAsset = i)
                            }))
                        }
                    else this._src = null, this._element instanceof HTMLAudioElement ? this._element.src = "" : this._element = null, this._state = l.State.INITIALZING;
                    return t
                },
                enumerable: !0,
                configurable: !0
            }), Object.defineProperty(t, "paused", {
                get: function() {
                    return !this._element || this._element.paused
                },
                enumerable: !0,
                configurable: !0
            })
        })(l.prototype);
        var h = void 0;
        h = cc.sys.browserType === cc.sys.BROWSER_TYPE_EDGE || cc.sys.browserType === cc.sys.BROWSER_TYPE_BAIDU || cc.sys.browserType === cc.sys.BROWSER_TYPE_UC ? .01 : 0;
        var c = function(t, e) {
            this._audio = e, this._context = r.__audioSupport.context, this._buffer = t, this._gainObj = this._context.createGain(), this.volume = 1, this._gainObj.connect(this._context.destination), this._loop = !1, this._startTime = -1, this._currentSource = null, this.playedLength = 0, this._currentTimer = null, this._endCallback = function() {
                this.onended && this.onended(this)
            }.bind(this)
        };
        (function(t) {
            t.play = function(t) {
                this._currentSource && !this.paused && (this._currentSource.onended = null, this._currentSource.stop(0), this.playedLength = 0);
                var e = this._context.createBufferSource();
                e.buffer = this._buffer, e.connect(this._gainObj), e.loop = this._loop, this._startTime = this._context.currentTime, (t = t || this.playedLength) && (this._startTime -= t);
                var i = this._buffer.duration,
                    n = t,
                    r = void 0;
                if (this._loop ? e.start ? e.start(0, n) : e.notoGrainOn ? e.noteGrainOn(0, n) : e.noteOn(0, n) : (r = i - t, e.start ? e.start(0, n, r) : e.noteGrainOn ? e.noteGrainOn(0, n, r) : e.noteOn(0, n, r)), this._currentSource = e, e.onended = this._endCallback, (!e.context.state || "suspended" === e.context.state) && 0 === this._context.currentTime) {
                    var s = this;
                    clearTimeout(this._currentTimer), this._currentTimer = setTimeout((function() {
                        0 === s._context.currentTime && a.push({
                            instance: s._audio,
                            offset: t,
                            audio: s
                        })
                    }), 10)
                }
            }, t.pause = function() {
                if (clearTimeout(this._currentTimer), !this.paused) {
                    this.playedLength = this._context.currentTime - this._startTime, this.playedLength %= this._buffer.duration;
                    var t = this._currentSource;
                    this._currentSource = null, this._startTime = -1, t && t.stop(0)
                }
            }, Object.defineProperty(t, "paused", {
                get: function() {
                    return (!this._currentSource || !this._currentSource.loop) && (-1 === this._startTime || this._context.currentTime - this._startTime > this._buffer.duration)
                },
                enumerable: !0,
                configurable: !0
            }), Object.defineProperty(t, "loop", {
                get: function() {
                    return this._loop
                },
                set: function(t) {
                    return this._currentSource && (this._currentSource.loop = t), this._loop = t
                },
                enumerable: !0,
                configurable: !0
            }), Object.defineProperty(t, "volume", {
                get: function() {
                    return this._volume
                },
                set: function(t) {
                    if (this._volume = t, this._gainObj.gain.setTargetAtTime) try {
                        this._gainObj.gain.setTargetAtTime(t, this._context.currentTime, h)
                    } catch (e) {
                        this._gainObj.gain.setTargetAtTime(t, this._context.currentTime, .01)
                    } else this._gainObj.gain.value = t;
                    r.os === r.OS_IOS && !this.paused && this._currentSource && (this._currentSource.onended = null, this.pause(), this.play())
                },
                enumerable: !0,
                configurable: !0
            }), Object.defineProperty(t, "currentTime", {
                get: function() {
                    return this.paused ? this.playedLength : (this.playedLength = this._context.currentTime - this._startTime, this.playedLength %= this._buffer.duration, this.playedLength)
                },
                set: function(t) {
                    return this.paused ? this.playedLength = t : (this.pause(), this.playedLength = t, this.play()), t
                },
                enumerable: !0,
                configurable: !0
            }), Object.defineProperty(t, "duration", {
                get: function() {
                    return this._buffer.duration
                },
                enumerable: !0,
                configurable: !0
            })
        })(c.prototype), e.exports = cc.Audio = l
    }), {
        "../core/assets/CCAudioClip": 57,
        "../core/event/event-target": 131,
        "../core/platform/CCSys": 207
    }],
    21: [(function(t, e, i) {
        "use strict";
        var n = t("./CCAudio"),
            r = t("../core/assets/CCAudioClip"),
            s = cc.js,
            o = 0,
            a = s.createMap(!0),
            l = {},
            h = [],
            c = function(t) {
                t._finishCallback = null, t.off("ended"), t.off("stop"), t.src = null, h.includes(t) || (h.length < 32 ? h.push(t) : t.destroy())
            },
            u = function(t) {
                var e = o++,
                    i = l[t];
                if (i || (i = l[t] = []), d._maxAudioInstance <= i.length) {
                    var r = i.shift();
                    _(r).stop()
                }
                var s = h.pop() || new n,
                    u = function() {
                        if (_(this.id)) {
                            delete a[this.id];
                            var t = i.indexOf(this.id);
                            cc.js.array.fastRemoveAt(i, t)
                        }
                        c(this)
                    };
                return s.on("ended", (function() {
                    this._finishCallback && this._finishCallback(), u.call(this)
                }), s), s.on("stop", u, s), s.id = e, a[e] = s, i.push(e), s
            },
            _ = function(t) {
                return a[t]
            },
            f = function(t) {
                return void 0 === t ? t = 1 : "string" == typeof t && (t = Number.parseFloat(t)), t
            },
            d = {
                AudioState: n.State,
                _maxWebAudioSize: 2097152,
                _maxAudioInstance: 24,
                _id2audio: a,
                play: function(t, e, i) {
                    var n, s = t;
                    if ("string" == typeof t) cc.warnID(8401, "cc.audioEngine", "cc.AudioClip", "AudioClip", "cc.AudioClip", "audio"), n = u(s = t), r._loadByUrl(s, (function(t, e) {
                        e && (n.src = e)
                    }));
                    else {
                        if (!t) return;
                        s = t.nativeUrl, (n = u(s)).src = t
                    }
                    return n.setLoop(e || !1), i = f(i), n.setVolume(i), n.play(), n.id
                },
                setLoop: function(t, e) {
                    var i = _(t);
                    i && i.setLoop && i.setLoop(e)
                },
                isLoop: function(t) {
                    var e = _(t);
                    return !(!e || !e.getLoop) && e.getLoop()
                },
                setVolume: function(t, e) {
                    var i = _(t);
                    i && i.setVolume(e)
                },
                getVolume: function(t) {
                    var e = _(t);
                    return e ? e.getVolume() : 1
                },
                setCurrentTime: function(t, e) {
                    var i = _(t);
                    return !!i && (i.setCurrentTime(e), !0)
                },
                getCurrentTime: function(t) {
                    var e = _(t);
                    return e ? e.getCurrentTime() : 0
                },
                getDuration: function(t) {
                    var e = _(t);
                    return e ? e.getDuration() : 0
                },
                getState: function(t) {
                    var e = _(t);
                    return e ? e.getState() : this.AudioState.ERROR
                },
                setFinishCallback: function(t, e) {
                    var i = _(t);
                    i && (i._finishCallback = e)
                },
                pause: function(t) {
                    var e = _(t);
                    return !!e && (e.pause(), !0)
                },
                _pauseIDCache: [],
                pauseAll: function() {
                    for (var t in a) {
                        var e = a[t];
                        e.getState() === n.State.PLAYING && (this._pauseIDCache.push(t), e.pause())
                    }
                },
                resume: function(t) {
                    var e = _(t);
                    e && e.resume()
                },
                resumeAll: function() {
                    for (var t = 0; t < this._pauseIDCache.length; ++t) {
                        var e = this._pauseIDCache[t],
                            i = _(e);
                        i && i.resume()
                    }
                    this._pauseIDCache.length = 0
                },
                stop: function(t) {
                    var e = _(t);
                    return !!e && (e.stop(), !0)
                },
                stopAll: function() {
                    for (var t in a) {
                        var e = a[t];
                        e && e.stop()
                    }
                },
                setMaxAudioInstance: function(t) {
                    this._maxAudioInstance = t
                },
                getMaxAudioInstance: function() {
                    return this._maxAudioInstance
                },
                uncache: function(t) {
                    var e = t;
                    if ("string" == typeof t) cc.warnID(8401, "cc.audioEngine", "cc.AudioClip", "AudioClip", "cc.AudioClip", "audio"), e = t;
                    else {
                        if (!t) return;
                        e = t.nativeUrl
                    }
                    var i = l[e];
                    if (i)
                        for (; i.length > 0;) {
                            var n = i.pop(),
                                r = a[n];
                            r && (r.stop(), delete a[n])
                        }
                },
                uncacheAll: function() {
                    this.stopAll();
                    var t = void 0;
                    for (var e in a)(t = a[e]) && t.destroy();
                    for (; t = h.pop();) t.destroy();
                    a = s.createMap(!0), l = {}
                },
                getProfile: function(t) {},
                preload: function(t, e) {
                    cc.loader.load(t, e && function(t) {
                        t || e()
                    })
                },
                setMaxWebAudioSize: function(t) {
                    this._maxWebAudioSize = 1024 * t
                },
                _breakCache: null,
                _break: function() {
                    for (var t in this._breakCache = [], a) {
                        var e = a[t];
                        e.getState() === n.State.PLAYING && (this._breakCache.push(t), e.pause())
                    }
                },
                _restore: function() {
                    if (this._breakCache) {
                        for (; this._breakCache.length > 0;) {
                            var t = this._breakCache.pop(),
                                e = _(t);
                            e && e.resume && e.resume()
                        }
                        this._breakCache = null
                    }
                },
                _music: {
                    id: -1,
                    loop: !1,
                    volume: 1
                },
                _effect: {
                    volume: 1,
                    pauseCache: []
                },
                playMusic: function(t, e) {
                    var i = this._music;
                    return this.stop(i.id), i.id = this.play(t, e, i.volume), i.loop = e, i.id
                },
                stopMusic: function() {
                    this.stop(this._music.id)
                },
                pauseMusic: function() {
                    return this.pause(this._music.id), this._music.id
                },
                resumeMusic: function() {
                    return this.resume(this._music.id), this._music.id
                },
                getMusicVolume: function() {
                    return this._music.volume
                },
                setMusicVolume: function(t) {
                    t = f(t);
                    var e = this._music;
                    return e.volume = t, this.setVolume(e.id, e.volume), e.volume
                },
                isMusicPlaying: function() {
                    return this.getState(this._music.id) === this.AudioState.PLAYING
                },
                playEffect: function(t, e) {
                    return this.play(t, e || !1, this._effect.volume)
                },
                setEffectsVolume: function(t) {
                    t = f(t);
                    var e = this._music.id;
                    for (var i in this._effect.volume = t, a) {
                        var n = a[i];
                        n && n.id !== e && d.setVolume(i, t)
                    }
                },
                getEffectsVolume: function() {
                    return this._effect.volume
                },
                pauseEffect: function(t) {
                    return this.pause(t)
                },
                pauseAllEffects: function() {
                    var t = this._music.id,
                        e = this._effect;
                    for (var i in e.pauseCache.length = 0, a) {
                        var n = a[i];
                        if (n && n.id !== t) n.getState() === this.AudioState.PLAYING && (e.pauseCache.push(i), n.pause())
                    }
                },
                resumeEffect: function(t) {
                    this.resume(t)
                },
                resumeAllEffects: function() {
                    for (var t = this._effect.pauseCache, e = 0; e < t.length; ++e) {
                        var i = t[e],
                            n = a[i];
                        n && n.resume()
                    }
                },
                stopEffect: function(t) {
                    return this.stop(t)
                },
                stopAllEffects: function() {
                    var t = this._music.id;
                    for (var e in a) {
                        var i = a[e];
                        if (i && i.id !== t) i.getState() === d.AudioState.PLAYING && i.stop()
                    }
                }
            };
        e.exports = cc.audioEngine = d
    }), {
        "../core/assets/CCAudioClip": 57,
        "./CCAudio": 20
    }],
    22: [(function(t, e, i) {
        "use strict";
        var n = {
            name: "Jacob__Codec"
        };
        n.Base64 = t("./base64"), n.GZip = t("./gzip"), n.unzip = function() {
            return n.GZip.gunzip.apply(n.GZip, arguments)
        }, n.unzipBase64 = function() {
            var t = n.Base64.decode.apply(n.Base64, arguments);
            try {
                return n.GZip.gunzip.call(n.GZip, t)
            } catch (e) {
                return t.slice(7)
            }
        }, n.unzipBase64AsArray = function(t, e) {
            e = e || 1;
            var i, n, r, s = this.unzipBase64(t),
                o = [];
            for (i = 0, r = s.length / e; i < r; i++)
                for (o[i] = 0, n = e - 1; n >= 0; --n) o[i] += s.charCodeAt(i * e + n) << 8 * n;
            return o
        }, n.unzipAsArray = function(t, e) {
            e = e || 1;
            var i, n, r, s = this.unzip(t),
                o = [];
            for (i = 0, r = s.length / e; i < r; i++)
                for (o[i] = 0, n = e - 1; n >= 0; --n) o[i] += s.charCodeAt(i * e + n) << 8 * n;
            return o
        }, cc.codec = e.exports = n
    }), {
        "./base64": 23,
        "./gzip": 24
    }],
    23: [(function(t, e, i) {
        "use strict";
        var n = t("../core/utils/misc").BASE64_VALUES,
            r = {
                name: "Jacob__Codec__Base64",
                decode: function(t) {
                    var e, i, r, s, o, a, l = [],
                        h = 0;
                    for (t = t.replace(/[^A-Za-z0-9\+\/\=]/g, ""); h < t.length;) e = n[t.charCodeAt(h++)] << 2 | (s = n[t.charCodeAt(h++)]) >> 4, i = (15 & s) << 4 | (o = n[t.charCodeAt(h++)]) >> 2, r = (3 & o) << 6 | (a = n[t.charCodeAt(h++)]), l.push(String.fromCharCode(e)), 64 !== o && l.push(String.fromCharCode(i)), 64 !== a && l.push(String.fromCharCode(r));
                    return l = l.join("")
                },
                decodeAsArray: function(t, e) {
                    var i, n, r, s = this.decode(t),
                        o = [];
                    for (i = 0, r = s.length / e; i < r; i++)
                        for (o[i] = 0, n = e - 1; n >= 0; --n) o[i] += s.charCodeAt(i * e + n) << 8 * n;
                    return o
                }
            };
        e.exports = r
    }), {
        "../core/utils/misc": 300
    }],
    24: [(function(t, e, i) {
        "use strict";
        var n = function(t) {
            this.data = t, this.debug = !1, this.gpflags = void 0, this.files = 0, this.unzipped = [], this.buf32k = new Array(32768), this.bIdx = 0, this.modeZIP = !1, this.bytepos = 0, this.bb = 1, this.bits = 0, this.nameBuf = [], this.fileout = void 0, this.literalTree = new Array(n.LITERALS), this.distanceTree = new Array(32), this.treepos = 0, this.Places = null, this.len = 0, this.fpos = new Array(17), this.fpos[0] = 0, this.flens = void 0, this.fmax = void 0
        };
        n.gunzip = function(t) {
            return t.constructor === Array || (t.constructor, String), new n(t).gunzip()[0][0]
        }, n.HufNode = function() {
            this.b0 = 0, this.b1 = 0, this.jump = null, this.jumppos = -1
        }, n.LITERALS = 288, n.NAMEMAX = 256, n.bitReverse = [0, 128, 64, 192, 32, 160, 96, 224, 16, 144, 80, 208, 48, 176, 112, 240, 8, 136, 72, 200, 40, 168, 104, 232, 24, 152, 88, 216, 56, 184, 120, 248, 4, 132, 68, 196, 36, 164, 100, 228, 20, 148, 84, 212, 52, 180, 116, 244, 12, 140, 76, 204, 44, 172, 108, 236, 28, 156, 92, 220, 60, 188, 124, 252, 2, 130, 66, 194, 34, 162, 98, 226, 18, 146, 82, 210, 50, 178, 114, 242, 10, 138, 74, 202, 42, 170, 106, 234, 26, 154, 90, 218, 58, 186, 122, 250, 6, 134, 70, 198, 38, 166, 102, 230, 22, 150, 86, 214, 54, 182, 118, 246, 14, 142, 78, 206, 46, 174, 110, 238, 30, 158, 94, 222, 62, 190, 126, 254, 1, 129, 65, 193, 33, 161, 97, 225, 17, 145, 81, 209, 49, 177, 113, 241, 9, 137, 73, 201, 41, 169, 105, 233, 25, 153, 89, 217, 57, 185, 121, 249, 5, 133, 69, 197, 37, 165, 101, 229, 21, 149, 85, 213, 53, 181, 117, 245, 13, 141, 77, 205, 45, 173, 109, 237, 29, 157, 93, 221, 61, 189, 125, 253, 3, 131, 67, 195, 35, 163, 99, 227, 19, 147, 83, 211, 51, 179, 115, 243, 11, 139, 75, 203, 43, 171, 107, 235, 27, 155, 91, 219, 59, 187, 123, 251, 7, 135, 71, 199, 39, 167, 103, 231, 23, 151, 87, 215, 55, 183, 119, 247, 15, 143, 79, 207, 47, 175, 111, 239, 31, 159, 95, 223, 63, 191, 127, 255], n.cplens = [3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0], n.cplext = [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 99, 99], n.cpdist = [1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577], n.cpdext = [0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13], n.border = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15], n.prototype.gunzip = function() {
            return this.outputArr = [], this.nextFile(), this.unzipped
        }, n.prototype.readByte = function() {
            return this.bits += 8, this.bytepos < this.data.length ? this.data.charCodeAt(this.bytepos++) : -1
        }, n.prototype.byteAlign = function() {
            this.bb = 1
        }, n.prototype.readBit = function() {
            var t;
            return this.bits++, t = 1 & this.bb, this.bb >>= 1, 0 === this.bb && (this.bb = this.readByte(), t = 1 & this.bb, this.bb = this.bb >> 1 | 128), t
        }, n.prototype.readBits = function(t) {
            for (var e = 0, i = t; i--;) e = e << 1 | this.readBit();
            return t && (e = n.bitReverse[e] >> 8 - t), e
        }, n.prototype.flushBuffer = function() {
            this.bIdx = 0
        }, n.prototype.addBuffer = function(t) {
            this.buf32k[this.bIdx++] = t, this.outputArr.push(String.fromCharCode(t)), 32768 === this.bIdx && (this.bIdx = 0)
        }, n.prototype.IsPat = function() {
            for (;;) {
                if (this.fpos[this.len] >= this.fmax) return -1;
                if (this.flens[this.fpos[this.len]] === this.len) return this.fpos[this.len]++;
                this.fpos[this.len]++
            }
        }, n.prototype.Rec = function() {
            var t, e = this.Places[this.treepos];
            if (17 === this.len) return -1;
            if (this.treepos++, this.len++, (t = this.IsPat()) >= 0) e.b0 = t;
            else if (e.b0 = 32768, this.Rec()) return -1;
            if ((t = this.IsPat()) >= 0) e.b1 = t, e.jump = null;
            else if (e.b1 = 32768, e.jump = this.Places[this.treepos], e.jumppos = this.treepos, this.Rec()) return -1;
            return this.len--, 0
        }, n.prototype.CreateTree = function(t, e, i, n) {
            var r;
            for (this.Places = t, this.treepos = 0, this.flens = i, this.fmax = e, r = 0; r < 17; r++) this.fpos[r] = 0;
            return this.len = 0, this.Rec() ? -1 : 0
        }, n.prototype.DecodeValue = function(t) {
            for (var e, i, n = 0, r = t[n];;)
                if (this.readBit()) {
                    if (!(32768 & r.b1)) return r.b1;
                    for (r = r.jump, e = t.length, i = 0; i < e; i++)
                        if (t[i] === r) {
                            n = i;
                            break
                        }
                } else {
                    if (!(32768 & r.b0)) return r.b0;
                    r = t[++n]
                }
            return -1
        }, n.prototype.DeflateLoop = function() {
            var t, e, i;
            do {
                var r, s;
                if (t = this.readBit(), 0 === (e = this.readBits(2)))
                    for (this.byteAlign(), r = this.readByte(), r |= this.readByte() << 8, s = this.readByte(), 65535 & (r ^ ~(s |= this.readByte() << 8)) && document.write("BlockLen checksum mismatch\n"); r--;) o = this.readByte(), this.addBuffer(o);
                else if (1 === e)
                    for (;;)
                        if ((a = n.bitReverse[this.readBits(7)] >> 1) > 23 ? (a = a << 1 | this.readBit()) > 199 ? a = (a -= 128) << 1 | this.readBit() : (a -= 48) > 143 && (a += 136) : a += 256, a < 256) this.addBuffer(a);
                        else {
                            if (256 === a) break;
                            for (a -= 257, p = this.readBits(n.cplext[a]) + n.cplens[a], a = n.bitReverse[this.readBits(5)] >> 3, n.cpdext[a] > 8 ? (m = this.readBits(8), m |= this.readBits(n.cpdext[a] - 8) << 8) : m = this.readBits(n.cpdext[a]), m += n.cpdist[a], a = 0; a < p; a++) {
                                var o = this.buf32k[this.bIdx - m & 32767];
                                this.addBuffer(o)
                            }
                        }
                else if (2 === e) {
                    var a, l, h, c, u, _ = new Array(320);
                    for (h = 257 + this.readBits(5), c = 1 + this.readBits(5), u = 4 + this.readBits(4), a = 0; a < 19; a++) _[a] = 0;
                    for (a = 0; a < u; a++) _[n.border[a]] = this.readBits(3);
                    for (p = this.distanceTree.length, i = 0; i < p; i++) this.distanceTree[i] = new n.HufNode;
                    if (this.CreateTree(this.distanceTree, 19, _, 0)) return this.flushBuffer(), 1;
                    l = h + c, i = 0;
                    for (; i < l;)
                        if (0, (a = this.DecodeValue(this.distanceTree)) < 16) _[i++] = a;
                        else if (16 === a) {
                        var f;
                        if (i + (a = 3 + this.readBits(2)) > l) return this.flushBuffer(), 1;
                        for (f = i ? _[i - 1] : 0; a--;) _[i++] = f
                    } else {
                        if (i + (a = 17 === a ? 3 + this.readBits(3) : 11 + this.readBits(7)) > l) return this.flushBuffer(), 1;
                        for (; a--;) _[i++] = 0
                    }
                    for (p = this.literalTree.length, i = 0; i < p; i++) this.literalTree[i] = new n.HufNode;
                    if (this.CreateTree(this.literalTree, h, _, 0)) return this.flushBuffer(), 1;
                    for (p = this.literalTree.length, i = 0; i < p; i++) this.distanceTree[i] = new n.HufNode;
                    var d = new Array;
                    for (i = h; i < _.length; i++) d[i - h] = _[i];
                    if (this.CreateTree(this.distanceTree, c, d, 0)) return this.flushBuffer(), 1;
                    for (;;)
                        if ((a = this.DecodeValue(this.literalTree)) >= 256) {
                            var p, m;
                            if (0 === (a -= 256)) break;
                            for (a--, p = this.readBits(n.cplext[a]) + n.cplens[a], a = this.DecodeValue(this.distanceTree), n.cpdext[a] > 8 ? (m = this.readBits(8), m |= this.readBits(n.cpdext[a] - 8) << 8) : m = this.readBits(n.cpdext[a]), m += n.cpdist[a]; p--;) {
                                o = this.buf32k[this.bIdx - m & 32767];
                                this.addBuffer(o)
                            }
                        } else this.addBuffer(a)
                }
            } while (!t);
            return this.flushBuffer(), this.byteAlign(), 0
        }, n.prototype.unzipFile = function(t) {
            var e;
            for (this.gunzip(), e = 0; e < this.unzipped.length; e++)
                if (this.unzipped[e][1] === t) return this.unzipped[e][0]
        }, n.prototype.nextFile = function() {
            this.outputArr = [], this.modeZIP = !1;
            var t = [];
            if (t[0] = this.readByte(), t[1] = this.readByte(), 120 === t[0] && 218 === t[1] && (this.DeflateLoop(), this.unzipped[this.files] = [this.outputArr.join(""), "geonext.gxt"], this.files++), 31 === t[0] && 139 === t[1] && (this.skipdir(), this.unzipped[this.files] = [this.outputArr.join(""), "file"], this.files++), 80 === t[0] && 75 === t[1] && (this.modeZIP = !0, t[2] = this.readByte(), t[3] = this.readByte(), 3 === t[2] && 4 === t[3])) {
                t[0] = this.readByte(), t[1] = this.readByte(), this.gpflags = this.readByte(), this.gpflags |= this.readByte() << 8;
                var e = this.readByte();
                e |= this.readByte() << 8, this.readByte(), this.readByte(), this.readByte(), this.readByte();
                this.readByte();
                this.readByte() << 8, this.readByte() << 16, this.readByte() << 24;
                this.readByte();
                this.readByte() << 8, this.readByte() << 16, this.readByte() << 24;
                var i = this.readByte();
                i |= this.readByte() << 8;
                var r = this.readByte();
                for (r |= this.readByte() << 8, o = 0, this.nameBuf = []; i--;) {
                    var s = this.readByte();
                    "/" === s | ":" === s ? o = 0 : o < n.NAMEMAX - 1 && (this.nameBuf[o++] = String.fromCharCode(s))
                }
                this.fileout || (this.fileout = this.nameBuf);
                for (var o = 0; o < r;) s = this.readByte(), o++;
                8 === e && (this.DeflateLoop(), this.unzipped[this.files] = [this.outputArr.join(""), this.nameBuf.join("")], this.files++), this.skipdir()
            }
        }, n.prototype.skipdir = function() {
            var t, e, i = [];
            if (8 & this.gpflags && (i[0] = this.readByte(), i[1] = this.readByte(), i[2] = this.readByte(), i[3] = this.readByte(), this.readByte(), this.readByte() << 8, this.readByte() << 16, this.readByte() << 24, this.readByte(), this.readByte() << 8, this.readByte() << 16, this.readByte() << 24), this.modeZIP && this.nextFile(), i[0] = this.readByte(), 8 !== i[0]) return 0;
            if (this.gpflags = this.readByte(), this.readByte(), this.readByte(), this.readByte(), this.readByte(), this.readByte(), this.readByte(), 4 & this.gpflags)
                for (i[0] = this.readByte(), i[2] = this.readByte(), this.len = i[0] + 256 * i[1], t = 0; t < this.len; t++) this.readByte();
            if (8 & this.gpflags)
                for (t = 0, this.nameBuf = []; e = this.readByte();) "7" !== e && ":" !== e || (t = 0), t < n.NAMEMAX - 1 && (this.nameBuf[t++] = e);
            if (16 & this.gpflags)
                for (; e = this.readByte(););
            2 & this.gpflags && (this.readByte(), this.readByte()), this.DeflateLoop(), this.readByte(), this.readByte(), this.readByte(), this.readByte(), this.modeZIP && this.nextFile()
        }, e.exports = n
    }), {}],
    25: [(function(t, e, i) {
        "use strict";
        (function() {
            function t(t) {
                throw t
            }
            var e = void 0,
                i = !0,
                n = this;

            function r(t, i) {
                var r, s = t.split("."),
                    o = n;
                !(s[0] in o) && o.execScript && o.execScript("var " + s[0]);
                for (; s.length && (r = s.shift());) s.length || i === e ? o = o[r] ? o[r] : o[r] = {} : o[r] = i
            }
            var s = "undefined" != typeof Uint8Array && "undefined" != typeof Uint16Array && "undefined" != typeof Uint32Array;

            function o(t) {
                if ("string" == typeof t) {
                    var e, i, n = t.split("");
                    for (e = 0, i = n.length; e < i; e++) n[e] = (255 & n[e].charCodeAt(0)) >>> 0;
                    t = n
                }
                for (var r, s = 1, o = 0, a = t.length, l = 0; 0 < a;) {
                    a -= r = 1024 < a ? 1024 : a;
                    do {
                        o += s += t[l++]
                    } while (--r);
                    s %= 65521, o %= 65521
                }
                return (o << 16 | s) >>> 0
            }

            function a(e, i) {
                this.index = "number" == typeof i ? i : 0, this.i = 0, this.buffer = e instanceof(s ? Uint8Array : Array) ? e : new(s ? Uint8Array : Array)(32768), 2 * this.buffer.length <= this.index && t(Error("invalid index")), this.buffer.length <= this.index && this.f()
            }
            a.prototype.f = function() {
                var t, e = this.buffer,
                    i = e.length,
                    n = new(s ? Uint8Array : Array)(i << 1);
                if (s) n.set(e);
                else
                    for (t = 0; t < i; ++t) n[t] = e[t];
                return this.buffer = n
            }, a.prototype.d = function(t, e, i) {
                var n, r = this.buffer,
                    s = this.index,
                    o = this.i,
                    a = r[s];
                if (i && 1 < e && (t = 8 < e ? (f[255 & t] << 24 | f[t >>> 8 & 255] << 16 | f[t >>> 16 & 255] << 8 | f[t >>> 24 & 255]) >> 32 - e : f[t] >> 8 - e), 8 > e + o) a = a << e | t, o += e;
                else
                    for (n = 0; n < e; ++n) a = a << 1 | t >> e - n - 1 & 1, 8 == ++o && (o = 0, r[s++] = f[a], a = 0, s === r.length && (r = this.f()));
                r[s] = a, this.buffer = r, this.i = o, this.index = s
            }, a.prototype.finish = function() {
                var t, e = this.buffer,
                    i = this.index;
                return 0 < this.i && (e[i] <<= 8 - this.i, e[i] = f[e[i]], i++), s ? t = e.subarray(0, i) : (e.length = i, t = e), t
            };
            var l, h = new(s ? Uint8Array : Array)(256);
            for (l = 0; 256 > l; ++l) {
                for (var c = _ = l, u = 7, _ = _ >>> 1; _; _ >>>= 1) c <<= 1, c |= 1 & _, --u;
                h[l] = (c << u & 255) >>> 0
            }
            var f = h;

            function d(t) {
                this.buffer = new(s ? Uint16Array : Array)(2 * t), this.length = 0
            }

            function p(t) {
                var e, i, n, r, o, a, l, h, c, u = t.length,
                    _ = 0,
                    f = Number.POSITIVE_INFINITY;
                for (h = 0; h < u; ++h) t[h] > _ && (_ = t[h]), t[h] < f && (f = t[h]);
                for (e = 1 << _, i = new(s ? Uint32Array : Array)(e), n = 1, r = 0, o = 2; n <= _;) {
                    for (h = 0; h < u; ++h)
                        if (t[h] === n) {
                            for (a = 0, l = r, c = 0; c < n; ++c) a = a << 1 | 1 & l, l >>= 1;
                            for (c = a; c < e; c += o) i[c] = n << 16 | h;
                            ++r
                        }++n, r <<= 1, o <<= 1
                }
                return [i, _, f]
            }

            function m(t, e) {
                this.h = v, this.w = 0, this.input = t, this.b = 0, e && (e.lazy && (this.w = e.lazy), "number" == typeof e.compressionType && (this.h = e.compressionType), e.outputBuffer && (this.a = s && e.outputBuffer instanceof Array ? new Uint8Array(e.outputBuffer) : e.outputBuffer), "number" == typeof e.outputIndex && (this.b = e.outputIndex)), this.a || (this.a = new(s ? Uint8Array : Array)(32768))
            }
            s && new Uint32Array([0, 1996959894, 3993919788, 2567524794, 124634137, 1886057615, 3915621685, 2657392035, 249268274, 2044508324, 3772115230, 2547177864, 162941995, 2125561021, 3887607047, 2428444049, 498536548, 1789927666, 4089016648, 2227061214, 450548861, 1843258603, 4107580753, 2211677639, 325883990, 1684777152, 4251122042, 2321926636, 335633487, 1661365465, 4195302755, 2366115317, 997073096, 1281953886, 3579855332, 2724688242, 1006888145, 1258607687, 3524101629, 2768942443, 901097722, 1119000684, 3686517206, 2898065728, 853044451, 1172266101, 3705015759, 2882616665, 651767980, 1373503546, 3369554304, 3218104598, 565507253, 1454621731, 3485111705, 3099436303, 671266974, 1594198024, 3322730930, 2970347812, 795835527, 1483230225, 3244367275, 3060149565, 1994146192, 31158534, 2563907772, 4023717930, 1907459465, 112637215, 2680153253, 3904427059, 2013776290, 251722036, 2517215374, 3775830040, 2137656763, 141376813, 2439277719, 3865271297, 1802195444, 476864866, 2238001368, 4066508878, 1812370925, 453092731, 2181625025, 4111451223, 1706088902, 314042704, 2344532202, 4240017532, 1658658271, 366619977, 2362670323, 4224994405, 1303535960, 984961486, 2747007092, 3569037538, 1256170817, 1037604311, 2765210733, 3554079995, 1131014506, 879679996, 2909243462, 3663771856, 1141124467, 855842277, 2852801631, 3708648649, 1342533948, 654459306, 3188396048, 3373015174, 1466479909, 544179635, 3110523913, 3462522015, 1591671054, 702138776, 2966460450, 3352799412, 1504918807, 783551873, 3082640443, 3233442989, 3988292384, 2596254646, 62317068, 1957810842, 3939845945, 2647816111, 81470997, 1943803523, 3814918930, 2489596804, 225274430, 2053790376, 3826175755, 2466906013, 167816743, 2097651377, 4027552580, 2265490386, 503444072, 1762050814, 4150417245, 2154129355, 426522225, 1852507879, 4275313526, 2312317920, 282753626, 1742555852, 4189708143, 2394877945, 397917763, 1622183637, 3604390888, 2714866558, 953729732, 1340076626, 3518719985, 2797360999, 1068828381, 1219638859, 3624741850, 2936675148, 906185462, 1090812512, 3747672003, 2825379669, 829329135, 1181335161, 3412177804, 3160834842, 628085408, 1382605366, 3423369109, 3138078467, 570562233, 1426400815, 3317316542, 2998733608, 733239954, 1555261956, 3268935591, 3050360625, 752459403, 1541320221, 2607071920, 3965973030, 1969922972, 40735498, 2617837225, 3943577151, 1913087877, 83908371, 2512341634, 3803740692, 2075208622, 213261112, 2463272603, 3855990285, 2094854071, 198958881, 2262029012, 4057260610, 1759359992, 534414190, 2176718541, 4139329115, 1873836001, 414664567, 2282248934, 4279200368, 1711684554, 285281116, 2405801727, 4167216745, 1634467795, 376229701, 2685067896, 3608007406, 1308918612, 956543938, 2808555105, 3495958263, 1231636301, 1047427035, 2932959818, 3654703836, 1088359270, 936918e3, 2847714899, 3736837829, 1202900863, 817233897, 3183342108, 3401237130, 1404277552, 615818150, 3134207493, 3453421203, 1423857449, 601450431, 3009837614, 3294710456, 1567103746, 711928724, 3020668471, 3272380065, 1510334235, 755167117]), d.prototype.getParent = function(t) {
                return 2 * ((t - 2) / 4 | 0)
            }, d.prototype.push = function(t, e) {
                var i, n, r, s = this.buffer;
                for (i = this.length, s[this.length++] = e, s[this.length++] = t; 0 < i && (n = this.getParent(i), s[i] > s[n]);) r = s[i], s[i] = s[n], s[n] = r, r = s[i + 1], s[i + 1] = s[n + 1], s[n + 1] = r, i = n;
                return this.length
            }, d.prototype.pop = function() {
                var t, e, i, n, r, s = this.buffer;
                for (e = s[0], t = s[1], this.length -= 2, s[0] = s[this.length], s[1] = s[this.length + 1], r = 0; !((n = 2 * r + 2) >= this.length) && (n + 2 < this.length && s[n + 2] > s[n] && (n += 2), s[n] > s[r]);) i = s[r], s[r] = s[n], s[n] = i, i = s[r + 1], s[r + 1] = s[n + 1], s[n + 1] = i, r = n;
                return {
                    index: t,
                    value: e,
                    length: this.length
                }
            };
            var y, v = 2,
                g = {
                    NONE: 0,
                    r: 1,
                    j: v,
                    N: 3
                },
                x = [];
            for (y = 0; 288 > y; y++) switch (i) {
                case 143 >= y:
                    x.push([y + 48, 8]);
                    break;
                case 255 >= y:
                    x.push([y - 144 + 400, 9]);
                    break;
                case 279 >= y:
                    x.push([y - 256 + 0, 7]);
                    break;
                case 287 >= y:
                    x.push([y - 280 + 192, 8]);
                    break;
                default:
                    t("invalid literal: " + y)
            }

            function b(t, e) {
                this.length = t, this.G = e
            }

            function A() {
                var e = C;
                switch (i) {
                    case 3 === e:
                        return [257, e - 3, 0];
                    case 4 === e:
                        return [258, e - 4, 0];
                    case 5 === e:
                        return [259, e - 5, 0];
                    case 6 === e:
                        return [260, e - 6, 0];
                    case 7 === e:
                        return [261, e - 7, 0];
                    case 8 === e:
                        return [262, e - 8, 0];
                    case 9 === e:
                        return [263, e - 9, 0];
                    case 10 === e:
                        return [264, e - 10, 0];
                    case 12 >= e:
                        return [265, e - 11, 1];
                    case 14 >= e:
                        return [266, e - 13, 1];
                    case 16 >= e:
                        return [267, e - 15, 1];
                    case 18 >= e:
                        return [268, e - 17, 1];
                    case 22 >= e:
                        return [269, e - 19, 2];
                    case 26 >= e:
                        return [270, e - 23, 2];
                    case 30 >= e:
                        return [271, e - 27, 2];
                    case 34 >= e:
                        return [272, e - 31, 2];
                    case 42 >= e:
                        return [273, e - 35, 3];
                    case 50 >= e:
                        return [274, e - 43, 3];
                    case 58 >= e:
                        return [275, e - 51, 3];
                    case 66 >= e:
                        return [276, e - 59, 3];
                    case 82 >= e:
                        return [277, e - 67, 4];
                    case 98 >= e:
                        return [278, e - 83, 4];
                    case 114 >= e:
                        return [279, e - 99, 4];
                    case 130 >= e:
                        return [280, e - 115, 4];
                    case 162 >= e:
                        return [281, e - 131, 5];
                    case 194 >= e:
                        return [282, e - 163, 5];
                    case 226 >= e:
                        return [283, e - 195, 5];
                    case 257 >= e:
                        return [284, e - 227, 5];
                    case 258 === e:
                        return [285, e - 258, 0];
                    default:
                        t("invalid length: " + e)
                }
            }
            m.prototype.n = function() {
                var n, r, o, l, h = this.input;
                switch (this.h) {
                    case 0:
                        for (o = 0, l = h.length; o < l;) {
                            var c, u, _, f = r = s ? h.subarray(o, o + 65535) : h.slice(o, o + 65535),
                                d = (o += r.length) === l,
                                p = e,
                                m = e,
                                y = this.a,
                                g = this.b;
                            if (s) {
                                for (y = new Uint8Array(this.a.buffer); y.length <= g + f.length + 5;) y = new Uint8Array(y.length << 1);
                                y.set(this.a)
                            }
                            if (c = d ? 1 : 0, y[g++] = 0 | c, _ = 65536 + ~(u = f.length) & 65535, y[g++] = 255 & u, y[g++] = u >>> 8 & 255, y[g++] = 255 & _, y[g++] = _ >>> 8 & 255, s) y.set(f, g), g += f.length, y = y.subarray(0, g);
                            else {
                                for (p = 0, m = f.length; p < m; ++p) y[g++] = f[p];
                                y.length = g
                            }
                            this.b = g, this.a = y
                        }
                        break;
                    case 1:
                        var b = new a(new Uint8Array(this.a.buffer), this.b);
                        b.d(1, 1, i), b.d(1, 2, i);
                        var A, C, T, S = E(this, h);
                        for (A = 0, C = S.length; A < C; A++)
                            if (T = S[A], a.prototype.d.apply(b, x[T]), 256 < T) b.d(S[++A], S[++A], i), b.d(S[++A], 5), b.d(S[++A], S[++A], i);
                            else if (256 === T) break;
                        this.a = b.finish(), this.b = this.a.length;
                        break;
                    case v:
                        var w, B, I, P, R, O, L, F, N, V, k, G, U, z, j, W = new a(new Uint8Array(this.a), this.b),
                            H = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15],
                            X = Array(19);
                        for (w = v, W.d(1, 1, i), W.d(w, 2, i), B = E(this, h), L = D(O = M(this.L, 15)), N = D(F = M(this.K, 7)), I = 286; 257 < I && 0 === O[I - 1]; I--);
                        for (P = 30; 1 < P && 0 === F[P - 1]; P--);
                        var Y, q, J, Z, K, Q, $ = I,
                            tt = P,
                            et = new(s ? Uint32Array : Array)($ + tt),
                            it = new(s ? Uint32Array : Array)(316),
                            nt = new(s ? Uint8Array : Array)(19);
                        for (Y = q = 0; Y < $; Y++) et[q++] = O[Y];
                        for (Y = 0; Y < tt; Y++) et[q++] = F[Y];
                        if (!s)
                            for (Y = 0, Z = nt.length; Y < Z; ++Y) nt[Y] = 0;
                        for (Y = K = 0, Z = et.length; Y < Z; Y += q) {
                            for (q = 1; Y + q < Z && et[Y + q] === et[Y]; ++q);
                            if (J = q, 0 === et[Y])
                                if (3 > J)
                                    for (; 0 < J--;) it[K++] = 0, nt[0]++;
                                else
                                    for (; 0 < J;)(Q = 138 > J ? J : 138) > J - 3 && Q < J && (Q = J - 3), 10 >= Q ? (it[K++] = 17, it[K++] = Q - 3, nt[17]++) : (it[K++] = 18, it[K++] = Q - 11, nt[18]++), J -= Q;
                            else if (it[K++] = et[Y], nt[et[Y]]++, 3 > --J)
                                for (; 0 < J--;) it[K++] = et[Y], nt[et[Y]]++;
                            else
                                for (; 0 < J;)(Q = 6 > J ? J : 6) > J - 3 && Q < J && (Q = J - 3), it[K++] = 16, it[K++] = Q - 3, nt[16]++, J -= Q
                        }
                        for (n = s ? it.subarray(0, K) : it.slice(0, K), V = M(nt, 7), z = 0; 19 > z; z++) X[z] = V[H[z]];
                        for (R = 19; 4 < R && 0 === X[R - 1]; R--);
                        for (k = D(V), W.d(I - 257, 5, i), W.d(P - 1, 5, i), W.d(R - 4, 4, i), z = 0; z < R; z++) W.d(X[z], 3, i);
                        for (z = 0, j = n.length; z < j; z++)
                            if (G = n[z], W.d(k[G], V[G], i), 16 <= G) {
                                switch (z++, G) {
                                    case 16:
                                        U = 2;
                                        break;
                                    case 17:
                                        U = 3;
                                        break;
                                    case 18:
                                        U = 7;
                                        break;
                                    default:
                                        t("invalid code: " + G)
                                }
                                W.d(n[z], U, i)
                            }
                        var rt, st, ot, at, lt, ht, ct, ut, _t = [L, O],
                            ft = [N, F];
                        for (lt = _t[0], ht = _t[1], ct = ft[0], ut = ft[1], rt = 0, st = B.length; rt < st; ++rt)
                            if (ot = B[rt], W.d(lt[ot], ht[ot], i), 256 < ot) W.d(B[++rt], B[++rt], i), at = B[++rt], W.d(ct[at], ut[at], i), W.d(B[++rt], B[++rt], i);
                            else if (256 === ot) break;
                        this.a = W.finish(), this.b = this.a.length;
                        break;
                    default:
                        t("invalid compression type")
                }
                return this.a
            };
            var C, T, S = [];
            for (C = 3; 258 >= C; C++) T = A(), S[C] = T[2] << 24 | T[1] << 16 | T[0];
            var w = s ? new Uint32Array(S) : S;

            function E(n, r) {
                function o(e, n) {
                    var r, s, o, a, l = e.G,
                        h = [],
                        c = 0;
                    switch (r = w[e.length], h[c++] = 65535 & r, h[c++] = r >> 16 & 255, h[c++] = r >> 24, i) {
                        case 1 === l:
                            s = [0, l - 1, 0];
                            break;
                        case 2 === l:
                            s = [1, l - 2, 0];
                            break;
                        case 3 === l:
                            s = [2, l - 3, 0];
                            break;
                        case 4 === l:
                            s = [3, l - 4, 0];
                            break;
                        case 6 >= l:
                            s = [4, l - 5, 1];
                            break;
                        case 8 >= l:
                            s = [5, l - 7, 1];
                            break;
                        case 12 >= l:
                            s = [6, l - 9, 2];
                            break;
                        case 16 >= l:
                            s = [7, l - 13, 2];
                            break;
                        case 24 >= l:
                            s = [8, l - 17, 3];
                            break;
                        case 32 >= l:
                            s = [9, l - 25, 3];
                            break;
                        case 48 >= l:
                            s = [10, l - 33, 4];
                            break;
                        case 64 >= l:
                            s = [11, l - 49, 4];
                            break;
                        case 96 >= l:
                            s = [12, l - 65, 5];
                            break;
                        case 128 >= l:
                            s = [13, l - 97, 5];
                            break;
                        case 192 >= l:
                            s = [14, l - 129, 6];
                            break;
                        case 256 >= l:
                            s = [15, l - 193, 6];
                            break;
                        case 384 >= l:
                            s = [16, l - 257, 7];
                            break;
                        case 512 >= l:
                            s = [17, l - 385, 7];
                            break;
                        case 768 >= l:
                            s = [18, l - 513, 8];
                            break;
                        case 1024 >= l:
                            s = [19, l - 769, 8];
                            break;
                        case 1536 >= l:
                            s = [20, l - 1025, 9];
                            break;
                        case 2048 >= l:
                            s = [21, l - 1537, 9];
                            break;
                        case 3072 >= l:
                            s = [22, l - 2049, 10];
                            break;
                        case 4096 >= l:
                            s = [23, l - 3073, 10];
                            break;
                        case 6144 >= l:
                            s = [24, l - 4097, 11];
                            break;
                        case 8192 >= l:
                            s = [25, l - 6145, 11];
                            break;
                        case 12288 >= l:
                            s = [26, l - 8193, 12];
                            break;
                        case 16384 >= l:
                            s = [27, l - 12289, 12];
                            break;
                        case 24576 >= l:
                            s = [28, l - 16385, 13];
                            break;
                        case 32768 >= l:
                            s = [29, l - 24577, 13];
                            break;
                        default:
                            t("invalid distance")
                    }
                    for (r = s, h[c++] = r[0], h[c++] = r[1], h[c++] = r[2], o = 0, a = h.length; o < a; ++o) y[v++] = h[o];
                    x[h[0]]++, A[h[3]]++, g = e.length + n - 1, d = null
                }
                var a, l, h, c, u, _, f, d, p, m = {},
                    y = s ? new Uint16Array(2 * r.length) : [],
                    v = 0,
                    g = 0,
                    x = new(s ? Uint32Array : Array)(286),
                    A = new(s ? Uint32Array : Array)(30),
                    C = n.w;
                if (!s) {
                    for (h = 0; 285 >= h;) x[h++] = 0;
                    for (h = 0; 29 >= h;) A[h++] = 0
                }
                for (x[256] = 1, a = 0, l = r.length; a < l; ++a) {
                    for (h = u = 0, c = 3; h < c && a + h !== l; ++h) u = u << 8 | r[a + h];
                    if (m[u] === e && (m[u] = []), _ = m[u], !(0 < g--)) {
                        for (; 0 < _.length && 32768 < a - _[0];) _.shift();
                        if (a + 3 >= l) {
                            for (d && o(d, -1), h = 0, c = l - a; h < c; ++h) p = r[a + h], y[v++] = p, ++x[p];
                            break
                        }
                        if (0 < _.length) {
                            var T = e,
                                S = e,
                                E = 0,
                                M = e,
                                D = e,
                                B = e,
                                I = r.length,
                                P = (D = 0, _.length);
                            t: for (; D < P; D++) {
                                if (T = _[P - D - 1], M = 3, 3 < E) {
                                    for (B = E; 3 < B; B--)
                                        if (r[T + B - 1] !== r[a + B - 1]) continue t;
                                    M = E
                                }
                                for (; 258 > M && a + M < I && r[T + M] === r[a + M];) ++M;
                                if (M > E && (S = T, E = M), 258 === M) break
                            }
                            f = new b(E, a - S), d ? d.length < f.length ? (p = r[a - 1], y[v++] = p, ++x[p], o(f, 0)) : o(d, -1) : f.length < C ? d = f : o(f, 0)
                        } else d ? o(d, -1) : (p = r[a], y[v++] = p, ++x[p])
                    }
                    _.push(a)
                }
                return y[v++] = 256, x[256]++, n.L = x, n.K = A, s ? y.subarray(0, v) : y
            }

            function M(t, e) {
                function i(t) {
                    var e = C[t][T[t]];
                    e === v ? (i(t + 1), i(t + 1)) : --b[e], ++T[t]
                }
                var n, r, o, a, l, h = t.length,
                    c = new d(572),
                    u = new(s ? Uint8Array : Array)(h);
                if (!s)
                    for (a = 0; a < h; a++) u[a] = 0;
                for (a = 0; a < h; ++a) 0 < t[a] && c.push(a, t[a]);
                if (n = Array(c.length / 2), r = new(s ? Uint32Array : Array)(c.length / 2), 1 === n.length) return u[c.pop().index] = 1, u;
                for (a = 0, l = c.length / 2; a < l; ++a) n[a] = c.pop(), r[a] = n[a].value;
                var _, f, p, m, y, v = r.length,
                    g = new(s ? Uint16Array : Array)(e),
                    x = new(s ? Uint8Array : Array)(e),
                    b = new(s ? Uint8Array : Array)(v),
                    A = Array(e),
                    C = Array(e),
                    T = Array(e),
                    S = (1 << e) - v,
                    w = 1 << e - 1;
                for (g[e - 1] = v, f = 0; f < e; ++f) S < w ? x[f] = 0 : (x[f] = 1, S -= w), S <<= 1, g[e - 2 - f] = (g[e - 1 - f] / 2 | 0) + v;
                for (g[0] = x[0], A[0] = Array(g[0]), C[0] = Array(g[0]), f = 1; f < e; ++f) g[f] > 2 * g[f - 1] + x[f] && (g[f] = 2 * g[f - 1] + x[f]), A[f] = Array(g[f]), C[f] = Array(g[f]);
                for (_ = 0; _ < v; ++_) b[_] = e;
                for (p = 0; p < g[e - 1]; ++p) A[e - 1][p] = r[p], C[e - 1][p] = p;
                for (_ = 0; _ < e; ++_) T[_] = 0;
                for (1 === x[e - 1] && (--b[0], ++T[e - 1]), f = e - 2; 0 <= f; --f) {
                    for (m = _ = 0, y = T[f + 1], p = 0; p < g[f]; p++)(m = A[f + 1][y] + A[f + 1][y + 1]) > r[_] ? (A[f][p] = m, C[f][p] = v, y += 2) : (A[f][p] = r[_], C[f][p] = _, ++_);
                    T[f] = 0, 1 === x[f] && i(f)
                }
                for (o = b, a = 0, l = n.length; a < l; ++a) u[n[a].index] = o[a];
                return u
            }

            function D(e) {
                var i, n, r, o, a = new(s ? Uint16Array : Array)(e.length),
                    l = [],
                    h = [],
                    c = 0;
                for (i = 0, n = e.length; i < n; i++) l[e[i]] = 1 + (0 | l[e[i]]);
                for (i = 1, n = 16; i <= n; i++) h[i] = c, (c += 0 | l[i]) > 1 << i && t("overcommitted"), c <<= 1;
                for (65536 > c && t("undercommitted"), i = 0, n = e.length; i < n; i++)
                    for (c = h[e[i]], h[e[i]] += 1, r = a[i] = 0, o = e[i]; r < o; r++) a[i] = a[i] << 1 | 1 & c, c >>>= 1;
                return a
            }

            function B(t, e) {
                this.input = t, this.a = new(s ? Uint8Array : Array)(32768), this.h = I.j;
                var i, n = {};
                for (i in !e && (e = {}) || "number" != typeof e.compressionType || (this.h = e.compressionType), e) n[i] = e[i];
                n.outputBuffer = this.a, this.z = new m(this.input, n)
            }
            var I = g;

            function P(e, i) {
                switch (this.k = [], this.l = 32768, this.e = this.g = this.c = this.q = 0, this.input = s ? new Uint8Array(e) : e, this.s = !1, this.m = O, this.B = !1, !i && (i = {}) || (i.index && (this.c = i.index), i.bufferSize && (this.l = i.bufferSize), i.bufferType && (this.m = i.bufferType), i.resize && (this.B = i.resize)), this.m) {
                    case R:
                        this.b = 32768, this.a = new(s ? Uint8Array : Array)(32768 + this.l + 258);
                        break;
                    case O:
                        this.b = 0, this.a = new(s ? Uint8Array : Array)(this.l), this.f = this.J, this.t = this.H, this.o = this.I;
                        break;
                    default:
                        t(Error("invalid inflate mode"))
                }
            }
            B.prototype.n = function() {
                var e, i, n, r, a, l, h, c = 0;
                switch (h = this.a, e = ct) {
                    case ct:
                        i = Math.LOG2E * Math.log(32768) - 8;
                        break;
                    default:
                        t(Error("invalid compression method"))
                }
                switch (n = i << 4 | e, h[c++] = n, e) {
                    case ct:
                        switch (this.h) {
                            case I.NONE:
                                a = 0;
                                break;
                            case I.r:
                                a = 1;
                                break;
                            case I.j:
                                a = 2;
                                break;
                            default:
                                t(Error("unsupported compression type"))
                        }
                        break;
                    default:
                        t(Error("invalid compression method"))
                }
                return r = a << 6 | 0, h[c++] = r | 31 - (256 * n + r) % 31, l = o(this.input), this.z.b = c, c = (h = this.z.n()).length, s && ((h = new Uint8Array(h.buffer)).length <= c + 4 && (this.a = new Uint8Array(h.length + 4), this.a.set(h), h = this.a), h = h.subarray(0, c + 4)), h[c++] = l >> 24 & 255, h[c++] = l >> 16 & 255, h[c++] = l >> 8 & 255, h[c++] = 255 & l, h
            }, r("Zlib.Deflate", B), r("Zlib.Deflate.compress", (function(t, e) {
                return new B(t, e).n()
            })), r("Zlib.Deflate.CompressionType", I), r("Zlib.Deflate.CompressionType.NONE", I.NONE), r("Zlib.Deflate.CompressionType.FIXED", I.r), r("Zlib.Deflate.CompressionType.DYNAMIC", I.j);
            var R = 0,
                O = 1,
                L = {
                    D: R,
                    C: O
                };
            P.prototype.p = function() {
                for (; !this.s;) {
                    var n = tt(this, 3);
                    switch (1 & n && (this.s = i), n >>>= 1) {
                        case 0:
                            var r = this.input,
                                o = this.c,
                                a = this.a,
                                l = this.b,
                                h = e,
                                c = e,
                                u = e,
                                _ = a.length,
                                f = e;
                            switch (this.e = this.g = 0, (h = r[o++]) === e && t(Error("invalid uncompressed block header: LEN (first byte)")), c = h, (h = r[o++]) === e && t(Error("invalid uncompressed block header: LEN (second byte)")), c |= h << 8, (h = r[o++]) === e && t(Error("invalid uncompressed block header: NLEN (first byte)")), u = h, (h = r[o++]) === e && t(Error("invalid uncompressed block header: NLEN (second byte)")), c === ~(u |= h << 8) && t(Error("invalid uncompressed block header: length verify")), o + c > r.length && t(Error("input buffer is broken")), this.m) {
                                case R:
                                    for (; l + c > a.length;) {
                                        if (c -= f = _ - l, s) a.set(r.subarray(o, o + f), l), l += f, o += f;
                                        else
                                            for (; f--;) a[l++] = r[o++];
                                        this.b = l, a = this.f(), l = this.b
                                    }
                                    break;
                                case O:
                                    for (; l + c > a.length;) a = this.f({
                                        v: 2
                                    });
                                    break;
                                default:
                                    t(Error("invalid inflate mode"))
                            }
                            if (s) a.set(r.subarray(o, o + c), l), l += c, o += c;
                            else
                                for (; c--;) a[l++] = r[o++];
                            this.c = o, this.b = l, this.a = a;
                            break;
                        case 1:
                            this.o(K, $);
                            break;
                        case 2:
                            it(this);
                            break;
                        default:
                            t(Error("unknown BTYPE: " + n))
                    }
                }
                return this.t()
            };
            var F, N, V = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15],
                k = s ? new Uint16Array(V) : V,
                G = [3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 258, 258],
                U = s ? new Uint16Array(G) : G,
                z = [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0],
                j = s ? new Uint8Array(z) : z,
                W = [1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577],
                H = s ? new Uint16Array(W) : W,
                X = [0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13],
                Y = s ? new Uint8Array(X) : X,
                q = new(s ? Uint8Array : Array)(288);
            for (F = 0, N = q.length; F < N; ++F) q[F] = 143 >= F ? 8 : 255 >= F ? 9 : 279 >= F ? 7 : 8;
            var J, Z, K = p(q),
                Q = new(s ? Uint8Array : Array)(30);
            for (J = 0, Z = Q.length; J < Z; ++J) Q[J] = 5;
            var $ = p(Q);

            function tt(i, n) {
                for (var r, s = i.g, o = i.e, a = i.input, l = i.c; o < n;)(r = a[l++]) === e && t(Error("input buffer is broken")), s |= r << o, o += 8;
                return r = s & (1 << n) - 1, i.g = s >>> n, i.e = o - n, i.c = l, r
            }

            function et(i, n) {
                for (var r, s, o, a = i.g, l = i.e, h = i.input, c = i.c, u = n[0], _ = n[1]; l < _;)(r = h[c++]) === e && t(Error("input buffer is broken")), a |= r << l, l += 8;
                return o = (s = u[a & (1 << _) - 1]) >>> 16, i.g = a >> o, i.e = l - o, i.c = c, 65535 & s
            }

            function it(t) {
                function e(t, e, i) {
                    var n, r, s, o;
                    for (o = 0; o < t;) switch (n = et(this, e)) {
                        case 16:
                            for (s = 3 + tt(this, 2); s--;) i[o++] = r;
                            break;
                        case 17:
                            for (s = 3 + tt(this, 3); s--;) i[o++] = 0;
                            r = 0;
                            break;
                        case 18:
                            for (s = 11 + tt(this, 7); s--;) i[o++] = 0;
                            r = 0;
                            break;
                        default:
                            r = i[o++] = n
                    }
                    return i
                }
                var i, n, r, o, a = tt(t, 5) + 257,
                    l = tt(t, 5) + 1,
                    h = tt(t, 4) + 4,
                    c = new(s ? Uint8Array : Array)(k.length);
                for (o = 0; o < h; ++o) c[k[o]] = tt(t, 3);
                i = p(c), n = new(s ? Uint8Array : Array)(a), r = new(s ? Uint8Array : Array)(l), t.o(p(e.call(t, a, i, n)), p(e.call(t, l, i, r)))
            }

            function nt(e, i) {
                var n, r;
                switch (this.input = e, this.c = 0, !i && (i = {}) || (i.index && (this.c = i.index), i.verify && (this.M = i.verify)), n = e[this.c++], r = e[this.c++], 15 & n) {
                    case ct:
                        this.method = ct;
                        break;
                    default:
                        t(Error("unsupported compression method"))
                }
                0 != ((n << 8) + r) % 31 && t(Error("invalid fcheck flag:" + ((n << 8) + r) % 31)), 32 & r && t(Error("fdict flag is not supported")), this.A = new P(e, {
                    index: this.c,
                    bufferSize: i.bufferSize,
                    bufferType: i.bufferType,
                    resize: i.resize
                })
            }
            P.prototype.o = function(t, e) {
                var i = this.a,
                    n = this.b;
                this.u = t;
                for (var r, s, o, a, l = i.length - 258; 256 !== (r = et(this, t));)
                    if (256 > r) n >= l && (this.b = n, i = this.f(), n = this.b), i[n++] = r;
                    else
                        for (a = U[s = r - 257], 0 < j[s] && (a += tt(this, j[s])), r = et(this, e), o = H[r], 0 < Y[r] && (o += tt(this, Y[r])), n >= l && (this.b = n, i = this.f(), n = this.b); a--;) i[n] = i[n++ - o];
                for (; 8 <= this.e;) this.e -= 8, this.c--;
                this.b = n
            }, P.prototype.I = function(t, e) {
                var i = this.a,
                    n = this.b;
                this.u = t;
                for (var r, s, o, a, l = i.length; 256 !== (r = et(this, t));)
                    if (256 > r) n >= l && (l = (i = this.f()).length), i[n++] = r;
                    else
                        for (a = U[s = r - 257], 0 < j[s] && (a += tt(this, j[s])), r = et(this, e), o = H[r], 0 < Y[r] && (o += tt(this, Y[r])), n + a > l && (l = (i = this.f()).length); a--;) i[n] = i[n++ - o];
                for (; 8 <= this.e;) this.e -= 8, this.c--;
                this.b = n
            }, P.prototype.f = function() {
                var t, e, i = new(s ? Uint8Array : Array)(this.b - 32768),
                    n = this.b - 32768,
                    r = this.a;
                if (s) i.set(r.subarray(32768, i.length));
                else
                    for (t = 0, e = i.length; t < e; ++t) i[t] = r[t + 32768];
                if (this.k.push(i), this.q += i.length, s) r.set(r.subarray(n, n + 32768));
                else
                    for (t = 0; 32768 > t; ++t) r[t] = r[n + t];
                return this.b = 32768, r
            }, P.prototype.J = function(t) {
                var e, i, n, r = this.input.length / this.c + 1 | 0,
                    o = this.input,
                    a = this.a;
                return t && ("number" == typeof t.v && (r = t.v), "number" == typeof t.F && (r += t.F)), 2 > r ? i = (n = (o.length - this.c) / this.u[2] / 2 * 258 | 0) < a.length ? a.length + n : a.length << 1 : i = a.length * r, s ? (e = new Uint8Array(i)).set(a) : e = a, this.a = e
            }, P.prototype.t = function() {
                var t, e, i, n, r, o = 0,
                    a = this.a,
                    l = this.k,
                    h = new(s ? Uint8Array : Array)(this.q + (this.b - 32768));
                if (0 === l.length) return s ? this.a.subarray(32768, this.b) : this.a.slice(32768, this.b);
                for (e = 0, i = l.length; e < i; ++e)
                    for (n = 0, r = (t = l[e]).length; n < r; ++n) h[o++] = t[n];
                for (e = 32768, i = this.b; e < i; ++e) h[o++] = a[e];
                return this.k = [], this.buffer = h
            }, P.prototype.H = function() {
                var t, e = this.b;
                return s ? this.B ? (t = new Uint8Array(e)).set(this.a.subarray(0, e)) : t = this.a.subarray(0, e) : (this.a.length > e && (this.a.length = e), t = this.a), this.buffer = t
            }, nt.prototype.p = function() {
                var e, i = this.input;
                return e = this.A.p(), this.c = this.A.c, this.M && ((i[this.c++] << 24 | i[this.c++] << 16 | i[this.c++] << 8 | i[this.c++]) >>> 0 !== o(e) && t(Error("invalid adler-32 checksum"))), e
            }, r("Zlib.Inflate", nt), r("Zlib.Inflate.BufferType", L), L.ADAPTIVE = L.C, L.BLOCK = L.D, r("Zlib.Inflate.prototype.decompress", nt.prototype.p);
            s && new Uint16Array([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);
            s && new Uint16Array([3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 258, 258]);
            s && new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0]);
            s && new Uint16Array([1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577]);
            s && new Uint8Array([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13]);
            var rt, st, ot = new(s ? Uint8Array : Array)(288);
            for (rt = 0, st = ot.length; rt < st; ++rt) ot[rt] = 143 >= rt ? 8 : 255 >= rt ? 9 : 279 >= rt ? 7 : 8;
            p(ot);
            var at, lt, ht = new(s ? Uint8Array : Array)(30);
            for (at = 0, lt = ht.length; at < lt; ++at) ht[at] = 5;
            p(ht);
            var ct = 8
        }).call(window);
        var n = window.Zlib;
        n.Deflate = n.Deflate, n.Deflate.compress = n.Deflate.compress, n.Inflate = n.Inflate, n.Inflate.BufferType = n.Inflate.BufferType, n.Inflate.prototype.decompress = n.Inflate.prototype.decompress, e.exports = n
    }), {}],
    26: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.default = void 0;
        var n, r, s, o, a, l, h, c, u, _, f, d, p, m, y, v, g, x, b, A, C, T, S, w = (function() {
                function t(t, e) {
                    for (var i = 0; i < e.length; i++) {
                        var n = e[i];
                        n.enumerable = n.enumerable || !1, n.configurable = !0, "value" in n && (n.writable = !0), Object.defineProperty(t, n.key, n)
                    }
                }
                return function(e, i, n) {
                    return i && t(e.prototype, i), n && t(e, n), e
                }
            })(),
            E = I(t("../../renderer/enums")),
            M = t("../value-types"),
            D = t("../vmath"),
            B = I(t("../vmath/mat4"));

        function I(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }

        function P(t, e, i, n) {
            i && Object.defineProperty(t, e, {
                enumerable: i.enumerable,
                configurable: i.configurable,
                writable: i.writable,
                value: i.initializer ? i.initializer.call(n) : void 0
            })
        }

        function R(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }

        function O(t, e) {
            if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
            return !e || "object" != typeof e && "function" != typeof e ? t : e
        }

        function L(t, e) {
            if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e);
            t.prototype = Object.create(e && e.prototype, {
                constructor: {
                    value: t,
                    enumerable: !1,
                    writable: !0,
                    configurable: !0
                }
            }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e)
        }

        function F(t, e, i, n, r) {
            var s = {};
            return Object.keys(n).forEach((function(t) {
                s[t] = n[t]
            })), s.enumerable = !!s.enumerable, s.configurable = !!s.configurable, ("value" in s || s.initializer) && (s.writable = !0), s = i.slice().reverse().reduce((function(i, n) {
                return n(t, e, i) || i
            }), s), r && void 0 !== s.initializer && (s.value = s.initializer ? s.initializer.call(r) : void 0, s.initializer = void 0), void 0 === s.initializer && (Object.defineProperty(t, e, s), s = null), s
        }
        var N = null;
        N = t("../../renderer/scene/light");
        var V = t("../renderer/index"),
            k = t("../platform/CCEnum"),
            G = t("../components/CCComponent"),
            U = t("../platform/CCClassDecorator"),
            z = U.ccclass,
            j = U.menu,
            W = U.inspector,
            H = U.property,
            X = U.executeInEditMode,
            Y = (B.default.create(), k({
                DIRECTIONAL: 0,
                POINT: 1,
                SPOT: 2,
                AMBIENT: 3
            })),
            q = k({
                NONE: 0,
                HARD: 2
            }),
            J = (n = z("cc.Light"), r = j("i18n:MAIN_MENU.component.renderers/Light"), s = W("packages://inspector/inspectors/comps/light.js"), o = H({
                type: Y
            }), a = H({
                type: q
            }), n(l = r(l = X(l = s((S = T = (function(t) {
                function e() {
                    R(this, e);
                    var i = O(this, t.call(this));
                    return P(i, "_type", c, i), P(i, "_color", u, i), P(i, "_intensity", _, i), P(i, "_range", f, i), P(i, "_spotAngle", d, i), P(i, "_spotExp", p, i), P(i, "_shadowType", m, i), P(i, "_shadowResolution", y, i), P(i, "_shadowDarkness", v, i), P(i, "_shadowMinDepth", g, i), P(i, "_shadowMaxDepth", x, i), P(i, "_shadowDepthScale", b, i), P(i, "_shadowFrustumSize", A, i), P(i, "_shadowBias", C, i), i._light = new N, i
                }
                return L(e, t), w(e, [{
                    key: "type",
                    get: function() {
                        return this._type
                    },
                    set: function(t) {
                        this._type = t;
                        var e = E.default.LIGHT_DIRECTIONAL;
                        t === Y.POINT ? e = E.default.LIGHT_POINT : t === Y.SPOT ? e = E.default.LIGHT_SPOT : t === Y.AMBIENT && (e = E.default.LIGHT_AMBIENT), this._light.setType(e)
                    }
                }, {
                    key: "color",
                    get: function() {
                        return this._color
                    },
                    set: function(t) {
                        this._color = t, this._light.setColor(t.r / 255, t.g / 255, t.b / 255)
                    }
                }, {
                    key: "intensity",
                    get: function() {
                        return this._intensity
                    },
                    set: function(t) {
                        this._intensity = t, this._light.setIntensity(t)
                    }
                }, {
                    key: "range",
                    get: function() {
                        return this._range
                    },
                    set: function(t) {
                        this._range = t, this._light.setRange(t)
                    }
                }, {
                    key: "spotAngle",
                    get: function() {
                        return this._spotAngle
                    },
                    set: function(t) {
                        this._spotAngle = t, this._light.setSpotAngle((0, D.toRadian)(t))
                    }
                }, {
                    key: "spotExp",
                    get: function() {
                        return this._spotExp
                    },
                    set: function(t) {
                        this._spotExp = t, this._light.setSpotExp(t)
                    }
                }, {
                    key: "shadowType",
                    get: function() {
                        return this._shadowType
                    },
                    set: function(t) {
                        this._shadowType = t;
                        var e = E.default.SHADOW_NONE;
                        t === q.HARD ? e = E.default.SHADOW_HARD : t === q.SOFT && (e = E.default.SHADOW_SOFT), this._light.setShadowType(e)
                    }
                }, {
                    key: "shadowResolution",
                    get: function() {
                        return this._shadowResolution
                    },
                    set: function(t) {
                        this._shadowResolution = t, this._light.setShadowResolution(t)
                    }
                }, {
                    key: "shadowDarkness",
                    get: function() {
                        return this._shadowDarkness
                    },
                    set: function(t) {
                        this._shadowDarkness = t, this._light.setShadowDarkness(t)
                    }
                }, {
                    key: "shadowMinDepth",
                    get: function() {
                        return this._shadowMinDepth
                    },
                    set: function(t) {
                        this._shadowMinDepth = t, this._light.setShadowMinDepth(t)
                    }
                }, {
                    key: "shadowMaxDepth",
                    get: function() {
                        return this._shadowMaxDepth
                    },
                    set: function(t) {
                        this._shadowMaxDepth = t, this._light.setShadowMaxDepth(t)
                    }
                }, {
                    key: "shadowDepthScale",
                    get: function() {
                        return this._shadowDepthScale
                    },
                    set: function(t) {
                        this._shadowDepthScale = t, this._light.setShadowDepthScale(t)
                    }
                }, {
                    key: "shadowFrustumSize",
                    get: function() {
                        return this._shadowFrustumSize
                    },
                    set: function(t) {
                        this._shadowFrustumSize = t, this._light.setShadowFrustumSize(t)
                    }
                }]), e.prototype.onLoad = function() {
                    this._light.setNode(this.node), this.type = this._type, this.color = this._color, this.intensity = this._intensity, this.range = this._range, this.spotAngle = this._spotAngle, this.spotExp = this._spotExp, this.shadowType = this._shadowType, this.shadowResolution = this._shadowResolution, this.shadowDarkness = this._shadowDarkness, this.shadowMaxDepth = this._shadowMaxDepth, this.shadowDepthScale = this._shadowDepthScale, this.shadowFrustumSize = this._shadowFrustumSize, this.shadowBias = this._shadowBias
                }, e.prototype.onEnable = function() {
                    V.scene.addLight(this._light)
                }, e.prototype.onDisable = function() {
                    V.scene.removeLight(this._light)
                }, e
            })(G), T.Type = Y, T.ShadowType = q, c = F((h = S).prototype, "_type", [H], {
                enumerable: !0,
                initializer: function() {
                    return Y.DIRECTIONAL
                }
            }), u = F(h.prototype, "_color", [H], {
                enumerable: !0,
                initializer: function() {
                    return M.Color.WHITE
                }
            }), _ = F(h.prototype, "_intensity", [H], {
                enumerable: !0,
                initializer: function() {
                    return 1
                }
            }), f = F(h.prototype, "_range", [H], {
                enumerable: !0,
                initializer: function() {
                    return 1e3
                }
            }), d = F(h.prototype, "_spotAngle", [H], {
                enumerable: !0,
                initializer: function() {
                    return 60
                }
            }), p = F(h.prototype, "_spotExp", [H], {
                enumerable: !0,
                initializer: function() {
                    return 1
                }
            }), m = F(h.prototype, "_shadowType", [H], {
                enumerable: !0,
                initializer: function() {
                    return q.NONE
                }
            }), y = F(h.prototype, "_shadowResolution", [H], {
                enumerable: !0,
                initializer: function() {
                    return 1024
                }
            }), v = F(h.prototype, "_shadowDarkness", [H], {
                enumerable: !0,
                initializer: function() {
                    return .5
                }
            }), g = F(h.prototype, "_shadowMinDepth", [H], {
                enumerable: !0,
                initializer: function() {
                    return 1
                }
            }), x = F(h.prototype, "_shadowMaxDepth", [H], {
                enumerable: !0,
                initializer: function() {
                    return 4096
                }
            }), b = F(h.prototype, "_shadowDepthScale", [H], {
                enumerable: !0,
                initializer: function() {
                    return 250
                }
            }), A = F(h.prototype, "_shadowFrustumSize", [H], {
                enumerable: !0,
                initializer: function() {
                    return 1024
                }
            }), C = F(h.prototype, "_shadowBias", [H], {
                enumerable: !0,
                initializer: function() {
                    return 5e-4
                }
            }), F(h.prototype, "type", [o], Object.getOwnPropertyDescriptor(h.prototype, "type"), h.prototype), F(h.prototype, "color", [H], Object.getOwnPropertyDescriptor(h.prototype, "color"), h.prototype), F(h.prototype, "intensity", [H], Object.getOwnPropertyDescriptor(h.prototype, "intensity"), h.prototype), F(h.prototype, "range", [H], Object.getOwnPropertyDescriptor(h.prototype, "range"), h.prototype), F(h.prototype, "spotAngle", [H], Object.getOwnPropertyDescriptor(h.prototype, "spotAngle"), h.prototype), F(h.prototype, "spotExp", [H], Object.getOwnPropertyDescriptor(h.prototype, "spotExp"), h.prototype), F(h.prototype, "shadowType", [a], Object.getOwnPropertyDescriptor(h.prototype, "shadowType"), h.prototype), F(h.prototype, "shadowResolution", [H], Object.getOwnPropertyDescriptor(h.prototype, "shadowResolution"), h.prototype), F(h.prototype, "shadowDarkness", [H], Object.getOwnPropertyDescriptor(h.prototype, "shadowDarkness"), h.prototype), F(h.prototype, "shadowMinDepth", [H], Object.getOwnPropertyDescriptor(h.prototype, "shadowMinDepth"), h.prototype), F(h.prototype, "shadowMaxDepth", [H], Object.getOwnPropertyDescriptor(h.prototype, "shadowMaxDepth"), h.prototype), F(h.prototype, "shadowDepthScale", [H], Object.getOwnPropertyDescriptor(h.prototype, "shadowDepthScale"), h.prototype), F(h.prototype, "shadowFrustumSize", [H], Object.getOwnPropertyDescriptor(h.prototype, "shadowFrustumSize"), h.prototype), l = h)) || l) || l) || l) || l);
        i.default = J, cc.Light = J, e.exports = i.default
    }), {
        "../../renderer/enums": 355,
        "../../renderer/scene/light": 381,
        "../components/CCComponent": 95,
        "../platform/CCClassDecorator": 199,
        "../platform/CCEnum": 200,
        "../renderer/index": 247,
        "../value-types": 315,
        "../vmath": 326,
        "../vmath/mat4": 330
    }],
    27: [(function(t, e, i) {
        "use strict";
        var n = cc.Class({
            name: "cc.Model",
            extends: cc.Asset,
            ctor: function() {
                this._rootNode = null
            },
            properties: {
                _nodes: {
                    default: []
                },
                _precomputeJointMatrix: !1,
                nodes: {
                    get: function() {
                        return this._nodes
                    }
                },
                rootNode: {
                    get: function() {
                        return this._rootNode
                    }
                },
                precomputeJointMatrix: {
                    get: function() {
                        return this._precomputeJointMatrix
                    }
                }
            },
            onLoad: function() {
                var t = this._nodes;
                this._rootNode = t[0];
                for (var e = 0; e < t.length; e++) {
                    var i = t[e];
                    i.position = cc.v3.apply(this, i.position), i.scale = cc.v3.apply(this, i.scale), i.quat = cc.quat.apply(this, i.quat), i.uniqueBindPose && (i.uniqueBindPose = cc.mat4.apply(this, i.uniqueBindPose));
                    var n = i.bindpose;
                    if (n)
                        for (var r in n) n[r] = cc.mat4.apply(this, n[r]);
                    var s = i.children;
                    if (s)
                        for (var o = 0; o < s.length; o++) s[o] = t[s[o]]
                }
            }
        });
        cc.Model = e.exports = n
    }), {}],
    28: [(function(t, e, i) {
        "use strict";
        var n = cc.vmath.quat,
            r = cc.quat(),
            s = cc.v3();
        cc.Rotate3DTo = cc.Class({
            name: "cc.Rotate3DTo",
            extends: cc.ActionInterval,
            ctor: function(t, e, i, n) {
                this._startQuat = cc.quat(), this._dstQuat = cc.quat(), void 0 !== e && this.initWithDuration(t, e, i, n)
            },
            initWithDuration: function(t, e, i, n) {
                if (cc.ActionInterval.prototype.initWithDuration.call(this, t)) {
                    var r = this._dstQuat;
                    return e instanceof cc.Quat ? r.set(e) : (e instanceof cc.Vec3 ? (i = e.y, n = e.z, e = e.x) : (i = i || 0, n = n || 0), cc.vmath.quat.fromEuler(r, e, i, n)), !0
                }
                return !1
            },
            clone: function() {
                var t = new cc.Rotate3DTo;
                return this._cloneDecoration(t), t.initWithDuration(this._duration, this._dstQuat), t
            },
            startWithTarget: function(t) {
                cc.ActionInterval.prototype.startWithTarget.call(this, t), this._startQuat.set(t.quat)
            },
            reverse: function() {
                cc.logID(1016)
            },
            update: function(t) {
                t = this._computeEaseTime(t), this.target && (n.slerp(r, this._startQuat, this._dstQuat, t), this.target.setRotation(r))
            }
        }), cc.rotate3DTo = function(t, e, i, n) {
            return new cc.Rotate3DTo(t, e, i, n)
        }, cc.Rotate3DBy = cc.Class({
            name: "cc.Rotate3DBy",
            extends: cc.ActionInterval,
            ctor: function(t, e, i, n) {
                this._angle = cc.v3(), this._quat = cc.quat(), this._lastDt = 0, void 0 !== e && this.initWithDuration(t, e, i, n)
            },
            initWithDuration: function(t, e, i, n) {
                return !!cc.ActionInterval.prototype.initWithDuration.call(this, t) && (e instanceof cc.Vec3 ? (i = e.y, n = e.z, e = e.x) : (i = i || 0, n = n || 0), cc.vmath.vec3.set(this._angle, e, i, n), !0)
            },
            clone: function() {
                var t = new cc.Rotate3DBy;
                return this._cloneDecoration(t), t.initWithDuration(this._duration, this._angle), t
            },
            startWithTarget: function(t) {
                cc.ActionInterval.prototype.startWithTarget.call(this, t), this._quat.set(t.quat), this._lastDt = 0
            },
            update: (function() {
                var t = Math.PI / 180;
                return function(e) {
                    if (e = this._computeEaseTime(e), this.target) {
                        var i = this._angle,
                            r = this._quat,
                            s = e - this._lastDt,
                            o = i.x,
                            a = i.y,
                            l = i.z;
                        o && n.rotateX(r, r, o * t * s), a && n.rotateY(r, r, a * t * s), l && n.rotateZ(r, r, l * t * s), this.target.setRotation(r), this._lastDt = e
                    }
                }
            })(),
            reverse: function() {
                var t = this._angle;
                s.x = -t.x, s.y = -t.y, s.z = -t.z;
                var e = new cc.Rotate3DBy(this._duration, s);
                return this._cloneDecoration(e), this._reverseEaseList(e), e
            }
        }), cc.rotate3DBy = function(t, e, i, n) {
            return new cc.Rotate3DBy(t, e, i, n)
        }
    }), {}],
    29: [(function(t, e, i) {
        "use strict";
        t("./polyfill-3d"), t("./primitive"), t("./CCModel"), t("./skeleton/CCSkeleton"), t("./skeleton/CCSkeletonAnimationClip"), t("./actions"), t("./skeleton/CCSkeletonAnimation"), t("./skeleton/CCSkinnedMeshRenderer"), t("./skeleton/skinned-mesh-renderer"), t("./CCLightComponent")
    }), {
        "./CCLightComponent": 26,
        "./CCModel": 27,
        "./actions": 28,
        "./polyfill-3d": 30,
        "./primitive": 35,
        "./skeleton/CCSkeleton": 44,
        "./skeleton/CCSkeletonAnimation": 45,
        "./skeleton/CCSkeletonAnimationClip": 46,
        "./skeleton/CCSkinnedMeshRenderer": 47,
        "./skeleton/skinned-mesh-renderer": 48
    }],
    30: [(function(t, e, i) {
        "use strict";
        var n = t("../vmath"),
            r = t("../CCNode"),
            s = r.EventType,
            o = r._LocalDirtyFlag,
            a = t("../renderer/render-flow"),
            l = Math.PI / 180,
            h = 1,
            c = 2;

        function u() {
            if (this._localMatDirty) {
                var t = this._matrix,
                    e = t.m;
                if (n.mat4.fromTRSArray(t, this._trs), this._skewX || this._skewY) {
                    var i = e[0],
                        r = e[1],
                        s = e[4],
                        o = e[5],
                        a = Math.tan(this._skewX * l),
                        h = Math.tan(this._skewY * l);
                    a === 1 / 0 && (a = 99999999), h === 1 / 0 && (h = 99999999), e[0] = i + s * h, e[1] = r + o * h, e[4] = s + i * a, e[5] = o + r * a
                }
                this._localMatDirty = 0, this._worldMatDirty = !0
            }
        }

        function _() {
            if (this._localMatDirty && this._updateLocalMatrix(), this._parent) {
                var t = this._parent._worldMatrix;
                n.mat4.mul(this._worldMatrix, t, this._matrix)
            } else n.mat4.copy(this._worldMatrix, this._matrix);
            this._worldMatDirty = !1
        }

        function f(t, e, i) {
            var n = void 0;
            void 0 === e ? (n = t.x, e = t.y, i = t.z || 0) : (n = t, i = i || 0);
            var r = this._trs;
            r[0] === n && r[1] === e && r[2] === i || (r[0] = n, r[1] = e, r[2] = i, this.setLocalDirty(o.POSITION), this._renderFlag |= a.FLAG_WORLD_TRANSFORM, this._eventMask & h && this.emit(s.POSITION_CHANGED))
        }
        var d = cc.Node.prototype,
            p = d._updateLocalMatrix,
            m = d._calculWorldMatrix,
            y = d._upgrade_1x_to_2x,
            v = d._mulMat;
        d.setPosition = f, d.setScale = function(t, e, i) {
            t && "number" != typeof t ? (e = t.y, i = void 0 === t.z ? 1 : t.z, t = t.x) : void 0 !== t && void 0 === e ? (e = t, i = t) : void 0 === i && (i = 1);
            var n = this._trs;
            n[7] === t && n[8] === e && n[9] === i || (n[7] = t, n[8] = e, n[9] = i, this.setLocalDirty(o.SCALE), this._renderFlag |= a.FLAG_TRANSFORM, this._eventMask & c && this.emit(s.SCALE_CHANGED))
        }, d._upgrade_1x_to_2x = function() {
            this._is3DNode && this._update3DFunction(), y.call(this)
        }, d._update3DFunction = function() {
            this._is3DNode ? (this._updateLocalMatrix = u, this._calculWorldMatrix = _, this._mulMat = n.mat4.mul) : (this._updateLocalMatrix = p, this._calculWorldMatrix = m, this._mulMat = v), this._renderComponent && this._renderComponent._on3DNodeChanged && this._renderComponent._on3DNodeChanged(), this._renderFlag |= a.FLAG_TRANSFORM, this._localMatDirty = o.ALL
        }, cc.js.getset(d, "position", d.getPosition, f, !1, !0), cc.js.getset(d, "is3DNode", (function() {
            return this._is3DNode
        }), (function(t) {
            this._is3DNode = t, this._update3DFunction()
        })), cc.js.getset(d, "scaleZ", (function() {
            return this._trs[9]
        }), (function(t) {
            this._trs[9] !== t && (this._trs[9] = t, this.setLocalDirty(o.SCALE), this._renderFlag |= a.FLAG_TRANSFORM, this._eventMask & c && this.emit(s.SCALE_CHANGED))
        })), cc.js.getset(d, "z", (function() {
            return this._trs[2]
        }), (function(t) {
            var e = this._trs;
            t !== e[2] && (e[2] = t, this.setLocalDirty(o.POSITION), this._renderFlag |= a.FLAG_WORLD_TRANSFORM, this._eventMask & h && this.emit(s.POSITION_CHANGED))
        })), cc.js.getset(d, "eulerAngles", (function() {
            return n.trs.toEuler(this._eulerAngles, this._trs)
        }), (function(t) {
            n.trs.fromEuler(this._trs, t), this.setLocalDirty(o.ROTATION), this._renderFlag |= a.FLAG_TRANSFORM
        })), cc.js.getset(d, "quat", (function() {
            var t = this._trs;
            return cc.quat(t[3], t[4], t[5], t[6])
        }), d.setRotation)
    }), {
        "../CCNode": 52,
        "../renderer/render-flow": 248,
        "../vmath": 326
    }],
    31: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.default = function() {
            var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 1,
                e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 1,
                i = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 1,
                y = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : {},
                v = void 0 !== y.widthSegments ? y.widthSegments : 1,
                g = void 0 !== y.heightSegments ? y.heightSegments : 1,
                x = void 0 !== y.lengthSegments ? y.lengthSegments : 1,
                b = void 0 !== y.invWinding && y.invWinding,
                A = .5 * t,
                C = .5 * e,
                T = .5 * i,
                S = [n.vec3.set(h, -A, -C, T), n.vec3.set(c, A, -C, T), n.vec3.set(u, A, C, T), n.vec3.set(_, -A, C, T), n.vec3.set(f, A, -C, -T), n.vec3.set(d, -A, -C, -T), n.vec3.set(p, -A, C, -T), n.vec3.set(m, A, C, -T)],
                w = [
                    [2, 3, 1],
                    [4, 5, 7],
                    [7, 6, 2],
                    [1, 0, 4],
                    [1, 4, 2],
                    [5, 0, 6]
                ],
                E = [
                    [0, 0, 1],
                    [0, 0, -1],
                    [0, 1, 0],
                    [0, -1, 0],
                    [1, 0, 0],
                    [-1, 0, 0]
                ],
                M = [],
                D = [],
                B = [],
                I = [],
                P = n.vec3.create(-A, -C, -T),
                R = n.vec3.create(A, C, T),
                O = Math.sqrt(A * A + C * C + T * T);

            function L(t, e, i) {
                var r = void 0,
                    h = void 0,
                    c = void 0,
                    u = void 0,
                    _ = M.length / 3,
                    f = w[t],
                    d = E[t];
                for (u = 0; u <= i; u++)
                    for (c = 0; c <= e; c++)
                        if (r = c / e, h = u / i, n.vec3.lerp(s, S[f[0]], S[f[1]], r), n.vec3.lerp(o, S[f[0]], S[f[2]], h), n.vec3.sub(a, o, S[f[0]]), n.vec3.add(l, s, a), M.push(l.x, l.y, l.z), D.push(d[0], d[1], d[2]), B.push(r, h), c < e && u < i) {
                            var p = e + 1,
                                m = c + u * p,
                                y = c + (u + 1) * p,
                                v = c + 1 + (u + 1) * p,
                                g = c + 1 + u * p;
                            b ? (I.push(_ + m, _ + y, _ + g), I.push(_ + g, _ + y, _ + v)) : (I.push(_ + m, _ + g, _ + y), I.push(_ + y, _ + g, _ + v))
                        }
            }
            return L(0, v, g), L(4, x, g), L(1, v, g), L(5, x, g), L(3, v, x), L(2, v, x), new r.default(M, D, B, I, P, R, O)
        };
        var n = t("../../vmath"),
            r = (function(t) {
                return t && t.__esModule ? t : {
                    default: t
                }
            })(t("./vertex-data"));
        var s = n.vec3.create(0, 0, 0),
            o = n.vec3.create(0, 0, 0),
            a = n.vec3.create(0, 0, 0),
            l = n.vec3.create(0, 0, 0),
            h = n.vec3.create(0, 0, 0),
            c = n.vec3.create(0, 0, 0),
            u = n.vec3.create(0, 0, 0),
            _ = n.vec3.create(0, 0, 0),
            f = n.vec3.create(0, 0, 0),
            d = n.vec3.create(0, 0, 0),
            p = n.vec3.create(0, 0, 0),
            m = n.vec3.create(0, 0, 0);
        e.exports = i.default
    }), {
        "../../vmath": 326,
        "./vertex-data": 42
    }],
    32: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.default = function() {
            var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : .5,
                e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : .5,
                i = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 2,
                a = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : {},
                l = i - t - e,
                h = a.sides || 32,
                c = a.heightSegments || 32,
                u = e / i,
                _ = l / i,
                f = t / i,
                d = Math.floor(c * u),
                p = Math.floor(c * f),
                m = Math.floor(c * _),
                y = l + e - i / 2,
                v = e - i / 2,
                g = e - i / 2,
                x = a.arc || 2 * Math.PI,
                b = [],
                A = [],
                C = [],
                T = [],
                S = Math.max(t, e),
                w = n.vec3.create(-S, -i / 2, -S),
                E = n.vec3.create(S, i / 2, S),
                M = i / 2,
                D = 0,
                B = [];
            return (function() {
                for (var t = 0; t <= d; ++t)
                    for (var i = t * Math.PI / d / 2, n = Math.sin(i), r = -Math.cos(i), s = 0; s <= h; ++s) {
                        var o = 2 * s * Math.PI / h - Math.PI / 2,
                            a = Math.sin(o),
                            l = Math.cos(o),
                            u = a * n,
                            _ = r,
                            f = l * n,
                            p = s / h,
                            m = t / c;
                        if (b.push(u * e, _ * e + g, f * e), A.push(u, _, f), C.push(p, m), t < d && s < h) {
                            var y = h + 1,
                                v = y * t + s,
                                x = y * (t + 1) + s,
                                S = y * (t + 1) + s + 1,
                                w = y * t + s + 1;
                            T.push(v, w, x), T.push(w, S, x)
                        }++D
                    }
            })(), (function() {
                for (var i = (t - e) / l, r = 0; r <= m; r++) {
                    for (var a = [], c = r / m, f = c * (t - e) + e, d = 0; d <= h; ++d) {
                        var p = d / h,
                            y = c * _ + u,
                            g = p * x - x / 4,
                            S = Math.sin(g),
                            w = Math.cos(g);
                        b.push(f * S), b.push(c * l + v), b.push(f * w), n.vec3.normalize(s, n.vec3.set(o, S, -i, w)), A.push(s.x), A.push(s.y), A.push(s.z), C.push(p, y), a.push(D), ++D
                    }
                    B.push(a)
                }
                for (var E = 0; E < m; ++E)
                    for (var M = 0; M < h; ++M) {
                        var I = B[E][M],
                            P = B[E + 1][M],
                            R = B[E + 1][M + 1],
                            O = B[E][M + 1];
                        T.push(I), T.push(O), T.push(P), T.push(O), T.push(R), T.push(P)
                    }
            })(), (function() {
                for (var e = 0; e <= p; ++e)
                    for (var i = e * Math.PI / p / 2 + Math.PI / 2, n = Math.sin(i), r = -Math.cos(i), s = 0; s <= h; ++s) {
                        var o = 2 * s * Math.PI / h - Math.PI / 2,
                            a = Math.sin(o),
                            l = Math.cos(o),
                            u = a * n,
                            _ = r,
                            d = l * n,
                            v = s / h,
                            g = e / c + (1 - f);
                        if (b.push(u * t, _ * t + y, d * t), A.push(u, _, d), C.push(v, g), e < p && s < h) {
                            var x = h + 1,
                                S = x * e + s + B[m][h] + 1,
                                w = x * (e + 1) + s + B[m][h] + 1,
                                E = x * (e + 1) + s + 1 + B[m][h] + 1,
                                M = x * e + s + 1 + B[m][h] + 1;
                            T.push(S, M, w), T.push(M, E, w)
                        }
                    }
            })(), new r.default(b, A, C, T, w, E, M)
        };
        var n = t("../../vmath"),
            r = (function(t) {
                return t && t.__esModule ? t : {
                    default: t
                }
            })(t("./vertex-data"));
        var s = n.vec3.create(0, 0, 0),
            o = n.vec3.create(0, 0, 0);
        e.exports = i.default
    }), {
        "../../vmath": 326,
        "./vertex-data": 42
    }],
    33: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.default = function() {
            var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : .5,
                e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 1,
                i = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {};
            return (0, n.default)(0, t, e, i)
        };
        var n = (function(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        })(t("./cylinder"));
        e.exports = i.default
    }), {
        "./cylinder": 34
    }],
    34: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.default = function() {
            var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : .5,
                e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : .5,
                i = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 2,
                a = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : {},
                l = .5 * i,
                h = a.radialSegments || 32,
                c = a.heightSegments || 1,
                u = void 0 === a.capped || a.capped,
                _ = a.arc || 2 * Math.PI,
                f = 0;
            u || (t > 0 && f++, e > 0 && f++);
            var d = (h + 1) * (c + 1);
            u && (d += (h + 1) * f + h * f);
            var p = h * c * 2 * 3;
            u && (p += h * f * 3);
            var m = new Array(p),
                y = new Array(3 * d),
                v = new Array(3 * d),
                g = new Array(2 * d),
                x = Math.max(t, e),
                b = n.vec3.create(-x, -l, -x),
                A = n.vec3.create(x, l, x),
                C = Math.sqrt(x * x + l * l),
                T = 0,
                S = 0;
            return (function() {
                for (var r = [], a = t - e, u = a * a / i * Math.sign(a), f = 0; f <= c; f++) {
                    for (var d = [], p = f / c, x = p * a + e, b = 0; b <= h; ++b) {
                        var A = b / h,
                            C = A * _,
                            w = Math.sin(C),
                            E = Math.cos(C);
                        y[3 * T] = x * w, y[3 * T + 1] = p * i - l, y[3 * T + 2] = x * E, n.vec3.normalize(s, n.vec3.set(o, w, -u, E)), v[3 * T] = s.x, v[3 * T + 1] = s.y, v[3 * T + 2] = s.z, g[2 * T] = 2 * (1 - A) % 1, g[2 * T + 1] = p, d.push(T), ++T
                    }
                    r.push(d)
                }
                for (var M = 0; M < c; ++M)
                    for (var D = 0; D < h; ++D) {
                        var B = r[M][D],
                            I = r[M + 1][D],
                            P = r[M + 1][D + 1],
                            R = r[M][D + 1];
                        m[S] = B, m[++S] = R, m[++S] = I, m[++S] = R, m[++S] = P, m[++S] = I, ++S
                    }
            })(), u && (e > 0 && w(!1), t > 0 && w(!0)), new r.default(y, v, g, m, b, A, C);

            function w(i) {
                var n, r, s = i ? t : e,
                    o = i ? 1 : -1;
                n = T;
                for (var a = 1; a <= h; ++a) y[3 * T] = 0, y[3 * T + 1] = l * o, y[3 * T + 2] = 0, v[3 * T] = 0, v[3 * T + 1] = o, v[3 * T + 2] = 0, g[2 * T] = .5, g[2 * T + 1] = .5, ++T;
                r = T;
                for (var c = 0; c <= h; ++c) {
                    var u = c / h * _,
                        f = Math.cos(u),
                        d = Math.sin(u);
                    y[3 * T] = s * d, y[3 * T + 1] = l * o, y[3 * T + 2] = s * f, v[3 * T] = 0, v[3 * T + 1] = o, v[3 * T + 2] = 0, g[2 * T] = .5 - .5 * d * o, g[2 * T + 1] = .5 + .5 * f, ++T
                }
                for (var p = 0; p < h; ++p) {
                    var x = n + p,
                        b = r + p;
                    i ? (m[S] = b + 1, m[++S] = x, m[++S] = b, ++S) : (m[S] = x, m[++S] = b + 1, m[++S] = b, ++S)
                }
            }
        };
        var n = t("../../vmath"),
            r = (function(t) {
                return t && t.__esModule ? t : {
                    default: t
                }
            })(t("./vertex-data"));
        var s = n.vec3.create(0, 0, 0),
            o = n.vec3.create(0, 0, 0);
        e.exports = i.default
    }), {
        "../../vmath": 326,
        "./vertex-data": 42
    }],
    35: [(function(t, e, i) {
        "use strict";
        var n = d(t("./utils")),
            r = d(t("./box")),
            s = d(t("./cone")),
            o = d(t("./cylinder")),
            a = d(t("./plane")),
            l = d(t("./quad")),
            h = d(t("./sphere")),
            c = d(t("./torus")),
            u = d(t("./capsule")),
            _ = t("./polyhedron"),
            f = d(t("./vertex-data"));

        function d(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }
        cc.primitive = Object.assign({
            box: r.default,
            cone: s.default,
            cylinder: o.default,
            plane: a.default,
            quad: l.default,
            sphere: h.default,
            torus: c.default,
            capsule: u.default,
            polyhedron: _.polyhedron,
            PolyhedronType: _.PolyhedronType,
            VertexData: f.default
        }, n.default)
    }), {
        "./box": 31,
        "./capsule": 32,
        "./cone": 33,
        "./cylinder": 34,
        "./plane": 36,
        "./polyhedron": 37,
        "./quad": 38,
        "./sphere": 39,
        "./torus": 40,
        "./utils": 41,
        "./vertex-data": 42
    }],
    36: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.default = function() {
            var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 10,
                e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 10,
                i = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {},
                _ = void 0 !== i.widthSegments ? i.widthSegments : 10,
                f = void 0 !== i.lengthSegments ? i.lengthSegments : 10,
                d = .5 * t,
                p = .5 * e,
                m = [],
                y = [],
                v = [],
                g = [],
                x = n.vec3.create(-d, 0, -p),
                b = n.vec3.create(d, 0, p),
                A = Math.sqrt(t * t + e * e);
            n.vec3.set(h, -d, 0, p), n.vec3.set(c, d, 0, p), n.vec3.set(u, -d, 0, -p);
            for (var C = 0; C <= f; C++)
                for (var T = 0; T <= _; T++) {
                    var S = T / _,
                        w = C / f;
                    if (n.vec3.lerp(s, h, c, S), n.vec3.lerp(o, h, u, w), n.vec3.sub(a, o, h), n.vec3.add(l, s, a), m.push(l.x, l.y, l.z), y.push(0, 1, 0), v.push(S, w), T < _ && C < f) {
                        var E = _ + 1,
                            M = T + C * E,
                            D = T + (C + 1) * E,
                            B = T + 1 + (C + 1) * E,
                            I = T + 1 + C * E;
                        g.push(M, I, D), g.push(I, B, D)
                    }
                }
            return new r.default(m, y, v, g, x, b, A)
        };
        var n = t("../../vmath"),
            r = (function(t) {
                return t && t.__esModule ? t : {
                    default: t
                }
            })(t("./vertex-data"));
        var s = n.vec3.create(0, 0, 0),
            o = n.vec3.create(0, 0, 0),
            a = n.vec3.create(0, 0, 0),
            l = n.vec3.create(0, 0, 0),
            h = n.vec3.create(0, 0, 0),
            c = n.vec3.create(0, 0, 0),
            u = n.vec3.create(0, 0, 0);
        e.exports = i.default
    }), {
        "../../vmath": 326,
        "./vertex-data": 42
    }],
    37: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.polyhedron = i.PolyhedronType = void 0;
        var n = t("./utils"),
            r = t("../../vmath"),
            s = (function(t) {
                return t && t.__esModule ? t : {
                    default: t
                }
            })(t("./vertex-data"));
        i.PolyhedronType = cc.Enum({
            Tetrahedron: 0,
            Octahedron: 1,
            Dodecahedron: 2,
            Icosahedron: 3,
            Rhombicuboctahedron: 4,
            TriangularPrism: 5,
            PentagonalPrism: 6,
            HexagonalPrism: 7,
            SquarePyramid: 8,
            PentagonalPyramid: 9,
            TriangularDipyramid: 10,
            PentagonalDipyramid: 11,
            ElongatedSquareDipyramid: 12,
            ElongatedPentagonalDipyramid: 13,
            ElongatedPentagonalCupola: 14
        });
        var o = [];
        o[0] = {
            vertex: [
                [0, 0, 1.732051],
                [1.632993, 0, -.5773503],
                [-.8164966, 1.414214, -.5773503],
                [-.8164966, -1.414214, -.5773503]
            ],
            face: [
                [0, 1, 2],
                [0, 2, 3],
                [0, 3, 1],
                [1, 3, 2]
            ]
        }, o[1] = {
            vertex: [
                [0, 0, 1.414214],
                [1.414214, 0, 0],
                [0, 1.414214, 0],
                [-1.414214, 0, 0],
                [0, -1.414214, 0],
                [0, 0, -1.414214]
            ],
            face: [
                [0, 1, 2],
                [0, 2, 3],
                [0, 3, 4],
                [0, 4, 1],
                [1, 4, 5],
                [1, 5, 2],
                [2, 5, 3],
                [3, 5, 4]
            ]
        }, o[2] = {
            vertex: [
                [0, 0, 1.070466],
                [.7136442, 0, .7978784],
                [-.3568221, .618034, .7978784],
                [-.3568221, -.618034, .7978784],
                [.7978784, .618034, .3568221],
                [.7978784, -.618034, .3568221],
                [-.9341724, .381966, .3568221],
                [.1362939, 1, .3568221],
                [.1362939, -1, .3568221],
                [-.9341724, -.381966, .3568221],
                [.9341724, .381966, -.3568221],
                [.9341724, -.381966, -.3568221],
                [-.7978784, .618034, -.3568221],
                [-.1362939, 1, -.3568221],
                [-.1362939, -1, -.3568221],
                [-.7978784, -.618034, -.3568221],
                [.3568221, .618034, -.7978784],
                [.3568221, -.618034, -.7978784],
                [-.7136442, 0, -.7978784],
                [0, 0, -1.070466]
            ],
            face: [
                [0, 1, 4, 7, 2],
                [0, 2, 6, 9, 3],
                [0, 3, 8, 5, 1],
                [1, 5, 11, 10, 4],
                [2, 7, 13, 12, 6],
                [3, 9, 15, 14, 8],
                [4, 10, 16, 13, 7],
                [5, 8, 14, 17, 11],
                [6, 12, 18, 15, 9],
                [10, 11, 17, 19, 16],
                [12, 13, 16, 19, 18],
                [14, 15, 18, 19, 17]
            ]
        }, o[3] = {
            vertex: [
                [0, 0, 1.175571],
                [1.051462, 0, .5257311],
                [.3249197, 1, .5257311],
                [-.8506508, .618034, .5257311],
                [-.8506508, -.618034, .5257311],
                [.3249197, -1, .5257311],
                [.8506508, .618034, -.5257311],
                [.8506508, -.618034, -.5257311],
                [-.3249197, 1, -.5257311],
                [-1.051462, 0, -.5257311],
                [-.3249197, -1, -.5257311],
                [0, 0, -1.175571]
            ],
            face: [
                [0, 1, 2],
                [0, 2, 3],
                [0, 3, 4],
                [0, 4, 5],
                [0, 5, 1],
                [1, 5, 7],
                [1, 7, 6],
                [1, 6, 2],
                [2, 6, 8],
                [2, 8, 3],
                [3, 8, 9],
                [3, 9, 4],
                [4, 9, 10],
                [4, 10, 5],
                [5, 10, 7],
                [6, 7, 11],
                [6, 11, 8],
                [7, 10, 11],
                [8, 11, 9],
                [9, 11, 10]
            ]
        }, o[4] = {
            vertex: [
                [0, 0, 1.070722],
                [.7148135, 0, .7971752],
                [-.104682, .7071068, .7971752],
                [-.6841528, .2071068, .7971752],
                [-.104682, -.7071068, .7971752],
                [.6101315, .7071068, .5236279],
                [1.04156, .2071068, .1367736],
                [.6101315, -.7071068, .5236279],
                [-.3574067, 1, .1367736],
                [-.7888348, -.5, .5236279],
                [-.9368776, .5, .1367736],
                [-.3574067, -1, .1367736],
                [.3574067, 1, -.1367736],
                [.9368776, -.5, -.1367736],
                [.7888348, .5, -.5236279],
                [.3574067, -1, -.1367736],
                [-.6101315, .7071068, -.5236279],
                [-1.04156, -.2071068, -.1367736],
                [-.6101315, -.7071068, -.5236279],
                [.104682, .7071068, -.7971752],
                [.6841528, -.2071068, -.7971752],
                [.104682, -.7071068, -.7971752],
                [-.7148135, 0, -.7971752],
                [0, 0, -1.070722]
            ],
            face: [
                [0, 2, 3],
                [1, 6, 5],
                [4, 9, 11],
                [7, 15, 13],
                [8, 16, 10],
                [12, 14, 19],
                [17, 22, 18],
                [20, 21, 23],
                [0, 1, 5, 2],
                [0, 3, 9, 4],
                [0, 4, 7, 1],
                [1, 7, 13, 6],
                [2, 5, 12, 8],
                [2, 8, 10, 3],
                [3, 10, 17, 9],
                [4, 11, 15, 7],
                [5, 6, 14, 12],
                [6, 13, 20, 14],
                [8, 12, 19, 16],
                [9, 17, 18, 11],
                [10, 16, 22, 17],
                [11, 18, 21, 15],
                [13, 15, 21, 20],
                [14, 20, 23, 19],
                [16, 19, 23, 22],
                [18, 22, 23, 21]
            ]
        }, o[5] = {
            vertex: [
                [0, 0, 1.322876],
                [1.309307, 0, .1889822],
                [-.9819805, .8660254, .1889822],
                [.1636634, -1.299038, .1889822],
                [.3273268, .8660254, -.9449112],
                [-.8183171, -.4330127, -.9449112]
            ],
            face: [
                [0, 3, 1],
                [2, 4, 5],
                [0, 1, 4, 2],
                [0, 2, 5, 3],
                [1, 3, 5, 4]
            ]
        }, o[6] = {
            vertex: [
                [0, 0, 1.159953],
                [1.013464, 0, .5642542],
                [-.3501431, .9510565, .5642542],
                [-.7715208, -.6571639, .5642542],
                [.6633206, .9510565, -.03144481],
                [.8682979, -.6571639, -.3996071],
                [-1.121664, .2938926, -.03144481],
                [-.2348831, -1.063314, -.3996071],
                [.5181548, .2938926, -.9953061],
                [-.5850262, -.112257, -.9953061]
            ],
            face: [
                [0, 1, 4, 2],
                [0, 2, 6, 3],
                [1, 5, 8, 4],
                [3, 6, 9, 7],
                [5, 7, 9, 8],
                [0, 3, 7, 5, 1],
                [2, 4, 8, 9, 6]
            ]
        }, o[7] = {
            vertex: [
                [0, 0, 1.118034],
                [.8944272, 0, .6708204],
                [-.2236068, .8660254, .6708204],
                [-.7826238, -.4330127, .6708204],
                [.6708204, .8660254, .2236068],
                [1.006231, -.4330127, -.2236068],
                [-1.006231, .4330127, .2236068],
                [-.6708204, -.8660254, -.2236068],
                [.7826238, .4330127, -.6708204],
                [.2236068, -.8660254, -.6708204],
                [-.8944272, 0, -.6708204],
                [0, 0, -1.118034]
            ],
            face: [
                [0, 1, 4, 2],
                [0, 2, 6, 3],
                [1, 5, 8, 4],
                [3, 6, 10, 7],
                [5, 9, 11, 8],
                [7, 10, 11, 9],
                [0, 3, 7, 9, 5, 1],
                [2, 4, 8, 11, 10, 6]
            ]
        }, o[8] = {
            vertex: [
                [-.729665, .670121, .319155],
                [-.655235, -.29213, -.754096],
                [-.093922, -.607123, .537818],
                [.702196, .595691, .485187],
                [.776626, -.36656, -.588064]
            ],
            face: [
                [1, 4, 2],
                [0, 1, 2],
                [3, 0, 2],
                [4, 3, 2],
                [4, 1, 0, 3]
            ]
        }, o[9] = {
            vertex: [
                [-.868849, -.100041, .61257],
                [-.329458, .976099, .28078],
                [-.26629, -.013796, -.477654],
                [-.13392, -1.034115, .229829],
                [.738834, .707117, -.307018],
                [.859683, -.535264, -.338508]
            ],
            face: [
                [3, 0, 2],
                [5, 3, 2],
                [4, 5, 2],
                [1, 4, 2],
                [0, 1, 2],
                [0, 3, 5, 4, 1]
            ]
        }, o[10] = {
            vertex: [
                [-.610389, .243975, .531213],
                [-.187812, -.48795, -.664016],
                [-.187812, .9759, -.664016],
                [.187812, -.9759, .664016],
                [.798201, .243975, .132803]
            ],
            face: [
                [1, 3, 0],
                [3, 4, 0],
                [3, 1, 4],
                [0, 2, 1],
                [0, 4, 2],
                [2, 4, 1]
            ]
        }, o[11] = {
            vertex: [
                [-1.028778, .392027, -.048786],
                [-.640503, -.646161, .621837],
                [-.125162, -.395663, -.540059],
                [.004683, .888447, -.651988],
                [.125161, .395663, .540059],
                [.632925, -.791376, .433102],
                [1.031672, .157063, -.354165]
            ],
            face: [
                [3, 2, 0],
                [2, 1, 0],
                [2, 5, 1],
                [0, 4, 3],
                [0, 1, 4],
                [4, 1, 5],
                [2, 3, 6],
                [3, 4, 6],
                [5, 2, 6],
                [4, 5, 6]
            ]
        }, o[12] = {
            vertex: [
                [-.669867, .334933, -.529576],
                [-.669867, .334933, .529577],
                [-.4043, 1.212901, 0],
                [-.334933, -.669867, -.529576],
                [-.334933, -.669867, .529577],
                [.334933, .669867, -.529576],
                [.334933, .669867, .529577],
                [.4043, -1.212901, 0],
                [.669867, -.334933, -.529576],
                [.669867, -.334933, .529577]
            ],
            face: [
                [8, 9, 7],
                [6, 5, 2],
                [3, 8, 7],
                [5, 0, 2],
                [4, 3, 7],
                [0, 1, 2],
                [9, 4, 7],
                [1, 6, 2],
                [9, 8, 5, 6],
                [8, 3, 0, 5],
                [3, 4, 1, 0],
                [4, 9, 6, 1]
            ]
        }, o[13] = {
            vertex: [
                [-.931836, .219976, -.264632],
                [-.636706, .318353, .692816],
                [-.613483, -.735083, -.264632],
                [-.326545, .979634, 0],
                [-.318353, -.636706, .692816],
                [-.159176, .477529, -.856368],
                [.159176, -.477529, -.856368],
                [.318353, .636706, .692816],
                [.326545, -.979634, 0],
                [.613482, .735082, -.264632],
                [.636706, -.318353, .692816],
                [.931835, -.219977, -.264632]
            ],
            face: [
                [11, 10, 8],
                [7, 9, 3],
                [6, 11, 8],
                [9, 5, 3],
                [2, 6, 8],
                [5, 0, 3],
                [4, 2, 8],
                [0, 1, 3],
                [10, 4, 8],
                [1, 7, 3],
                [10, 11, 9, 7],
                [11, 6, 5, 9],
                [6, 2, 0, 5],
                [2, 4, 1, 0],
                [4, 10, 7, 1]
            ]
        }, o[14] = {
            vertex: [
                [-.93465, .300459, -.271185],
                [-.838689, -.260219, -.516017],
                [-.711319, .717591, .128359],
                [-.710334, -.156922, .080946],
                [-.599799, .556003, -.725148],
                [-.503838, -.004675, -.969981],
                [-.487004, .26021, .48049],
                [-.460089, -.750282, -.512622],
                [-.376468, .973135, -.325605],
                [-.331735, -.646985, .084342],
                [-.254001, .831847, .530001],
                [-.125239, -.494738, -.966586],
                [.029622, .027949, .730817],
                [.056536, -.982543, -.262295],
                [.08085, 1.087391, .076037],
                [.125583, -.532729, .485984],
                [.262625, .599586, .780328],
                [.391387, -.726999, -.716259],
                [.513854, -.868287, .139347],
                [.597475, .85513, .326364],
                [.641224, .109523, .783723],
                [.737185, -.451155, .538891],
                [.848705, -.612742, -.314616],
                [.976075, .365067, .32976],
                [1.072036, -.19561, .084927]
            ],
            face: [
                [15, 18, 21],
                [12, 20, 16],
                [6, 10, 2],
                [3, 0, 1],
                [9, 7, 13],
                [2, 8, 4, 0],
                [0, 4, 5, 1],
                [1, 5, 11, 7],
                [7, 11, 17, 13],
                [13, 17, 22, 18],
                [18, 22, 24, 21],
                [21, 24, 23, 20],
                [20, 23, 19, 16],
                [16, 19, 14, 10],
                [10, 14, 8, 2],
                [15, 9, 13, 18],
                [12, 15, 21, 20],
                [6, 12, 16, 10],
                [3, 6, 2, 0],
                [9, 3, 1, 7],
                [9, 15, 12, 6, 3],
                [22, 17, 11, 5, 4, 8, 14, 19, 23, 24]
            ]
        };
        i.polyhedron = function(t) {
            var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 1,
                i = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {};
            t = t && (t < 0 || t >= o.length) ? 0 : t || 0;
            for (var a = i.sizeX || e, l = i.sizeY || e, h = i.sizeZ || e, c = o[t], u = c.face.length, _ = [], f = [], d = [], p = [], m = r.vec3.create(1 / 0, 1 / 0, 1 / 0), y = r.vec3.create(-1 / 0, -1 / 0, -1 / 0), v = 0; v < c.vertex.length; v++) {
                var g = c.vertex[v][0] * a,
                    x = c.vertex[v][1] * l,
                    b = c.vertex[v][2] * h;
                m.x = Math.min(m.x, g), m.y = Math.min(m.y, x), m.z = Math.min(m.z, b), y.x = Math.max(y.x, g), y.y = Math.max(y.y, x), y.z = Math.max(y.z, b), _.push(g, x, b), p.push(0, 0)
            }
            for (var A = 0; A < u; A++)
                for (var C = 0; C < c.face[A].length - 2; C++) f.push(c.face[A][0], c.face[A][C + 2], c.face[A][C + 1]);
            (0, n.calcNormals)(_, f, d);
            var T = Math.sqrt(Math.pow(y.x - m.x, 2), Math.pow(y.y - m.y, 2), Math.pow(y.z - m.z, 2));
            return new s.default(_, d, p, f, m, y, T)
        }
    }), {
        "../../vmath": 326,
        "./utils": 41,
        "./vertex-data": 42
    }],
    38: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.default = function() {
            return new r.default(s, o, a, l, h, c, u)
        };
        var n = t("../../vmath"),
            r = (function(t) {
                return t && t.__esModule ? t : {
                    default: t
                }
            })(t("./vertex-data"));
        var s = [-.5, -.5, 0, -.5, .5, 0, .5, .5, 0, .5, -.5, 0],
            o = [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1],
            a = [0, 0, 0, 1, 1, 1, 1, 0],
            l = [0, 3, 1, 3, 2, 1],
            h = n.vec3.create(-.5, -.5, 0),
            c = n.vec3.create(.5, .5, 0),
            u = Math.sqrt(.5);
        e.exports = i.default
    }), {
        "../../vmath": 326,
        "./vertex-data": 42
    }],
    39: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.default = function() {
            for (var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : .5, e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, i = void 0 !== e.segments ? e.segments : 32, s = [], o = [], a = [], l = [], h = n.vec3.create(-t, -t, -t), c = n.vec3.create(t, t, t), u = t, _ = 0; _ <= i; ++_)
                for (var f = _ * Math.PI / i, d = Math.sin(f), p = -Math.cos(f), m = 0; m <= i; ++m) {
                    var y = 2 * m * Math.PI / i - Math.PI / 2,
                        v = Math.sin(y) * d,
                        g = p,
                        x = Math.cos(y) * d,
                        b = m / i,
                        A = _ / i;
                    if (s.push(v * t, g * t, x * t), o.push(v, g, x), a.push(b, A), _ < i && m < i) {
                        var C = i + 1,
                            T = C * _ + m,
                            S = C * (_ + 1) + m,
                            w = C * (_ + 1) + m + 1,
                            E = C * _ + m + 1;
                        l.push(T, E, S), l.push(E, w, S)
                    }
                }
            return new r.default(s, o, a, l, h, c, u)
        };
        var n = t("../../vmath"),
            r = (function(t) {
                return t && t.__esModule ? t : {
                    default: t
                }
            })(t("./vertex-data"));
        e.exports = i.default
    }), {
        "../../vmath": 326,
        "./vertex-data": 42
    }],
    40: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.default = function() {
            for (var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : .4, e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : .1, i = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}, s = i.radialSegments || 32, o = i.tubularSegments || 32, a = i.arc || 2 * Math.PI, l = [], h = [], c = [], u = [], _ = n.vec3.create(-t - e, -e, -t - e), f = n.vec3.create(t + e, e, t + e), d = t + e, p = 0; p <= s; p++)
                for (var m = 0; m <= o; m++) {
                    var y = m / o,
                        v = p / s,
                        g = y * a,
                        x = v * Math.PI * 2,
                        b = (t + e * Math.cos(x)) * Math.sin(g),
                        A = e * Math.sin(x),
                        C = (t + e * Math.cos(x)) * Math.cos(g),
                        T = Math.sin(g) * Math.cos(x),
                        S = Math.sin(x),
                        w = Math.cos(g) * Math.cos(x);
                    if (l.push(b, A, C), h.push(T, S, w), c.push(y, v), m < o && p < s) {
                        var E = o + 1,
                            M = E * p + m,
                            D = E * (p + 1) + m,
                            B = E * (p + 1) + m + 1,
                            I = E * p + m + 1;
                        u.push(M, I, D), u.push(I, B, D)
                    }
                }
            return new r.default(l, h, c, u, _, f, d)
        };
        var n = t("../../vmath"),
            r = (function(t) {
                return t && t.__esModule ? t : {
                    default: t
                }
            })(t("./vertex-data"));
        e.exports = i.default
    }), {
        "../../vmath": 326,
        "./vertex-data": 42
    }],
    41: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.wireframe = function(t) {
            for (var e = [
                    [0, 1],
                    [1, 2],
                    [2, 0]
                ], i = [], n = {}, r = 0; r < t.length; r += 3)
                for (var s = 0; s < 3; ++s) {
                    var o = t[r + e[s][0]],
                        a = t[r + e[s][1]],
                        l = o > a ? a << 16 | o : o << 16 | a;
                    void 0 === n[l] && (n[l] = 0, i.push(o, a))
                }
            return i
        }, i.invWinding = function(t) {
            for (var e = [], i = 0; i < t.length; i += 3) e.push(t[i], t[i + 2], t[i + 1]);
            return e
        }, i.toWavefrontOBJ = function(t) {
            for (var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 1, i = t.positions, n = t.uvs, r = t.normals, s = t.indices, o = function(t) {
                    return s[t] + 1 + "/" + (s[t] + 1) + "/" + (s[t] + 1)
                }, a = "", l = 0; l < i.length; l += 3) a += "v " + i[l] * e + " " + i[l + 1] * e + " " + i[l + 2] * e + "\n";
            for (var h = 0; h < n.length; h += 2) a += "vt " + n[h] + " " + n[h + 1] + "\n";
            for (var c = 0; c < r.length; c += 3) a += "vn " + r[c] + " " + r[c + 1] + " " + r[c + 2] + "\n";
            for (var u = 0; u < s.length; u += 3) a += "f " + o(u) + " " + o(u + 1) + " " + o(u + 2) + "\n";
            return a
        }, i.normals = function(t, e) {
            for (var i = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 1, n = new Array(2 * t.length), r = 0; r < t.length / 3; ++r) {
                var s = 3 * r,
                    o = 6 * r;
                n[o + 0] = t[s + 0], n[o + 1] = t[s + 1], n[o + 2] = t[s + 2], n[o + 3] = t[s + 0] + e[s + 0] * i, n[o + 4] = t[s + 1] + e[s + 1] * i, n[o + 5] = t[s + 2] + e[s + 2] * i
            }
            return n
        }, i.calcNormals = function(t, e, i) {
            for (var s = 0, o = (i = i || new Array(t.length)).length; s < o; s++) i[s] = 0;
            for (var a = void 0, l = void 0, h = void 0, c = cc.v3(), u = cc.v3(), _ = cc.v3(), f = cc.v3(), d = cc.v3(), p = 0, m = e.length; p < m; p += 3) a = 3 * e[p + 0], l = 3 * e[p + 1], h = 3 * e[p + 2], r(c, t, a), r(u, t, l), r(_, t, h), n.vec3.sub(f, _, u), n.vec3.sub(d, c, u), n.vec3.cross(f, f, d), i[a] += f.x, i[a + 1] += f.y, i[a + 2] += f.z, i[l] += f.x, i[l + 1] += f.y, i[l + 2] += f.z, i[h] += f.x, i[h + 1] += f.y, i[h + 2] += f.z;
            for (var y = cc.v3(), v = 0, g = i.length; v < g; v += 3) y.x = i[v], y.y = i[v + 1], y.z = i[v + 2], y.normalizeSelf(), i[v] = y.x, i[v + 1] = y.y, i[v + 2] = y.z;
            return i
        };
        var n = t("../../vmath");

        function r(t, e, i) {
            t.x = e[i], t.y = e[i + 1], t.z = e[i + 2]
        }
    }), {
        "../../vmath": 326
    }],
    42: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.default = function(t, e, i, n, r, s, o) {
            this.positions = t, this.normals = e, this.uvs = i, this.indices = n, this.minPos = r, this.maxPos = s, this.boundingRadius = o
        }, e.exports = i.default
    }), {}],
    43: [(function(t, e, i) {
        "use strict";
        var n = t("../../../animation/animation-curves"),
            r = n.DynamicAnimCurve,
            s = n.quickFindIndex,
            o = cc.Class({
                name: "cc.JointMatrixCurve",
                extends: r,
                _findFrameIndex: s,
                sample: function(t, e) {
                    var i = this.ratios,
                        n = this._findFrameIndex(i, e);
                    n < -1 && (n = ~n - 1);
                    for (var r = this.pairs, s = 0; s < r.length; s++) {
                        var o = r[s];
                        o.target._jointMatrix = o.values[n]
                    }
                }
            });
        e.exports = o
    }), {
        "../../../animation/animation-curves": 11
    }],
    44: [(function(t, e, i) {
        "use strict";
        var n = cc.Class({
            name: "cc.Skeleton",
            extends: cc.Asset,
            ctor: function() {
                this._bindposes = [], this._uniqueBindPoses = [], this._jointPaths = []
            },
            properties: {
                _model: cc.Model,
                _jointIndices: [],
                _skinIndex: -1,
                jointPaths: {
                    get: function() {
                        return this._jointPaths
                    }
                },
                bindposes: {
                    get: function() {
                        return this._bindposes
                    }
                },
                uniqueBindPoses: {
                    get: function() {
                        return this._uniqueBindPoses
                    }
                },
                model: {
                    get: function() {
                        return this._model
                    }
                }
            },
            onLoad: function() {
                for (var t = this._model.nodes, e = this._jointIndices, i = this._jointPaths, n = this._bindposes, r = this._uniqueBindPoses, s = 0; s < e.length; s++) {
                    var o = t[e[s]];
                    i[s] = o.path, o.uniqueBindPose ? n[s] = r[s] = o.uniqueBindPose : n[s] = o.bindpose[this._skinIndex]
                }
            }
        });
        cc.Skeleton = e.exports = n
    }), {}],
    45: [(function(t, e, i) {
        "use strict";
        var n = t("../../components/CCAnimation"),
            r = t("../CCModel"),
            s = t("./CCSkeletonAnimationClip"),
            o = cc.Class({
                name: "cc.SkeletonAnimation",
                extends: n,
                editor: !1,
                properties: {
                    _model: {
                        default: null,
                        type: r
                    },
                    _defaultClip: {
                        override: !0,
                        default: null,
                        type: s
                    },
                    _clips: {
                        override: !0,
                        default: [],
                        type: [s],
                        visible: !0
                    },
                    defaultClip: {
                        override: !0,
                        get: function() {
                            return this._defaultClip
                        },
                        set: function(t) {
                            this._defaultClip = t
                        },
                        type: s
                    },
                    model: {
                        get: function() {
                            return this._model
                        },
                        set: function(t) {
                            this._model = t, this._updateClipModel()
                        },
                        type: r
                    }
                },
                __preload: function() {
                    this._updateClipModel()
                },
                _updateClipModel: function() {
                    this._defaultClip && (this._defaultClip._model = this._model);
                    for (var t = this._clips, e = 0; e < t.length; e++) t[e]._model = this._model
                },
                addClip: function(t, e) {
                    return t._model = this._model, n.prototype.addClip.call(this, t, e)
                },
                searchClips: !1
            });
        cc.SkeletonAnimation = e.exports = o
    }), {
        "../../components/CCAnimation": 90,
        "../CCModel": 27,
        "./CCSkeletonAnimationClip": 46,
        "fire-path": void 0
    }],
    46: [(function(t, e, i) {
        "use strict";
        var n = (function(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        })(t("../../vmath/mat4"));
        var r = t("../../../animation/animation-clip"),
            s = t("./CCJointMatrixCurve");

        function o(t) {
            var e = new Float32Array(16);
            return e.set(t.m), e
        }
        var a = cc.Class({
            name: "cc.SkeletonAnimationClip",
            extends: r,
            properties: {
                _nativeAsset: {
                    override: !0,
                    get: function() {
                        return this._buffer
                    },
                    set: function(t) {
                        var e = ArrayBuffer.isView(t) ? t.buffer : t;
                        this._buffer = new Float32Array(e || t, 0, e.byteLength / 4)
                    }
                },
                description: {
                    default: null,
                    type: Object
                },
                curveData: {
                    visible: !1,
                    override: !0,
                    get: function() {
                        return this._curveData || {}
                    },
                    set: function() {}
                }
            },
            statics: {
                preventDeferredLoadDependents: !0
            },
            _init: function() {
                return this._curveData ? this._curveData : (this._curveData = {}, this._generateCommonCurve(), this._model.precomputeJointMatrix && this._generateJointMatrixCurve(), this._curveData)
            },
            _generateCommonCurve: function() {
                var t = this._buffer,
                    e = this.description,
                    i = 0;

                function n() {
                    return t[i++]
                }
                this._curveData.paths || (this._curveData.paths = {});
                var r = this._curveData.paths;
                for (var s in e) {
                    var o = e[s],
                        a = {};
                    for (var l in r[s] = {
                            props: a
                        }, o) {
                        var h = [],
                            c = o[l].frameCount;
                        i = o[l].offset;
                        for (var u = 0; u < c; u++) {
                            var _ = n(),
                                f = void 0;
                            "position" === l || "scale" === l ? f = cc.v3(n(), n(), n()) : "quat" === l && (f = cc.quat(n(), n(), n(), n())), h.push({
                                frame: _,
                                value: f
                            })
                        }
                        a[l] = h
                    }
                }
            },
            _generateJointMatrixCurve: function() {
                var t = this._model.rootNode,
                    e = this._curveData.paths,
                    i = {
                        ratios: [],
                        jointMatrixMap: {}
                    },
                    r = i.jointMatrixMap;

                function s(i, a, l) {
                    var h = void 0,
                        c = e[i.path];
                    if (i !== t && c) {
                        var u = c.props;
                        for (var _ in u)
                            for (var f = u[_], d = 0; d < f.length; d++) {
                                var p = f[d];
                                if (Math.abs(p.frame - a) < 1e-4) {
                                    i[_].set(p.value);
                                    break
                                }
                                if (p.frame > a) {
                                    var m = f[d - 1],
                                        y = (a - m.frame) / (p.frame - m.frame);
                                    m.value.lerp(p.value, y, i[_]);
                                    break
                                }
                            }
                        h = n.default.create(), n.default.fromRTS(h, i.quat, i.position, i.scale), l && n.default.mul(h, l, h), u._jointMatrix || (u._jointMatrix = []);
                        var v = void 0;
                        i.uniqueBindPose && (v = n.default.create(), n.default.mul(v, h, i.uniqueBindPose)), r[i.path] || (r[i.path] = []), v ? r[i.path].push(o(v)) : r[i.path].push(h)
                    }
                    var g = i.children;
                    for (var x in g) {
                        s(g[x], a, h)
                    }
                }
                for (var a = 0, l = this.duration, h = 1 / this.sample; a < l;) i.ratios.push(a / l), s(t, a), a += h;
                this._curveData = i
            },
            _createJointMatrixCurve: function(t, e) {
                var i = new s;
                i.ratios = this.curveData.ratios, i.pairs = [];
                var n = this.curveData.jointMatrixMap;
                for (var r in n) {
                    var o = cc.find(r, e);
                    o && i.pairs.push({
                        target: o,
                        values: n[r]
                    })
                }
                return [i]
            },
            createCurves: function(t, e) {
                return this._model ? (this._init(), this._model.precomputeJointMatrix ? this._createJointMatrixCurve(t, e) : r.prototype.createCurves.call(this, t, e)) : (cc.warn("Skeleton Animation Clip [" + this.name + "] Can not find model"), [])
            }
        });
        cc.SkeletonAnimationClip = e.exports = a
    }), {
        "../../../animation/animation-clip": 10,
        "../../vmath/mat4": 330,
        "./CCJointMatrixCurve": 43
    }],
    47: [(function(t, e, i) {
        "use strict";
        var n = t("./CCSkeleton"),
            r = t("../../mesh/CCMeshRenderer"),
            s = t("../../renderer/render-flow"),
            o = t("../../../renderer/enums"),
            a = cc.vmath.mat4,
            l = a.create(),
            h = a.create(),
            c = cc.Class({
                name: "cc.SkinnedMeshRenderer",
                extends: r,
                editor: !1,
                ctor: function() {
                    this._jointsData = this._jointsFloat32Data = null, this._jointsTexture = null, this._joints = [], this._dummyNode = new cc.Node, this._jointsTextureOptions = null, this._usingRGBA8Texture = !1
                },
                properties: {
                    _skeleton: n,
                    _rootBone: cc.Node,
                    skeleton: {
                        get: function() {
                            return this._skeleton
                        },
                        set: function(t) {
                            this._skeleton = t, this._init(), this._activateMaterial(!0)
                        },
                        type: n
                    },
                    rootBone: {
                        get: function() {
                            return this._rootBone
                        },
                        set: function(t) {
                            this._rootBone = t, this._init()
                        },
                        type: cc.Node
                    },
                    enableAutoBatch: {
                        get: function() {
                            return !1
                        },
                        visible: !1,
                        override: !0
                    }
                },
                _activateMaterial: function(t) {
                    this._jointsData ? this._super(t) : this.disableRender()
                },
                __preload: function() {
                    this._resetAssembler(), this._init()
                },
                _init: function() {
                    this._model = this._skeleton && this._skeleton.model, this._calFunc = null, this._initJoints(), this._initJointsTexture(), this._initCalcFunc(), this._updateRenderNode()
                },
                _calcWorldMatrixToRoot: function(t) {
                    var e = t._worldMatrixToRoot;
                    if (!e) {
                        t._worldMatrixToRoot = e = cc.mat4(), t.getLocalMatrix(e);
                        var i = t.parent;
                        i !== this.rootBone && (i._worldMatrixToRoot || this._calcWorldMatrixToRoot(i), a.mul(e, i._worldMatrixToRoot, e))
                    }
                },
                _initJoints: function() {
                    var t = this._joints;
                    if (t.length = 0, this.skeleton && this.rootBone) {
                        for (var e = this._useJointMatrix(), i = this.skeleton.jointPaths, n = this.rootBone, r = 0; r < i.length; r++) {
                            var o = cc.find(i[r], n);
                            o || cc.warn("Can not find joint in root bone [%s] with path [%s]", n.name, i[r]), e && (o._renderFlag &= ~s.FLAG_CHILDREN, this._calcWorldMatrixToRoot(o)), t.push(o)
                        }
                        if (e)
                            for (var h = this.skeleton.uniqueBindPoses, c = 0; c < i.length; c++) {
                                var u = t[c];
                                h[c] ? (a.mul(l, u._worldMatrixToRoot, h[c]), u._jointMatrix = a.array([], l)) : u._jointMatrix = u._worldMatrixToRoot
                            }
                    }
                },
                _initJointsTexture: function() {
                    if (this._skeleton) {
                        var t = this._joints.length,
                            e = this._customProperties,
                            i = !1;
                        if (t <= cc.sys.getMaxJointMatrixSize() && (i = !0, this._jointsData = this._jointsFloat32Data = new Float32Array(16 * t), e.setProperty("cc_jointMatrices", this._jointsFloat32Data, o.PARAM_FLOAT4, !0), e.define("CC_USE_JOINTS_TEXTRUE", !1)), !i) {
                            var n = !!cc.sys.glExtension("OES_texture_float"),
                                r = void 0;
                            r = t > 256 ? 64 : t > 64 ? 32 : t > 16 ? 16 : 8, this._jointsData = this._jointsFloat32Data = new Float32Array(r * r * 4);
                            var s = cc.Texture2D.PixelFormat.RGBA32F,
                                a = r,
                                l = r;
                            n || (this._jointsData = new Uint8Array(this._jointsFloat32Data.buffer), s = cc.Texture2D.PixelFormat.RGBA8888, a *= 4, this._usingRGBA8Texture = !0, cc.warn("SkinnedMeshRenderer [" + this.node.name + "] has too many joints [" + t + "] and device do not support float32 texture, fallback to use RGBA8888 texture, which is much slower."));
                            var h = this._jointsTexture || new cc.Texture2D,
                                c = cc.Texture2D.Filter.NEAREST;
                            h.setFilters(c, c), h.initWithData(this._jointsData, s, a, l), this._jointsTexture = h, this._jointsTextureOptions = {
                                format: s,
                                width: h.width,
                                height: h.height,
                                images: []
                            }, e.setProperty("cc_jointsTexture", h.getImpl(), o.PARAM_TEXTURE_2D), e.setProperty("cc_jointsTextureSize", new Float32Array([a, l]), o.PARAM_FLOAT2), e.define("CC_JOINTS_TEXTURE_FLOAT32", n), e.define("CC_USE_JOINTS_TEXTRUE", !0)
                        }
                        e.define("CC_USE_SKINNING", !0)
                    }
                },
                _setJointsDataWithArray: function(t, e) {
                    this._jointsFloat32Data.set(e, 16 * t)
                },
                _setJointsDataWithMatrix: function(t, e) {
                    this._jointsFloat32Data.set(e.m, 16 * t)
                },
                _commitJointsData: function() {
                    this._jointsTexture && (this._jointsTextureOptions.images[0] = this._jointsData, this._jointsTexture.update(this._jointsTextureOptions))
                },
                _useJointMatrix: function() {
                    return this._model && this._model.precomputeJointMatrix
                },
                _updateRenderNode: function() {
                    this._useJointMatrix() || this._usingRGBA8Texture ? this._assembler.setRenderNode(this.rootBone) : this._assembler.setRenderNode(this._dummyNode)
                },
                _initCalcFunc: function() {
                    this._useJointMatrix() ? this._calFunc = this._calJointMatrix : this._usingRGBA8Texture ? this._calFunc = this._calRGBA8WorldMatrix : this._calFunc = this._calWorldMatrix
                },
                _calJointMatrix: function() {
                    for (var t = this._joints, e = this.skeleton.bindposes, i = this.skeleton.uniqueBindPoses, n = 0; n < t.length; ++n) {
                        var r = t[n]._jointMatrix;
                        i[n] ? this._setJointsDataWithArray(n, r) : (a.multiply(l, r, e[n]), this._setJointsDataWithMatrix(n, l))
                    }
                },
                _calRGBA8WorldMatrix: function() {
                    var t = this._joints,
                        e = this.skeleton.bindposes;
                    this.rootBone._updateWorldMatrix();
                    for (var i = this.rootBone._worldMatrix, n = a.invert(h, i), r = 0; r < t.length; ++r) {
                        var s = t[r];
                        s._updateWorldMatrix(), a.multiply(l, n, s._worldMatrix), a.multiply(l, l, e[r]), this._setJointsDataWithMatrix(r, l)
                    }
                },
                _calWorldMatrix: function() {
                    for (var t = this._joints, e = this.skeleton.bindposes, i = 0; i < t.length; ++i) {
                        var n = t[i];
                        n._updateWorldMatrix(), a.multiply(l, n._worldMatrix, e[i]), this._setJointsDataWithMatrix(i, l)
                    }
                },
                calcJointMatrix: function() {
                    this.skeleton && this.rootBone && (this._calFunc.call(this), this._commitJointsData())
                }
            });
        cc.SkinnedMeshRenderer = e.exports = c
    }), {
        "../../../renderer/enums": 355,
        "../../mesh/CCMeshRenderer": 166,
        "../../renderer/render-flow": 248,
        "./CCSkeleton": 44
    }],
    48: [(function(t, e, i) {
        "use strict";

        function n(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }

        function r(t, e) {
            if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
            return !e || "object" != typeof e && "function" != typeof e ? t : e
        }

        function s(t, e) {
            if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e);
            t.prototype = Object.create(e && e.prototype, {
                constructor: {
                    value: t,
                    enumerable: !1,
                    writable: !0,
                    configurable: !0
                }
            }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e)
        }
        i.__esModule = !0;
        var o = t("./CCSkinnedMeshRenderer"),
            a = t("../../mesh/mesh-renderer"),
            l = (t("../../renderer/render-flow"), (function(t) {
                function e() {
                    return n(this, e), r(this, t.apply(this, arguments))
                }
                return s(e, t), e.prototype.fillBuffers = function(e, i) {
                    e.calcJointMatrix(), t.prototype.fillBuffers.call(this, e, i)
                }, e
            })(a));
        i.default = l, cc.Assembler.register(o, l), e.exports = i.default
    }), {
        "../../mesh/mesh-renderer": 169,
        "../../renderer/render-flow": 248,
        "./CCSkinnedMeshRenderer": 47
    }],
    49: [(function(t, e, i) {
        "use strict";
        var n = t("./platform/utils"),
            r = (t("../../DebugInfos"), "https://github.com/cocos-creator/engine/blob/master/EngineErrorMap.md"),
            s = void 0;
        cc.log = cc.warn = cc.error = cc.assert = console.log.bind ? console.log.bind(console) : console.log;

        function o(t) {
            return function() {
                var e = arguments[0],
                    i = t + " " + e + ", please go to " + r + "#" + e + " to see details.";
                if (1 === arguments.length) return i;
                if (2 === arguments.length) return i + " Arguments: " + arguments[1];
                var n = cc.js.shiftArguments.apply(null, arguments);
                return i + " Arguments: " + n.join(", ")
            }
        }
        cc._throw = function(t) {
            n.callInNextTick((function() {
                throw t
            }))
        };
        var a = o("Log");
        cc.logID = function() {
            cc.log(a.apply(null, arguments))
        };
        var l = o("Warning");
        cc.warnID = function() {
            cc.warn(l.apply(null, arguments))
        };
        var h = o("Error");
        cc.errorID = function() {
            cc.error(h.apply(null, arguments))
        };
        var c = o("Assert");
        cc.assertID = function(t) {
            t || cc.assert(!1, c.apply(null, cc.js.shiftArguments.apply(null, arguments)))
        };
        var u = cc.Enum({
            NONE: 0,
            INFO: 1,
            WARN: 2,
            ERROR: 3,
            INFO_FOR_WEB_PAGE: 4,
            WARN_FOR_WEB_PAGE: 5,
            ERROR_FOR_WEB_PAGE: 6
        });
        e.exports = cc.debug = {
            DebugMode: u,
            _resetDebugSetting: function(t) {
                if (cc.log = cc.warn = cc.error = cc.assert = function() {}, t !== u.NONE) {
                    if (t > u.ERROR) {
                        var e = function(t) {
                            if (cc.game.canvas) {
                                if (!s) {
                                    var e = document.createElement("Div");
                                    e.setAttribute("id", "logInfoDiv"), e.setAttribute("width", "200"), e.setAttribute("height", cc.game.canvas.height);
                                    var i = e.style;
                                    i.zIndex = "99999", i.position = "absolute", i.top = i.left = "0", (s = document.createElement("textarea")).setAttribute("rows", "20"), s.setAttribute("cols", "30"), s.setAttribute("disabled", "true");
                                    var n = s.style;
                                    n.backgroundColor = "transparent", n.borderBottom = "1px solid #cccccc", n.borderTopWidth = n.borderLeftWidth = n.borderRightWidth = "0px", n.borderTopStyle = n.borderLeftStyle = n.borderRightStyle = "none", n.padding = "0px", n.margin = 0, e.appendChild(s), cc.game.canvas.parentNode.appendChild(e)
                                }
                                s.value = s.value + t + "\r\n", s.scrollTop = s.scrollHeight
                            }
                        };
                        cc.error = function() {
                            e("ERROR :  " + cc.js.formatStr.apply(null, arguments))
                        }, cc.assert = function(t, i) {
                            !t && i && (i = cc.js.formatStr.apply(null, cc.js.shiftArguments.apply(null, arguments)), e("ASSERT: " + i))
                        }, t !== u.ERROR_FOR_WEB_PAGE && (cc.warn = function() {
                            e("WARN :  " + cc.js.formatStr.apply(null, arguments))
                        }), t === u.INFO_FOR_WEB_PAGE && (cc.log = function() {
                            e(cc.js.formatStr.apply(null, arguments))
                        })
                    } else console && console.log.apply && (console.error || (console.error = console.log), console.warn || (console.warn = console.log), console.error.bind ? cc.error = console.error.bind(console) : cc.error = function() {
                        return console.error.apply(console, arguments)
                    }, cc.assert = function(t, e) {
                        if (!t) throw e && (e = cc.js.formatStr.apply(null, cc.js.shiftArguments.apply(null, arguments))), new Error(e)
                    });
                    t !== u.ERROR && (console.warn.bind ? cc.warn = console.warn.bind(console) : cc.warn = function() {
                        return console.warn.apply(console, arguments)
                    }), t === u.INFO && (console.log.bind ? cc.log = console.log.bind(console) : cc.log = function() {
                        return console.log.apply(console, arguments)
                    })
                }
            },
            getError: o("ERROR"),
            isDisplayStats: function() {
                return !!cc.profiler && cc.profiler.isShowingStats()
            },
            setDisplayStats: function(t) {
                cc.profiler && (t ? cc.profiler.showStats() : cc.profiler.hideStats(), cc.game.config.showFPS = !!t)
            }
        }
    }), {
        "../../DebugInfos": void 0,
        "./platform/utils": 222
    }],
    50: [(function(t, e, i) {
        "use strict";
        var n = t("./event/event-target"),
            r = t("./load-pipeline/auto-release-utils"),
            s = t("./component-scheduler"),
            o = t("./node-activator"),
            a = t("./platform/CCObject"),
            l = t("./CCGame"),
            h = t("./renderer"),
            c = t("./event-manager"),
            u = t("./CCScheduler");
        cc.Director = function() {
            n.call(this), this._paused = !1, this._purgeDirectorInNextLoop = !1, this._winSizeInPoints = null, this._loadingScene = "", this._scene = null, this._totalFrames = 0, this._lastUpdate = 0, this._deltaTime = 0, this._startTime = 0, this._scheduler = null, this._compScheduler = null, this._nodeActivator = null, this._actionManager = null;
            var t = this;
            l.on(l.EVENT_SHOW, (function() {
                t._lastUpdate = performance.now()
            })), l.once(l.EVENT_ENGINE_INITED, this.init, this)
        }, cc.Director.prototype = {
            constructor: cc.Director,
            init: function() {
                return this._totalFrames = 0, this._lastUpdate = performance.now(), this._startTime = this._lastUpdate, this._paused = !1, this._purgeDirectorInNextLoop = !1, this._winSizeInPoints = cc.size(0, 0), this._scheduler = new u, cc.ActionManager ? (this._actionManager = new cc.ActionManager, this._scheduler.scheduleUpdate(this._actionManager, u.PRIORITY_SYSTEM, !1)) : this._actionManager = null, this.sharedInit(), !0
            },
            sharedInit: function() {
                this._compScheduler = new s, this._nodeActivator = new o, c && c.setEnabled(!0), cc.AnimationManager ? (this._animationManager = new cc.AnimationManager, this._scheduler.scheduleUpdate(this._animationManager, u.PRIORITY_SYSTEM, !1)) : this._animationManager = null, cc.CollisionManager ? (this._collisionManager = new cc.CollisionManager, this._scheduler.scheduleUpdate(this._collisionManager, u.PRIORITY_SYSTEM, !1)) : this._collisionManager = null, cc.PhysicsManager ? (this._physicsManager = new cc.PhysicsManager, this._scheduler.scheduleUpdate(this._physicsManager, u.PRIORITY_SYSTEM, !1)) : this._physicsManager = null, cc._widgetManager && cc._widgetManager.init(this), cc.loader.init(this)
            },
            calculateDeltaTime: function(t) {
                t || (t = performance.now()), this._deltaTime = t > this._lastUpdate ? (t - this._lastUpdate) / 1e3 : 0, this._lastUpdate = t
            },
            convertToGL: function(t) {
                var e = l.container,
                    i = cc.view,
                    n = e.getBoundingClientRect(),
                    r = n.left + window.pageXOffset - e.clientLeft,
                    s = n.top + window.pageYOffset - e.clientTop,
                    o = i._devicePixelRatio * (t.x - r),
                    a = i._devicePixelRatio * (s + n.height - t.y);
                return i._isRotated ? cc.v2(i._viewportRect.width - a, o) : cc.v2(o, a)
            },
            convertToUI: function(t) {
                var e = l.container,
                    i = cc.view,
                    n = e.getBoundingClientRect(),
                    r = n.left + window.pageXOffset - e.clientLeft,
                    s = n.top + window.pageYOffset - e.clientTop,
                    o = cc.v2(0, 0);
                return i._isRotated ? (o.x = r + t.y / i._devicePixelRatio, o.y = s + n.height - (i._viewportRect.width - t.x) / i._devicePixelRatio) : (o.x = r + t.x * i._devicePixelRatio, o.y = s + n.height - t.y * i._devicePixelRatio), o
            },
            end: function() {
                this._purgeDirectorInNextLoop = !0
            },
            getWinSize: function() {
                return cc.size(cc.winSize)
            },
            getWinSizeInPixels: function() {
                return cc.size(cc.winSize)
            },
            pause: function() {
                this._paused || (this._paused = !0)
            },
            purgeCachedData: function() {
                cc.loader.releaseAll()
            },
            purgeDirector: function() {
                this._scheduler.unscheduleAll(), this._compScheduler.unscheduleAll(), this._nodeActivator.reset(), c && c.setEnabled(!1), cc.isValid(this._scene) && this._scene.destroy(), this._scene = null, cc.renderer.clear(), cc.AssetLibrary.resetBuiltins(), cc.game.pause(), cc.loader.releaseAll()
            },
            reset: function() {
                this.purgeDirector(), c && c.setEnabled(!0), this._actionManager && this._scheduler.scheduleUpdate(this._actionManager, cc.Scheduler.PRIORITY_SYSTEM, !1), this._animationManager && this._scheduler.scheduleUpdate(this._animationManager, cc.Scheduler.PRIORITY_SYSTEM, !1), this._collisionManager && this._scheduler.scheduleUpdate(this._collisionManager, cc.Scheduler.PRIORITY_SYSTEM, !1), this._physicsManager && this._scheduler.scheduleUpdate(this._physicsManager, cc.Scheduler.PRIORITY_SYSTEM, !1), cc.game.resume()
            },
            runSceneImmediate: function(t, e, i) {
                cc.assertID(t instanceof cc.Scene, 1216), t._load();
                for (var n = Object.keys(l._persistRootNodes).map((function(t) {
                        return l._persistRootNodes[t]
                    })), s = 0; s < n.length; s++) {
                    var o = n[s],
                        h = t.getChildByUuid(o.uuid);
                    if (h) {
                        var c = h.getSiblingIndex();
                        h._destroyImmediate(), t.insertChild(o, c)
                    } else o.parent = t
                }
                var u = this._scene,
                    _ = u && u.autoReleaseAssets && u.dependAssets;
                r.autoRelease(_, t.dependAssets, n), cc.isValid(u) && u.destroy(), this._scene = null, a._deferredDestroy(), e && e(), this.emit(cc.Director.EVENT_BEFORE_SCENE_LAUNCH, t), this._scene = t, t._activate(), cc.game.resume(), i && i(null, t), this.emit(cc.Director.EVENT_AFTER_SCENE_LAUNCH, t)
            },
            runScene: function(t, e, i) {
                cc.assertID(t, 1205), cc.assertID(t instanceof cc.Scene, 1216), t._load(), this.once(cc.Director.EVENT_AFTER_UPDATE, (function() {
                    this.runSceneImmediate(t, e, i)
                }), this)
            },
            _getSceneUuid: function(t) {
                var e = l._sceneInfos;
                if ("string" == typeof t) {
                    t.endsWith(".fire") || (t += ".fire"), "/" === t[0] || t.startsWith("db://") || (t = "/" + t);
                    for (var i = 0; i < e.length; i++) {
                        var n = e[i];
                        if (n.url.endsWith(t)) return n
                    }
                } else if ("number" == typeof t) {
                    if (0 <= t && t < e.length) return e[t];
                    cc.errorID(1206, t)
                } else cc.errorID(1207, t);
                return null
            },
            loadScene: function(t, e, i) {
                if (this._loadingScene) return cc.warnID(1208, t, this._loadingScene), !1;
                var n = this._getSceneUuid(t);
                if (n) {
                    var r = n.uuid;
                    return this.emit(cc.Director.EVENT_BEFORE_SCENE_LOADING, t), this._loadingScene = t, this._loadSceneByUuid(r, e, i), !0
                }
                return cc.errorID(1209, t), !1
            },
            preloadScene: function(t, e, i) {
                void 0 === i && (i = e, e = null);
                var n = this._getSceneUuid(t);
                if (n) this.emit(cc.Director.EVENT_BEFORE_SCENE_LOADING, t), cc.loader.load({
                    uuid: n.uuid,
                    type: "uuid"
                }, e, (function(e, n) {
                    e && cc.errorID(1210, t, e.message), i && i(e, n)
                }));
                else {
                    var r = 'Can not preload the scene "' + t + '" because it is not in the build settings.';
                    i(new Error(r)), cc.error("preloadScene: " + r)
                }
            },
            _loadSceneByUuid: function(t, e, i, n) {
                console.time("LoadScene " + t), cc.AssetLibrary.loadAsset(t, (function(n, r) {
                    console.timeEnd("LoadScene " + t);
                    var s = cc.director;
                    if (s._loadingScene = "", n) n = "Failed to load scene: " + n, cc.error(n);
                    else {
                        if (r instanceof cc.SceneAsset) {
                            var o = r.scene;
                            return o._id = r._uuid, o._name = r._name, void s.runSceneImmediate(o, i, e)
                        }
                        n = "The asset " + t + " is not a scene", cc.error(n)
                    }
                    e && e(n)
                }))
            },
            resume: function() {
                this._paused && (this._lastUpdate = performance.now(), this._lastUpdate || cc.logID(1200), this._paused = !1, this._deltaTime = 0)
            },
            setDepthTest: function(t) {
                cc.Camera.main && (cc.Camera.main.depth = !!t)
            },
            setClearColor: function(t) {
                cc.Camera.main && (cc.Camera.main.backgroundColor = t)
            },
            getRunningScene: function() {
                return this._scene
            },
            getScene: function() {
                return this._scene
            },
            getAnimationInterval: function() {
                return 1e3 / l.getFrameRate()
            },
            setAnimationInterval: function(t) {
                l.setFrameRate(Math.round(1e3 / t))
            },
            getDeltaTime: function() {
                return this._deltaTime
            },
            getTotalTime: function() {
                return performance.now() - this._startTime
            },
            getTotalFrames: function() {
                return this._totalFrames
            },
            isPaused: function() {
                return this._paused
            },
            getScheduler: function() {
                return this._scheduler
            },
            setScheduler: function(t) {
                this._scheduler !== t && (this._scheduler = t)
            },
            getActionManager: function() {
                return this._actionManager
            },
            setActionManager: function(t) {
                this._actionManager !== t && (this._actionManager && this._scheduler.unscheduleUpdate(this._actionManager), this._actionManager = t, this._scheduler.scheduleUpdate(this._actionManager, cc.Scheduler.PRIORITY_SYSTEM, !1))
            },
            getAnimationManager: function() {
                return this._animationManager
            },
            getCollisionManager: function() {
                return this._collisionManager
            },
            getPhysicsManager: function() {
                return this._physicsManager
            },
            startAnimation: function() {
                cc.game.resume()
            },
            stopAnimation: function() {
                cc.game.pause()
            },
            _resetDeltaTime: function() {
                this._lastUpdate = performance.now(), this._deltaTime = 0
            },
            mainLoop: function(t) {
                this._purgeDirectorInNextLoop ? (this._purgeDirectorInNextLoop = !1, this.purgeDirector()) : (this.calculateDeltaTime(t), this._paused || (this.emit(cc.Director.EVENT_BEFORE_UPDATE), this._compScheduler.startPhase(), this._compScheduler.updatePhase(this._deltaTime), this._scheduler.update(this._deltaTime), this._compScheduler.lateUpdatePhase(this._deltaTime), this.emit(cc.Director.EVENT_AFTER_UPDATE), a._deferredDestroy()), this.emit(cc.Director.EVENT_BEFORE_DRAW), h.render(this._scene, this._deltaTime), this.emit(cc.Director.EVENT_AFTER_DRAW), c.frameUpdateListeners(), this._totalFrames++)
            },
            __fastOn: function(t, e, i) {
                this.on(t, e, i)
            },
            __fastOff: function(t, e, i) {
                this.off(t, e, i)
            }
        }, cc.js.addon(cc.Director.prototype, n.prototype), cc.Director.EVENT_PROJECTION_CHANGED = "director_projection_changed", cc.Director.EVENT_BEFORE_SCENE_LOADING = "director_before_scene_loading", cc.Director.EVENT_BEFORE_SCENE_LAUNCH = "director_before_scene_launch", cc.Director.EVENT_AFTER_SCENE_LAUNCH = "director_after_scene_launch", cc.Director.EVENT_BEFORE_UPDATE = "director_before_update", cc.Director.EVENT_AFTER_UPDATE = "director_after_update", cc.Director.EVENT_BEFORE_VISIT = "director_before_draw", cc.Director.EVENT_AFTER_VISIT = "director_before_draw", cc.Director.EVENT_BEFORE_DRAW = "director_before_draw", cc.Director.EVENT_AFTER_DRAW = "director_after_draw", cc.Director.PROJECTION_2D = 0, cc.Director.PROJECTION_3D = 1, cc.Director.PROJECTION_CUSTOM = 3, cc.Director.PROJECTION_DEFAULT = cc.Director.PROJECTION_2D, cc.director = new cc.Director, e.exports = cc.director
    }), {
        "./CCGame": 51,
        "./CCScheduler": 55,
        "./component-scheduler": 89,
        "./event-manager": 129,
        "./event/event-target": 131,
        "./load-pipeline/auto-release-utils": 149,
        "./node-activator": 170,
        "./platform/CCObject": 204,
        "./renderer": 247
    }],
    51: [(function(t, e, i) {
        "use strict";
        var n = t("./event/event-target");
        t("../audio/CCAudioEngine");
        var r = t("./CCDebug"),
            s = t("./renderer/index.js"),
            o = t("../core/renderer/utils/dynamic-atlas/manager"),
            a = {
                EVENT_HIDE: "game_on_hide",
                EVENT_SHOW: "game_on_show",
                EVENT_RESTART: "game_on_restart",
                EVENT_GAME_INITED: "game_inited",
                EVENT_ENGINE_INITED: "engine_inited",
                EVENT_RENDERER_INITED: "engine_inited",
                RENDER_TYPE_CANVAS: 0,
                RENDER_TYPE_WEBGL: 1,
                RENDER_TYPE_OPENGL: 2,
                _persistRootNodes: {},
                _paused: !0,
                _configLoaded: !1,
                _isCloning: !1,
                _prepared: !1,
                _rendererInitialized: !1,
                _renderContext: null,
                _intervalId: null,
                _lastTime: null,
                _frameTime: null,
                _sceneInfos: [],
                frame: null,
                container: null,
                canvas: null,
                renderType: -1,
                config: null,
                onStart: null,
                setFrameRate: function(t) {
                    this.config.frameRate = t, this._intervalId && window.cancelAnimFrame(this._intervalId), this._intervalId = 0, this._paused = !0, this._setAnimFrame(), this._runMainLoop()
                },
                getFrameRate: function() {
                    return this.config.frameRate
                },
                step: function() {
                    cc.director.mainLoop()
                },
                pause: function() {
                    this._paused || (this._paused = !0, cc.audioEngine && cc.audioEngine._break(), this._intervalId && window.cancelAnimFrame(this._intervalId), this._intervalId = 0)
                },
                resume: function() {
                    this._paused && (this._paused = !1, cc.audioEngine && cc.audioEngine._restore(), cc.director._resetDeltaTime(), this._runMainLoop())
                },
                isPaused: function() {
                    return this._paused
                },
                restart: function() {
                    cc.director.once(cc.Director.EVENT_AFTER_DRAW, (function() {
                        for (var t in a._persistRootNodes) a.removePersistRootNode(a._persistRootNodes[t]);
                        cc.director.getScene().destroy(), cc.Object._deferredDestroy(), cc.audioEngine && cc.audioEngine.uncacheAll(), cc.director.reset(), a.pause(), cc.AssetLibrary._loadBuiltins((function() {
                            a.onStart(), a.emit(a.EVENT_RESTART)
                        }))
                    }))
                },
                end: function() {
                    close()
                },
                _initEngine: function() {
                    this._rendererInitialized || (this._initRenderer(), this._initEvents(), this.emit(this.EVENT_ENGINE_INITED))
                },
                _prepareFinished: function(t) {
                    var e = this;
                    this._initEngine(), this._setAnimFrame(), cc.AssetLibrary._loadBuiltins((function() {
                        console.log("Cocos Creator v" + cc.ENGINE_VERSION), e._prepared = !0, e._runMainLoop(), e.emit(e.EVENT_GAME_INITED), t && t()
                    }))
                },
                eventTargetOn: n.prototype.on,
                eventTargetOnce: n.prototype.once,
                on: function(t, e, i) {
                    this._prepared && t === this.EVENT_ENGINE_INITED || !this._paused && t === this.EVENT_GAME_INITED ? e.call(i) : this.eventTargetOn(t, e, i)
                },
                once: function(t, e, i) {
                    this._prepared && t === this.EVENT_ENGINE_INITED || !this._paused && t === this.EVENT_GAME_INITED ? e.call(i) : this.eventTargetOnce(t, e, i)
                },
                prepare: function(t) {
                    if (this._prepared) t && t();
                    else {
                        var e = this.config.jsList;
                        if (e && e.length > 0) {
                            var i = this;
                            cc.loader.load(e, (function(e) {
                                if (e) throw new Error(JSON.stringify(e));
                                i._prepareFinished(t)
                            }))
                        } else this._prepareFinished(t)
                    }
                },
                run: function(t, e) {
                    this._initConfig(t), this.onStart = e, this.prepare(a.onStart && a.onStart.bind(a))
                },
                addPersistRootNode: function(t) {
                    if (cc.Node.isNode(t) && t.uuid) {
                        var e = t.uuid;
                        if (!this._persistRootNodes[e]) {
                            var i = cc.director._scene;
                            if (cc.isValid(i))
                                if (t.parent) {
                                    if (!(t.parent instanceof cc.Scene)) return void cc.warnID(3801);
                                    if (t.parent !== i) return void cc.warnID(3802)
                                } else t.parent = i;
                            this._persistRootNodes[e] = t, t._persistNode = !0
                        }
                    } else cc.warnID(3800)
                },
                removePersistRootNode: function(t) {
                    var e = t.uuid || "";
                    t === this._persistRootNodes[e] && (delete this._persistRootNodes[e], t._persistNode = !1)
                },
                isPersistRootNode: function(t) {
                    return t._persistNode
                },
                _setAnimFrame: function() {
                    this._lastTime = performance.now();
                    var t = a.config.frameRate;
                    this._frameTime = 1e3 / t, 60 !== t && 30 !== t ? (window.requestAnimFrame = this._stTime, window.cancelAnimFrame = this._ctTime) : (window.requestAnimFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || this._stTime, window.cancelAnimFrame = window.cancelAnimationFrame || window.cancelRequestAnimationFrame || window.msCancelRequestAnimationFrame || window.mozCancelRequestAnimationFrame || window.oCancelRequestAnimationFrame || window.webkitCancelRequestAnimationFrame || window.msCancelAnimationFrame || window.mozCancelAnimationFrame || window.webkitCancelAnimationFrame || window.oCancelAnimationFrame || this._ctTime)
                },
                _stTime: function(t) {
                    var e = performance.now(),
                        i = Math.max(0, a._frameTime - (e - a._lastTime)),
                        n = window.setTimeout((function() {
                            t()
                        }), i);
                    return a._lastTime = e + i, n
                },
                _ctTime: function(t) {
                    window.clearTimeout(t)
                },
                _runMainLoop: function() {
                    if (this._prepared) {
                        var t, e = this,
                            i = e.config,
                            n = cc.director,
                            s = !0,
                            o = i.frameRate;
                        r.setDisplayStats(i.showFPS), t = function(i) {
                            if (!e._paused) {
                                if (e._intervalId = window.requestAnimFrame(t), 30 === o && (s = !s)) return;
                                n.mainLoop(i)
                            }
                        }, e._intervalId = window.requestAnimFrame(t), e._paused = !1
                    }
                },
                _initConfig: function(t) {
                    "number" != typeof t.debugMode && (t.debugMode = 0), t.exposeClassName = !!t.exposeClassName, "number" != typeof t.frameRate && (t.frameRate = 60);
                    var e = t.renderMode;
                    ("number" != typeof e || e > 2 || e < 0) && (t.renderMode = 0), "boolean" != typeof t.registerSystemEvent && (t.registerSystemEvent = !0), t.showFPS = !!t.showFPS, this._sceneInfos = t.scenes || [], this.collisionMatrix = t.collisionMatrix || [], this.groupList = t.groupList || [], r._resetDebugSetting(t.debugMode), this.config = t, this._configLoaded = !0
                },
                _determineRenderType: function() {
                    var t = this.config,
                        e = parseInt(t.renderMode) || 0;
                    this.renderType = this.RENDER_TYPE_CANVAS;
                    var i = !1;
                    if (0 === e ? cc.sys.capabilities.opengl ? (this.renderType = this.RENDER_TYPE_WEBGL, i = !0) : cc.sys.capabilities.canvas && (this.renderType = this.RENDER_TYPE_CANVAS, i = !0) : 1 === e && cc.sys.capabilities.canvas ? (this.renderType = this.RENDER_TYPE_CANVAS, i = !0) : 2 === e && cc.sys.capabilities.opengl && (this.renderType = this.RENDER_TYPE_WEBGL, i = !0), !i) throw new Error(r.getError(3820, e))
                },
                _initRenderer: function() {
                    if (!this._rendererInitialized) {
                        var t = this.config.id,
                            e = void 0,
                            i = void 0,
                            n = void 0,
                            r = void 0,
                            a = t instanceof HTMLElement ? t : document.querySelector(t) || document.querySelector("#" + t);
                        if ("CANVAS" === a.tagName ? (e = a.width, i = a.height, this.canvas = n = a, this.container = r = document.createElement("DIV"), n.parentNode && n.parentNode.insertBefore(r, n)) : ("DIV" !== a.tagName && cc.warnID(3819), e = a.clientWidth, i = a.clientHeight, this.canvas = n = document.createElement("CANVAS"), this.container = r = document.createElement("DIV"), a.appendChild(r)), r.setAttribute("id", "Cocos2dGameContainer"), r.appendChild(n), this.frame = r.parentNode === document.body ? document.documentElement : r.parentNode, (function(t, e) {
                                (" " + t.className + " ").indexOf(" " + e + " ") > -1 || (t.className && (t.className += " "), t.className += e)
                            })(n, "gameCanvas"), n.setAttribute("width", e || 480), n.setAttribute("height", i || 320), n.setAttribute("tabindex", 99), this._determineRenderType(), this.renderType === this.RENDER_TYPE_WEBGL) {
                            var l = {
                                stencil: !0,
                                antialias: cc.macro.ENABLE_WEBGL_ANTIALIAS,
                                alpha: cc.macro.ENABLE_TRANSPARENT_CANVAS
                            };
                            s.initWebGL(n, l), this._renderContext = s.device._gl, !cc.macro.CLEANUP_IMAGE_CACHE && o && (o.enabled = !0)
                        }
                        this._renderContext || (this.renderType = this.RENDER_TYPE_CANVAS, s.initCanvas(n), this._renderContext = s.device._ctx), this.canvas.oncontextmenu = function() {
                            if (!cc._isContextMenuEnable) return !1
                        }, this._rendererInitialized = !0
                    }
                },
                _initEvents: function() {
                    var t, e = window;
                    this.config.registerSystemEvent && _cc.inputManager.registerSystemEvent(this.canvas), void 0 !== document.hidden ? t = "hidden" : void 0 !== document.mozHidden ? t = "mozHidden" : void 0 !== document.msHidden ? t = "msHidden" : void 0 !== document.webkitHidden && (t = "webkitHidden");
                    var i = !1;

                    function n() {
                        i || (i = !0, a.emit(a.EVENT_HIDE))
                    }

                    function r(t, e, n, r, s) {
                        i && (i = !1, a.emit(a.EVENT_SHOW, t, e, n, r, s))
                    }
                    if (t)
                        for (var s = ["visibilitychange", "mozvisibilitychange", "msvisibilitychange", "webkitvisibilitychange", "qbrowserVisibilityChange"], o = 0; o < s.length; o++) document.addEventListener(s[o], (function(e) {
                            var i = document[t];
                            (i = i || e.hidden) ? n(): r()
                        }));
                    else e.addEventListener("blur", n), e.addEventListener("focus", r);
                    navigator.userAgent.indexOf("MicroMessenger") > -1 && (e.onfocus = r), "onpageshow" in window && "onpagehide" in window && (e.addEventListener("pagehide", n), e.addEventListener("pageshow", r), document.addEventListener("pagehide", n), document.addEventListener("pageshow", r)), this.on(a.EVENT_HIDE, (function() {
                        a.pause()
                    })), this.on(a.EVENT_SHOW, (function() {
                        a.resume()
                    }))
                }
            };
        n.call(a), cc.js.addon(a, n.prototype), cc.game = e.exports = a
    }), {
        "../audio/CCAudioEngine": 21,
        "../core/renderer/utils/dynamic-atlas/manager": 250,
        "./CCDebug": 49,
        "./event/event-target": 131,
        "./renderer/index.js": 247
    }],
    52: [(function(t, e, i) {
        "use strict";
        var n = t("./vmath"),
            r = t("./utils/base-node"),
            s = t("./utils/prefab-helper"),
            o = t("./utils/trans-pool").NodeMemPool,
            a = t("./utils/affine-transform"),
            l = t("./event-manager"),
            h = t("./platform/CCMacro"),
            c = t("./platform/js"),
            u = (t("./event/event"), t("./event/event-target")),
            _ = t("./renderer/render-flow"),
            f = cc.Object.Flags.Destroying,
            d = Math.PI / 180,
            p = !!cc.ActionManager,
            m = function() {},
            y = cc.v3(),
            v = cc.quat(),
            g = cc.v3(),
            x = cc.v3(),
            b = cc.quat(),
            A = cc.quat(),
            C = cc.v3(),
            T = cc.v3(),
            S = cc.v3(),
            w = cc.v3(),
            E = cc.v3(),
            M = cc.quat(),
            D = cc.quat(),
            B = cc.v3(),
            I = n.quat.create(),
            P = cc.v3(),
            R = cc.v3(),
            O = cc.quat(),
            L = cc.quat(),
            F = (cc.quat(), n.mat4.create()),
            N = n.vec3.create(),
            V = new Array(16);
        V.length = 0;
        var k = cc.Enum({
                DEBUG: 31
            }),
            G = cc.Enum({
                POSITION: 1,
                SCALE: 2,
                ROTATION: 4,
                SKEW: 8,
                TRS: 7,
                RS: 6,
                ALL: 65535
            }),
            U = cc.Enum({
                TOUCH_START: "touchstart",
                TOUCH_MOVE: "touchmove",
                TOUCH_END: "touchend",
                TOUCH_CANCEL: "touchcancel",
                MOUSE_DOWN: "mousedown",
                MOUSE_MOVE: "mousemove",
                MOUSE_ENTER: "mouseenter",
                MOUSE_LEAVE: "mouseleave",
                MOUSE_UP: "mouseup",
                MOUSE_WHEEL: "mousewheel",
                POSITION_CHANGED: "position-changed",
                ROTATION_CHANGED: "rotation-changed",
                SCALE_CHANGED: "scale-changed",
                SIZE_CHANGED: "size-changed",
                ANCHOR_CHANGED: "anchor-changed",
                COLOR_CHANGED: "color-changed",
                CHILD_ADDED: "child-added",
                CHILD_REMOVED: "child-removed",
                CHILD_REORDER: "child-reorder",
                GROUP_CHANGED: "group-changed",
                SIBLING_ORDER_CHANGED: "sibling-order-changed"
            }),
            z = [U.TOUCH_START, U.TOUCH_MOVE, U.TOUCH_END, U.TOUCH_CANCEL],
            j = [U.MOUSE_DOWN, U.MOUSE_ENTER, U.MOUSE_MOVE, U.MOUSE_LEAVE, U.MOUSE_UP, U.MOUSE_WHEEL],
            W = !0,
            H = function(t, e) {
                if (0 !== t) {
                    var i = "";
                    W && cc.warn("`cc.Node.skewX/Y` is deprecated since v2.2.1, please use 3D node instead.", i), W = !1
                }
            },
            X = null,
            Y = function(t, e) {
                var i = t.getLocation(),
                    n = this.owner;
                return !!n._hitTest(i, this) && (e.type = U.TOUCH_START, e.touch = t, e.bubbles = !0, n.dispatchEvent(e), !0)
            },
            q = function(t, e) {
                var i = this.owner;
                e.type = U.TOUCH_MOVE, e.touch = t, e.bubbles = !0, i.dispatchEvent(e)
            },
            J = function(t, e) {
                var i = t.getLocation(),
                    n = this.owner;
                n._hitTest(i, this) ? e.type = U.TOUCH_END : e.type = U.TOUCH_CANCEL, e.touch = t, e.bubbles = !0, n.dispatchEvent(e)
            },
            Z = function(t, e) {
                t.getLocation();
                var i = this.owner;
                e.type = U.TOUCH_CANCEL, e.touch = t, e.bubbles = !0, i.dispatchEvent(e)
            },
            K = function(t) {
                var e = t.getLocation(),
                    i = this.owner;
                i._hitTest(e, this) && (t.type = U.MOUSE_DOWN, t.bubbles = !0, i.dispatchEvent(t))
            },
            Q = function(t) {
                var e = t.getLocation(),
                    i = this.owner;
                if (i._hitTest(e, this)) this._previousIn || (X && X._mouseListener && (t.type = U.MOUSE_LEAVE, X.dispatchEvent(t), X._mouseListener._previousIn = !1), X = this.owner, t.type = U.MOUSE_ENTER, i.dispatchEvent(t), this._previousIn = !0), t.type = U.MOUSE_MOVE, t.bubbles = !0, i.dispatchEvent(t);
                else {
                    if (!this._previousIn) return;
                    t.type = U.MOUSE_LEAVE, i.dispatchEvent(t), this._previousIn = !1, X = null
                }
                t.stopPropagation()
            },
            $ = function(t) {
                var e = t.getLocation(),
                    i = this.owner;
                i._hitTest(e, this) && (t.type = U.MOUSE_UP, t.bubbles = !0, i.dispatchEvent(t), t.stopPropagation())
            },
            tt = function(t) {
                var e = t.getLocation(),
                    i = this.owner;
                i._hitTest(e, this) && (t.type = U.MOUSE_WHEEL, t.bubbles = !0, i.dispatchEvent(t), t.stopPropagation())
            };

        function et(t) {
            var e = cc.Mask;
            if (e)
                for (var i = 0, n = t; n && cc.Node.isNode(n); n = n._parent, ++i)
                    if (n.getComponent(e)) return {
                        index: i,
                        node: n
                    };
            return null
        }

        function it(t, e) {
            if (!(t._objFlags & f)) {
                var i = 0;
                if (t._bubblingListeners)
                    for (; i < e.length; ++i)
                        if (t._bubblingListeners.hasEventListener(e[i])) return !0;
                if (t._capturingListeners)
                    for (; i < e.length; ++i)
                        if (t._capturingListeners.hasEventListener(e[i])) return !0;
                return !1
            }
            return !0
        }

        function nt(t, e) {
            var i, n;
            for (e.target = t, V.length = 0, t._getCapturingTargets(e.type, V), e.eventPhase = 1, n = V.length - 1; n >= 0; --n)
                if ((i = V[n])._capturingListeners && (e.currentTarget = i, i._capturingListeners.emit(e.type, e, V), e._propagationStopped)) return void(V.length = 0);
            if (V.length = 0, e.eventPhase = 2, e.currentTarget = t, t._capturingListeners && t._capturingListeners.emit(e.type, e), !e._propagationImmediateStopped && t._bubblingListeners && t._bubblingListeners.emit(e.type, e), !e._propagationStopped && e.bubbles)
                for (t._getBubblingTargets(e.type, V), e.eventPhase = 3, n = 0; n < V.length; ++n)
                    if ((i = V[n])._bubblingListeners && (e.currentTarget = i, i._bubblingListeners.emit(e.type, e), e._propagationStopped)) return void(V.length = 0);
            V.length = 0
        }

        function rt(t) {
            var e = t.groupIndex;
            return 0 === e && t.parent && (e = rt(t.parent)), e
        }

        function st(t) {
            var e = rt(t);
            t._cullingMask = 1 << e;
            for (var i = 0; i < t._children.length; i++) st(t._children[i])
        }
        var ot = {
            name: "cc.Node",
            extends: r,
            properties: {
                _opacity: 255,
                _color: cc.Color.WHITE,
                _contentSize: cc.Size,
                _anchorPoint: cc.v2(.5, .5),
                _position: void 0,
                _scale: void 0,
                _trs: null,
                _eulerAngles: cc.Vec3,
                _skewX: 0,
                _skewY: 0,
                _zIndex: {
                    default: void 0,
                    type: cc.Integer
                },
                _localZOrder: {
                    default: 0,
                    serializable: !1
                },
                _is3DNode: !1,
                _groupIndex: {
                    default: 0,
                    formerlySerializedAs: "groupIndex"
                },
                groupIndex: {
                    get: function() {
                        return this._groupIndex
                    },
                    set: function(t) {
                        this._groupIndex = t, st(this), this.emit(U.GROUP_CHANGED, this)
                    }
                },
                group: {
                    get: function() {
                        return cc.game.groupList[this.groupIndex] || ""
                    },
                    set: function(t) {
                        this.groupIndex = cc.game.groupList.indexOf(t)
                    }
                },
                x: {
                    get: function() {
                        return this._trs[0]
                    },
                    set: function(t) {
                        var e = this._trs;
                        if (t !== e[0]) {
                            e[0] = t, this.setLocalDirty(G.POSITION), 1 & this._eventMask && this.emit(U.POSITION_CHANGED)
                        }
                    }
                },
                y: {
                    get: function() {
                        return this._trs[1]
                    },
                    set: function(t) {
                        var e = this._trs;
                        if (t !== e[1]) {
                            e[1] = t, this.setLocalDirty(G.POSITION), 1 & this._eventMask && this.emit(U.POSITION_CHANGED)
                        }
                    }
                },
                rotation: {
                    get: function() {
                        return -this.angle
                    },
                    set: function(t) {
                        this.angle = -t
                    }
                },
                angle: {
                    get: function() {
                        return this._eulerAngles.z
                    },
                    set: function(t) {
                        n.vec3.set(this._eulerAngles, 0, 0, t), n.trs.fromAngleZ(this._trs, t), this.setLocalDirty(G.ROTATION), 4 & this._eventMask && this.emit(U.ROTATION_CHANGED)
                    }
                },
                rotationX: {
                    get: function() {
                        return this._eulerAngles.x
                    },
                    set: function(t) {
                        this._eulerAngles.x !== t && (this._eulerAngles.x = t, this._eulerAngles.x === this._eulerAngles.y ? n.trs.fromAngleZ(this._trs, -t) : n.trs.fromEulerNumber(this._trs, t, this._eulerAngles.y, 0), this.setLocalDirty(G.ROTATION), 4 & this._eventMask && this.emit(U.ROTATION_CHANGED))
                    }
                },
                rotationY: {
                    get: function() {
                        return this._eulerAngles.y
                    },
                    set: function(t) {
                        this._eulerAngles.y !== t && (this._eulerAngles.y = t, this._eulerAngles.x === this._eulerAngles.y ? n.trs.fromAngleZ(this._trs, -t) : n.trs.fromEulerNumber(this._trs, this._eulerAngles.x, t, 0), this.setLocalDirty(G.ROTATION), 4 & this._eventMask && this.emit(U.ROTATION_CHANGED))
                    }
                },
                scale: {
                    get: function() {
                        return this._trs[7]
                    },
                    set: function(t) {
                        this.setScale(t)
                    }
                },
                scaleX: {
                    get: function() {
                        return this._trs[7]
                    },
                    set: function(t) {
                        this._trs[7] !== t && (this._trs[7] = t, this.setLocalDirty(G.SCALE), 2 & this._eventMask && this.emit(U.SCALE_CHANGED))
                    }
                },
                scaleY: {
                    get: function() {
                        return this._trs[8]
                    },
                    set: function(t) {
                        this._trs[8] !== t && (this._trs[8] = t, this.setLocalDirty(G.SCALE), 2 & this._eventMask && this.emit(U.SCALE_CHANGED))
                    }
                },
                skewX: {
                    get: function() {
                        return this._skewX
                    },
                    set: function(t) {
                        H(t), this._skewX = t, this.setLocalDirty(G.SKEW)
                    }
                },
                skewY: {
                    get: function() {
                        return this._skewY
                    },
                    set: function(t) {
                        H(t), this._skewY = t, this.setLocalDirty(G.SKEW)
                    }
                },
                opacity: {
                    get: function() {
                        return this._opacity
                    },
                    set: function(t) {
                        t = cc.misc.clampf(t, 0, 255), this._opacity !== t && (this._opacity = t, this._renderFlag |= _.FLAG_OPACITY_COLOR)
                    },
                    range: [0, 255]
                },
                color: {
                    get: function() {
                        return this._color.clone()
                    },
                    set: function(t) {
                        this._color.equals(t) || (this._color.set(t), this._renderFlag |= _.FLAG_COLOR, 32 & this._eventMask && this.emit(U.COLOR_CHANGED, t))
                    }
                },
                anchorX: {
                    get: function() {
                        return this._anchorPoint.x
                    },
                    set: function(t) {
                        var e = this._anchorPoint;
                        e.x !== t && (e.x = t, 16 & this._eventMask && this.emit(U.ANCHOR_CHANGED))
                    }
                },
                anchorY: {
                    get: function() {
                        return this._anchorPoint.y
                    },
                    set: function(t) {
                        var e = this._anchorPoint;
                        e.y !== t && (e.y = t, 16 & this._eventMask && this.emit(U.ANCHOR_CHANGED))
                    }
                },
                width: {
                    get: function() {
                        return this._contentSize.width
                    },
                    set: function(t) {
                        t !== this._contentSize.width && (this._contentSize.width = t, 8 & this._eventMask && this.emit(U.SIZE_CHANGED))
                    }
                },
                height: {
                    get: function() {
                        return this._contentSize.height
                    },
                    set: function(t) {
                        t !== this._contentSize.height && (this._contentSize.height = t, 8 & this._eventMask && this.emit(U.SIZE_CHANGED))
                    }
                },
                zIndex: {
                    get: function() {
                        return this._localZOrder >> 16
                    },
                    set: function(t) {
                        t > h.MAX_ZINDEX ? (cc.warnID(1636), t = h.MAX_ZINDEX) : t < h.MIN_ZINDEX && (cc.warnID(1637), t = h.MIN_ZINDEX), this.zIndex !== t && (this._localZOrder = 65535 & this._localZOrder | t << 16, this.emit(U.SIBLING_ORDER_CHANGED), this._parent && this._onSiblingIndexChanged())
                    }
                }
            },
            ctor: function() {
                this._reorderChildDirty = !1, this._widget = null, this._renderComponent = null, this._capturingListeners = null, this._bubblingListeners = null, this._touchListener = null, this._mouseListener = null, this._initDataFromPool(), this._eventMask = 0, this._cullingMask = 1, this._childArrivalOrder = 1, this._renderFlag = _.FLAG_TRANSFORM | _.FLAG_OPACITY_COLOR
            },
            statics: {
                EventType: U,
                _LocalDirtyFlag: G,
                isNode: function(t) {
                    return t instanceof at && (t.constructor === at || !(t instanceof cc.Scene))
                },
                BuiltinGroupIndex: k
            },
            _onSiblingIndexChanged: function() {
                for (var t = this._parent, e = t._children, i = 0, n = e.length; i < n; i++) e[i]._updateOrderOfArrival();
                t._delaySort()
            },
            _onPreDestroy: function() {
                this._onPreDestroyBase();
                p && cc.director.getActionManager().removeAllActionsFromTarget(this), X === this && (X = null), (this._touchListener || this._mouseListener) && (l.removeListeners(this), this._touchListener && (this._touchListener.owner = null, this._touchListener.mask = null, this._touchListener = null), this._mouseListener && (this._mouseListener.owner = null, this._mouseListener.mask = null, this._mouseListener = null)), this._backDataIntoPool(), this._reorderChildDirty && cc.director.__fastOff(cc.Director.EVENT_AFTER_UPDATE, this.sortAllChildren, this)
            },
            _onPostActivated: function(t) {
                var e = p ? cc.director.getActionManager() : null;
                if (t)
                    if (this._renderFlag |= _.FLAG_WORLD_TRANSFORM, e && e.resumeTarget(this), l.resumeTarget(this), this._touchListener) {
                        var i = this._touchListener.mask = et(this);
                        this._mouseListener && (this._mouseListener.mask = i)
                    } else this._mouseListener && (this._mouseListener.mask = et(this));
                else e && e.pauseTarget(this), l.pauseTarget(this)
            },
            _onHierarchyChanged: function(t) {
                this._updateOrderOfArrival(), st(this), this._parent && this._parent._delaySort(), this._renderFlag |= _.FLAG_WORLD_TRANSFORM, this._onHierarchyChangedBase(t), cc._widgetManager && (cc._widgetManager._nodesOrderDirty = !0)
            },
            _initDataFromPool: function() {
                this._spaceInfo || (this._spaceInfo = o.pop());
                var t = this._spaceInfo;
                this._matrix = n.mat4.create(t.localMat), n.mat4.identity(this._matrix), this._worldMatrix = n.mat4.create(t.worldMat), n.mat4.identity(this._worldMatrix), this._localMatDirty = G.ALL, this._worldMatDirty = !0;
                var e = this._trs = this._spaceInfo.trs;
                e[0] = 0, e[1] = 0, e[2] = 0, e[3] = 0, e[4] = 0, e[5] = 0, e[6] = 1, e[7] = 1, e[8] = 1, e[9] = 1
            },
            _backDataIntoPool: function() {
                o.push(this._spaceInfo), this._matrix = null, this._worldMatrix = null, this._trs = null, this._spaceInfo = null
            },
            _toEuler: function() {
                if (this.is3DNode) n.trs.toEuler(this._eulerAngles, this._trs);
                else {
                    var t = Math.asin(this._trs[5]) / d * 2;
                    n.vec3.set(this._eulerAngles, 0, 0, t)
                }
            },
            _fromEuler: function() {
                this.is3DNode ? n.trs.fromEuler(this._trs, this._eulerAngles) : n.trs.fromAngleZ(this._trs, this._eulerAngles.z)
            },
            _upgrade_1x_to_2x: function() {
                var t = this._trs;
                if (t) {
                    var e = t;
                    t = this._trs = this._spaceInfo.trs, 11 === e.length ? t.set(e.subarray(1)) : t.set(e)
                } else t = this._trs = this._spaceInfo.trs;
                void 0 !== this._zIndex && (this._localZOrder = this._zIndex << 16, this._zIndex = void 0), this._fromEuler(), 0 !== this._localZOrder && (this._zIndex = (4294901760 & this._localZOrder) >> 16), this._color.a < 255 && 255 === this._opacity && (this._opacity = this._color.a, this._color.a = 255)
            },
            _onBatchCreated: function() {
                var t = this._prefab;
                t && t.sync && t.root === this && s.syncWithPrefab(this), this._upgrade_1x_to_2x(), this._updateOrderOfArrival(), this._cullingMask = 1 << rt(this), this._activeInHierarchy || (p && cc.director.getActionManager().pauseTarget(this), l.pauseTarget(this));
                for (var e = this._children, i = 0, n = e.length; i < n; i++) e[i]._onBatchCreated();
                e.length > 0 && (this._renderFlag |= _.FLAG_CHILDREN)
            },
            _onBatchRestored: function() {
                if (this._upgrade_1x_to_2x(), this._cullingMask = 1 << rt(this), !this._activeInHierarchy) {
                    var t = cc.director.getActionManager();
                    t && t.pauseTarget(this), l.pauseTarget(this)
                }
                for (var e = this._children, i = 0, n = e.length; i < n; i++) e[i]._onBatchRestored();
                e.length > 0 && (this._renderFlag |= _.FLAG_CHILDREN)
            },
            _checknSetupSysEvent: function(t) {
                var e = !1,
                    i = !1;
                return -1 !== z.indexOf(t) ? (this._touchListener || (this._touchListener = cc.EventListener.create({
                    event: cc.EventListener.TOUCH_ONE_BY_ONE,
                    swallowTouches: !0,
                    owner: this,
                    mask: et(this),
                    onTouchBegan: Y,
                    onTouchMoved: q,
                    onTouchEnded: J,
                    onTouchCancelled: Z
                }), l.addListener(this._touchListener, this), e = !0), i = !0) : -1 !== j.indexOf(t) && (this._mouseListener || (this._mouseListener = cc.EventListener.create({
                    event: cc.EventListener.MOUSE,
                    _previousIn: !1,
                    owner: this,
                    mask: et(this),
                    onMouseDown: K,
                    onMouseMove: Q,
                    onMouseUp: $,
                    onMouseScroll: tt
                }), l.addListener(this._mouseListener, this), e = !0), i = !0), e && !this._activeInHierarchy && cc.director.getScheduler().schedule((function() {
                    this._activeInHierarchy || l.pauseTarget(this)
                }), this, 0, 0, 0, !1), i
            },
            on: function(t, e, i, n) {
                if (this._checknSetupSysEvent(t)) return this._onDispatch(t, e, i, n);
                switch (t) {
                    case U.POSITION_CHANGED:
                        this._eventMask |= 1;
                        break;
                    case U.SCALE_CHANGED:
                        this._eventMask |= 2;
                        break;
                    case U.ROTATION_CHANGED:
                        this._eventMask |= 4;
                        break;
                    case U.SIZE_CHANGED:
                        this._eventMask |= 8;
                        break;
                    case U.ANCHOR_CHANGED:
                        this._eventMask |= 16;
                        break;
                    case U.COLOR_CHANGED:
                        this._eventMask |= 32
                }
                return this._bubblingListeners || (this._bubblingListeners = new u), this._bubblingListeners.on(t, e, i)
            },
            once: function(t, e, i, n) {
                (this._checknSetupSysEvent(t) && n ? this._capturingListeners = this._capturingListeners || new u : this._bubblingListeners = this._bubblingListeners || new u).once(t, e, i)
            },
            _onDispatch: function(t, e, i, n) {
                if ("boolean" == typeof i ? (n = i, i = void 0) : n = !!n, e) {
                    var r = null;
                    return (r = n ? this._capturingListeners = this._capturingListeners || new u : this._bubblingListeners = this._bubblingListeners || new u).hasEventListener(t, e, i) || (r.on(t, e, i), i && i.__eventTargets && i.__eventTargets.push(this)), e
                }
                cc.errorID(6800)
            },
            off: function(t, e, i, n) {
                var r = -1 !== z.indexOf(t),
                    s = !r && -1 !== j.indexOf(t);
                if (r || s) this._offDispatch(t, e, i, n), r ? this._touchListener && !it(this, z) && (l.removeListener(this._touchListener), this._touchListener = null) : s && this._mouseListener && !it(this, j) && (l.removeListener(this._mouseListener), this._mouseListener = null);
                else if (this._bubblingListeners) {
                    if (this._bubblingListeners.off(t, e, i), !this._bubblingListeners.hasEventListener(t)) switch (t) {
                        case U.POSITION_CHANGED:
                            this._eventMask &= -2;
                            break;
                        case U.SCALE_CHANGED:
                            this._eventMask &= -3;
                            break;
                        case U.ROTATION_CHANGED:
                            this._eventMask &= -5;
                            break;
                        case U.SIZE_CHANGED:
                            this._eventMask &= -9;
                            break;
                        case U.ANCHOR_CHANGED:
                            this._eventMask &= -17;
                            break;
                        case U.COLOR_CHANGED:
                            this._eventMask &= -33
                    }
                }
            },
            _offDispatch: function(t, e, i, n) {
                if ("boolean" == typeof i ? (n = i, i = void 0) : n = !!n, e) {
                    var r = n ? this._capturingListeners : this._bubblingListeners;
                    r && (r.off(t, e, i), i && i.__eventTargets && c.array.fastRemove(i.__eventTargets, this))
                } else this._capturingListeners && this._capturingListeners.removeAll(t), this._bubblingListeners && this._bubblingListeners.removeAll(t)
            },
            targetOff: function(t) {
                var e = this._bubblingListeners;
                e && (e.targetOff(t), 1 & this._eventMask && !e.hasEventListener(U.POSITION_CHANGED) && (this._eventMask &= -2), 2 & this._eventMask && !e.hasEventListener(U.SCALE_CHANGED) && (this._eventMask &= -3), 4 & this._eventMask && !e.hasEventListener(U.ROTATION_CHANGED) && (this._eventMask &= -5), 8 & this._eventMask && !e.hasEventListener(U.SIZE_CHANGED) && (this._eventMask &= -9), 16 & this._eventMask && !e.hasEventListener(U.ANCHOR_CHANGED) && (this._eventMask &= -17), 32 & this._eventMask && !e.hasEventListener(U.COLOR_CHANGED) && (this._eventMask &= -33)), this._capturingListeners && this._capturingListeners.targetOff(t), t && t.__eventTargets && c.array.fastRemove(t.__eventTargets, this), this._touchListener && !it(this, z) && (l.removeListener(this._touchListener), this._touchListener = null), this._mouseListener && !it(this, j) && (l.removeListener(this._mouseListener), this._mouseListener = null)
            },
            hasEventListener: function(t) {
                var e = !1;
                return this._bubblingListeners && (e = this._bubblingListeners.hasEventListener(t)), !e && this._capturingListeners && (e = this._capturingListeners.hasEventListener(t)), e
            },
            emit: function(t, e, i, n, r, s) {
                this._bubblingListeners && this._bubblingListeners.emit(t, e, i, n, r, s)
            },
            dispatchEvent: function(t) {
                nt(this, t), V.length = 0
            },
            pauseSystemEvents: function(t) {
                l.pauseTarget(this, t)
            },
            resumeSystemEvents: function(t) {
                l.resumeTarget(this, t)
            },
            _hitTest: function(t, e) {
                var i = this._contentSize.width,
                    r = this._contentSize.height,
                    s = P,
                    o = R,
                    a = cc.Camera.findCamera(this);
                if (a ? a.getScreenToWorldPoint(t, s) : s.set(t), this._updateWorldMatrix(), !n.mat4.invert(F, this._worldMatrix)) return !1;
                if (n.vec2.transformMat4(o, s, F), o.x += this._anchorPoint.x * i, o.y += this._anchorPoint.y * r, o.x >= 0 && o.y >= 0 && o.x <= i && o.y <= r) {
                    if (e && e.mask) {
                        for (var l = e.mask, h = this, c = 0; h && c < l.index; ++c, h = h.parent);
                        if (h === l.node) {
                            var u = h.getComponent(cc.Mask);
                            return !u || !u.enabledInHierarchy || u._hitTest(s)
                        }
                        return e.mask = null, !0
                    }
                    return !0
                }
                return !1
            },
            _getCapturingTargets: function(t, e) {
                for (var i = this.parent; i;) i._capturingListeners && i._capturingListeners.hasEventListener(t) && e.push(i), i = i.parent
            },
            _getBubblingTargets: function(t, e) {
                for (var i = this.parent; i;) i._bubblingListeners && i._bubblingListeners.hasEventListener(t) && e.push(i), i = i.parent
            },
            runAction: p ? function(t) {
                if (this.active) return cc.assertID(t, 1618), cc.director.getActionManager().addAction(t, this, !1), t
            } : m,
            pauseAllActions: p ? function() {
                cc.director.getActionManager().pauseTarget(this)
            } : m,
            resumeAllActions: p ? function() {
                cc.director.getActionManager().resumeTarget(this)
            } : m,
            stopAllActions: p ? function() {
                cc.director.getActionManager().removeAllActionsFromTarget(this)
            } : m,
            stopAction: p ? function(t) {
                cc.director.getActionManager().removeAction(t)
            } : m,
            stopActionByTag: p ? function(t) {
                t !== cc.Action.TAG_INVALID ? cc.director.getActionManager().removeActionByTag(t, this) : cc.logID(1612)
            } : m,
            getActionByTag: p ? function(t) {
                return t === cc.Action.TAG_INVALID ? (cc.logID(1613), null) : cc.director.getActionManager().getActionByTag(t, this)
            } : function() {
                return null
            },
            getNumberOfRunningActions: p ? function() {
                return cc.director.getActionManager().getNumberOfRunningActionsInTarget(this)
            } : function() {
                return 0
            },
            getPosition: function(t) {
                return t = t || cc.v3(), n.trs.toPosition(t, this._trs)
            },
            setPosition: function(t, e) {
                var i;
                void 0 === e ? (i = t.x, e = t.y) : i = t;
                var n = this._trs;
                n[0] === i && n[1] === e || (n[0] = i, n[1] = e, this.setLocalDirty(G.POSITION), 1 & this._eventMask && this.emit(U.POSITION_CHANGED))
            },
            getScale: function(t) {
                return void 0 !== t ? n.trs.toScale(t, this._trs) : (cc.warnID(1400, "cc.Node.getScale", "cc.Node.scale or cc.Node.getScale(cc.Vec3)"), this._trs[7])
            },
            setScale: function(t, e) {
                t && "number" != typeof t ? (e = t.y, t = t.x) : void 0 === e && (e = t);
                var i = this._trs;
                i[7] === t && i[8] === e || (i[7] = t, i[8] = e, this.setLocalDirty(G.SCALE), 2 & this._eventMask && this.emit(U.SCALE_CHANGED))
            },
            getRotation: function(t) {
                return t instanceof cc.Quat ? n.trs.toRotation(t, this._trs) : -this.angle
            },
            setRotation: function(t, e, i, n) {
                if ("number" == typeof t && void 0 === e) this.angle = -t;
                else {
                    var r = t;
                    void 0 === e && (r = t.x, e = t.y, i = t.z, n = t.w);
                    var s = this._trs;
                    s[3] === r && s[4] === e && s[5] === i && s[6] === n || (s[3] = r, s[4] = e, s[5] = i, s[6] = n, this.setLocalDirty(G.ROTATION), 4 & this._eventMask && this.emit(U.ROTATION_CHANGED))
                }
            },
            getContentSize: function() {
                return cc.size(this._contentSize.width, this._contentSize.height)
            },
            setContentSize: function(t, e) {
                var i = this._contentSize;
                if (void 0 === e) {
                    if (t.width === i.width && t.height === i.height) return;
                    0, i.width = t.width, i.height = t.height
                } else {
                    if (t === i.width && e === i.height) return;
                    0, i.width = t, i.height = e
                }
                8 & this._eventMask && this.emit(U.SIZE_CHANGED)
            },
            getAnchorPoint: function() {
                return cc.v2(this._anchorPoint)
            },
            setAnchorPoint: function(t, e) {
                var i = this._anchorPoint;
                if (void 0 === e) {
                    if (t.x === i.x && t.y === i.y) return;
                    i.x = t.x, i.y = t.y
                } else {
                    if (t === i.x && e === i.y) return;
                    i.x = t, i.y = e
                }
                this.setLocalDirty(G.POSITION), 16 & this._eventMask && this.emit(U.ANCHOR_CHANGED)
            },
            _invTransformPoint: function(t, e) {
                this._parent ? this._parent._invTransformPoint(t, e) : n.vec3.copy(t, e);
                var i = this._trs;
                return n.trs.toPosition(g, i), n.vec3.sub(t, t, g), n.trs.toRotation(b, i), n.quat.conjugate(A, b), n.vec3.transformQuat(t, t, A), n.trs.toScale(g, i), n.vec3.inverseSafe(x, g), n.vec3.mul(t, t, x), t
            },
            getWorldPosition: function(t) {
                n.trs.toPosition(t, this._trs);
                for (var e = this._parent, i = void 0; e;) i = e._trs, n.trs.toScale(y, i), n.vec3.mul(t, t, y), n.trs.toRotation(v, i), n.vec3.transformQuat(t, t, v), n.trs.toPosition(y, i), n.vec3.add(t, t, y), e = e._parent;
                return t
            },
            setWorldPosition: function(t) {
                var e = this._trs;
                this._parent ? this._parent._invTransformPoint(C, t) : n.vec3.copy(C, t), n.trs.fromPosition(e, C), this.setLocalDirty(G.POSITION), 1 & this._eventMask && this.emit(U.POSITION_CHANGED)
            },
            getWorldRotation: function(t) {
                n.trs.toRotation(O, this._trs), n.quat.copy(t, O);
                for (var e = this._parent; e;) n.trs.toRotation(O, e._trs), n.quat.mul(t, O, t), e = e._parent;
                return t
            },
            setWorldRotation: function(t) {
                this._parent ? (this._parent.getWorldRotation(L), n.quat.conjugate(L, L), n.quat.mul(L, L, t)) : n.quat.copy(L, t), n.trs.fromRotation(this._trs, L), this.setLocalDirty(G.ROTATION)
            },
            getWorldScale: function(t) {
                n.trs.toScale(T, this._trs), n.vec3.copy(t, T);
                for (var e = this._parent; e;) n.trs.toScale(T, e._trs), n.vec3.mul(t, t, T), e = e._parent;
                return t
            },
            setWorldScale: function(t) {
                this._parent ? (this._parent.getWorldScale(S), n.vec3.div(S, t, S)) : n.vec3.copy(S, t), n.trs.fromScale(this._trs, S), this.setLocalDirty(G.SCALE)
            },
            getWorldRT: function(t) {
                var e = w,
                    i = M,
                    r = this._trs;
                n.trs.toPosition(e, r), n.trs.toRotation(i, r);
                for (var s = this._parent; s;) r = s._trs, n.trs.toScale(E, r), n.vec3.mul(e, e, E), n.trs.toRotation(D, r), n.vec3.transformQuat(e, e, D), n.trs.toPosition(E, r), n.vec3.add(e, e, E), n.quat.mul(i, D, i), s = s._parent;
                return n.mat4.fromRT(t, i, e), t
            },
            lookAt: function(t, e) {
                this.getWorldPosition(B), n.vec3.sub(B, B, t), n.vec3.normalize(B, B), n.quat.fromViewUp(I, B, e), this.setWorldRotation(I)
            },
            _updateLocalMatrix: function() {
                var t = this._localMatDirty;
                if (t) {
                    var e = this._matrix.m,
                        i = this._trs;
                    if (t & (G.RS | G.SKEW)) {
                        var n = -this._eulerAngles.z,
                            r = this._skewX || this._skewY,
                            s = i[7],
                            o = i[8];
                        if (n || r) {
                            var a = 1,
                                l = 0,
                                h = 0,
                                c = 1;
                            if (n) {
                                var u = n * d;
                                h = Math.sin(u), a = c = Math.cos(u), l = -h
                            }
                            if (e[0] = a *= s, e[1] = l *= s, e[4] = h *= o, e[5] = c *= o, r) {
                                var _ = e[0],
                                    f = e[1],
                                    p = e[4],
                                    m = e[5],
                                    y = Math.tan(this._skewX * d),
                                    v = Math.tan(this._skewY * d);
                                y === 1 / 0 && (y = 99999999), v === 1 / 0 && (v = 99999999), e[0] = _ + p * v, e[1] = f + m * v, e[4] = p + _ * y, e[5] = m + f * y
                            }
                        } else e[0] = s, e[1] = 0, e[4] = 0, e[5] = o
                    }
                    e[12] = i[0], e[13] = i[1], this._localMatDirty = 0, this._worldMatDirty = !0
                }
            },
            _calculWorldMatrix: function() {
                this._localMatDirty && this._updateLocalMatrix();
                var t = this._parent;
                t ? this._mulMat(this._worldMatrix, t._worldMatrix, this._matrix) : n.mat4.copy(this._worldMatrix, this._matrix), this._worldMatDirty = !1
            },
            _mulMat: function(t, e, i) {
                var n = e.m,
                    r = i.m,
                    s = t.m,
                    o = n[0],
                    a = n[1],
                    l = n[4],
                    h = n[5],
                    c = n[12],
                    u = n[13],
                    _ = r[0],
                    f = r[1],
                    d = r[4],
                    p = r[5],
                    m = r[12],
                    y = r[13];
                0 !== a || 0 !== l ? (s[0] = _ * o + f * l, s[1] = _ * a + f * h, s[4] = d * o + p * l, s[5] = d * a + p * h, s[12] = o * m + l * y + c, s[13] = a * m + h * y + u) : (s[0] = _ * o, s[1] = f * h, s[4] = d * o, s[5] = p * h, s[12] = o * m + c, s[13] = h * y + u)
            },
            _updateWorldMatrix: function() {
                if (this._parent && this._parent._updateWorldMatrix(), this._worldMatDirty) {
                    this._calculWorldMatrix();
                    for (var t = this._children, e = 0, i = t.length; e < i; e++) t[e]._worldMatDirty = !0
                }
            },
            setLocalDirty: function(t) {
                this._localMatDirty |= t, this._worldMatDirty = !0, t === G.POSITION ? this._renderFlag |= _.FLAG_WORLD_TRANSFORM : this._renderFlag |= _.FLAG_TRANSFORM
            },
            setWorldDirty: function() {
                this._worldMatDirty = !0
            },
            getLocalMatrix: function(t) {
                return this._updateLocalMatrix(), n.mat4.copy(t, this._matrix)
            },
            getWorldMatrix: function(t) {
                return this._updateWorldMatrix(), n.mat4.copy(t, this._worldMatrix)
            },
            convertToNodeSpaceAR: function(t, e) {
                return this._updateWorldMatrix(), n.mat4.invert(F, this._worldMatrix), t instanceof cc.Vec2 ? (e = e || new cc.Vec2, n.vec2.transformMat4(e, t, F)) : (e = e || new cc.Vec3, n.vec3.transformMat4(e, t, F))
            },
            convertToWorldSpaceAR: function(t, e) {
                return this._updateWorldMatrix(), t instanceof cc.Vec2 ? (e = e || new cc.Vec2, n.vec2.transformMat4(e, t, this._worldMatrix)) : (e = e || new cc.Vec3, n.vec3.transformMat4(e, t, this._worldMatrix))
            },
            convertToNodeSpace: function(t) {
                this._updateWorldMatrix(), n.mat4.invert(F, this._worldMatrix);
                var e = new cc.Vec2;
                return n.vec2.transformMat4(e, t, F), e.x += this._anchorPoint.x * this._contentSize.width, e.y += this._anchorPoint.y * this._contentSize.height, e
            },
            convertToWorldSpace: function(t) {
                this._updateWorldMatrix();
                var e = new cc.Vec2(t.x - this._anchorPoint.x * this._contentSize.width, t.y - this._anchorPoint.y * this._contentSize.height);
                return n.vec2.transformMat4(e, e, this._worldMatrix)
            },
            getNodeToParentTransform: function(t) {
                t || (t = a.identity()), this._updateLocalMatrix();
                var e = this._contentSize;
                return N.x = -this._anchorPoint.x * e.width, N.y = -this._anchorPoint.y * e.height, n.mat4.copy(F, this._matrix), n.mat4.translate(F, F, N), a.fromMat4(t, F)
            },
            getNodeToParentTransformAR: function(t) {
                return t || (t = a.identity()), this._updateLocalMatrix(), a.fromMat4(t, this._matrix)
            },
            getNodeToWorldTransform: function(t) {
                t || (t = a.identity()), this._updateWorldMatrix();
                var e = this._contentSize;
                return N.x = -this._anchorPoint.x * e.width, N.y = -this._anchorPoint.y * e.height, n.mat4.copy(F, this._worldMatrix), n.mat4.translate(F, F, N), a.fromMat4(t, F)
            },
            getNodeToWorldTransformAR: function(t) {
                return t || (t = a.identity()), this._updateWorldMatrix(), a.fromMat4(t, this._worldMatrix)
            },
            getParentToNodeTransform: function(t) {
                return t || (t = a.identity()), this._updateLocalMatrix(), n.mat4.invert(F, this._matrix), a.fromMat4(t, F)
            },
            getWorldToNodeTransform: function(t) {
                return t || (t = a.identity()), this._updateWorldMatrix(), n.mat4.invert(F, this._worldMatrix), a.fromMat4(t, F)
            },
            convertTouchToNodeSpace: function(t) {
                return this.convertToNodeSpace(t.getLocation())
            },
            convertTouchToNodeSpaceAR: function(t) {
                return this.convertToNodeSpaceAR(t.getLocation())
            },
            getBoundingBox: function() {
                this._updateLocalMatrix();
                var t = this._contentSize.width,
                    e = this._contentSize.height,
                    i = cc.rect(-this._anchorPoint.x * t, -this._anchorPoint.y * e, t, e);
                return i.transformMat4(i, this._matrix)
            },
            getBoundingBoxToWorld: function() {
                return this._parent ? (this._parent._updateWorldMatrix(), this._getBoundingBoxTo(this._parent._worldMatrix)) : this.getBoundingBox()
            },
            _getBoundingBoxTo: function(t) {
                this._updateLocalMatrix();
                var e = this._contentSize.width,
                    i = this._contentSize.height,
                    r = cc.rect(-this._anchorPoint.x * e, -this._anchorPoint.y * i, e, i);
                t = n.mat4.mul(this._worldMatrix, t, this._matrix);
                if (r.transformMat4(r, t), !this._children) return r;
                for (var s = this._children, o = 0; o < s.length; o++) {
                    var a = s[o];
                    if (a && a.active) {
                        var l = a._getBoundingBoxTo(t);
                        l && r.union(r, l)
                    }
                }
                return r
            },
            _updateOrderOfArrival: function() {
                var t = this._parent ? ++this._parent._childArrivalOrder : 0;
                if (this._localZOrder = 4294901760 & this._localZOrder | t, 65535 === t) {
                    var e = this._parent._children;
                    e.forEach((function(t, e) {
                        t._localZOrder = 4294901760 & t._localZOrder | e + 1
                    })), this._parent._childArrivalOrder = e.length
                }
                this.emit(U.SIBLING_ORDER_CHANGED)
            },
            addChild: function(t, e, i) {
                cc.assertID(t, 1606), cc.assertID(null === t._parent, 1605), t.parent = this, void 0 !== e && (t.zIndex = e), void 0 !== i && (t.name = i)
            },
            cleanup: function() {
                p && cc.director.getActionManager().removeAllActionsFromTarget(this), l.removeListeners(this);
                var t, e, i = this._children.length;
                for (t = 0; t < i; ++t)(e = this._children[t]) && e.cleanup()
            },
            sortAllChildren: function() {
                if (this._reorderChildDirty) {
                    l._setDirtyForNode(this), this._reorderChildDirty = !1;
                    var t = this._children;
                    if (t.length > 1) {
                        var e, i, n, r = t.length;
                        for (e = 1; e < r; e++) {
                            for (n = t[e], i = e - 1; i >= 0 && n._localZOrder < t[i]._localZOrder;) t[i + 1] = t[i], i--;
                            t[i + 1] = n
                        }
                        this.emit(U.CHILD_REORDER, this)
                    }
                    cc.director.__fastOff(cc.Director.EVENT_AFTER_UPDATE, this.sortAllChildren, this)
                }
            },
            _delaySort: function() {
                this._reorderChildDirty || (this._reorderChildDirty = !0, cc.director.__fastOn(cc.Director.EVENT_AFTER_UPDATE, this.sortAllChildren, this))
            },
            _restoreProperties: !1,
            onRestore: !1
        };
        var at = cc.Class(ot),
            lt = at.prototype;
        c.getset(lt, "position", lt.getPosition, lt.setPosition, !1, !0), cc.Node = e.exports = at
    }), {
        "./event-manager": 129,
        "./event/event": 132,
        "./event/event-target": 131,
        "./platform/CCMacro": 203,
        "./platform/js": 218,
        "./renderer/render-flow": 248,
        "./utils/affine-transform": 290,
        "./utils/base-node": 291,
        "./utils/prefab-helper": 303,
        "./utils/trans-pool": 309,
        "./vmath": 326
    }],
    53: [(function(t, e, i) {
        "use strict";
        var n = t("./CCNode"),
            r = t("./renderer/render-flow"),
            s = (cc.Object.Flags.HideInHierarchy, n._LocalDirtyFlag),
            o = cc.Class({
                name: "cc.PrivateNode",
                extends: n,
                properties: {
                    x: {
                        get: function() {
                            return this._originPos.x
                        },
                        set: function(t) {
                            var e = this._originPos;
                            t !== e.x && (e.x = t, this._posDirty(!0))
                        },
                        override: !0
                    },
                    y: {
                        get: function() {
                            return this._originPos.y
                        },
                        set: function(t) {
                            var e = this._originPos;
                            t !== e.y && (e.y = t, this._posDirty(!0))
                        },
                        override: !0
                    },
                    zIndex: {
                        get: function() {
                            return cc.macro.MIN_ZINDEX
                        },
                        set: function() {
                            cc.warnID(1638)
                        },
                        override: !0
                    },
                    showInEditor: {
                        default: !1,
                        editorOnly: !0,
                        override: !0
                    }
                },
                ctor: function(t) {
                    this._localZOrder = cc.macro.MIN_ZINDEX << 16, this._originPos = cc.v2()
                },
                _posDirty: function(t) {
                    this.setLocalDirty(s.POSITION), this._renderFlag |= r.FLAG_TRANSFORM, !0 === t && 1 & this._eventMask && this.emit(n.EventType.POSITION_CHANGED)
                },
                _updateLocalMatrix: function() {
                    if (this._localMatDirty) {
                        var t = this.parent;
                        t && (this._trs[0] = this._originPos.x - (t._anchorPoint.x - .5) * t._contentSize.width, this._trs[1] = this._originPos.y - (t._anchorPoint.y - .5) * t._contentSize.height), this._super()
                    }
                },
                getPosition: function() {
                    return new cc.Vec2(this._originPos)
                },
                setPosition: function(t, e) {
                    void 0 === e && (e = (t = t.x).y);
                    var i = this._originPos;
                    i.x === t && i.y === e || (i.x = t, i.y = e, this._posDirty(!0))
                },
                setParent: function(t) {
                    var e = this._parent;
                    this._super(t), e !== t && (e && e.off(n.EventType.ANCHOR_CHANGED, this._posDirty, this), t && t.on(n.EventType.ANCHOR_CHANGED, this._posDirty, this))
                },
                _updateOrderOfArrival: function() {}
            });
        cc.js.getset(o.prototype, "parent", o.prototype.getParent, o.prototype.setParent), cc.js.getset(o.prototype, "position", o.prototype.getPosition, o.prototype.setPosition), cc.PrivateNode = e.exports = o
    }), {
        "./CCNode": 52,
        "./renderer/render-flow": 248
    }],
    54: [(function(t, e, i) {
        "use strict";
        cc.Scene = cc.Class({
            name: "cc.Scene",
            extends: t("./CCNode"),
            properties: {
                _is3DNode: {
                    default: !0,
                    override: !0
                },
                autoReleaseAssets: {
                    default: void 0,
                    type: cc.Boolean
                }
            },
            ctor: function() {
                this._anchorPoint.x = 0, this._anchorPoint.y = 0, this._activeInHierarchy = !1, this._inited = !cc.game._isCloning, this.dependAssets = null
            },
            destroy: function() {
                if (cc.Object.prototype.destroy.call(this))
                    for (var t = this._children, e = 0; e < t.length; ++e) t[e].active = !1;
                this._active = !1, this._activeInHierarchy = !1
            },
            _onHierarchyChanged: function() {},
            _instantiate: null,
            _load: function() {
                this._inited || (this._onBatchCreated(), this._inited = !0)
            },
            _activate: function(t) {
                t = !1 !== t, cc.director._nodeActivator.activateNode(this, t)
            }
        }), e.exports = cc.Scene
    }), {
        "./CCNode": 52
    }],
    55: [(function(t, e, i) {
        "use strict";
        var n = t("./platform/js"),
            r = new(t("./platform/id-generater"))("Scheduler"),
            s = function(t, e, i, n) {
                this.target = t, this.priority = e, this.paused = i, this.markedForDeletion = n
            },
            o = [];
        s.get = function(t, e, i, n) {
            var r = o.pop();
            return r ? (r.target = t, r.priority = e, r.paused = i, r.markedForDeletion = n) : r = new s(t, e, i, n), r
        }, s.put = function(t) {
            o.length < 20 && (t.target = null, o.push(t))
        };
        var a = function(t, e, i, n) {
                this.list = t, this.entry = e, this.target = i, this.callback = n
            },
            l = [];
        a.get = function(t, e, i, n) {
            var r = l.pop();
            return r ? (r.list = t, r.entry = e, r.target = i, r.callback = n) : r = new a(t, e, i, n), r
        }, a.put = function(t) {
            l.length < 20 && (t.list = t.entry = t.target = t.callback = null, l.push(t))
        };
        var h = function(t, e, i, n, r, s) {
                var o = this;
                o.timers = t, o.target = e, o.timerIndex = i, o.currentTimer = n, o.currentTimerSalvaged = r, o.paused = s
            },
            c = [];

        function u() {
            this._lock = !1, this._scheduler = null, this._elapsed = -1, this._runForever = !1, this._useDelay = !1, this._timesExecuted = 0, this._repeat = 0, this._delay = 0, this._interval = 0, this._target = null, this._callback = null
        }
        h.get = function(t, e, i, n, r, s) {
            var o = c.pop();
            return o ? (o.timers = t, o.target = e, o.timerIndex = i, o.currentTimer = n, o.currentTimerSalvaged = r, o.paused = s) : o = new h(t, e, i, n, r, s), o
        }, h.put = function(t) {
            c.length < 20 && (t.timers = t.target = t.currentTimer = null, c.push(t))
        };
        var _ = u.prototype;
        _.initWithCallback = function(t, e, i, n, r, s) {
            return this._lock = !1, this._scheduler = t, this._target = i, this._callback = e, this._elapsed = -1, this._interval = n, this._delay = s, this._useDelay = this._delay > 0, this._repeat = r, this._runForever = this._repeat === cc.macro.REPEAT_FOREVER, !0
        }, _.getInterval = function() {
            return this._interval
        }, _.setInterval = function(t) {
            this._interval = t
        }, _.update = function(t) {
            -1 === this._elapsed ? (this._elapsed = 0, this._timesExecuted = 0) : (this._elapsed += t, this._runForever && !this._useDelay ? this._elapsed >= this._interval && (this.trigger(), this._elapsed = 0) : (this._useDelay ? this._elapsed >= this._delay && (this.trigger(), this._elapsed -= this._delay, this._timesExecuted += 1, this._useDelay = !1) : this._elapsed >= this._interval && (this.trigger(), this._elapsed = 0, this._timesExecuted += 1), this._callback && !this._runForever && this._timesExecuted > this._repeat && this.cancel()))
        }, _.getCallback = function() {
            return this._callback
        }, _.trigger = function() {
            this._target && this._callback && (this._lock = !0, this._callback.call(this._target, this._elapsed), this._lock = !1)
        }, _.cancel = function() {
            this._scheduler.unschedule(this._callback, this._target)
        };
        var f = [];
        u.get = function() {
            return f.pop() || new u
        }, u.put = function(t) {
            f.length < 20 && !t._lock && (t._scheduler = t._target = t._callback = null, f.push(t))
        }, cc.Scheduler = function() {
            this._timeScale = 1, this._updatesNegList = [], this._updates0List = [], this._updatesPosList = [], this._hashForUpdates = n.createMap(!0), this._hashForTimers = n.createMap(!0), this._currentTarget = null, this._currentTargetSalvaged = !1, this._updateHashLocked = !1, this._arrayForTimers = []
        }, cc.Scheduler.prototype = {
            constructor: cc.Scheduler,
            _removeHashElement: function(t) {
                delete this._hashForTimers[t.target._id];
                for (var e = this._arrayForTimers, i = 0, n = e.length; i < n; i++)
                    if (e[i] === t) {
                        e.splice(i, 1);
                        break
                    }
                h.put(t)
            },
            _removeUpdateFromHash: function(t) {
                var e = t.target._id,
                    i = this._hashForUpdates[e];
                if (i) {
                    for (var n = i.list, r = i.entry, o = 0, l = n.length; o < l; o++)
                        if (n[o] === r) {
                            n.splice(o, 1);
                            break
                        }
                    delete this._hashForUpdates[e], s.put(r), a.put(i)
                }
            },
            _priorityIn: function(t, e, i) {
                for (var n = 0; n < t.length; n++)
                    if (i < t[n].priority) return void t.splice(n, 0, e);
                t.push(e)
            },
            _appendIn: function(t, e) {
                t.push(e)
            },
            enableForTarget: function(t) {
                t._id || (t.__instanceId ? cc.warnID(1513) : t._id = r.getNewId())
            },
            setTimeScale: function(t) {
                this._timeScale = t
            },
            getTimeScale: function() {
                return this._timeScale
            },
            update: function(t) {
                var e, i, n, r;
                for (this._updateHashLocked = !0, 1 !== this._timeScale && (t *= this._timeScale), e = 0, n = (i = this._updatesNegList).length; e < n; e++)(r = i[e]).paused || r.markedForDeletion || r.target.update(t);
                for (e = 0, n = (i = this._updates0List).length; e < n; e++)(r = i[e]).paused || r.markedForDeletion || r.target.update(t);
                for (e = 0, n = (i = this._updatesPosList).length; e < n; e++)(r = i[e]).paused || r.markedForDeletion || r.target.update(t);
                var s, o = this._arrayForTimers;
                for (e = 0; e < o.length; e++) {
                    if (s = o[e], this._currentTarget = s, this._currentTargetSalvaged = !1, !s.paused)
                        for (s.timerIndex = 0; s.timerIndex < s.timers.length; ++s.timerIndex) s.currentTimer = s.timers[s.timerIndex], s.currentTimerSalvaged = !1, s.currentTimer.update(t), s.currentTimer = null;
                    this._currentTargetSalvaged && 0 === this._currentTarget.timers.length && (this._removeHashElement(this._currentTarget), --e)
                }
                for (e = 0, i = this._updatesNegList; e < i.length;)(r = i[e]).markedForDeletion ? this._removeUpdateFromHash(r) : e++;
                for (e = 0, i = this._updates0List; e < i.length;)(r = i[e]).markedForDeletion ? this._removeUpdateFromHash(r) : e++;
                for (e = 0, i = this._updatesPosList; e < i.length;)(r = i[e]).markedForDeletion ? this._removeUpdateFromHash(r) : e++;
                this._updateHashLocked = !1, this._currentTarget = null
            },
            schedule: function(t, e, i, n, r, s) {
                if ("function" != typeof t) {
                    var o = t;
                    t = e, e = o
                }
                4 !== arguments.length && 5 !== arguments.length || (s = !!n, n = cc.macro.REPEAT_FOREVER, r = 0), cc.assertID(e, 1502);
                var a = e._id;
                a || (e.__instanceId ? (cc.warnID(1513), a = e._id = e.__instanceId) : cc.errorID(1510));
                var l, c, _ = this._hashForTimers[a];
                if (_ ? _.paused !== s && cc.warnID(1511) : (_ = h.get(null, e, 0, null, null, s), this._arrayForTimers.push(_), this._hashForTimers[a] = _), null == _.timers) _.timers = [];
                else
                    for (c = 0; c < _.timers.length; ++c)
                        if ((l = _.timers[c]) && t === l._callback) return cc.logID(1507, l.getInterval(), i), void(l._interval = i);
                (l = u.get()).initWithCallback(this, t, e, i, n, r), _.timers.push(l), this._currentTarget === _ && this._currentTargetSalvaged && (this._currentTargetSalvaged = !1)
            },
            scheduleUpdate: function(t, e, i) {
                var n = t._id;
                n || (t.__instanceId ? (cc.warnID(1513), n = t._id = t.__instanceId) : cc.errorID(1510));
                var r = this._hashForUpdates[n];
                if (r && r.entry) {
                    if (r.entry.priority === e) return r.entry.markedForDeletion = !1, void(r.entry.paused = i);
                    if (this._updateHashLocked) return cc.logID(1506), r.entry.markedForDeletion = !1, void(r.entry.paused = i);
                    this.unscheduleUpdate(t)
                }
                var o, l = s.get(t, e, i, !1);
                0 === e ? (o = this._updates0List, this._appendIn(o, l)) : (o = e < 0 ? this._updatesNegList : this._updatesPosList, this._priorityIn(o, l, e)), this._hashForUpdates[n] = a.get(o, l, t, null)
            },
            unschedule: function(t, e) {
                if (e && t) {
                    var i = e._id;
                    i || (e.__instanceId ? (cc.warnID(1513), i = e._id = e.__instanceId) : cc.errorID(1510));
                    var n = this._hashForTimers[i];
                    if (n)
                        for (var r = n.timers, s = 0, o = r.length; s < o; s++) {
                            var a = r[s];
                            if (t === a._callback) return a !== n.currentTimer || n.currentTimerSalvaged || (n.currentTimerSalvaged = !0), r.splice(s, 1), u.put(a), n.timerIndex >= s && n.timerIndex--, void(0 === r.length && (this._currentTarget === n ? this._currentTargetSalvaged = !0 : this._removeHashElement(n)))
                        }
                }
            },
            unscheduleUpdate: function(t) {
                if (t) {
                    var e = t._id;
                    e || (t.__instanceId ? (cc.warnID(1513), e = t._id = t.__instanceId) : cc.errorID(1510));
                    var i = this._hashForUpdates[e];
                    i && (this._updateHashLocked ? i.entry.markedForDeletion = !0 : this._removeUpdateFromHash(i.entry))
                }
            },
            unscheduleAllForTarget: function(t) {
                if (t) {
                    var e = t._id;
                    e || (t.__instanceId ? (cc.warnID(1513), e = t._id = t.__instanceId) : cc.errorID(1510));
                    var i = this._hashForTimers[e];
                    if (i) {
                        var n = i.timers;
                        n.indexOf(i.currentTimer) > -1 && !i.currentTimerSalvaged && (i.currentTimerSalvaged = !0);
                        for (var r = 0, s = n.length; r < s; r++) u.put(n[r]);
                        n.length = 0, this._currentTarget === i ? this._currentTargetSalvaged = !0 : this._removeHashElement(i)
                    }
                    this.unscheduleUpdate(t)
                }
            },
            unscheduleAll: function() {
                this.unscheduleAllWithMinPriority(cc.Scheduler.PRIORITY_SYSTEM)
            },
            unscheduleAllWithMinPriority: function(t) {
                var e, i, n, r = this._arrayForTimers;
                for (e = r.length - 1; e >= 0; e--) i = r[e], this.unscheduleAllForTarget(i.target);
                var s = 0;
                if (t < 0)
                    for (e = 0; e < this._updatesNegList.length;) s = this._updatesNegList.length, (n = this._updatesNegList[e]) && n.priority >= t && this.unscheduleUpdate(n.target), s == this._updatesNegList.length && e++;
                if (t <= 0)
                    for (e = 0; e < this._updates0List.length;) s = this._updates0List.length, (n = this._updates0List[e]) && this.unscheduleUpdate(n.target), s == this._updates0List.length && e++;
                for (e = 0; e < this._updatesPosList.length;) s = this._updatesPosList.length, (n = this._updatesPosList[e]) && n.priority >= t && this.unscheduleUpdate(n.target), s == this._updatesPosList.length && e++
            },
            isScheduled: function(t, e) {
                cc.assertID(t, 1508), cc.assertID(e, 1509);
                var i = e._id;
                i || (e.__instanceId ? (cc.warnID(1513), i = e._id = e.__instanceId) : cc.errorID(1510));
                var n = this._hashForTimers[i];
                if (!n) return !1;
                if (null == n.timers) return !1;
                for (var r = n.timers, s = 0; s < r.length; ++s) {
                    if (t === r[s]._callback) return !0
                }
                return !1
            },
            pauseAllTargets: function() {
                return this.pauseAllTargetsWithMinPriority(cc.Scheduler.PRIORITY_SYSTEM)
            },
            pauseAllTargetsWithMinPriority: function(t) {
                var e, i, n, r, s = [],
                    o = this._arrayForTimers;
                for (i = 0, n = o.length; i < n; i++)(e = o[i]) && (e.paused = !0, s.push(e.target));
                if (t < 0)
                    for (i = 0; i < this._updatesNegList.length; i++)(r = this._updatesNegList[i]) && r.priority >= t && (r.paused = !0, s.push(r.target));
                if (t <= 0)
                    for (i = 0; i < this._updates0List.length; i++)(r = this._updates0List[i]) && (r.paused = !0, s.push(r.target));
                for (i = 0; i < this._updatesPosList.length; i++)(r = this._updatesPosList[i]) && r.priority >= t && (r.paused = !0, s.push(r.target));
                return s
            },
            resumeTargets: function(t) {
                if (t)
                    for (var e = 0; e < t.length; e++) this.resumeTarget(t[e])
            },
            pauseTarget: function(t) {
                cc.assertID(t, 1503);
                var e = t._id;
                e || (t.__instanceId ? (cc.warnID(1513), e = t._id = t.__instanceId) : cc.errorID(1510));
                var i = this._hashForTimers[e];
                i && (i.paused = !0);
                var n = this._hashForUpdates[e];
                n && (n.entry.paused = !0)
            },
            resumeTarget: function(t) {
                cc.assertID(t, 1504);
                var e = t._id;
                e || (t.__instanceId ? (cc.warnID(1513), e = t._id = t.__instanceId) : cc.errorID(1510));
                var i = this._hashForTimers[e];
                i && (i.paused = !1);
                var n = this._hashForUpdates[e];
                n && (n.entry.paused = !1)
            },
            isTargetPaused: function(t) {
                cc.assertID(t, 1505);
                var e = t._id;
                e || (t.__instanceId ? (cc.warnID(1513), e = t._id = t.__instanceId) : cc.errorID(1510));
                var i = this._hashForTimers[e];
                if (i) return i.paused;
                var n = this._hashForUpdates[e];
                return !!n && n.entry.paused
            }
        }, cc.Scheduler.PRIORITY_SYSTEM = 1 << 31, cc.Scheduler.PRIORITY_NON_SYSTEM = cc.Scheduler.PRIORITY_SYSTEM + 1, e.exports = cc.Scheduler
    }), {
        "./platform/id-generater": 214,
        "./platform/js": 218
    }],
    56: [(function(t, e, i) {
        "use strict";
        var n = t("./CCRawAsset");
        cc.Asset = cc.Class({
            name: "cc.Asset",
            extends: n,
            ctor: function() {
                this.loaded = !0, this.url = ""
            },
            properties: {
                nativeUrl: {
                    get: function() {
                        if (this._native) {
                            var t = this._native;
                            if (47 === t.charCodeAt(0)) return t.slice(1);
                            if (cc.AssetLibrary) {
                                var e = cc.AssetLibrary.getLibUrlNoExt(this._uuid, !0);
                                return 46 === t.charCodeAt(0) ? e + t : e + "/" + t
                            }
                            cc.errorID(6400)
                        }
                        return ""
                    },
                    visible: !1
                },
                _native: "",
                _nativeAsset: {
                    get: function() {
                        return this._$nativeAsset
                    },
                    set: function(t) {
                        this._$nativeAsset = t
                    }
                }
            },
            statics: {
                deserialize: !1,
                preventDeferredLoadDependents: !1,
                preventPreloadNativeObject: !1
            },
            toString: function() {
                return this.nativeUrl
            },
            serialize: !1,
            createNode: null,
            _setRawAsset: function(t, e) {
                this._native = !1 !== e ? t || void 0 : "/" + t
            }
        }), e.exports = cc.Asset
    }), {
        "./CCRawAsset": 65
    }],
    57: [(function(t, e, i) {
        "use strict";
        var n = t("./CCAsset"),
            r = t("../event/event-target"),
            s = cc.Enum({
                WEB_AUDIO: 0,
                DOM_AUDIO: 1
            }),
            o = cc.Class({
                name: "cc.AudioClip",
                extends: n,
                mixins: [r],
                ctor: function() {
                    this.loaded = !1, this._audio = null
                },
                properties: {
                    loadMode: {
                        default: s.WEB_AUDIO,
                        type: s
                    },
                    _nativeAsset: {
                        get: function() {
                            return this._audio
                        },
                        set: function(t) {
                            t instanceof cc.AudioClip ? this._audio = t._nativeAsset : this._audio = t, this._audio && (this.loaded = !0, this.emit("load"))
                        },
                        override: !0
                    }
                },
                statics: {
                    LoadMode: s,
                    _loadByUrl: function(t, e) {
                        var i = cc.loader.getItem(t) || cc.loader.getItem(t + "?useDom=1");
                        i && i.complete ? i._owner instanceof o ? e(null, i._owner) : e(null, i.content) : cc.loader.load(t, (function(n, r) {
                            if (n) return e(n);
                            i = cc.loader.getItem(t) || cc.loader.getItem(t + "?useDom=1"), e(null, i.content)
                        }))
                    }
                },
                destroy: function() {
                    cc.audioEngine.uncache(this), this._super()
                }
            });
        cc.AudioClip = o, e.exports = o
    }), {
        "../event/event-target": 131,
        "./CCAsset": 56
    }],
    58: [(function(t, e, i) {
        "use strict";
        var n = function() {
                this.u = 0, this.v = 0, this.w = 0, this.h = 0, this.offsetX = 0, this.offsetY = 0, this.textureID = 0, this.valid = !1, this.xAdvance = 0
            },
            r = function(t) {
                this._letterDefinitions = {}, this._texture = t
            };
        r.prototype = {
            constructor: r,
            addLetterDefinitions: function(t, e) {
                this._letterDefinitions[t] = e
            },
            cloneLetterDefinition: function() {
                var t = {};
                for (var e in this._letterDefinitions) {
                    var i = new n;
                    cc.js.mixin(i, this._letterDefinitions[e]), t[e] = i
                }
                return t
            },
            getTexture: function() {
                return this._texture
            },
            getLetter: function(t) {
                return this._letterDefinitions[t]
            },
            getLetterDefinitionForChar: function(t) {
                var e = t.charCodeAt(0);
                return this._letterDefinitions.hasOwnProperty(e) ? this._letterDefinitions[e] : null
            },
            clear: function() {
                this._letterDefinitions = {}
            }
        };
        var s = cc.Class({
            name: "cc.BitmapFont",
            extends: cc.Font,
            properties: {
                fntDataStr: {
                    default: ""
                },
                spriteFrame: {
                    default: null,
                    type: cc.SpriteFrame
                },
                fontSize: {
                    default: -1
                },
                _fntConfig: null,
                _fontDefDictionary: null
            },
            onLoad: function() {
                var t = this.spriteFrame;
                !this._fontDefDictionary && t && (this._fontDefDictionary = new r(t._texture));
                var e = this._fntConfig;
                if (e) {
                    var i = e.fontDefDictionary;
                    for (var s in i) {
                        var o = new n,
                            a = i[s].rect;
                        o.offsetX = i[s].xOffset, o.offsetY = i[s].yOffset, o.w = a.width, o.h = a.height, o.u = a.x, o.v = a.y, o.textureID = 0, o.valid = !0, o.xAdvance = i[s].xAdvance, this._fontDefDictionary.addLetterDefinitions(s, o)
                    }
                }
            }
        });
        cc.BitmapFont = s, cc.BitmapFont.FontLetterDefinition = n, cc.BitmapFont.FontAtlas = r, e.exports = s
    }), {}],
    59: [(function(t, e, i) {
        "use strict";
        var n = cc.Class({
            name: "cc.BufferAsset",
            extends: cc.Asset,
            ctor: function() {
                this._buffer = null
            },
            properties: {
                _nativeAsset: {
                    get: function() {
                        return this._buffer
                    },
                    set: function(t) {
                        this._buffer = t.buffer || t
                    },
                    override: !0
                },
                buffer: function() {
                    return this._buffer
                }
            }
        });
        cc.BufferAsset = e.exports = n
    }), {}],
    60: [(function(t, e, i) {
        "use strict";
        var n = t("./CCAsset"),
            r = t("../../renderer/core/effect"),
            s = cc.Class({
                name: "cc.EffectAsset",
                extends: n,
                ctor: function() {
                    this._effect = null
                },
                properties: {
                    properties: Object,
                    techniques: [],
                    shaders: []
                },
                onLoad: function() {
                    if (cc.game.renderType !== cc.game.RENDER_TYPE_CANVAS) {
                        for (var t = cc.renderer._forward._programLib, e = 0; e < this.shaders.length; e++) t.define(this.shaders[e]);
                        this._initEffect()
                    }
                },
                _initEffect: function() {
                    this._effect || (this._effect = r.parseEffect(this))
                },
                getInstantiatedEffect: function() {
                    return this._initEffect(), this._effect.clone()
                }
            });
        e.exports = cc.EffectAsset = s
    }), {
        "../../renderer/core/effect": 349,
        "./CCAsset": 56
    }],
    61: [(function(t, e, i) {
        "use strict";
        var n = cc.Class({
            name: "cc.Font",
            extends: cc.Asset
        });
        cc.Font = e.exports = n
    }), {}],
    62: [(function(t, e, i) {
        "use strict";
        var n = cc.Class({
            name: "cc.JsonAsset",
            extends: cc.Asset,
            properties: {
                json: null
            }
        });
        e.exports = cc.JsonAsset = n
    }), {}],
    63: [(function(t, e, i) {
        "use strict";
        var n = cc.Class({
            name: "cc.LabelAtlas",
            extends: cc.BitmapFont,
            onLoad: function() {
                this.spriteFrame ? this._fntConfig ? this._super() : cc.warnID(9101, this.name) : cc.warnID(9100, this.name)
            }
        });
        cc.LabelAtlas = n, e.exports = n
    }), {}],
    64: [(function(t, e, i) {
        "use strict";
        var n = cc.Enum({
                AUTO: 0,
                SINGLE_INSTANCE: 1,
                MULTI_INSTANCE: 2
            }),
            r = cc.Class({
                name: "cc.Prefab",
                extends: cc.Asset,
                ctor: function() {
                    this._createFunction = null, this._instantiatedTimes = 0
                },
                properties: {
                    data: null,
                    optimizationPolicy: n.AUTO,
                    asyncLoadAssets: !1,
                    readonly: {
                        default: !1,
                        editorOnly: !0
                    }
                },
                statics: {
                    OptimizationPolicy: n,
                    OptimizationPolicyThreshold: 3
                },
                createNode: !1,
                compileCreateFunction: function() {
                    var e = t("../platform/instantiate-jit");
                    this._createFunction = e.compile(this.data)
                },
                _doInstantiate: function(t) {
                    return this.data._prefab ? this.data._prefab._synced = !0 : cc.warnID(3700), this._createFunction || this.compileCreateFunction(), this._createFunction(t)
                },
                _instantiate: function() {
                    var t;
                    return this.optimizationPolicy !== n.SINGLE_INSTANCE && (this.optimizationPolicy === n.MULTI_INSTANCE || this._instantiatedTimes + 1 >= r.OptimizationPolicyThreshold) ? (t = this._doInstantiate(), this.data._instantiate(t)) : (this.data._prefab._synced = !0, t = this.data._instantiate()), ++this._instantiatedTimes, t
                },
                destroy: function() {
                    this.data && this.data.destroy(), this._super()
                }
            });
        cc.Prefab = e.exports = r, cc.js.obsolete(cc, "cc._Prefab", "Prefab")
    }), {
        "../platform/instantiate-jit": 216
    }],
    65: [(function(t, e, i) {
        "use strict";
        var n = t("../platform/CCObject"),
            r = t("../platform/js");
        cc.RawAsset = cc.Class({
            name: "cc.RawAsset",
            extends: n,
            ctor: function() {
                Object.defineProperty(this, "_uuid", {
                    value: "",
                    writable: !0
                })
            }
        }), r.value(cc.RawAsset, "isRawAssetType", (function(t) {
            return r.isChildClassOf(t, cc.RawAsset) && !r.isChildClassOf(t, cc.Asset)
        })), r.value(cc.RawAsset, "wasRawAssetType", (function(t) {
            return t === cc.Texture2D || t === cc.AudioClip || t === cc.ParticleAsset || t === cc.Asset
        })), e.exports = cc.RawAsset
    }), {
        "../platform/CCObject": 204,
        "../platform/js": 218
    }],
    66: [(function(t, e, i) {
        "use strict";
        var n = (function(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        })(t("../../renderer/gfx"));
        var r = t("../renderer"),
            s = t("./CCTexture2D"),
            o = cc.Class({
                name: "cc.RenderTexture",
                extends: s,
                ctor: function() {
                    this._framebuffer = null
                },
                initWithSize: function(t, e, i) {
                    this.width = Math.floor(t || cc.visibleRect.width), this.height = Math.floor(e || cc.visibleRect.height), this._resetUnderlyingMipmaps();
                    var s = {
                        colors: [this._texture]
                    };
                    this._depthStencilBuffer && this._depthStencilBuffer.destroy();
                    var o = void 0;
                    i && (o = new n.default.RenderBuffer(r.device, i, t, e), i === n.default.RB_FMT_D24S8 ? s.depthStencil = o : i === n.default.RB_FMT_S8 ? s.stencil = o : i === n.default.RB_FMT_D16 && (s.depth = o)), this._depthStencilBuffer = o, this._framebuffer && this._framebuffer.destroy(), this._framebuffer = new n.default.FrameBuffer(r.device, t, e, s), this._packable = !1, this.loaded = !0, this.emit("load")
                },
                updateSize: function(t, e) {
                    this.width = Math.floor(t || cc.visibleRect.width), this.height = Math.floor(e || cc.visibleRect.height), this._resetUnderlyingMipmaps();
                    var i = this._depthStencilBuffer;
                    i && i.update(this.width, this.height), this._framebuffer._width = t, this._framebuffer._height = e
                },
                drawTextureAt: function(t, e, i) {
                    t._image && this._texture.updateSubImage({
                        x: e,
                        y: i,
                        image: t._image,
                        width: t.width,
                        height: t.height,
                        level: 0,
                        flipY: !1,
                        premultiplyAlpha: t._premultiplyAlpha
                    })
                },
                readPixels: function(t, e, i, n, r) {
                    if (!this._framebuffer || !this._texture) return t;
                    e = e || 0, i = i || 0;
                    var s = n || this.width,
                        o = r || this.height;
                    t = t || new Uint8Array(s * o * 4);
                    var a = cc.game._renderContext,
                        l = a.getParameter(a.FRAMEBUFFER_BINDING);
                    return a.bindFramebuffer(a.FRAMEBUFFER, this._framebuffer.getHandle()), a.readPixels(e, i, s, o, a.RGBA, a.UNSIGNED_BYTE, t), a.bindFramebuffer(a.FRAMEBUFFER, l), t
                },
                destroy: function() {
                    this._super(), this._framebuffer && (this._framebuffer.destroy(), this._framebuffer = null)
                }
            });
        cc.RenderTexture = e.exports = o
    }), {
        "../../renderer/gfx": 360,
        "../renderer": 247,
        "./CCTexture2D": 73
    }],
    67: [(function(t, e, i) {
        "use strict";
        var n = cc.Class({
            name: "cc.SceneAsset",
            extends: cc.Asset,
            properties: {
                scene: null,
                asyncLoadAssets: void 0
            }
        });
        cc.SceneAsset = n, e.exports = n
    }), {}],
    68: [(function(t, e, i) {
        "use strict";
        var n = cc.Class({
            name: "cc.Script",
            extends: cc.Asset
        });
        cc._Script = n;
        var r = cc.Class({
            name: "cc.JavaScript",
            extends: n
        });
        cc._JavaScript = r;
        var s = cc.Class({
            name: "cc.CoffeeScript",
            extends: n
        });
        cc._CoffeeScript = s;
        var o = cc.Class({
            name: "cc.TypeScript",
            extends: n
        });
        cc._TypeScript = o
    }), {}],
    69: [(function(t, e, i) {
        "use strict";
        var n = cc.Class({
            name: "cc.SpriteAtlas",
            extends: cc.Asset,
            properties: {
                _spriteFrames: {
                    default: {}
                }
            },
            getTexture: function() {
                var t = Object.keys(this._spriteFrames);
                if (t.length > 0) {
                    var e = this._spriteFrames[t[0]];
                    return e ? e.getTexture() : null
                }
                return null
            },
            getSpriteFrame: function(t) {
                var e = this._spriteFrames[t];
                return e ? (e.name || (e.name = t), e) : null
            },
            getSpriteFrames: function() {
                var t = [],
                    e = this._spriteFrames;
                for (var i in e) t.push(this.getSpriteFrame(i));
                return t
            }
        });
        cc.SpriteAtlas = n, e.exports = n
    }), {}],
    70: [(function(t, e, i) {
        "use strict";
        var n = t("../event/event-target"),
            r = t("../utils/texture-util"),
            s = [{
                u: 0,
                v: 0
            }, {
                u: 0,
                v: 0
            }, {
                u: 0,
                v: 0
            }, {
                u: 0,
                v: 0
            }],
            o = cc.Class({
                name: "cc.SpriteFrame",
                extends: t("../assets/CCAsset"),
                mixins: [n],
                properties: {
                    _textureSetter: {
                        set: function(t) {
                            t && (this._texture !== t && this._refreshTexture(t), this._textureFilename = t.url)
                        }
                    },
                    insetTop: {
                        get: function() {
                            return this._capInsets[1]
                        },
                        set: function(t) {
                            this._capInsets[1] = t, this._texture && this._calculateSlicedUV()
                        }
                    },
                    insetBottom: {
                        get: function() {
                            return this._capInsets[3]
                        },
                        set: function(t) {
                            this._capInsets[3] = t, this._texture && this._calculateSlicedUV()
                        }
                    },
                    insetLeft: {
                        get: function() {
                            return this._capInsets[0]
                        },
                        set: function(t) {
                            this._capInsets[0] = t, this._texture && this._calculateSlicedUV()
                        }
                    },
                    insetRight: {
                        get: function() {
                            return this._capInsets[2]
                        },
                        set: function(t) {
                            this._capInsets[2] = t, this._texture && this._calculateSlicedUV()
                        }
                    }
                },
                ctor: function() {
                    n.call(this);
                    var t = arguments[0],
                        e = arguments[1],
                        i = arguments[2],
                        r = arguments[3],
                        s = arguments[4];
                    this._rect = null, this.uv = [], this._texture = null, this._original = null, this._offset = null, this._originalSize = null, this._rotated = !1, this.vertices = null, this._capInsets = [0, 0, 0, 0], this.uvSliced = [], this._textureFilename = "", void 0 !== t && this.setTexture(t, e, i, r, s)
                },
                textureLoaded: function() {
                    return this._texture && this._texture.loaded
                },
                isRotated: function() {
                    return this._rotated
                },
                setRotated: function(t) {
                    this._rotated = t, this._texture && this._calculateUV()
                },
                getRect: function() {
                    return cc.rect(this._rect)
                },
                setRect: function(t) {
                    this._rect = t, this._texture && this._calculateUV()
                },
                getOriginalSize: function() {
                    return cc.size(this._originalSize)
                },
                setOriginalSize: function(t) {
                    this._originalSize ? (this._originalSize.width = t.width, this._originalSize.height = t.height) : this._originalSize = cc.size(t)
                },
                getTexture: function() {
                    return this._texture
                },
                _textureLoadedCallback: function() {
                    var t = this._texture;
                    if (t) {
                        var e = t.width,
                            i = t.height;
                        this._rect ? this._checkRect(this._texture) : this._rect = cc.rect(0, 0, e, i), this._originalSize || this.setOriginalSize(cc.size(e, i)), this._offset || this.setOffset(cc.v2(0, 0)), this._calculateUV(), this.emit("load")
                    }
                },
                _refreshTexture: function(t) {
                    this._texture = t, t.loaded ? this._textureLoadedCallback() : t.once("load", this._textureLoadedCallback, this)
                },
                getOffset: function() {
                    return cc.v2(this._offset)
                },
                setOffset: function(t) {
                    this._offset = cc.v2(t)
                },
                clone: function() {
                    return new o(this._texture || this._textureFilename, this._rect, this._rotated, this._offset, this._originalSize)
                },
                setTexture: function(t, e, i, n, r) {
                    this._rect = e || null, n ? this.setOffset(n) : this._offset = null, r ? this.setOriginalSize(r) : this._originalSize = null, this._rotated = i || !1;
                    var s = t;
                    return "string" == typeof s && s && (this._textureFilename = s, this._loadTexture()), s instanceof cc.Texture2D && this._texture !== s && this._refreshTexture(s), !0
                },
                _loadTexture: function() {
                    if (this._textureFilename) {
                        var t = r.loadImage(this._textureFilename);
                        this._refreshTexture(t)
                    }
                },
                ensureLoadTexture: function() {
                    this._texture ? this._texture.loaded || (this._refreshTexture(this._texture), r.postLoadTexture(this._texture)) : this._textureFilename && this._loadTexture()
                },
                _checkRect: function(t) {
                    var e = this._rect,
                        i = e.x,
                        n = e.y;
                    this._rotated ? (i += e.height, n += e.width) : (i += e.width, n += e.height), i > t.width && cc.errorID(3300, t.url + "/" + this.name, i, t.width), n > t.height && cc.errorID(3400, t.url + "/" + this.name, n, t.height)
                },
                _calculateSlicedUV: function() {
                    var t = this._rect,
                        e = this._texture.width,
                        i = this._texture.height,
                        n = this._capInsets[0],
                        r = this._capInsets[2],
                        o = t.width - n - r,
                        a = this._capInsets[1],
                        l = this._capInsets[3],
                        h = t.height - a - l,
                        c = this.uvSliced;
                    if (c.length = 0, this._rotated) {
                        s[0].u = t.x / e, s[1].u = (t.x + l) / e, s[2].u = (t.x + l + h) / e, s[3].u = (t.x + t.height) / e, s[3].v = t.y / i, s[2].v = (t.y + n) / i, s[1].v = (t.y + n + o) / i, s[0].v = (t.y + t.width) / i;
                        for (var u = 0; u < 4; ++u)
                            for (var _ = s[u], f = 0; f < 4; ++f) {
                                var d = s[3 - f];
                                c.push({
                                    u: _.u,
                                    v: d.v
                                })
                            }
                    } else {
                        s[0].u = t.x / e, s[1].u = (t.x + n) / e, s[2].u = (t.x + n + o) / e, s[3].u = (t.x + t.width) / e, s[3].v = t.y / i, s[2].v = (t.y + a) / i, s[1].v = (t.y + a + h) / i, s[0].v = (t.y + t.height) / i;
                        for (var p = 0; p < 4; ++p)
                            for (var m = s[p], y = 0; y < 4; ++y) {
                                var v = s[y];
                                c.push({
                                    u: v.u,
                                    v: m.v
                                })
                            }
                    }
                },
                _setDynamicAtlasFrame: function(t) {
                    t && (this._original = {
                        _texture: this._texture,
                        _x: this._rect.x,
                        _y: this._rect.y
                    }, this._texture = t.texture, this._rect.x = t.x, this._rect.y = t.y, this._calculateUV())
                },
                _resetDynamicAtlasFrame: function() {
                    this._original && (this._rect.x = this._original._x, this._rect.y = this._original._y, this._texture = this._original._texture, this._original = null, this._calculateUV())
                },
                _calculateUV: function() {
                    var t = this._rect,
                        e = this._texture,
                        i = this.uv,
                        n = e.width,
                        r = e.height;
                    if (this._rotated) {
                        var s = 0 === n ? 0 : t.x / n,
                            o = 0 === n ? 0 : (t.x + t.height) / n,
                            a = 0 === r ? 0 : (t.y + t.width) / r,
                            l = 0 === r ? 0 : t.y / r;
                        i[0] = s, i[1] = l, i[2] = s, i[3] = a, i[4] = o, i[5] = l, i[6] = o, i[7] = a
                    } else {
                        var h = 0 === n ? 0 : t.x / n,
                            c = 0 === n ? 0 : (t.x + t.width) / n,
                            u = 0 === r ? 0 : (t.y + t.height) / r,
                            _ = 0 === r ? 0 : t.y / r;
                        i[0] = h, i[1] = u, i[2] = c, i[3] = u, i[4] = h, i[5] = _, i[6] = c, i[7] = _
                    }
                    var f = this.vertices;
                    if (f) {
                        f.nu.length = 0, f.nv.length = 0;
                        for (var d = 0; d < f.u.length; d++) f.nu[d] = f.u[d] / n, f.nv[d] = f.v[d] / r
                    }
                    this._calculateSlicedUV()
                },
                _serialize: !1,
                _deserialize: function(t, e) {
                    var i = t.rect;
                    i && (this._rect = new cc.Rect(i[0], i[1], i[2], i[3])), t.offset && this.setOffset(new cc.Vec2(t.offset[0], t.offset[1])), t.originalSize && this.setOriginalSize(new cc.Size(t.originalSize[0], t.originalSize[1])), this._rotated = 1 === t.rotated, this._name = t.name;
                    var n = t.capInsets;
                    n && (this._capInsets[0] = n[0], this._capInsets[1] = n[1], this._capInsets[2] = n[2], this._capInsets[3] = n[3]), this.vertices = t.vertices, this.vertices && (this.vertices.nu = [], this.vertices.nv = []);
                    var r = t.texture;
                    r && e.result.push(this, "_textureSetter", r)
                }
            }),
            a = o.prototype;
        a.copyWithZone = a.clone, a.copy = a.clone, a.initWithTexture = a.setTexture, cc.SpriteFrame = o, e.exports = o
    }), {
        "../assets/CCAsset": 56,
        "../event/event-target": 131,
        "../utils/texture-util": 308
    }],
    71: [(function(t, e, i) {
        "use strict";
        var n = t("./CCFont"),
            r = cc.Class({
                name: "cc.TTFFont",
                extends: n,
                properties: {
                    _fontFamily: null,
                    _nativeAsset: {
                        type: cc.String,
                        get: function() {
                            return this._fontFamily
                        },
                        set: function(t) {
                            this._fontFamily = t || "Arial"
                        },
                        override: !0
                    }
                }
            });
        cc.TTFFont = e.exports = r
    }), {
        "./CCFont": 61
    }],
    72: [(function(t, e, i) {
        "use strict";
        var n = cc.Class({
            name: "cc.TextAsset",
            extends: cc.Asset,
            properties: {
                text: ""
            },
            toString: function() {
                return this.text
            }
        });
        e.exports = cc.TextAsset = n
    }), {}],
    73: [(function(t, e, i) {
        "use strict";
        var n = (function(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        })(t("../../renderer/gfx"));
        var r = t("../event/event-target"),
            s = t("../renderer");
        t("../platform/CCClass");
        var o = new(t("../platform/id-generater"))("Tex"),
            a = 1024,
            l = cc.Enum({
                RGB565: n.default.TEXTURE_FMT_R5_G6_B5,
                RGB5A1: n.default.TEXTURE_FMT_R5_G5_B5_A1,
                RGBA4444: n.default.TEXTURE_FMT_R4_G4_B4_A4,
                RGB888: n.default.TEXTURE_FMT_RGB8,
                RGBA8888: n.default.TEXTURE_FMT_RGBA8,
                RGBA32F: n.default.TEXTURE_FMT_RGBA32F,
                A8: n.default.TEXTURE_FMT_A8,
                I8: n.default.TEXTURE_FMT_L8,
                AI8: n.default.TEXTURE_FMT_L8_A8,
                RGB_PVRTC_2BPPV1: n.default.TEXTURE_FMT_RGB_PVRTC_2BPPV1,
                RGBA_PVRTC_2BPPV1: n.default.TEXTURE_FMT_RGBA_PVRTC_2BPPV1,
                RGB_A_PVRTC_2BPPV1: a++,
                RGB_PVRTC_4BPPV1: n.default.TEXTURE_FMT_RGB_PVRTC_4BPPV1,
                RGBA_PVRTC_4BPPV1: n.default.TEXTURE_FMT_RGBA_PVRTC_4BPPV1,
                RGB_A_PVRTC_4BPPV1: a++,
                RGB_ETC1: n.default.TEXTURE_FMT_RGB_ETC1,
                RGBA_ETC1: a++,
                RGB_ETC2: n.default.TEXTURE_FMT_RGB_ETC2,
                RGBA_ETC2: n.default.TEXTURE_FMT_RGBA_ETC2
            }),
            h = cc.Enum({
                REPEAT: 10497,
                CLAMP_TO_EDGE: 33071,
                MIRRORED_REPEAT: 33648
            }),
            c = cc.Enum({
                LINEAR: 9729,
                NEAREST: 9728
            }),
            u = {
                9728: 0,
                9729: 1
            },
            _ = [],
            f = {
                width: void 0,
                height: void 0,
                minFilter: void 0,
                magFilter: void 0,
                wrapS: void 0,
                wrapT: void 0,
                format: void 0,
                genMipmaps: void 0,
                images: void 0,
                image: void 0,
                flipY: void 0,
                premultiplyAlpha: void 0
            };

        function d() {
            for (var t in f) f[t] = void 0;
            return _.length = 0, f.images = _, f.flipY = !1, f
        }
        var p = cc.Class({
            name: "cc.Texture2D",
            extends: t("../assets/CCAsset"),
            mixins: [r],
            properties: {
                _nativeAsset: {
                    get: function() {
                        return this._image
                    },
                    set: function(t) {
                        t._compressed && t._data ? this.initWithData(t._data, this._format, t.width, t.height) : this.initWithElement(t)
                    },
                    override: !0
                },
                _format: l.RGBA8888,
                _premultiplyAlpha: !1,
                _flipY: !1,
                _minFilter: c.LINEAR,
                _magFilter: c.LINEAR,
                _mipFilter: c.LINEAR,
                _wrapS: h.CLAMP_TO_EDGE,
                _wrapT: h.CLAMP_TO_EDGE,
                _genMipmaps: !1,
                genMipmaps: {
                    get: function() {
                        return this._genMipmaps
                    },
                    set: function(t) {
                        if (this._genMipmaps !== t) {
                            var e = d();
                            e.genMipmaps = t, this.update(e)
                        }
                    }
                },
                _packable: !0,
                packable: {
                    get: function() {
                        return this._packable
                    },
                    set: function(t) {
                        this._packable = t
                    }
                }
            },
            statics: {
                PixelFormat: l,
                WrapMode: h,
                Filter: c,
                _FilterIndex: u,
                extnames: [".png", ".jpg", ".jpeg", ".bmp", ".webp", ".pvr", ".pkm"]
            },
            ctor: function() {
                this._id = o.getNewId(), this.loaded = !1, this.width = 0, this.height = 0, this._hashDirty = !0, this._hash = 0, this._texture = null
            },
            getImpl: function() {
                return this._texture
            },
            getId: function() {
                return this._id
            },
            toString: function() {
                return this.url || ""
            },
            update: function(t) {
                if (t) {
                    var e = !1;
                    void 0 !== t.width && (this.width = t.width), void 0 !== t.height && (this.height = t.height), void 0 !== t.minFilter && (this._minFilter = t.minFilter, t.minFilter = u[t.minFilter]), void 0 !== t.magFilter && (this._magFilter = t.magFilter, t.magFilter = u[t.magFilter]), void 0 !== t.mipFilter && (this._mipFilter = t.mipFilter, t.mipFilter = u[t.mipFilter]), void 0 !== t.wrapS && (this._wrapS = t.wrapS), void 0 !== t.wrapT && (this._wrapT = t.wrapT), void 0 !== t.format && (this._format = t.format), void 0 !== t.flipY && (this._flipY = t.flipY, e = !0), void 0 !== t.premultiplyAlpha && (this._premultiplyAlpha = t.premultiplyAlpha, e = !0), void 0 !== t.genMipmaps && (this._genMipmaps = t.genMipmaps), e && this._image && (t.image = this._image), t.images && t.images.length > 0 ? this._image = t.images[0] : void 0 !== t.image && (this._image = t.image, t.images || (_.length = 0, t.images = _), t.images.push(t.image)), t.images && t.images.length > 0 && this._texture.update(t), this._hashDirty = !0
                }
            },
            initWithElement: function(t) {
                if (t)
                    if (this._image = t, t.complete || t instanceof HTMLCanvasElement) this.handleLoadedTexture();
                    else {
                        var e = this;
                        t.addEventListener("load", (function() {
                            e.handleLoadedTexture()
                        })), t.addEventListener("error", (function(t) {
                            cc.warnID(3119, t.message)
                        }))
                    }
            },
            initWithData: function(t, e, i, n) {
                var r = d();
                return r.image = t, r.images = [r.image], r.genMipmaps = this._genMipmaps, r.premultiplyAlpha = this._premultiplyAlpha, r.flipY = this._flipY, r.minFilter = u[this._minFilter], r.magFilter = u[this._magFilter], r.wrapS = this._wrapS, r.wrapT = this._wrapT, r.format = this._getGFXPixelFormat(e), r.width = i, r.height = n, this._texture ? this._texture.update(r) : this._texture = new s.Texture2D(s.device, r), this.width = i, this.height = n, this._checkPackable(), this.loaded = !0, this.emit("load"), !0
            },
            getHtmlElementObj: function() {
                return this._image
            },
            destroy: function() {
                this._image = null, this._texture && this._texture.destroy(), this._super()
            },
            getPixelFormat: function() {
                return this._format
            },
            hasPremultipliedAlpha: function() {
                return this._premultiplyAlpha || !1
            },
            handleLoadedTexture: function() {
                if (this._image && this._image.width && this._image.height) {
                    this.width = this._image.width, this.height = this._image.height;
                    var t = d();
                    t.image = this._image, t.images = [t.image], t.width = this.width, t.height = this.height, t.genMipmaps = this._genMipmaps, t.format = this._getGFXPixelFormat(this._format), t.premultiplyAlpha = this._premultiplyAlpha, t.flipY = this._flipY, t.minFilter = u[this._minFilter], t.magFilter = u[this._magFilter], t.wrapS = this._wrapS, t.wrapT = this._wrapT, this._texture ? this._texture.update(t) : this._texture = new s.Texture2D(s.device, t), this._checkPackable(), this.loaded = !0, this.emit("load"), cc.macro.CLEANUP_IMAGE_CACHE && this._image instanceof HTMLImageElement && this._clearImage()
                }
            },
            description: function() {
                return "<cc.Texture2D | Name = " + this.url + " | Dimensions = " + this.width + " x " + this.height + ">"
            },
            releaseTexture: function() {
                this._image = null, this._texture && this._texture.destroy()
            },
            setWrapMode: function(t, e) {
                if (this._wrapS !== t || this._wrapT !== e) {
                    var i = d();
                    i.wrapS = t, i.wrapT = e, this.update(i)
                }
            },
            setFilters: function(t, e) {
                if (this._minFilter !== t || this._magFilter !== e) {
                    var i = d();
                    i.minFilter = t, i.magFilter = e, this.update(i)
                }
            },
            setFlipY: function(t) {
                if (this._flipY !== t) {
                    var e = d();
                    e.flipY = t, this.update(e)
                }
            },
            setPremultiplyAlpha: function(t) {
                if (this._premultiplyAlpha !== t) {
                    var e = d();
                    e.premultiplyAlpha = t, this.update(e)
                }
            },
            _checkPackable: function() {
                var t = cc.dynamicAtlasManager;
                if (t)
                    if (this._isCompressed()) this._packable = !1;
                    else {
                        var e = this.width,
                            i = this.height;
                        !this._image || e > t.maxFrameSize || i > t.maxFrameSize || e <= t.minFrameSize || i <= t.minFrameSize || this._getHash() !== t.Atlas.DEFAULT_HASH ? this._packable = !1 : this._image && this._image instanceof HTMLCanvasElement && (this._packable = !0)
                    }
            },
            _getOpts: function() {
                var t = d();
                return t.width = this.width, t.height = this.height, t.genMipmaps = this._genMipmaps, t.format = this._format, t.premultiplyAlpha = this._premultiplyAlpha, t.anisotropy = this._anisotropy, t.flipY = this._flipY, t.minFilter = u[this._minFilter], t.magFilter = u[this._magFilter], t.mipFilter = u[this._mipFilter], t.wrapS = this._wrapS, t.wrapT = this._wrapT, t
            },
            _getGFXPixelFormat: function(t) {
                return t === l.RGBA_ETC1 ? t = l.RGB_ETC1 : t === l.RGB_A_PVRTC_4BPPV1 ? t = l.RGB_PVRTC_4BPPV1 : t === l.RGB_A_PVRTC_2BPPV1 && (t = l.RGB_PVRTC_2BPPV1), t
            },
            _resetUnderlyingMipmaps: function(t) {
                var e = this._getOpts();
                e.images = t || [null], this._texture ? this._texture.update(e) : this._texture = new s.Texture2D(s.device, e)
            },
            _serialize: !1,
            _deserialize: function(t, e) {
                var i = cc.renderer.device,
                    n = t.split(","),
                    r = n[0];
                if (r) {
                    for (var s = r.split("_"), o = "", a = "", h = 999, c = this._format, u = cc.macro.SUPPORT_TEXTURE_FORMATS, _ = 0; _ < s.length; _++) {
                        var f = s[_].split("@"),
                            d = f[0];
                        d = p.extnames[d.charCodeAt(0) - 48] || d;
                        var m = u.indexOf(d);
                        if (-1 !== m && m < h) {
                            var y = f[1] ? parseInt(f[1]) : this._format;
                            if (".pvr" === d && !i.ext("WEBGL_compressed_texture_pvrtc")) continue;
                            if (!(y !== l.RGB_ETC1 && y !== l.RGBA_ETC1 || i.ext("WEBGL_compressed_texture_etc1"))) continue;
                            if (!(y !== l.RGB_ETC2 && y !== l.RGBA_ETC2 || i.ext("WEBGL_compressed_texture_etc"))) continue;
                            if (".webp" === d && !cc.sys.capabilities.webp) continue;
                            h = m, a = d, c = y
                        } else o || (o = d)
                    }
                    a ? (this._setRawAsset(a), this._format = c) : (this._setRawAsset(o), cc.warnID(3120, e.customEnv.url, o, o))
                }
                8 === n.length && (this._minFilter = parseInt(n[1]), this._magFilter = parseInt(n[2]), this._wrapS = parseInt(n[3]), this._wrapT = parseInt(n[4]), this._premultiplyAlpha = 49 === n[5].charCodeAt(0), this._genMipmaps = 49 === n[6].charCodeAt(0), this._packable = 49 === n[7].charCodeAt(0))
            },
            _getHash: function() {
                if (!this._hashDirty) return this._hash;
                var t = this._genMipmaps ? 1 : 0,
                    e = this._premultiplyAlpha ? 1 : 0,
                    i = this._flipY ? 1 : 0,
                    n = this._minFilter === c.LINEAR ? 1 : 2,
                    r = this._magFilter === c.LINEAR ? 1 : 2,
                    s = this._wrapS === h.REPEAT ? 1 : this._wrapS === h.CLAMP_TO_EDGE ? 2 : 3,
                    o = this._wrapT === h.REPEAT ? 1 : this._wrapT === h.CLAMP_TO_EDGE ? 2 : 3,
                    a = this._format;
                this._image;
                return this._hash = Number("" + n + r + a + s + o + t + e + i), this._hashDirty = !1, this._hash
            },
            _isCompressed: function() {
                return this._texture && this._texture._compressed
            },
            _clearImage: function() {
                cc.loader.removeItem(this._image.id || this._image.src), this._image.src = ""
            }
        });
        cc.Texture2D = e.exports = p
    }), {
        "../../renderer/gfx": 360,
        "../assets/CCAsset": 56,
        "../event/event-target": 131,
        "../platform/CCClass": 198,
        "../platform/id-generater": 214,
        "../renderer": 247
    }],
    74: [(function(t, e, i) {
        "use strict";
        t("./CCRawAsset"), t("./CCAsset"), t("./CCFont"), t("./CCPrefab"), t("./CCAudioClip"), t("./CCScripts"), t("./CCSceneAsset"), t("./CCSpriteFrame"), t("./CCTexture2D"), t("./CCRenderTexture"), t("./CCTTFFont"), t("./CCSpriteAtlas"), t("./CCBitmapFont"), t("./CCLabelAtlas"), t("./CCTextAsset"), t("./CCJsonAsset"), t("./CCBufferAsset"), t("./CCEffectAsset"), t("./material/CCMaterial")
    }), {
        "./CCAsset": 56,
        "./CCAudioClip": 57,
        "./CCBitmapFont": 58,
        "./CCBufferAsset": 59,
        "./CCEffectAsset": 60,
        "./CCFont": 61,
        "./CCJsonAsset": 62,
        "./CCLabelAtlas": 63,
        "./CCPrefab": 64,
        "./CCRawAsset": 65,
        "./CCRenderTexture": 66,
        "./CCSceneAsset": 67,
        "./CCScripts": 68,
        "./CCSpriteAtlas": 69,
        "./CCSpriteFrame": 70,
        "./CCTTFFont": 71,
        "./CCTextAsset": 72,
        "./CCTexture2D": 73,
        "./material/CCMaterial": 75
    }],
    75: [(function(t, e, i) {
        "use strict";
        var n = o(t("../../../renderer/murmurhash2_gc")),
            r = o(t("./utils")),
            s = o(t("./material-pool"));

        function o(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }
        var a = t("../CCAsset"),
            l = t("../CCTexture2D"),
            h = l.PixelFormat,
            c = t("../CCEffectAsset"),
            u = t("../../utils/texture-util"),
            _ = cc.Class({
                name: "cc.Material",
                extends: a,
                ctor: function() {
                    this._manualHash = !1, this._dirty = !0, this._effect = null, this._owner = null, this._hash = 0
                },
                properties: {
                    _effectAsset: {
                        type: c,
                        default: null
                    },
                    _defines: {
                        default: {},
                        type: Object
                    },
                    _props: {
                        default: {},
                        type: Object
                    },
                    effectName: void 0,
                    effectAsset: {
                        get: function() {
                            return this._effectAsset
                        },
                        set: function(t) {
                            cc.game.renderType !== cc.game.RENDER_TYPE_CANVAS && (this._effectAsset = t, t ? this._effect = this._effectAsset.getInstantiatedEffect() : cc.error("Can not set an empty effect asset."))
                        }
                    },
                    effect: {
                        get: function() {
                            return this._effect
                        }
                    },
                    owner: {
                        get: function() {
                            return this._owner
                        }
                    }
                },
                statics: {
                    getBuiltinMaterial: function(t) {
                        return cc.AssetLibrary.getBuiltin("material", "builtin-" + t)
                    },
                    getInstantiatedBuiltinMaterial: function(t, e) {
                        var i = this.getBuiltinMaterial(t);
                        return _.getInstantiatedMaterial(i, e)
                    },
                    getInstantiatedMaterial: function(t, e) {
                        return t._owner === e ? t : s.default.get(t, e)
                    }
                },
                copy: function(t) {
                    for (var e in this.effectAsset = t.effectAsset, t._defines) this.define(e, t._defines[e]);
                    for (var i in t._props) this.setProperty(i, t._props[i])
                },
                setProperty: function(t, e, i) {
                    if ((this._props[t] !== e || i) && (this._props[t] = e, this._dirty = !0, this._effect))
                        if (e instanceof l) {
                            var n = function() {
                                this._effect.setProperty(t, e);
                                var i = e.getPixelFormat();
                                i !== h.RGBA_ETC1 && i !== h.RGB_A_PVRTC_4BPPV1 && i !== h.RGB_A_PVRTC_2BPPV1 || this.define("CC_USE_ALPHA_ATLAS_" + t.toUpperCase(), !0)
                            };
                            e.loaded ? n.call(this) : (e.once("load", n, this), u.postLoadTexture(e))
                        } else this._effect.setProperty(t, e)
                },
                getProperty: function(t) {
                    return this._props[t]
                },
                define: function(t, e, i) {
                    (this._defines[t] !== e || i) && (this._defines[t] = e, this._dirty = !0, this._effect && this._effect.define(t, e))
                },
                getDefine: function(t) {
                    return this._defines[t]
                },
                setDirty: function(t) {
                    this._dirty = t
                },
                updateHash: function(t) {
                    void 0 === t || null === t ? t = this.computeHash() : this._manualHash = !0, this._dirty = !1, this._hash = t, this._effect && this._effect.updateHash(this._hash)
                },
                computeHash: function() {
                    var t = this._effect,
                        e = "";
                    return t && (e += r.default.serializeDefines(t._defines), e += r.default.serializeTechniques(t._techniques), e += r.default.serializeUniforms(t._properties)), (0, n.default)(e, 666)
                },
                getHash: function() {
                    return this._dirty ? (this._manualHash || this.updateHash(), this._dirty = !1, this._hash) : this._hash
                },
                onLoad: function() {
                    if (this.effectAsset = this._effectAsset, this._effect) {
                        for (var t in this._defines) this.define(t, this._defines[t], !0);
                        for (var e in this._props) this.setProperty(e, this._props[e], !0)
                    }
                }
            });
        e.exports = cc.Material = _
    }), {
        "../../../renderer/murmurhash2_gc": 378,
        "../../utils/texture-util": 308,
        "../CCAsset": 56,
        "../CCEffectAsset": 60,
        "../CCTexture2D": 73,
        "./material-pool": 77,
        "./utils": 78
    }],
    76: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.default = void 0;
        var n = s(t("../../../renderer/murmurhash2_gc")),
            r = s(t("./utils"));

        function s(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }

        function o(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }
        var a = (function() {
            function t() {
                o(this, t), this._properties = {}, this._defines = {}, this._dirty = !1
            }
            return t.prototype.setProperty = function(t, e, i, n) {
                var r = this._properties[t];
                if (r) {
                    if (r.value === e) return
                } else(r = Object.create(null)).name = t, r.type = i, r.directly = n, this._properties[t] = r;
                this._dirty = !0, r.directly = n, r.value = e
            }, t.prototype.getProperty = function(t) {
                var e = this._properties[t];
                return e ? e.value : null
            }, t.prototype.define = function(t, e) {
                this._defines[t] !== e && (this._dirty = !0, this._defines[t] = e)
            }, t.prototype.getDefine = function(t) {
                return this._defines[t]
            }, t.prototype.extractProperties = function() {
                var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
                return Object.assign(t, this._properties), t
            }, t.prototype.extractDefines = function() {
                var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
                return Object.assign(t, this._defines), t
            }, t.prototype.getHash = function() {
                if (!this._dirty) return this._hash;
                this._dirty = !1;
                var t = "";
                return t += r.default.serializeDefines(this._defines), t += r.default.serializeUniforms(this._properties), this._hash = (0, n.default)(t, 666)
            }, t
        })();
        i.default = a, cc.CustomProperties = a, e.exports = i.default
    }), {
        "../../../renderer/murmurhash2_gc": 378,
        "./utils": 78
    }],
    77: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0;
        var n = s(t("./utils")),
            r = s(t("../../utils/pool"));

        function s(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }

        function o(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }

        function a(t, e) {
            if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
            return !e || "object" != typeof e && "function" != typeof e ? t : e
        }

        function l(t, e) {
            if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e);
            t.prototype = Object.create(e && e.prototype, {
                constructor: {
                    value: t,
                    enumerable: !1,
                    writable: !0,
                    configurable: !0
                }
            }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e)
        }
        var h = new(function(t) {
            function e() {
                var i, n;
                o(this, e);
                for (var r = arguments.length, s = Array(r), l = 0; l < r; l++) s[l] = arguments[l];
                return i = n = a(this, t.call.apply(t, [this].concat(s))), n.enabled = !1, n._pool = {}, a(n, i)
            }
            return l(e, t), e.prototype.get = function(t, e) {
                var i = this._pool,
                    r = void 0;
                if (this.enabled) {
                    var s = t.effectAsset._uuid;
                    if (i[s]) {
                        var o = n.default.serializeDefines(t._effect._defines) + n.default.serializeTechniques(t._effect._techniques);
                        r = i[s][o] && i[s][o].pop()
                    }
                }
                return r ? this.count-- : ((r = new cc.Material).copy(t), r._name = t._name + " (Instance)", r._uuid = t._uuid), r._owner = e, r
            }, e.prototype.put = function(t) {
                if (this.enabled && t._owner) {
                    var e = this._pool,
                        i = t.effectAsset._uuid;
                    e[i] || (e[i] = {});
                    var r = n.default.serializeDefines(t._effect._defines) + n.default.serializeTechniques(t._effect._techniques);
                    e[i][r] || (e[i][r] = []), this.count > this.maxSize || (this._clean(t), e[i][r].push(t), this.count++)
                }
            }, e.prototype.clear = function() {
                this._pool = {}, this.count = 0
            }, e.prototype._clean = function(t) {
                t._owner = null
            }, e
        }(r.default));
        r.default.register("material", h), i.default = h, e.exports = i.default
    }), {
        "../../utils/pool": 302,
        "./utils": 78
    }],
    78: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0;
        var n = (function(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        })(t("../../../renderer/enums"));

        function r(t) {
            var e = t._programName + t._cullMode;
            return t._blend && (e += t._blendEq + t._blendAlphaEq + t._blendSrc + t._blendDst + t._blendSrcAlpha + t._blendDstAlpha + t._blendColor), t._depthTest && (e += t._depthWrite + t._depthFunc), t._stencilTest && (e += t._stencilFuncFront + t._stencilRefFront + t._stencilMaskFront + t._stencilFailOpFront + t._stencilZFailOpFront + t._stencilZPassOpFront + t._stencilWriteMaskFront + t._stencilFuncBack + t._stencilRefBack + t._stencilMaskBack + t._stencilFailOpBack + t._stencilZFailOpBack + t._stencilZPassOpBack + t._stencilWriteMaskBack), e
        }
        i.default = {
            serializeDefines: function(t) {
                var e = "";
                for (var i in t) e += i + t[i];
                return e
            },
            serializeTechniques: function(t) {
                for (var e = "", i = 0; i < t.length; i++) {
                    var n = t[i];
                    e += n.stageIDs;
                    for (var s = 0; s < n.passes.length; s++) e += r(n.passes[s])
                }
                return e
            },
            serializeUniforms: function(t) {
                var e = "";
                for (var i in t) {
                    var r = t[i],
                        s = r.value;
                    s && (r.type === n.default.PARAM_TEXTURE_2D || r.type === n.default.PARAM_TEXTURE_CUBE ? e += s._id + ";" : e += s.toString() + ";")
                }
                return e
            }
        }, e.exports = i.default
    }), {
        "../../../renderer/enums": 355
    }],
    79: [(function(t, e, i) {
        "use strict";
        t("../CCNode").EventType;
        var n = 56,
            r = 7,
            s = cc.Enum({
                ONCE: 0,
                ON_WINDOW_RESIZE: 1,
                ALWAYS: 2
            });

        function o(t) {
            return t instanceof cc.Scene ? cc.visibleRect : t._contentSize
        }

        function a(t, e, i, n) {
            for (var r = t._parent.scaleX, s = t._parent.scaleY, o = 0, a = 0, l = t._parent;;) {
                if (o += l.x, a += l.y, !(l = l._parent)) return i.x = i.y = 0, void(n.x = n.y = 1);
                if (l === e) break;
                var h = l.scaleX,
                    c = l.scaleY;
                o *= h, a *= c, r *= h, s *= c
            }
            n.x = 0 !== r ? 1 / r : 1, n.y = 0 !== s ? 1 / s : 1, i.x = -o, i.y = -a
        }
        var l = cc.Vec2.ZERO,
            h = cc.Vec2.ONE;

        function c(t, e) {
            var i, s, c, u = e._target;
            u ? a(t, i = u, s = l, c = h) : i = t._parent;
            var _ = o(i),
                f = i._anchorPoint,
                d = i instanceof cc.Scene,
                p = t.x,
                m = t.y,
                y = t._anchorPoint;
            if (e._alignFlags & n) {
                var v, g, x = _.width;
                d ? (v = cc.visibleRect.left.x, g = cc.visibleRect.right.x) : g = (v = -f.x * x) + x, v += e._isAbsLeft ? e._left : e._left * x, g -= e._isAbsRight ? e._right : e._right * x, u && (v += s.x, v *= c.x, g += s.x, g *= c.x);
                var b, A = y.x,
                    C = t.scaleX;
                if (C < 0 && (A = 1 - A, C = -C), e.isStretchWidth) b = g - v, 0 !== C && (t.width = b / C), p = v + A * b;
                else if (b = t.width * C, e.isAlignHorizontalCenter) {
                    var T = e._isAbsHorizontalCenter ? e._horizontalCenter : e._horizontalCenter * x,
                        S = (.5 - f.x) * _.width;
                    u && (T *= c.x, S += s.x, S *= c.x), p = S + (A - .5) * b + T
                } else p = e.isAlignLeft ? v + A * b : g + (A - 1) * b
            }
            if (e._alignFlags & r) {
                var w, E, M = _.height;
                d ? (E = cc.visibleRect.bottom.y, w = cc.visibleRect.top.y) : w = (E = -f.y * M) + M, E += e._isAbsBottom ? e._bottom : e._bottom * M, w -= e._isAbsTop ? e._top : e._top * M, u && (E += s.y, E *= c.y, w += s.y, w *= c.y);
                var D, B = y.y,
                    I = t.scaleY;
                if (I < 0 && (B = 1 - B, I = -I), e.isStretchHeight) D = w - E, 0 !== I && (t.height = D / I), m = E + B * D;
                else if (D = t.height * I, e.isAlignVerticalCenter) {
                    var P = e._isAbsVerticalCenter ? e._verticalCenter : e._verticalCenter * M,
                        R = (.5 - f.y) * _.height;
                    u && (P *= c.y, R += s.y, R *= c.y), m = R + (B - .5) * D + P
                } else m = e.isAlignBottom ? E + B * D : w + (B - 1) * D
            }
            t.setPosition(p, m)
        }

        function u(t) {
            var e = t._widget;
            e && (c(t, e), e.alignMode !== s.ALWAYS ? e.enabled = !1 : f.push(e));
            for (var i = t._children, n = 0; n < i.length; n++) {
                var r = i[n];
                r._active && u(r)
            }
        }

        function _() {
            var t = cc.director.getScene();
            if (t) {
                if (d.isAligning = !0, d._nodesOrderDirty) f.length = 0, u(t), d._nodesOrderDirty = !1;
                else {
                    var e, i = d._activeWidgetsIterator;
                    for (i.i = 0; i.i < f.length; ++i.i) c((e = f[i.i]).node, e)
                }
                d.isAligning = !1
            }
        }
        var f = [];
        var d = cc._widgetManager = e.exports = {
            _AlignFlags: {
                TOP: 1,
                MID: 2,
                BOT: 4,
                LEFT: 8,
                CENTER: 16,
                RIGHT: 32
            },
            isAligning: !1,
            _nodesOrderDirty: !1,
            _activeWidgetsIterator: new cc.js.array.MutableForwardIterator(f),
            init: function(t) {
                t.on(cc.Director.EVENT_AFTER_UPDATE, _), cc.sys.isMobile ? window.addEventListener("resize", this.onResized.bind(this)) : cc.view.on("canvas-resize", this.onResized, this)
            },
            add: function(t) {
                t.node._widget = t, this._nodesOrderDirty = !0
            },
            remove: function(t) {
                t.node._widget = null, this._activeWidgetsIterator.remove(t)
            },
            onResized: function() {
                var t = cc.director.getScene();
                t && this.refreshWidgetOnResized(t)
            },
            refreshWidgetOnResized: function(t) {
                var e = cc.Node.isNode(t) && t.getComponent(cc.Widget);
                e && e.alignMode === s.ON_WINDOW_RESIZE && (e.enabled = !0);
                for (var i = t._children, n = 0; n < i.length; n++) {
                    var r = i[n];
                    this.refreshWidgetOnResized(r)
                }
            },
            updateAlignment: function t(e) {
                var i = e._parent;
                cc.Node.isNode(i) && t(i);
                var n = e._widget || e.getComponent(cc.Widget);
                n && i && c(e, n)
            },
            AlignMode: s
        }
    }), {
        "../CCNode": 52
    }],
    80: [(function(t, e, i) {
        "use strict";
        var n = (function(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        })(t("../geom-utils"));
        var r = t("../utils/affine-transform"),
            s = t("../renderer/index"),
            o = t("../renderer/render-flow"),
            a = t("../CCGame"),
            l = null;
        l = t("../../renderer/scene/camera");
        var h = cc.vmath.mat4,
            c = cc.vmath.vec2,
            u = cc.vmath.vec3,
            _ = h.create(),
            f = h.create(),
            d = cc.v3(),
            p = cc.v3(),
            m = cc.v3(),
            y = [],
            v = null;

        function g() {
            if (v) {
                var t = v.getNode(),
                    e = cc.game.canvas;
                t.z = e.height / 1.1566, t.x = e.width / 2, t.y = e.height / 2
            }
        }
        var x = cc.Enum({
                COLOR: 1,
                DEPTH: 2,
                STENCIL: 4
            }),
            b = cc.Enum({
                OPAQUE: 1,
                TRANSPARENT: 2
            }),
            A = cc.Class({
                name: "cc.Camera",
                extends: cc.Component,
                ctor: function() {
                    if (a.renderType !== a.RENDER_TYPE_CANVAS) {
                        var t = new l;
                        t.setStages(["opaque"]), t.dirty = !0, this._inited = !1, this._camera = t
                    } else this._inited = !0
                },
                editor: !1,
                properties: {
                    _cullingMask: 4294967295,
                    _clearFlags: x.DEPTH | x.STENCIL,
                    _backgroundColor: cc.color(0, 0, 0, 255),
                    _depth: 0,
                    _zoomRatio: 1,
                    _targetTexture: null,
                    _fov: 60,
                    _orthoSize: 10,
                    _nearClip: 1,
                    _farClip: 4096,
                    _ortho: !0,
                    _rect: cc.rect(0, 0, 1, 1),
                    _renderStages: 1,
                    _alignWithScreen: !0,
                    zoomRatio: {
                        get: function() {
                            return this._zoomRatio
                        },
                        set: function(t) {
                            this._zoomRatio = t
                        },
                        tooltip: !1
                    },
                    fov: {
                        get: function() {
                            return this._fov
                        },
                        set: function(t) {
                            this._fov = t
                        },
                        tooltip: !1
                    },
                    orthoSize: {
                        get: function() {
                            return this._orthoSize
                        },
                        set: function(t) {
                            this._orthoSize = t
                        },
                        tooltip: !1
                    },
                    nearClip: {
                        get: function() {
                            return this._nearClip
                        },
                        set: function(t) {
                            this._nearClip = t, this._updateClippingpPlanes()
                        },
                        tooltip: !1
                    },
                    farClip: {
                        get: function() {
                            return this._farClip
                        },
                        set: function(t) {
                            this._farClip = t, this._updateClippingpPlanes()
                        },
                        tooltip: !1
                    },
                    ortho: {
                        get: function() {
                            return this._ortho
                        },
                        set: function(t) {
                            this._ortho = t, this._updateProjection()
                        },
                        tooltip: !1
                    },
                    rect: {
                        get: function() {
                            return this._rect
                        },
                        set: function(t) {
                            this._rect = t, this._updateRect()
                        },
                        tooltip: !1
                    },
                    cullingMask: {
                        get: function() {
                            return this._cullingMask
                        },
                        set: function(t) {
                            this._cullingMask = t, this._updateCameraMask()
                        },
                        tooltip: !1
                    },
                    clearFlags: {
                        get: function() {
                            return this._clearFlags
                        },
                        set: function(t) {
                            this._clearFlags = t, this._camera && this._camera.setClearFlags(t)
                        },
                        tooltip: !1
                    },
                    backgroundColor: {
                        get: function() {
                            return this._backgroundColor
                        },
                        set: function(t) {
                            this._backgroundColor = t, this._updateBackgroundColor()
                        },
                        tooltip: !1
                    },
                    depth: {
                        get: function() {
                            return this._depth
                        },
                        set: function(t) {
                            this._depth = t, this._camera && this._camera.setPriority(t)
                        },
                        tooltip: !1
                    },
                    targetTexture: {
                        get: function() {
                            return this._targetTexture
                        },
                        set: function(t) {
                            this._targetTexture = t, this._updateTargetTexture()
                        },
                        tooltip: !1
                    },
                    renderStages: {
                        get: function() {
                            return this._renderStages
                        },
                        set: function(t) {
                            this._renderStages = t, this._updateStages()
                        },
                        tooltip: !1
                    },
                    alignWithScreen: {
                        get: function() {
                            return this._alignWithScreen
                        },
                        set: function(t) {
                            this._alignWithScreen = t
                        }
                    },
                    _is3D: {
                        get: function() {
                            return this.node && this.node._is3DNode
                        }
                    }
                },
                statics: {
                    main: null,
                    cameras: y,
                    ClearFlags: x,
                    findCamera: function(t) {
                        for (var e = 0, i = y.length; e < i; e++) {
                            var n = y[e];
                            if (n.containsNode(t)) return n
                        }
                        return null
                    },
                    _findRendererCamera: function(t) {
                        for (var e = s.scene._cameras, i = 0; i < e._count; i++)
                            if (e._data[i]._cullingMask & t._cullingMask) return e._data[i];
                        return null
                    },
                    _setupDebugCamera: function() {
                        if (!v && a.renderType !== a.RENDER_TYPE_CANVAS) {
                            var t = new l;
                            v = t, t.setStages(["opaque"]), t.setFov(60 * Math.PI / 180), t.setNear(.1), t.setFar(4096), t.dirty = !0, t.cullingMask = 1 << cc.Node.BuiltinGroupIndex.DEBUG, t.setPriority(cc.macro.MAX_ZINDEX), t.setClearFlags(0), t.setColor(0, 0, 0, 0);
                            var e = new cc.Node;
                            t.setNode(e), g(), cc.view.on("design-resolution-changed", g), s.scene.addCamera(t)
                        }
                    }
                },
                _updateCameraMask: function() {
                    if (this._camera) {
                        var t = this._cullingMask & ~(1 << cc.Node.BuiltinGroupIndex.DEBUG);
                        this._camera.cullingMask = t
                    }
                },
                _updateBackgroundColor: function() {
                    if (this._camera) {
                        var t = this._backgroundColor;
                        this._camera.setColor(t.r / 255, t.g / 255, t.b / 255, t.a / 255)
                    }
                },
                _updateTargetTexture: function() {
                    if (this._camera) {
                        var t = this._targetTexture;
                        this._camera.setFrameBuffer(t ? t._framebuffer : null)
                    }
                },
                _updateClippingpPlanes: function() {
                    this._camera && (this._camera.setNear(this._nearClip), this._camera.setFar(this._farClip))
                },
                _updateProjection: function() {
                    if (this._camera) {
                        var t = this._ortho ? 1 : 0;
                        this._camera.setType(t)
                    }
                },
                _updateRect: function() {
                    if (this._camera) {
                        var t = this._rect;
                        this._camera.setRect(t.x, t.y, t.width, t.height)
                    }
                },
                _updateStages: function() {
                    var t = this._renderStages,
                        e = [];
                    t & b.OPAQUE && e.push("opaque"), t & b.TRANSPARENT && e.push("transparent"), this._camera.setStages(e)
                },
                _init: function() {
                    if (!this._inited) {
                        this._inited = !0;
                        var t = this._camera;
                        t && (t.setNode(this.node), t.setClearFlags(this._clearFlags), t.setPriority(this._depth), this._updateBackgroundColor(), this._updateCameraMask(), this._updateTargetTexture(), this._updateClippingpPlanes(), this._updateProjection(), this._updateStages(), this._updateRect(), this.beforeDraw())
                    }
                },
                onLoad: function() {
                    this._init()
                },
                onEnable: function() {
                    a.renderType !== a.RENDER_TYPE_CANVAS && (cc.director.on(cc.Director.EVENT_BEFORE_DRAW, this.beforeDraw, this), s.scene.addCamera(this._camera)), y.push(this)
                },
                onDisable: function() {
                    a.renderType !== a.RENDER_TYPE_CANVAS && (cc.director.off(cc.Director.EVENT_BEFORE_DRAW, this.beforeDraw, this), s.scene.removeCamera(this._camera)), cc.js.array.remove(y, this)
                },
                getScreenToWorldMatrix2D: function(t) {
                    return this.getWorldToScreenMatrix2D(t), h.invert(t, t), t
                },
                getWorldToScreenMatrix2D: function(t) {
                    this.node.getWorldRT(_);
                    var e = this.zoomRatio,
                        i = _.m;
                    i[0] *= e, i[1] *= e, i[4] *= e, i[5] *= e;
                    var n = i[12],
                        r = i[13],
                        s = cc.visibleRect.center;
                    return i[12] = s.x - (i[0] * n + i[4] * r), i[13] = s.y - (i[1] * n + i[5] * r), t !== _ && h.copy(t, _), t
                },
                getScreenToWorldPoint: function(t, e) {
                    return this.node.is3DNode ? (e = e || new cc.Vec3, this._camera.screenToWorld(e, t, cc.visibleRect.width, cc.visibleRect.height)) : (e = e || new cc.Vec2, this.getScreenToWorldMatrix2D(_), c.transformMat4(e, t, _)), e
                },
                getWorldToScreenPoint: function(t, e) {
                    return this.node.is3DNode ? (e = e || new cc.Vec3, this._camera.worldToScreen(e, t, cc.visibleRect.width, cc.visibleRect.height)) : (e = e || new cc.Vec2, this.getWorldToScreenMatrix2D(_), c.transformMat4(e, t, _)), e
                },
                getRay: function(t) {
                    return n.default ? (u.set(m, t.x, t.y, 1), this._camera.screenToWorld(p, m, cc.visibleRect.width, cc.visibleRect.height), this.ortho ? (u.set(m, t.x, t.y, -1), this._camera.screenToWorld(d, m, cc.visibleRect.width, cc.visibleRect.height)) : this.node.getWorldPosition(d), n.default.Ray.fromPoints(n.default.Ray.create(), d, p)) : t
                },
                containsNode: function(t) {
                    return t._cullingMask & this.cullingMask
                },
                render: function(t) {
                    if (!(t = t || cc.director.getScene())) return null;
                    this.node.getWorldMatrix(_), this.beforeDraw(), o.render(t), s._forward.renderCamera(this._camera, s.scene)
                },
                _onAlignWithScreen: function() {
                    var t = cc.game.canvas.height / cc.view._scaleY;
                    this._targetTexture && (t = cc.visibleRect.height);
                    var e = this._fov * cc.macro.RAD;
                    this.node.z = t / (2 * Math.tan(e / 2)), e = 2 * Math.atan(Math.tan(e / 2) / this.zoomRatio), this._camera.setFov(e), this._camera.setOrthoHeight(t / 2 / this.zoomRatio), this.node.setRotation(0, 0, 0, 1)
                },
                beforeDraw: function() {
                    if (this._camera) {
                        if (this._alignWithScreen) this._onAlignWithScreen();
                        else {
                            var t = this._fov * cc.macro.RAD;
                            t = 2 * Math.atan(Math.tan(t / 2) / this.zoomRatio), this._camera.setFov(t), this._camera.setOrthoHeight(this._orthoSize * this.zoomRatio)
                        }
                        this._camera.dirty = !0
                    }
                }
            });
        cc.js.mixin(A.prototype, {
            getNodeToCameraTransform: function(t) {
                var e = r.identity();
                return t.getWorldMatrix(f), this.containsNode(t) && (this.getWorldToCameraMatrix(_), h.mul(f, f, _)), r.fromMat4(e, f), e
            },
            getCameraToWorldPoint: function(t, e) {
                return this.getScreenToWorldPoint(t, e)
            },
            getWorldToCameraPoint: function(t, e) {
                return this.getWorldToScreenPoint(t, e)
            },
            getCameraToWorldMatrix: function(t) {
                return this.getScreenToWorldMatrix2D(t)
            },
            getWorldToCameraMatrix: function(t) {
                return this.getWorldToScreenMatrix2D(t)
            }
        }), e.exports = cc.Camera = A
    }), {
        "../../renderer/scene/camera": 380,
        "../CCGame": 51,
        "../geom-utils": 136,
        "../renderer/index": 247,
        "../renderer/render-flow": 248,
        "../utils/affine-transform": 290
    }],
    81: [(function(t, e, i) {
        "use strict";
        cc.Collider.Box = cc.Class({
            properties: {
                _offset: cc.v2(0, 0),
                _size: cc.size(100, 100),
                offset: {
                    tooltip: !1,
                    get: function() {
                        return this._offset
                    },
                    set: function(t) {
                        this._offset = t
                    },
                    type: cc.Vec2
                },
                size: {
                    tooltip: !1,
                    get: function() {
                        return this._size
                    },
                    set: function(t) {
                        this._size.width = t.width < 0 ? 0 : t.width, this._size.height = t.height < 0 ? 0 : t.height
                    },
                    type: cc.Size
                }
            },
            resetInEditor: !1
        });
        var n = cc.Class({
            name: "cc.BoxCollider",
            extends: cc.Collider,
            mixins: [cc.Collider.Box],
            editor: !1
        });
        cc.BoxCollider = e.exports = n
    }), {}],
    82: [(function(t, e, i) {
        "use strict";
        cc.Collider.Circle = cc.Class({
            properties: {
                _offset: cc.v2(0, 0),
                _radius: 50,
                offset: {
                    get: function() {
                        return this._offset
                    },
                    set: function(t) {
                        this._offset = t
                    },
                    type: cc.Vec2
                },
                radius: {
                    tooltip: !1,
                    get: function() {
                        return this._radius
                    },
                    set: function(t) {
                        this._radius = t < 0 ? 0 : t
                    }
                }
            },
            resetInEditor: !1
        });
        var n = cc.Class({
            name: "cc.CircleCollider",
            extends: cc.Collider,
            mixins: [cc.Collider.Circle],
            editor: !1
        });
        cc.CircleCollider = e.exports = n
    }), {}],
    83: [(function(t, e, i) {
        "use strict";
        var n = cc.Class({
            name: "cc.Collider",
            extends: cc.Component,
            properties: {
                editing: {
                    default: !1,
                    serializable: !1,
                    tooltip: !1
                },
                tag: {
                    tooltip: !1,
                    default: 0,
                    range: [0, 1e7],
                    type: cc.Integer
                }
            },
            onDisable: function() {
                cc.director.getCollisionManager().removeCollider(this)
            },
            onEnable: function() {
                cc.director.getCollisionManager().addCollider(this)
            }
        });
        cc.Collider = e.exports = n
    }), {}],
    84: [(function(t, e, i) {
        "use strict";
        var n = t("./CCContact"),
            r = n.CollisionType,
            s = t("../CCNode").EventType,
            o = cc.vmath,
            a = cc.v2();

        function l(t, e, i, n, r, s) {
            var o = t.x,
                a = t.y,
                l = t.width,
                h = t.height,
                c = e.m,
                u = c[0],
                _ = c[1],
                f = c[4],
                d = c[5],
                p = u * o + f * a + c[12],
                m = _ * o + d * a + c[13],
                y = u * l,
                v = _ * l,
                g = f * h,
                x = d * h;
            n.x = p, n.y = m, r.x = y + p, r.y = v + m, i.x = g + p, i.y = x + m, s.x = y + g + p, s.y = v + x + m
        }
        var h = cc.Class({
            mixins: [cc.EventTarget],
            properties: {
                enabled: !1,
                enabledDrawBoundingBox: !1
            },
            ctor: function() {
                this._contacts = [], this._colliders = [], this._debugDrawer = null, this._enabledDebugDraw = !1, cc.director._scheduler && cc.director._scheduler.enableForTarget(this)
            },
            update: function(t) {
                if (this.enabled) {
                    var e = void 0,
                        i = void 0,
                        n = this._colliders;
                    for (e = 0, i = n.length; e < i; e++) this.updateCollider(n[e]);
                    var s = this._contacts,
                        o = [];
                    for (e = 0, i = s.length; e < i; e++) {
                        var a = s[e].updateState();
                        a !== r.None && o.push([a, s[e]])
                    }
                    for (e = 0, i = o.length; e < i; e++) {
                        var l = o[e];
                        this._doCollide(l[0], l[1])
                    }
                    this.drawColliders()
                }
            },
            _doCollide: function(t, e) {
                var i = void 0;
                switch (t) {
                    case r.CollisionEnter:
                        i = "onCollisionEnter";
                        break;
                    case r.CollisionStay:
                        i = "onCollisionStay";
                        break;
                    case r.CollisionExit:
                        i = "onCollisionExit"
                }
                var n = e.collider1,
                    s = e.collider2,
                    o = n.node._components,
                    a = s.node._components,
                    l = void 0,
                    h = void 0,
                    c = void 0;
                for (l = 0, h = o.length; l < h; l++)(c = o[l])[i] && c[i](s, n);
                for (l = 0, h = a.length; l < h; l++)(c = a[l])[i] && c[i](n, s)
            },
            shouldCollide: function(t, e) {
                var i = t.node,
                    n = e.node,
                    r = cc.game.collisionMatrix;
                return i !== n && r[i.groupIndex][n.groupIndex]
            },
            initCollider: function(t) {
                if (!t.world) {
                    var e = t.world = {};
                    e.aabb = cc.rect(), e.preAabb = cc.rect(), e.matrix = o.mat4.create(), e.radius = 0, t instanceof cc.BoxCollider ? (e.position = null, e.points = [cc.v2(), cc.v2(), cc.v2(), cc.v2()]) : t instanceof cc.PolygonCollider ? (e.position = null, e.points = t.points.map((function(t) {
                        return cc.v2(t.x, t.y)
                    }))) : t instanceof cc.CircleCollider && (e.position = cc.v2(), e.points = null)
                }
            },
            updateCollider: function(t) {
                var e = t.offset,
                    i = t.world,
                    n = i.aabb,
                    r = i.matrix;
                t.node.getWorldMatrix(r);
                var s = i.preAabb;
                if (s.x = n.x, s.y = n.y, s.width = n.width, s.height = n.height, t instanceof cc.BoxCollider) {
                    var h = t.size;
                    n.x = e.x - h.width / 2, n.y = e.y - h.height / 2, n.width = h.width, n.height = h.height;
                    var c = i.points,
                        u = c[0],
                        _ = c[1],
                        f = c[2],
                        d = c[3];
                    l(n, r, u, _, f, d);
                    var p = Math.min(u.x, _.x, f.x, d.x),
                        m = Math.min(u.y, _.y, f.y, d.y),
                        y = Math.max(u.x, _.x, f.x, d.x),
                        v = Math.max(u.y, _.y, f.y, d.y);
                    n.x = p, n.y = m, n.width = y - p, n.height = v - m
                } else if (t instanceof cc.CircleCollider) {
                    o.vec2.transformMat4(a, t.offset, r), i.position.x = a.x, i.position.y = a.y;
                    var g = r.m,
                        x = g[12],
                        b = g[13];
                    g[12] = g[13] = 0, a.x = t.radius, a.y = 0, o.vec2.transformMat4(a, a, r);
                    var A = Math.sqrt(a.x * a.x + a.y * a.y);
                    i.radius = A, n.x = i.position.x - A, n.y = i.position.y - A, n.width = 2 * A, n.height = 2 * A, g[12] = x, g[13] = b
                } else if (t instanceof cc.PolygonCollider) {
                    var C = t.points,
                        T = i.points;
                    T.length = C.length;
                    for (var S = 1e6, w = 1e6, E = -1e6, M = -1e6, D = 0, B = C.length; D < B; D++) {
                        T[D] || (T[D] = cc.v2()), a.x = C[D].x + e.x, a.y = C[D].y + e.y, o.vec2.transformMat4(a, a, r);
                        var I = a.x,
                            P = a.y;
                        T[D].x = I, T[D].y = P, I > E && (E = I), I < S && (S = I), P > M && (M = P), P < w && (w = P)
                    }
                    n.x = S, n.y = w, n.width = E - S, n.height = M - w
                }
            },
            addCollider: function(t) {
                var e = this._colliders;
                if (-1 === e.indexOf(t)) {
                    for (var i = 0, r = e.length; i < r; i++) {
                        var o = e[i];
                        if (this.shouldCollide(t, o)) {
                            var a = new n(t, o);
                            this._contacts.push(a)
                        }
                    }
                    e.push(t), this.initCollider(t)
                }
                t.node.on(s.GROUP_CHANGED, this.onNodeGroupChanged, this)
            },
            removeCollider: function(t) {
                var e = this._colliders,
                    i = e.indexOf(t);
                if (i >= 0) {
                    e.splice(i, 1);
                    for (var n = this._contacts, o = n.length - 1; o >= 0; o--) {
                        var a = n[o];
                        a.collider1 !== t && a.collider2 !== t || (a.touching && this._doCollide(r.CollisionExit, a), n.splice(o, 1))
                    }
                    t.node.off(s.GROUP_CHANGED, this.onNodeGroupChanged, this)
                } else cc.errorID(6600)
            },
            onNodeGroupChanged: function(t) {
                for (var e = t.getComponents(cc.Collider), i = 0, n = e.length; i < n; i++) {
                    var r = e[i];
                    cc.PhysicsCollider && r instanceof cc.PhysicsCollider || (this.removeCollider(r), this.addCollider(r))
                }
            },
            drawColliders: function() {
                if (this._enabledDebugDraw) {
                    this._checkDebugDrawValid();
                    var t = this._debugDrawer;
                    t.clear();
                    for (var e = this._colliders, i = 0, n = e.length; i < n; i++) {
                        var r = e[i];
                        if (t.strokeColor = cc.Color.WHITE, r instanceof cc.BoxCollider || r instanceof cc.PolygonCollider) {
                            var s = r.world.points;
                            if (s.length > 0) {
                                t.moveTo(s[0].x, s[0].y);
                                for (var o = 1; o < s.length; o++) t.lineTo(s[o].x, s[o].y);
                                t.close(), t.stroke()
                            }
                        } else r instanceof cc.CircleCollider && (t.circle(r.world.position.x, r.world.position.y, r.world.radius), t.stroke());
                        if (this.enabledDrawBoundingBox) {
                            var a = r.world.aabb;
                            t.strokeColor = cc.Color.BLUE, t.moveTo(a.xMin, a.yMin), t.lineTo(a.xMin, a.yMax), t.lineTo(a.xMax, a.yMax), t.lineTo(a.xMax, a.yMin), t.close(), t.stroke()
                        }
                    }
                }
            },
            _checkDebugDrawValid: function() {
                if (!this._debugDrawer || !this._debugDrawer.isValid) {
                    var t = new cc.Node("COLLISION_MANAGER_DEBUG_DRAW");
                    t.zIndex = cc.macro.MAX_ZINDEX, cc.game.addPersistRootNode(t), this._debugDrawer = t.addComponent(cc.Graphics)
                }
            }
        });
        cc.js.getset(h.prototype, "enabledDebugDraw", (function() {
            return this._enabledDebugDraw
        }), (function(t) {
            t && !this._enabledDebugDraw ? (this._checkDebugDrawValid(), this._debugDrawer.node.active = !0) : !t && this._enabledDebugDraw && (this._debugDrawer.clear(!0), this._debugDrawer.node.active = !1), this._enabledDebugDraw = t
        })), cc.CollisionManager = e.exports = h
    }), {
        "../CCNode": 52,
        "./CCContact": 85
    }],
    85: [(function(t, e, i) {
        "use strict";
        var n = t("./CCIntersection"),
            r = cc.Enum({
                None: 0,
                CollisionEnter: 1,
                CollisionStay: 2,
                CollisionExit: 3
            });

        function s(t, e) {
            this.collider1 = t, this.collider2 = e, this.touching = !1;
            var i = t instanceof cc.BoxCollider || t instanceof cc.PolygonCollider,
                r = e instanceof cc.BoxCollider || e instanceof cc.PolygonCollider,
                s = t instanceof cc.CircleCollider,
                o = e instanceof cc.CircleCollider;
            i && r ? this.testFunc = n.polygonPolygon : s && o ? this.testFunc = n.circleCircle : i && o ? this.testFunc = n.polygonCircle : s && r ? (this.testFunc = n.polygonCircle, this.collider1 = e, this.collider2 = t) : cc.errorID(6601, cc.js.getClassName(t), cc.js.getClassName(e))
        }
        s.prototype.test = function() {
            var t = this.collider1.world,
                e = this.collider2.world;
            return !!t.aabb.intersects(e.aabb) && (this.testFunc === n.polygonPolygon ? this.testFunc(t.points, e.points) : this.testFunc === n.circleCircle ? this.testFunc(t, e) : this.testFunc === n.polygonCircle && this.testFunc(t.points, e))
        }, s.prototype.updateState = function() {
            var t = this.test(),
                e = r.None;
            return t && !this.touching ? (this.touching = !0, e = r.CollisionEnter) : t && this.touching ? e = r.CollisionStay : !t && this.touching && (this.touching = !1, e = r.CollisionExit), e
        }, s.CollisionType = r, e.exports = s
    }), {
        "./CCIntersection": 86
    }],
    86: [(function(t, e, i) {
        "use strict";
        var n = {};

        function r(t, e, i, n) {
            var r = (n.x - i.x) * (t.y - i.y) - (n.y - i.y) * (t.x - i.x),
                s = (e.x - t.x) * (t.y - i.y) - (e.y - t.y) * (t.x - i.x),
                o = (n.y - i.y) * (e.x - t.x) - (n.x - i.x) * (e.y - t.y);
            if (0 !== o) {
                var a = r / o,
                    l = s / o;
                if (0 <= a && a <= 1 && 0 <= l && l <= 1) return !0
            }
            return !1
        }

        function s(t, e, i) {
            for (var n = i.length, s = 0; s < n; ++s) {
                if (r(t, e, i[s], i[(s + 1) % n])) return !0
            }
            return !1
        }

        function o(t, e) {
            for (var i = !1, n = t.x, r = t.y, s = e.length, o = 0, a = s - 1; o < s; a = o++) {
                var l = e[o].x,
                    h = e[o].y,
                    c = e[a].x,
                    u = e[a].y;
                h > r != u > r && n < (c - l) * (r - h) / (u - h) + l && (i = !i)
            }
            return i
        }

        function a(t, e, i, n) {
            var r, s = i.x - e.x,
                o = i.y - e.y,
                a = s * s + o * o,
                l = ((t.x - e.x) * s + (t.y - e.y) * o) / a;
            return r = n ? a ? l < 0 ? e : l > 1 ? i : cc.v2(e.x + l * s, e.y + l * o) : e : cc.v2(e.x + l * s, e.y + l * o), s = t.x - r.x, o = t.y - r.y, Math.sqrt(s * s + o * o)
        }
        n.lineLine = r, n.lineRect = function(t, e, i) {
            var n = new cc.Vec2(i.x, i.y),
                s = new cc.Vec2(i.x, i.yMax),
                o = new cc.Vec2(i.xMax, i.yMax),
                a = new cc.Vec2(i.xMax, i.y);
            return !!(r(t, e, n, s) || r(t, e, s, o) || r(t, e, o, a) || r(t, e, a, n))
        }, n.linePolygon = s, n.rectRect = function(t, e) {
            var i = t.x,
                n = t.y,
                r = t.x + t.width,
                s = t.y + t.height,
                o = e.x,
                a = e.y,
                l = e.x + e.width,
                h = e.y + e.height;
            return i <= l && r >= o && n <= h && s >= a
        }, n.rectPolygon = function(t, e) {
            var i, n, r = new cc.Vec2(t.x, t.y),
                a = new cc.Vec2(t.x, t.yMax),
                l = new cc.Vec2(t.xMax, t.yMax),
                h = new cc.Vec2(t.xMax, t.y);
            if (s(r, a, e)) return !0;
            if (s(a, l, e)) return !0;
            if (s(l, h, e)) return !0;
            if (s(h, r, e)) return !0;
            for (i = 0, n = e.length; i < n; ++i)
                if (o(e[i], t)) return !0;
            return !!(o(r, e) || o(a, e) || o(l, e) || o(h, e))
        }, n.polygonPolygon = function(t, e) {
            var i, n;
            for (i = 0, n = t.length; i < n; ++i)
                if (s(t[i], t[(i + 1) % n], e)) return !0;
            for (i = 0, n = e.length; i < n; ++i)
                if (o(e[i], t)) return !0;
            for (i = 0, n = t.length; i < n; ++i)
                if (o(t[i], e)) return !0;
            return !1
        }, n.circleCircle = function(t, e) {
            return t.position.sub(e.position).mag() < t.radius + e.radius
        }, n.polygonCircle = function(t, e) {
            var i = e.position;
            if (o(i, t)) return !0;
            for (var n = 0, r = t.length; n < r; n++)
                if (a(i, 0 === n ? t[t.length - 1] : t[n - 1], t[n], !0) < e.radius) return !0;
            return !1
        }, n.pointInPolygon = o, n.pointLineDistance = a, cc.Intersection = e.exports = n
    }), {}],
    87: [(function(t, e, i) {
        "use strict";
        cc.Collider.Polygon = cc.Class({
            properties: {
                threshold: {
                    default: 1,
                    serializable: !1,
                    visible: !1
                },
                _offset: cc.v2(0, 0),
                offset: {
                    get: function() {
                        return this._offset
                    },
                    set: function(t) {
                        this._offset = t
                    },
                    type: cc.Vec2
                },
                points: {
                    tooltip: !1,
                    default: function() {
                        return [cc.v2(-50, -50), cc.v2(50, -50), cc.v2(50, 50), cc.v2(-50, 50)]
                    },
                    type: [cc.Vec2]
                }
            },
            resetPointsByContour: !1
        });
        var n = cc.Class({
            name: "cc.PolygonCollider",
            extends: cc.Collider,
            mixins: [cc.Collider.Polygon],
            editor: !1
        });
        cc.PolygonCollider = e.exports = n
    }), {}],
    88: [(function(t, e, i) {
        "use strict";
        t("./CCCollisionManager"), t("./CCCollider"), t("./CCBoxCollider"), t("./CCCircleCollider"), t("./CCPolygonCollider")
    }), {
        "./CCBoxCollider": 81,
        "./CCCircleCollider": 82,
        "./CCCollider": 83,
        "./CCCollisionManager": 84,
        "./CCPolygonCollider": 87
    }],
    89: [(function(t, e, i) {
        "use strict";
        t("./platform/CCClass");
        var n = t("./platform/CCObject").Flags,
            r = t("./platform/js").array,
            s = n.IsStartCalled,
            o = n.IsOnEnableCalled;
        n.IsEditorOnEnableCalled;

        function a(t, e) {
            for (var i = e.constructor._executionOrder, n = e._id, r = 0, s = t.length - 1, o = s >>> 1; r <= s; o = r + s >>> 1) {
                var a = t[o],
                    l = a.constructor._executionOrder;
                if (l > i) s = o - 1;
                else if (l < i) r = o + 1;
                else {
                    var h = a._id;
                    if (h > n) s = o - 1;
                    else {
                        if (!(h < n)) return o;
                        r = o + 1
                    }
                }
            }
            return ~r
        }

        function l(t, e) {
            for (var i = t.array, n = t.i + 1; n < i.length;) {
                var r = i[n];
                r._enabled && r.node._activeInHierarchy ? ++n : (t.removeAt(n), e && (r._objFlags &= ~e))
            }
        }
        var h = cc.Class({
            __ctor__: function(t) {
                var e = r.MutableForwardIterator;
                this._zero = new e([]), this._neg = new e([]), this._pos = new e([]), this._invoke = t
            },
            statics: {
                stableRemoveInactive: l
            },
            add: null,
            remove: null,
            invoke: null
        });

        function c(t, e) {
            return t.constructor._executionOrder - e.constructor._executionOrder
        }
        var u = cc.Class({
                extends: h,
                add: function(t) {
                    var e = t.constructor._executionOrder;
                    (0 === e ? this._zero : e < 0 ? this._neg : this._pos).array.push(t)
                },
                remove: function(t) {
                    var e = t.constructor._executionOrder;
                    (0 === e ? this._zero : e < 0 ? this._neg : this._pos).fastRemove(t)
                },
                cancelInactive: function(t) {
                    l(this._zero, t), l(this._neg, t), l(this._pos, t)
                },
                invoke: function() {
                    var t = this._neg;
                    t.array.length > 0 && (t.array.sort(c), this._invoke(t), t.array.length = 0), this._invoke(this._zero), this._zero.array.length = 0;
                    var e = this._pos;
                    e.array.length > 0 && (e.array.sort(c), this._invoke(e), e.array.length = 0)
                }
            }),
            _ = cc.Class({
                extends: h,
                add: function(t) {
                    var e = t.constructor._executionOrder;
                    if (0 === e) this._zero.array.push(t);
                    else {
                        var i = e < 0 ? this._neg.array : this._pos.array,
                            n = a(i, t);
                        n < 0 && i.splice(~n, 0, t)
                    }
                },
                remove: function(t) {
                    var e = t.constructor._executionOrder;
                    if (0 === e) this._zero.fastRemove(t);
                    else {
                        var i = e < 0 ? this._neg : this._pos,
                            n = a(i.array, t);
                        n >= 0 && i.removeAt(n)
                    }
                },
                invoke: function(t) {
                    this._neg.array.length > 0 && this._invoke(this._neg, t), this._invoke(this._zero, t), this._pos.array.length > 0 && this._invoke(this._pos, t)
                }
            });

        function f(t, e, i, n) {
            var r = "var a=it.array;for(it.i=0;it.i<a.length;++it.i){var c=a[it.i];" + t + "}";
            return n = e ? Function("it", "dt", r) : Function("it", r), t = Function("c", "dt", t),
                function(e, r) {
                    try {
                        n(e, r)
                    } catch (n) {
                        cc._throw(n);
                        var s = e.array;
                        for (i && (s[e.i]._objFlags |= i), ++e.i; e.i < s.length; ++e.i) try {
                            t(s[e.i], r)
                        } catch (t) {
                            cc._throw(t), i && (s[e.i]._objFlags |= i)
                        }
                    }
                }
        }
        var d = f("c.start();c._objFlags|=" + s, !1, s),
            p = f("c.update(dt)", !0),
            m = f("c.lateUpdate(dt)", !0);

        function y() {
            this.startInvoker = new u(d), this.updateInvoker = new _(p), this.lateUpdateInvoker = new _(m), this.scheduleInNextFrame = [], this._updating = !1
        }
        var v = cc.Class({
            ctor: y,
            unscheduleAll: y,
            statics: {
                LifeCycleInvoker: h,
                OneOffInvoker: u,
                createInvokeImpl: f,
                invokeOnEnable: function(t) {
                    var e = cc.director._compScheduler,
                        i = t.array;
                    for (t.i = 0; t.i < i.length; ++t.i) {
                        var n = i[t.i];
                        if (n._enabled) n.onEnable(), !n.node._activeInHierarchy || e._onEnabled(n)
                    }
                }
            },
            _onEnabled: function(t) {
                cc.director.getScheduler().resumeTarget(t), t._objFlags |= o, this._updating ? this.scheduleInNextFrame.push(t) : this._scheduleImmediate(t)
            },
            _onDisabled: function(t) {
                cc.director.getScheduler().pauseTarget(t), t._objFlags &= ~o;
                var e = this.scheduleInNextFrame.indexOf(t);
                e >= 0 ? r.fastRemoveAt(this.scheduleInNextFrame, e) : (!t.start || t._objFlags & s || this.startInvoker.remove(t), t.update && this.updateInvoker.remove(t), t.lateUpdate && this.lateUpdateInvoker.remove(t))
            },
            enableComp: function(t, e) {
                if (!(t._objFlags & o)) {
                    if (t.onEnable) {
                        if (e) return void e.add(t);
                        if (t.onEnable(), !t.node._activeInHierarchy) return
                    }
                    this._onEnabled(t)
                }
            },
            disableComp: function(t) {
                t._objFlags & o && (t.onDisable && t.onDisable(), this._onDisabled(t))
            },
            _scheduleImmediate: function(t) {
                !t.start || t._objFlags & s || this.startInvoker.add(t), t.update && this.updateInvoker.add(t), t.lateUpdate && this.lateUpdateInvoker.add(t)
            },
            _deferredSchedule: function() {
                for (var t = this.scheduleInNextFrame, e = 0, i = t.length; e < i; e++) {
                    var n = t[e];
                    this._scheduleImmediate(n)
                }
                t.length = 0
            },
            startPhase: function() {
                this._updating = !0, this.scheduleInNextFrame.length > 0 && this._deferredSchedule(), this.startInvoker.invoke()
            },
            updatePhase: function(t) {
                this.updateInvoker.invoke(t)
            },
            lateUpdatePhase: function(t) {
                this.lateUpdateInvoker.invoke(t), this._updating = !1
            }
        });
        e.exports = v
    }), {
        "./platform/CCClass": 198,
        "./platform/CCObject": 204,
        "./platform/js": 218,
        "./utils/misc": 300
    }],
    90: [(function(t, e, i) {
        "use strict";
        var n = t("../../animation/animation-animator"),
            r = t("../../animation/animation-clip"),
            s = t("../event/event-target"),
            o = t("../platform/js");

        function a(t, e) {
            return t === e || t && e && (t.name === e.name || t._uuid === e._uuid)
        }
        var l = cc.Enum({
                PLAY: "play",
                STOP: "stop",
                PAUSE: "pause",
                RESUME: "resume",
                LASTFRAME: "lastframe",
                FINISHED: "finished"
            }),
            h = cc.Class({
                name: "cc.Animation",
                extends: t("./CCComponent"),
                mixins: [s],
                editor: !1,
                statics: {
                    EventType: l
                },
                ctor: function() {
                    cc.EventTarget.call(this), this._animator = null, this._nameToState = o.createMap(!0), this._didInit = !1, this._currentClip = null
                },
                properties: {
                    _defaultClip: {
                        default: null,
                        type: r
                    },
                    defaultClip: {
                        type: r,
                        get: function() {
                            return this._defaultClip
                        },
                        set: function(t) {},
                        tooltip: !1
                    },
                    currentClip: {
                        get: function() {
                            return this._currentClip
                        },
                        set: function(t) {
                            this._currentClip = t
                        },
                        type: r,
                        visible: !1
                    },
                    _writableClips: {
                        get: function() {
                            return this._clips
                        },
                        set: function(t) {
                            this._didInit = !1, this._clips = t, this._init()
                        },
                        type: [r]
                    },
                    _clips: {
                        default: [],
                        type: [r],
                        tooltip: !1,
                        visible: !0
                    },
                    playOnLoad: {
                        default: !1,
                        tooltip: !1
                    }
                },
                start: function() {
                    if (this.playOnLoad && this._defaultClip && !(this._animator && this._animator.isPlaying)) {
                        var t = this.getAnimationState(this._defaultClip.name);
                        this._animator.playState(t)
                    }
                },
                onEnable: function() {
                    this._animator && this._animator.resume()
                },
                onDisable: function() {
                    this._animator && this._animator.pause()
                },
                onDestroy: function() {
                    this.stop()
                },
                getClips: function() {
                    return this._clips
                },
                play: function(t, e) {
                    var i = this.playAdditive(t, e);
                    return this._animator.stopStatesExcept(i), i
                },
                playAdditive: function(t, e) {
                    this._init();
                    var i = this.getAnimationState(t || this._defaultClip && this._defaultClip.name);
                    if (i) {
                        this.enabled = !0;
                        var n = this._animator;
                        n.isPlaying && i.isPlaying ? i.isPaused ? n.resumeState(i) : (n.stopState(i), n.playState(i, e)) : n.playState(i, e), this.enabledInHierarchy || n.pause(), this.currentClip = i.clip
                    }
                    return i
                },
                stop: function(t) {
                    if (this._didInit)
                        if (t) {
                            var e = this._nameToState[t];
                            e && this._animator.stopState(e)
                        } else this._animator.stop()
                },
                pause: function(t) {
                    if (this._didInit)
                        if (t) {
                            var e = this._nameToState[t];
                            e && this._animator.pauseState(e)
                        } else this.enabled = !1
                },
                resume: function(t) {
                    if (this._didInit)
                        if (t) {
                            var e = this._nameToState[t];
                            e && this._animator.resumeState(e)
                        } else this.enabled = !0
                },
                setCurrentTime: function(t, e) {
                    if (this._init(), e) {
                        var i = this._nameToState[e];
                        i && this._animator.setStateTime(i, t)
                    } else this._animator.setStateTime(t)
                },
                getAnimationState: function(t) {
                    this._init();
                    var e = this._nameToState[t];
                    return e && !e.curveLoaded && this._animator._reloadClip(e), e || null
                },
                addClip: function(t, e) {
                    if (t) {
                        this._init(), cc.js.array.contains(this._clips, t) || this._clips.push(t), e = e || t.name;
                        var i = this._nameToState[e];
                        if (i) {
                            if (i.clip === t) return i;
                            var n = this._clips.indexOf(i.clip); - 1 !== n && this._clips.splice(n, 1)
                        }
                        var r = new cc.AnimationState(t, e);
                        return this._nameToState[e] = r, r
                    }
                    cc.warnID(3900)
                },
                removeClip: function(t, e) {
                    if (t) {
                        this._init();
                        var i = void 0;
                        for (var n in this._nameToState) {
                            if ((i = this._nameToState[n]).clip === t) break
                        }
                        if (t === this._defaultClip) {
                            if (!e) return void cc.warnID(3902);
                            this._defaultClip = null
                        }
                        if (i && i.isPlaying) {
                            if (!e) return void cc.warnID(3903);
                            this.stop(i.name)
                        }
                        this._clips = this._clips.filter((function(e) {
                            return e !== t
                        })), i && delete this._nameToState[i.name]
                    } else cc.warnID(3901)
                },
                sample: function(t) {
                    if (this._init(), t) {
                        var e = this._nameToState[t];
                        e && e.sample()
                    } else this._animator.sample()
                },
                on: function(t, e, i, n) {
                    this._init();
                    var r = this._EventTargetOn(t, e, i, n);
                    if ("lastframe" === t) {
                        var s = this._nameToState;
                        for (var o in s) s[o]._lastframeEventOn = !0
                    }
                    return r
                },
                off: function(t, e, i, n) {
                    if (this._init(), "lastframe" === t) {
                        var r = this._nameToState;
                        for (var s in r) r[s]._lastframeEventOn = !1
                    }
                    this._EventTargetOff(t, e, i, n)
                },
                _init: function() {
                    this._didInit || (this._didInit = !0, this._animator = new n(this.node, this), this._createStates())
                },
                _createStates: function() {
                    this._nameToState = o.createMap(!0);
                    for (var t = null, e = !1, i = 0; i < this._clips.length; ++i) {
                        var n = this._clips[i];
                        n && (t = new cc.AnimationState(n), this._nameToState[t.name] = t, a(this._defaultClip, n) && (e = t))
                    }
                    this._defaultClip && !e && (t = new cc.AnimationState(this._defaultClip), this._nameToState[t.name] = t)
                }
            });
        h.prototype._EventTargetOn = s.prototype.on, h.prototype._EventTargetOff = s.prototype.off, cc.Animation = e.exports = h
    }), {
        "../../animation/animation-animator": 9,
        "../../animation/animation-clip": 10,
        "../event/event-target": 131,
        "../platform/js": 218,
        "./CCComponent": 95
    }],
    91: [(function(t, e, i) {
        "use strict";
        var n = t("../utils/misc"),
            r = t("./CCComponent"),
            s = t("../assets/CCAudioClip"),
            o = cc.Class({
                name: "cc.AudioSource",
                extends: r,
                editor: !1,
                ctor: function() {
                    this.audio = new cc.Audio
                },
                properties: {
                    _clip: {
                        default: null,
                        type: s
                    },
                    _volume: 1,
                    _mute: !1,
                    _loop: !1,
                    _pausedFlag: {
                        default: !1,
                        serializable: !1
                    },
                    isPlaying: {
                        get: function() {
                            return this.audio.getState() === cc.Audio.State.PLAYING
                        },
                        visible: !1
                    },
                    clip: {
                        get: function() {
                            return this._clip
                        },
                        set: function(t) {
                            if ("string" != typeof t) t !== this._clip && (this._clip = t, this.audio.stop(), this.preload && (this.audio.src = this._clip));
                            else {
                                cc.warnID(8401, "cc.AudioSource", "cc.AudioClip", "AudioClip", "cc.AudioClip", "audio");
                                var e = this;
                                s._loadByUrl(t, (function(t, i) {
                                    i && (e.clip = i)
                                }))
                            }
                        },
                        type: s,
                        tooltip: !1,
                        animatable: !1
                    },
                    volume: {
                        get: function() {
                            return this._volume
                        },
                        set: function(t) {
                            return t = n.clamp01(t), this._volume = t, this._mute || this.audio.setVolume(t), t
                        },
                        tooltip: !1
                    },
                    mute: {
                        get: function() {
                            return this._mute
                        },
                        set: function(t) {
                            return this._mute = t, this.audio.setVolume(t ? 0 : this._volume), t
                        },
                        animatable: !1,
                        tooltip: !1
                    },
                    loop: {
                        get: function() {
                            return this._loop
                        },
                        set: function(t) {
                            return this._loop = t, this.audio.setLoop(t), t
                        },
                        animatable: !1,
                        tooltip: !1
                    },
                    playOnLoad: {
                        default: !1,
                        tooltip: !1,
                        animatable: !1
                    },
                    preload: {
                        default: !1,
                        animatable: !1
                    }
                },
                _ensureDataLoaded: function() {
                    this.audio.src !== this._clip && (this.audio.src = this._clip)
                },
                _pausedCallback: function() {
                    this.audio.getState() === cc.Audio.State.PLAYING && (this.audio.pause(), this._pausedFlag = !0)
                },
                _restoreCallback: function() {
                    this._pausedFlag && this.audio.resume(), this._pausedFlag = !1
                },
                onLoad: function() {
                    this.audio.setVolume(this._mute ? 0 : this._volume), this.audio.setLoop(this._loop)
                },
                onEnable: function() {
                    this.preload && (this.audio.src = this._clip), this.playOnLoad && this.play(), cc.game.on(cc.game.EVENT_HIDE, this._pausedCallback, this), cc.game.on(cc.game.EVENT_SHOW, this._restoreCallback, this)
                },
                onDisable: function() {
                    this.stop(), cc.game.off(cc.game.EVENT_HIDE, this._pausedCallback, this), cc.game.off(cc.game.EVENT_SHOW, this._restoreCallback, this)
                },
                onDestroy: function() {
                    this.stop(), this.audio.destroy(), cc.audioEngine.uncache(this._clip)
                },
                play: function() {
                    if (this._clip) {
                        var t = this.audio;
                        this._clip.loaded && t.stop(), this._ensureDataLoaded(), t.setCurrentTime(0), t.play()
                    }
                },
                stop: function() {
                    this.audio.stop()
                },
                pause: function() {
                    this.audio.pause()
                },
                resume: function() {
                    this._ensureDataLoaded(), this.audio.resume()
                },
                rewind: function() {
                    this.audio.setCurrentTime(0)
                },
                getCurrentTime: function() {
                    return this.audio.getCurrentTime()
                },
                setCurrentTime: function(t) {
                    return this.audio.setCurrentTime(t), t
                },
                getDuration: function() {
                    return this.audio.getDuration()
                }
            });
        cc.AudioSource = e.exports = o
    }), {
        "../assets/CCAudioClip": 57,
        "../utils/misc": 300,
        "./CCComponent": 95
    }],
    92: [(function(t, e, i) {
        "use strict";
        var n = ["touchstart", "touchmove", "touchend", "mousedown", "mousemove", "mouseup", "mouseenter", "mouseleave", "mousewheel"];

        function r(t) {
            t.stopPropagation()
        }
        var s = cc.Class({
            name: "cc.BlockInputEvents",
            extends: t("./CCComponent"),
            editor: {
                menu: "i18n:MAIN_MENU.component.ui/Block Input Events",
                inspector: "packages://inspector/inspectors/comps/block-input-events.js",
                help: "i18n:COMPONENT.help_url.block_input_events"
            },
            onEnable: function() {
                for (var t = 0; t < n.length; t++) this.node.on(n[t], r, this)
            },
            onDisable: function() {
                for (var t = 0; t < n.length; t++) this.node.off(n[t], r, this)
            }
        });
        cc.BlockInputEvents = e.exports = s
    }), {
        "./CCComponent": 95
    }],
    93: [(function(t, e, i) {
        "use strict";
        var n = t("./CCComponent"),
            r = t("../utils/gray-sprite-state"),
            s = cc.Enum({
                NONE: 0,
                COLOR: 1,
                SPRITE: 2,
                SCALE: 3
            }),
            o = cc.Enum({
                NORMAL: 0,
                HOVER: 1,
                PRESSED: 2,
                DISABLED: 3
            }),
            a = cc.Class({
                name: "cc.Button",
                extends: n,
                mixins: [r],
                ctor: function() {
                    this._pressed = !1, this._hovered = !1, this._fromColor = null, this._toColor = null, this._time = 0, this._transitionFinished = !0, this._fromScale = cc.Vec2.ZERO, this._toScale = cc.Vec2.ZERO, this._originalScale = null, this._graySpriteMaterial = null, this._spriteMaterial = null, this._sprite = null
                },
                editor: !1,
                properties: {
                    interactable: {
                        default: !0,
                        tooltip: !1,
                        notify: function() {
                            this._updateState(), this.interactable || this._resetState()
                        },
                        animatable: !1
                    },
                    _resizeToTarget: {
                        animatable: !1,
                        set: function(t) {
                            t && this._resizeNodeToTargetNode()
                        }
                    },
                    enableAutoGrayEffect: {
                        default: !1,
                        tooltip: !1,
                        notify: function() {
                            this._updateDisabledState()
                        }
                    },
                    transition: {
                        default: s.NONE,
                        tooltip: !1,
                        type: s,
                        animatable: !1,
                        notify: function(t) {
                            this._updateTransition(t)
                        },
                        formerlySerializedAs: "transition"
                    },
                    normalColor: {
                        default: cc.Color.WHITE,
                        displayName: "Normal",
                        tooltip: !1,
                        notify: function() {
                            this.transition === s.Color && this._getButtonState() === o.NORMAL && (this._getTarget().opacity = this.normalColor.a), this._updateState()
                        }
                    },
                    pressedColor: {
                        default: cc.color(211, 211, 211),
                        displayName: "Pressed",
                        tooltip: !1,
                        notify: function() {
                            this.transition === s.Color && this._getButtonState() === o.PRESSED && (this._getTarget().opacity = this.pressedColor.a), this._updateState()
                        },
                        formerlySerializedAs: "pressedColor"
                    },
                    hoverColor: {
                        default: cc.Color.WHITE,
                        displayName: "Hover",
                        tooltip: !1,
                        notify: function() {
                            this.transition === s.Color && this._getButtonState() === o.HOVER && (this._getTarget().opacity = this.hoverColor.a), this._updateState()
                        },
                        formerlySerializedAs: "hoverColor"
                    },
                    disabledColor: {
                        default: cc.color(124, 124, 124),
                        displayName: "Disabled",
                        tooltip: !1,
                        notify: function() {
                            this.transition === s.Color && this._getButtonState() === o.DISABLED && (this._getTarget().opacity = this.disabledColor.a), this._updateState()
                        }
                    },
                    duration: {
                        default: .1,
                        range: [0, 10],
                        tooltip: !1
                    },
                    zoomScale: {
                        default: 1.2,
                        tooltip: !1
                    },
                    normalSprite: {
                        default: null,
                        type: cc.SpriteFrame,
                        displayName: "Normal",
                        tooltip: !1,
                        notify: function() {
                            this._updateState()
                        }
                    },
                    pressedSprite: {
                        default: null,
                        type: cc.SpriteFrame,
                        displayName: "Pressed",
                        tooltip: !1,
                        formerlySerializedAs: "pressedSprite",
                        notify: function() {
                            this._updateState()
                        }
                    },
                    hoverSprite: {
                        default: null,
                        type: cc.SpriteFrame,
                        displayName: "Hover",
                        tooltip: !1,
                        formerlySerializedAs: "hoverSprite",
                        notify: function() {
                            this._updateState()
                        }
                    },
                    disabledSprite: {
                        default: null,
                        type: cc.SpriteFrame,
                        displayName: "Disabled",
                        tooltip: !1,
                        notify: function() {
                            this._updateState()
                        }
                    },
                    target: {
                        default: null,
                        type: cc.Node,
                        tooltip: !1,
                        notify: function(t) {
                            this._applyTarget(), t && this.target !== t && this._unregisterTargetEvent(t)
                        }
                    },
                    clickEvents: {
                        default: [],
                        type: cc.Component.EventHandler,
                        tooltip: !1
                    }
                },
                statics: {
                    Transition: s
                },
                __preload: function() {
                    this._applyTarget(), this._resetState()
                },
                _resetState: function() {
                    this._pressed = !1, this._hovered = !1;
                    var t = this._getTarget(),
                        e = this.transition,
                        i = this._originalScale;
                    e === s.COLOR && this.interactable ? this._setTargetColor(this.normalColor) : e === s.SCALE && i && t.setScale(i.x, i.y), this._transitionFinished = !0
                },
                onEnable: function() {
                    this.normalSprite && this.normalSprite.ensureLoadTexture(), this.hoverSprite && this.hoverSprite.ensureLoadTexture(), this.pressedSprite && this.pressedSprite.ensureLoadTexture(), this.disabledSprite && this.disabledSprite.ensureLoadTexture(), this._registerNodeEvent()
                },
                onDisable: function() {
                    this._resetState(), this._unregisterNodeEvent()
                },
                _getTarget: function() {
                    return this.target ? this.target : this.node
                },
                _onTargetSpriteFrameChanged: function(t) {
                    this.transition === s.SPRITE && this._setCurrentStateSprite(t.spriteFrame)
                },
                _onTargetColorChanged: function(t) {
                    this.transition === s.COLOR && this._setCurrentStateColor(t)
                },
                _onTargetScaleChanged: function() {
                    var t = this._getTarget();
                    this._originalScale && (this.transition !== s.SCALE || this._transitionFinished) && (this._originalScale.x = t.scaleX, this._originalScale.y = t.scaleY)
                },
                _setTargetColor: function(t) {
                    var e = this._getTarget();
                    e.color = t, e.opacity = t.a
                },
                _getStateColor: function(t) {
                    switch (t) {
                        case o.NORMAL:
                            return this.normalColor;
                        case o.HOVER:
                            return this.hoverColor;
                        case o.PRESSED:
                            return this.pressedColor;
                        case o.DISABLED:
                            return this.disabledColor
                    }
                },
                _getStateSprite: function(t) {
                    switch (t) {
                        case o.NORMAL:
                            return this.normalSprite;
                        case o.HOVER:
                            return this.hoverSprite;
                        case o.PRESSED:
                            return this.pressedSprite;
                        case o.DISABLED:
                            return this.disabledSprite
                    }
                },
                _setCurrentStateColor: function(t) {
                    switch (this._getButtonState()) {
                        case o.NORMAL:
                            this.normalColor = t;
                            break;
                        case o.HOVER:
                            this.hoverColor = t;
                            break;
                        case o.PRESSED:
                            this.pressedColor = t;
                            break;
                        case o.DISABLED:
                            this.disabledColor = t
                    }
                },
                _setCurrentStateSprite: function(t) {
                    switch (this._getButtonState()) {
                        case o.NORMAL:
                            this.normalSprite = t;
                            break;
                        case o.HOVER:
                            this.hoverSprite = t;
                            break;
                        case o.PRESSED:
                            this.pressedSprite = t;
                            break;
                        case o.DISABLED:
                            this.disabledSprite = t
                    }
                },
                update: function(t) {
                    var e = this._getTarget();
                    if (!this._transitionFinished && (this.transition === s.COLOR || this.transition === s.SCALE)) {
                        this.time += t;
                        var i = 1;
                        if (this.duration > 0 && (i = this.time / this.duration), i >= 1 && (i = 1), this.transition === s.COLOR) {
                            var n = this._fromColor.lerp(this._toColor, i);
                            this._setTargetColor(n)
                        } else this.transition === s.SCALE && this._originalScale && (e.scale = this._fromScale.lerp(this._toScale, i));
                        1 === i && (this._transitionFinished = !0)
                    }
                },
                _registerNodeEvent: function() {
                    this.node.on(cc.Node.EventType.TOUCH_START, this._onTouchBegan, this), this.node.on(cc.Node.EventType.TOUCH_MOVE, this._onTouchMove, this), this.node.on(cc.Node.EventType.TOUCH_END, this._onTouchEnded, this), this.node.on(cc.Node.EventType.TOUCH_CANCEL, this._onTouchCancel, this), this.node.on(cc.Node.EventType.MOUSE_ENTER, this._onMouseMoveIn, this), this.node.on(cc.Node.EventType.MOUSE_LEAVE, this._onMouseMoveOut, this)
                },
                _unregisterNodeEvent: function() {
                    this.node.off(cc.Node.EventType.TOUCH_START, this._onTouchBegan, this), this.node.off(cc.Node.EventType.TOUCH_MOVE, this._onTouchMove, this), this.node.off(cc.Node.EventType.TOUCH_END, this._onTouchEnded, this), this.node.off(cc.Node.EventType.TOUCH_CANCEL, this._onTouchCancel, this), this.node.off(cc.Node.EventType.MOUSE_ENTER, this._onMouseMoveIn, this), this.node.off(cc.Node.EventType.MOUSE_LEAVE, this._onMouseMoveOut, this)
                },
                _registerTargetEvent: function(t) {
                    t.on(cc.Node.EventType.SCALE_CHANGED, this._onTargetScaleChanged, this)
                },
                _unregisterTargetEvent: function(t) {
                    t.off(cc.Node.EventType.SCALE_CHANGED, this._onTargetScaleChanged, this)
                },
                _getTargetSprite: function(t) {
                    var e = null;
                    return t && (e = t.getComponent(cc.Sprite)), e
                },
                _applyTarget: function() {
                    var t = this._getTarget();
                    this._sprite = this._getTargetSprite(t), this._originalScale || (this._originalScale = cc.Vec2.ZERO), this._originalScale.x = t.scaleX, this._originalScale.y = t.scaleY, this._registerTargetEvent(t)
                },
                _onTouchBegan: function(t) {
                    this.interactable && this.enabledInHierarchy && (this._pressed = !0, this._updateState(), t.stopPropagation())
                },
                _onTouchMove: function(t) {
                    if (this.interactable && this.enabledInHierarchy && this._pressed) {
                        var e = t.touch,
                            i = this.node._hitTest(e.getLocation()),
                            n = this._getTarget(),
                            r = this._originalScale;
                        if (this.transition === s.SCALE && r) i ? (this._fromScale.x = r.x, this._fromScale.y = r.y, this._toScale.x = r.x * this.zoomScale, this._toScale.y = r.y * this.zoomScale, this._transitionFinished = !1) : (this.time = 0, this._transitionFinished = !0, n.setScale(r.x, r.y));
                        else {
                            var a = void 0;
                            a = i ? o.PRESSED : o.NORMAL, this._applyTransition(a)
                        }
                        t.stopPropagation()
                    }
                },
                _onTouchEnded: function(t) {
                    this.interactable && this.enabledInHierarchy && (this._pressed && (cc.Component.EventHandler.emitEvents(this.clickEvents, t), this.node.emit("click", this)), this._pressed = !1, this._updateState(), t.stopPropagation())
                },
                _onTouchCancel: function() {
                    this.interactable && this.enabledInHierarchy && (this._pressed = !1, this._updateState())
                },
                _onMouseMoveIn: function() {
                    !this._pressed && this.interactable && this.enabledInHierarchy && (this.transition !== s.SPRITE || this.hoverSprite) && (this._hovered || (this._hovered = !0, this._updateState()))
                },
                _onMouseMoveOut: function() {
                    this._hovered && (this._hovered = !1, this._updateState())
                },
                _updateState: function() {
                    var t = this._getButtonState();
                    this._applyTransition(t), this._updateDisabledState()
                },
                _getButtonState: function() {
                    return this.interactable ? this._pressed ? o.PRESSED : this._hovered ? o.HOVER : o.NORMAL : o.DISABLED
                },
                _updateColorTransitionImmediately: function(t) {
                    var e = this._getStateColor(t);
                    this._setTargetColor(e), this._fromColor = e.clone(), this._toColor = e
                },
                _updateColorTransition: function(t) {
                    if (t === o.DISABLED) this._updateColorTransitionImmediately(t);
                    else {
                        var e = this._getTarget(),
                            i = this._getStateColor(t);
                        this._fromColor = e.color.clone(), this._toColor = i, this.time = 0, this._transitionFinished = !1
                    }
                },
                _updateSpriteTransition: function(t) {
                    var e = this._getStateSprite(t);
                    this._sprite && e && (this._sprite.spriteFrame = e)
                },
                _updateScaleTransition: function(t) {
                    t === o.PRESSED ? this._zoomUp() : this._zoomBack()
                },
                _zoomUp: function() {
                    this._originalScale && (this._fromScale.x = this._originalScale.x, this._fromScale.y = this._originalScale.y, this._toScale.x = this._originalScale.x * this.zoomScale, this._toScale.y = this._originalScale.y * this.zoomScale, this.time = 0, this._transitionFinished = !1)
                },
                _zoomBack: function() {
                    if (this._originalScale) {
                        var t = this._getTarget();
                        this._fromScale.x = t.scaleX, this._fromScale.y = t.scaleY, this._toScale.x = this._originalScale.x, this._toScale.y = this._originalScale.y, this.time = 0, this._transitionFinished = !1
                    }
                },
                _updateTransition: function(t) {
                    t === s.COLOR ? this._updateColorTransitionImmediately(o.NORMAL) : t === s.SPRITE && this._updateSpriteTransition(o.NORMAL), this._updateState()
                },
                _applyTransition: function(t) {
                    var e = this.transition;
                    e === s.COLOR ? this._updateColorTransition(t) : e === s.SPRITE ? this._updateSpriteTransition(t) : e === s.SCALE && this._updateScaleTransition(t)
                },
                _resizeNodeToTargetNode: !1,
                _updateDisabledState: function() {
                    if (this._sprite) {
                        var t = !1;
                        this.enableAutoGrayEffect && (this.transition === s.SPRITE && this.disabledSprite || this.interactable || (t = !0)), this._switchGrayMaterial(t, this._sprite)
                    }
                }
            });
        cc.Button = e.exports = a
    }), {
        "../utils/gray-sprite-state": 296,
        "./CCComponent": 95
    }],
    94: [(function(t, e, i) {
        "use strict";
        var n = t("../camera/CCCamera"),
            r = t("./CCComponent"),
            s = cc.Class({
                name: "cc.Canvas",
                extends: r,
                editor: !1,
                resetInEditor: !1,
                statics: {
                    instance: null
                },
                properties: {
                    _designResolution: cc.size(960, 640),
                    designResolution: {
                        get: function() {
                            return cc.size(this._designResolution)
                        },
                        set: function(t) {
                            this._designResolution.width = t.width, this._designResolution.height = t.height, this.applySettings(), this.alignWithScreen()
                        },
                        tooltip: !1
                    },
                    _fitWidth: !1,
                    _fitHeight: !0,
                    fitHeight: {
                        get: function() {
                            return this._fitHeight
                        },
                        set: function(t) {
                            this._fitHeight !== t && (this._fitHeight = t, this.applySettings(), this.alignWithScreen())
                        },
                        tooltip: !1
                    },
                    fitWidth: {
                        get: function() {
                            return this._fitWidth
                        },
                        set: function(t) {
                            this._fitWidth !== t && (this._fitWidth = t, this.applySettings(), this.alignWithScreen())
                        },
                        tooltip: !1
                    }
                },
                ctor: function() {
                    this._thisOnResized = this.alignWithScreen.bind(this)
                },
                __preload: function() {
                    if (s.instance) return cc.errorID(6700, this.node.name, s.instance.node.name);
                    s.instance = this, cc.sys.isMobile ? window.addEventListener("resize", this._thisOnResized) : cc.view.on("canvas-resize", this._thisOnResized), this.applySettings(), this.alignWithScreen();
                    var t = cc.find("Main Camera", this.node);
                    t || ((t = new cc.Node("Main Camera")).parent = this.node, t.setSiblingIndex(0));
                    var e = t.getComponent(n);
                    if (!e) {
                        e = t.addComponent(n);
                        var i = n.ClearFlags;
                        e.clearFlags = i.COLOR | i.DEPTH | i.STENCIL, e.depth = -1
                    }
                    n.main = e
                },
                onDestroy: function() {
                    cc.sys.isMobile ? window.removeEventListener("resize", this._thisOnResized) : cc.view.off("canvas-resize", this._thisOnResized), s.instance === this && (s.instance = null)
                },
                alignWithScreen: function() {
                    var t, e, i = e = cc.visibleRect;
                    t = cc.view.getDesignResolutionSize();
                    var n = 0,
                        r = 0;
                    !this.fitHeight && !this.fitWidth && (n = .5 * (t.width - i.width), r = .5 * (t.height - i.height)), this.node.setPosition(.5 * i.width + n, .5 * i.height + r), this.node.width = e.width, this.node.height = e.height
                },
                applySettings: function() {
                    var t, e = cc.ResolutionPolicy;
                    t = this.fitHeight && this.fitWidth ? e.SHOW_ALL : this.fitHeight || this.fitWidth ? this.fitWidth ? e.FIXED_WIDTH : e.FIXED_HEIGHT : e.NO_BORDER;
                    var i = this._designResolution;
                    cc.view.setDesignResolutionSize(i.width, i.height, t)
                }
            });
        cc.Canvas = e.exports = s
    }), {
        "../camera/CCCamera": 80,
        "./CCComponent": 95
    }],
    95: [(function(t, e, i) {
        "use strict";
        var n = t("../platform/CCObject"),
            r = t("../platform/js"),
            s = new(t("../platform/id-generater"))("Comp"),
            o = (n.Flags.IsOnEnableCalled, n.Flags.IsOnLoadCalled),
            a = cc.Class({
                name: "cc.Component",
                extends: n,
                ctor: function() {
                    this._id = s.getNewId(), this.__eventTargets = []
                },
                properties: {
                    node: {
                        default: null,
                        visible: !1
                    },
                    name: {
                        get: function() {
                            if (this._name) return this._name;
                            var t = cc.js.getClassName(this),
                                e = t.lastIndexOf(".");
                            return e >= 0 && (t = t.slice(e + 1)), this.node.name + "<" + t + ">"
                        },
                        set: function(t) {
                            this._name = t
                        },
                        visible: !1
                    },
                    uuid: {
                        get: function() {
                            return this._id
                        },
                        visible: !1
                    },
                    __scriptAsset: !1,
                    _enabled: !0,
                    enabled: {
                        get: function() {
                            return this._enabled
                        },
                        set: function(t) {
                            if (this._enabled !== t && (this._enabled = t, this.node._activeInHierarchy)) {
                                var e = cc.director._compScheduler;
                                t ? e.enableComp(this) : e.disableComp(this)
                            }
                        },
                        visible: !1,
                        animatable: !0
                    },
                    enabledInHierarchy: {
                        get: function() {
                            return this._enabled && this.node._activeInHierarchy
                        },
                        visible: !1
                    },
                    _isOnLoadCalled: {
                        get: function() {
                            return this._objFlags & o
                        }
                    }
                },
                update: null,
                lateUpdate: null,
                __preload: null,
                onLoad: null,
                start: null,
                onEnable: null,
                onDisable: null,
                onDestroy: null,
                onFocusInEditor: null,
                onLostFocusInEditor: null,
                resetInEditor: null,
                addComponent: function(t) {
                    return this.node.addComponent(t)
                },
                getComponent: function(t) {
                    return this.node.getComponent(t)
                },
                getComponents: function(t) {
                    return this.node.getComponents(t)
                },
                getComponentInChildren: function(t) {
                    return this.node.getComponentInChildren(t)
                },
                getComponentsInChildren: function(t) {
                    return this.node.getComponentsInChildren(t)
                },
                _getLocalBounds: null,
                onRestore: null,
                destroy: function() {
                    this._super() && this._enabled && this.node._activeInHierarchy && cc.director._compScheduler.disableComp(this)
                },
                _onPreDestroy: function() {
                    this.unscheduleAllCallbacks();
                    for (var t = this.__eventTargets, e = 0, i = t.length; e < i; ++e) {
                        var n = t[e];
                        n && n.targetOff(this)
                    }
                    t.length = 0, cc.director._nodeActivator.destroyComp(this), this.node._removeComponent(this)
                },
                _instantiate: function(t) {
                    return t || (t = cc.instantiate._clone(this, this)), t.node = null, t
                },
                schedule: function(t, e, i, n) {
                    cc.assertID(t, 1619), cc.assertID(e >= 0, 1620), e = e || 0, i = isNaN(i) ? cc.macro.REPEAT_FOREVER : i, n = n || 0;
                    var r = cc.director.getScheduler(),
                        s = r.isTargetPaused(this);
                    r.schedule(t, this, e, i, n, s)
                },
                scheduleOnce: function(t, e) {
                    this.schedule(t, 0, 0, e)
                },
                unschedule: function(t) {
                    t && cc.director.getScheduler().unschedule(t, this)
                },
                unscheduleAllCallbacks: function() {
                    cc.director.getScheduler().unscheduleAllForTarget(this)
                }
            });
        a._requireComponent = null, a._executionOrder = 0, r.value(a, "_registerEditorProps", (function(t, e) {
            var i = e.requireComponent;
            i && (t._requireComponent = i);
            var n = e.executionOrder;
            n && "number" == typeof n && (t._executionOrder = n)
        })), a.prototype.__scriptUuid = "", cc.Component = e.exports = a
    }), {
        "../platform/CCObject": 204,
        "../platform/id-generater": 214,
        "../platform/js": 218
    }],
    96: [(function(t, e, i) {
        "use strict";
        cc.Component.EventHandler = cc.Class({
            name: "cc.ClickEvent",
            properties: {
                target: {
                    default: null,
                    type: cc.Node
                },
                component: "",
                _componentId: "",
                _componentName: {
                    get: function() {
                        return this._genCompIdIfNeeded(), this._compId2Name(this._componentId)
                    },
                    set: function(t) {
                        this._componentId = this._compName2Id(t)
                    }
                },
                handler: {
                    default: ""
                },
                customEventData: {
                    default: ""
                }
            },
            statics: {
                emitEvents: function(t) {
                    var e = void 0;
                    if (arguments.length > 0)
                        for (var i = 0, n = (e = new Array(arguments.length - 1)).length; i < n; i++) e[i] = arguments[i + 1];
                    for (var r = 0, s = t.length; r < s; r++) {
                        var o = t[r];
                        o instanceof cc.Component.EventHandler && o.emit(e)
                    }
                }
            },
            emit: function(t) {
                var e = this.target;
                if (cc.isValid(e)) {
                    this._genCompIdIfNeeded();
                    var i = cc.js._getClassById(this._componentId),
                        n = e.getComponent(i);
                    if (cc.isValid(n)) {
                        var r = n[this.handler];
                        "function" == typeof r && (null != this.customEventData && "" !== this.customEventData && (t = t.slice()).push(this.customEventData), r.apply(n, t))
                    }
                }
            },
            _compName2Id: function(t) {
                var e = cc.js.getClassByName(t);
                return cc.js._getClassId(e)
            },
            _compId2Name: function(t) {
                var e = cc.js._getClassById(t);
                return cc.js.getClassName(e)
            },
            _genCompIdIfNeeded: function() {
                this._componentId || (this._componentName = this.component, this.component = "")
            }
        })
    }), {}],
    97: [(function(t, e, i) {
        "use strict";
        var n = t("../platform/CCMacro"),
            r = t("./CCRenderComponent"),
            s = t("../assets/material/CCMaterial"),
            o = t("../renderer/utils/label/label-frame"),
            a = n.TextAlignment,
            l = n.VerticalTextAlignment,
            h = cc.Enum({
                NONE: 0,
                CLAMP: 1,
                SHRINK: 2,
                RESIZE_HEIGHT: 3
            }),
            c = cc.Enum({
                NONE: 0,
                BITMAP: 1,
                CHAR: 2
            }),
            u = cc.Class({
                name: "cc.Label",
                extends: r,
                ctor: function() {
                    this._actualFontSize = 0, this._assemblerData = null, this._frame = null, this._ttfTexture = null, this._letterTexture = null, cc.game.renderType === cc.game.RENDER_TYPE_CANVAS ? this._activateMaterial = this._activateMaterialCanvas : this._activateMaterial = this._activateMaterialWebgl
                },
                editor: !1,
                properties: {
                    _useOriginalSize: !0,
                    _string: {
                        default: "",
                        formerlySerializedAs: "_N$string"
                    },
                    string: {
                        get: function() {
                            return this._string
                        },
                        set: function(t) {
                            var e = this._string;
                            this._string = "" + t, this.string !== e && this._lazyUpdateRenderData(), this._checkStringEmpty()
                        },
                        multiline: !0,
                        tooltip: !1
                    },
                    horizontalAlign: {
                        default: a.LEFT,
                        type: a,
                        tooltip: !1,
                        notify: function(t) {
                            this.horizontalAlign !== t && this._lazyUpdateRenderData()
                        },
                        animatable: !1
                    },
                    verticalAlign: {
                        default: l.TOP,
                        type: l,
                        tooltip: !1,
                        notify: function(t) {
                            this.verticalAlign !== t && this._lazyUpdateRenderData()
                        },
                        animatable: !1
                    },
                    actualFontSize: {
                        displayName: "Actual Font Size",
                        animatable: !1,
                        readonly: !0,
                        get: function() {
                            return this._actualFontSize
                        },
                        tooltip: !1
                    },
                    _fontSize: 40,
                    fontSize: {
                        get: function() {
                            return this._fontSize
                        },
                        set: function(t) {
                            this._fontSize !== t && (this._fontSize = t, this._lazyUpdateRenderData())
                        },
                        range: [0, 512],
                        tooltip: !1
                    },
                    fontFamily: {
                        default: "Arial",
                        tooltip: !1,
                        notify: function(t) {
                            this.fontFamily !== t && this._lazyUpdateRenderData()
                        },
                        animatable: !1
                    },
                    _lineHeight: 40,
                    lineHeight: {
                        get: function() {
                            return this._lineHeight
                        },
                        set: function(t) {
                            this._lineHeight !== t && (this._lineHeight = t, this._lazyUpdateRenderData())
                        },
                        tooltip: !1
                    },
                    overflow: {
                        default: h.NONE,
                        type: h,
                        tooltip: !1,
                        notify: function(t) {
                            this.overflow !== t && this._lazyUpdateRenderData()
                        },
                        animatable: !1
                    },
                    _enableWrapText: !0,
                    enableWrapText: {
                        get: function() {
                            return this._enableWrapText
                        },
                        set: function(t) {
                            this._enableWrapText !== t && (this._enableWrapText = t, this._lazyUpdateRenderData())
                        },
                        animatable: !1,
                        tooltip: !1
                    },
                    _N$file: null,
                    font: {
                        get: function() {
                            return this._N$file
                        },
                        set: function(t) {
                            this.font !== t && (t || (this._isSystemFontUsed = !0), this._N$file = t, t && this._isSystemFontUsed && (this._isSystemFontUsed = !1), "string" == typeof t && cc.warnID(4e3), this._resetAssembler(), this._applyFontTexture(!0), this._lazyUpdateRenderData())
                        },
                        type: cc.Font,
                        tooltip: !1,
                        animatable: !1
                    },
                    _isSystemFontUsed: !0,
                    useSystemFont: {
                        get: function() {
                            return this._isSystemFontUsed
                        },
                        set: function(t) {
                            this._isSystemFontUsed !== t && (this._isSystemFontUsed = !!t, t && (this.font = null, this._resetAssembler(), this._applyFontTexture(!0), this._lazyUpdateRenderData(), this._checkStringEmpty()))
                        },
                        animatable: !1,
                        tooltip: !1
                    },
                    _bmFontOriginalSize: {
                        displayName: "BMFont Original Size",
                        get: function() {
                            return this._N$file instanceof cc.BitmapFont ? this._N$file.fontSize : -1
                        },
                        visible: !0,
                        animatable: !1
                    },
                    _spacingX: 0,
                    spacingX: {
                        get: function() {
                            return this._spacingX
                        },
                        set: function(t) {
                            this._spacingX = t, this._lazyUpdateRenderData()
                        },
                        tooltip: !1
                    },
                    _batchAsBitmap: !1,
                    cacheMode: {
                        default: c.NONE,
                        type: c,
                        tooltip: !1,
                        notify: function(t) {
                            this.cacheMode !== t && (t !== c.BITMAP || this.font instanceof cc.BitmapFont || this._frame && this._frame._resetDynamicAtlasFrame(), t === c.CHAR && (this._ttfTexture = null), this._resetAssembler(), this._applyFontTexture(!0), this._lazyUpdateRenderData())
                        },
                        animatable: !1
                    },
                    _isBold: {
                        default: !1,
                        serializable: !1
                    },
                    _isItalic: {
                        default: !1,
                        serializable: !1
                    },
                    _isUnderline: {
                        default: !1,
                        serializable: !1
                    }
                },
                statics: {
                    HorizontalAlign: a,
                    VerticalAlign: l,
                    Overflow: h,
                    CacheMode: c,
                    _shareAtlas: null,
                    clearCharCache: function() {
                        u._shareAtlas && u._shareAtlas.clearAllCache()
                    }
                },
                onLoad: function() {
                    this._batchAsBitmap && this.cacheMode === c.NONE && (this.cacheMode = c.BITMAP, this._batchAsBitmap = !1), cc.game.renderType === cc.game.RENDER_TYPE_CANVAS && (this.cacheMode = c.NONE)
                },
                onEnable: function() {
                    this._super(), this.node.on(cc.Node.EventType.SIZE_CHANGED, this._lazyUpdateRenderData, this), this.node.on(cc.Node.EventType.ANCHOR_CHANGED, this._lazyUpdateRenderData, this), this._forceUpdateRenderData(), this._checkStringEmpty()
                },
                onDisable: function() {
                    this._super(), this.node.off(cc.Node.EventType.SIZE_CHANGED, this._lazyUpdateRenderData, this), this.node.off(cc.Node.EventType.ANCHOR_CHANGED, this._lazyUpdateRenderData, this)
                },
                onDestroy: function() {
                    this._assembler && this._assembler._resetAssemblerData && this._assembler._resetAssemblerData(this._assemblerData), this._assemblerData = null, this._letterTexture = null, this._ttfTexture && (this._ttfTexture.destroy(), this._ttfTexture = null), this._super()
                },
                _updateColor: function() {
                    this.font instanceof cc.BitmapFont || this._lazyUpdateRenderData(), r.prototype._updateColor.call(this)
                },
                _resetAssembler: function() {
                    this._frame = null, r.prototype._resetAssembler.call(this)
                },
                _canRender: function() {
                    var t = this._super(),
                        e = this.font;
                    if (e instanceof cc.BitmapFont) {
                        var i = e.spriteFrame;
                        i && i.textureLoaded() || (t = !1)
                    }
                    return t
                },
                _checkStringEmpty: function() {
                    this.markForRender(!!this.string)
                },
                _on3DNodeChanged: function() {
                    this._resetAssembler(), this._applyFontTexture(!0)
                },
                _applyFontTexture: function(t) {
                    var e = this.font;
                    if (e instanceof cc.BitmapFont) {
                        var i = e.spriteFrame;
                        this._frame = i;
                        var n = this,
                            r = function() {
                                n._frame._texture = i._texture, n._activateMaterial(t), t && n._assembler && n._assembler.updateRenderData(n)
                            };
                        i && i.textureLoaded() ? r() : (this.disableRender(), i && (i.once("load", r, this), i.ensureLoadTexture()))
                    } else this._frame || (this._frame = new o), this.cacheMode === c.CHAR ? (this._letterTexture = this._assembler._getAssemblerData(), this._frame._refreshTexture(this._letterTexture)) : this._ttfTexture || (this._ttfTexture = new cc.Texture2D, this._assemblerData = this._assembler._getAssemblerData(), this._ttfTexture.initWithElement(this._assemblerData.canvas)), this.cacheMode !== c.CHAR && (this._frame._resetDynamicAtlasFrame(), this._frame._refreshTexture(this._ttfTexture)), this._activateMaterial(t), t && this._assembler && this._assembler.updateRenderData(this)
                },
                _activateMaterialCanvas: function(t) {
                    t && (this._frame._texture.url = this.uuid + "_texture", this.markForUpdateRenderData(!0), this.markForRender(!0))
                },
                _activateMaterialWebgl: function(t) {
                    if (t)
                        if (this._frame) {
                            var e = this.sharedMaterials[0];
                            (e = e ? s.getInstantiatedMaterial(e, this) : s.getInstantiatedBuiltinMaterial("2d-sprite", this)).setProperty("texture", this._frame._texture), this.setMaterial(0, e), this.markForUpdateRenderData(!0), this.markForRender(!0)
                        } else this.disableRender()
                },
                _lazyUpdateRenderData: function() {
                    this.setVertsDirty(), this.markForUpdateRenderData(!0)
                },
                _forceUpdateRenderData: function() {
                    this.setVertsDirty(), this._resetAssembler(), this._applyFontTexture(!0), this.markForUpdateRenderData(!0)
                },
                _enableBold: function(t) {
                    this._isBold = !!t
                },
                _enableItalics: function(t) {
                    this._isItalic = !!t
                },
                _enableUnderline: function(t) {
                    this._isUnderline = !!t
                }
            });
        cc.Label = e.exports = u
    }), {
        "../assets/material/CCMaterial": 75,
        "../platform/CCMacro": 203,
        "../renderer/utils/label/label-frame": 252,
        "./CCRenderComponent": 106
    }],
    98: [(function(t, e, i) {
        "use strict";
        var n = cc.Class({
            name: "cc.LabelOutline",
            extends: t("./CCComponent"),
            editor: !1,
            properties: {
                _color: cc.Color.WHITE,
                _width: 1,
                color: {
                    tooltip: !1,
                    get: function() {
                        return this._color
                    },
                    set: function(t) {
                        this._color = t, this._updateRenderData()
                    }
                },
                width: {
                    tooltip: !1,
                    get: function() {
                        return this._width
                    },
                    set: function(t) {
                        this._width !== t && (this._width = t, this._updateRenderData())
                    },
                    range: [0, 512]
                }
            },
            onEnable: function() {
                this._updateRenderData()
            },
            onDisable: function() {
                this._updateRenderData()
            },
            _updateRenderData: function() {
                var t = this.node.getComponent(cc.Label);
                t && t._lazyUpdateRenderData()
            }
        });
        cc.LabelOutline = e.exports = n
    }), {
        "./CCComponent": 95
    }],
    99: [(function(t, e, i) {
        "use strict";
        var n = cc.Class({
            name: "cc.LabelShadow",
            extends: t("./CCComponent"),
            editor: !1,
            properties: {
                _color: cc.Color.WHITE,
                _offset: cc.v2(2, 2),
                _blur: 2,
                color: {
                    tooltip: !1,
                    get: function() {
                        return this._color
                    },
                    set: function(t) {
                        this._color = t, this._updateRenderData()
                    }
                },
                offset: {
                    tooltip: !1,
                    get: function() {
                        return this._offset
                    },
                    set: function(t) {
                        this._offset = t, this._updateRenderData()
                    }
                },
                blur: {
                    tooltip: !1,
                    get: function() {
                        return this._blur
                    },
                    set: function(t) {
                        this._blur = t, this._updateRenderData()
                    },
                    range: [0, 1024]
                }
            },
            onEnable: function() {
                this._updateRenderData()
            },
            onDisable: function() {
                this._updateRenderData()
            },
            _updateRenderData: function() {
                var t = this.node.getComponent(cc.Label);
                t && t._lazyUpdateRenderData()
            }
        });
        cc.LabelShadow = e.exports = n
    }), {
        "./CCComponent": 95
    }],
    100: [(function(t, e, i) {
        "use strict";
        var n = t("../CCNode").EventType,
            r = cc.Enum({
                NONE: 0,
                HORIZONTAL: 1,
                VERTICAL: 2,
                GRID: 3
            }),
            s = cc.Enum({
                NONE: 0,
                CONTAINER: 1,
                CHILDREN: 2
            }),
            o = cc.Enum({
                HORIZONTAL: 0,
                VERTICAL: 1
            }),
            a = cc.Enum({
                BOTTOM_TO_TOP: 0,
                TOP_TO_BOTTOM: 1
            }),
            l = cc.Enum({
                LEFT_TO_RIGHT: 0,
                RIGHT_TO_LEFT: 1
            }),
            h = cc.Class({
                name: "cc.Layout",
                extends: t("./CCComponent"),
                editor: !1,
                properties: {
                    _layoutSize: cc.size(300, 200),
                    _layoutDirty: {
                        default: !0,
                        serializable: !1
                    },
                    _resize: s.NONE,
                    _N$layoutType: r.NONE,
                    type: {
                        type: r,
                        get: function() {
                            return this._N$layoutType
                        },
                        set: function(t) {
                            this._N$layoutType = t, this._doLayoutDirty()
                        },
                        tooltip: !1,
                        animatable: !1
                    },
                    resizeMode: {
                        type: s,
                        tooltip: !1,
                        animatable: !1,
                        get: function() {
                            return this._resize
                        },
                        set: function(t) {
                            this.type === r.NONE && t === s.CHILDREN || (this._resize = t, this._doLayoutDirty())
                        }
                    },
                    cellSize: {
                        default: cc.size(40, 40),
                        tooltip: !1,
                        type: cc.Size,
                        notify: function() {
                            this._doLayoutDirty()
                        }
                    },
                    startAxis: {
                        default: o.HORIZONTAL,
                        tooltip: !1,
                        type: o,
                        notify: function() {
                            this._doLayoutDirty()
                        },
                        animatable: !1
                    },
                    _N$padding: {
                        default: 0
                    },
                    paddingLeft: {
                        default: 0,
                        tooltip: !1,
                        notify: function() {
                            this._doLayoutDirty()
                        }
                    },
                    paddingRight: {
                        default: 0,
                        tooltip: !1,
                        notify: function() {
                            this._doLayoutDirty()
                        }
                    },
                    paddingTop: {
                        default: 0,
                        tooltip: !1,
                        notify: function() {
                            this._doLayoutDirty()
                        }
                    },
                    paddingBottom: {
                        default: 0,
                        tooltip: !1,
                        notify: function() {
                            this._doLayoutDirty()
                        }
                    },
                    spacingX: {
                        default: 0,
                        notify: function() {
                            this._doLayoutDirty()
                        },
                        tooltip: !1
                    },
                    spacingY: {
                        default: 0,
                        notify: function() {
                            this._doLayoutDirty()
                        },
                        tooltip: !1
                    },
                    verticalDirection: {
                        default: a.TOP_TO_BOTTOM,
                        type: a,
                        notify: function() {
                            this._doLayoutDirty()
                        },
                        tooltip: !1,
                        animatable: !1
                    },
                    horizontalDirection: {
                        default: l.LEFT_TO_RIGHT,
                        type: l,
                        notify: function() {
                            this._doLayoutDirty()
                        },
                        tooltip: !1,
                        animatable: !1
                    },
                    affectedByScale: {
                        default: !1,
                        notify: function() {
                            this._doLayoutDirty()
                        },
                        animatable: !1,
                        tooltip: !1
                    }
                },
                statics: {
                    Type: r,
                    VerticalDirection: a,
                    HorizontalDirection: l,
                    ResizeMode: s,
                    AxisDirection: o
                },
                _migratePaddingData: function() {
                    this.paddingLeft = this._N$padding, this.paddingRight = this._N$padding, this.paddingTop = this._N$padding, this.paddingBottom = this._N$padding, this._N$padding = 0
                },
                onEnable: function() {
                    this._addEventListeners(), this.node.getContentSize().equals(cc.size(0, 0)) && this.node.setContentSize(this._layoutSize), 0 !== this._N$padding && this._migratePaddingData(), this._doLayoutDirty()
                },
                onDisable: function() {
                    this._removeEventListeners()
                },
                _doLayoutDirty: function() {
                    this._layoutDirty = !0
                },
                _doScaleDirty: function() {
                    this._layoutDirty = this._layoutDirty || this.affectedByScale
                },
                _addEventListeners: function() {
                    cc.director.on(cc.Director.EVENT_AFTER_UPDATE, this.updateLayout, this), this.node.on(n.SIZE_CHANGED, this._resized, this), this.node.on(n.ANCHOR_CHANGED, this._doLayoutDirty, this), this.node.on(n.CHILD_ADDED, this._childAdded, this), this.node.on(n.CHILD_REMOVED, this._childRemoved, this), this.node.on(n.CHILD_REORDER, this._doLayoutDirty, this), this._addChildrenEventListeners()
                },
                _removeEventListeners: function() {
                    cc.director.off(cc.Director.EVENT_AFTER_UPDATE, this.updateLayout, this), this.node.off(n.SIZE_CHANGED, this._resized, this), this.node.off(n.ANCHOR_CHANGED, this._doLayoutDirty, this), this.node.off(n.CHILD_ADDED, this._childAdded, this), this.node.off(n.CHILD_REMOVED, this._childRemoved, this), this.node.off(n.CHILD_REORDER, this._doLayoutDirty, this), this._removeChildrenEventListeners()
                },
                _addChildrenEventListeners: function() {
                    for (var t = this.node.children, e = 0; e < t.length; ++e) {
                        var i = t[e];
                        i.on(n.SCALE_CHANGED, this._doScaleDirty, this), i.on(n.SIZE_CHANGED, this._doLayoutDirty, this), i.on(n.POSITION_CHANGED, this._doLayoutDirty, this), i.on(n.ANCHOR_CHANGED, this._doLayoutDirty, this), i.on("active-in-hierarchy-changed", this._doLayoutDirty, this)
                    }
                },
                _removeChildrenEventListeners: function() {
                    for (var t = this.node.children, e = 0; e < t.length; ++e) {
                        var i = t[e];
                        i.off(n.SCALE_CHANGED, this._doScaleDirty, this), i.off(n.SIZE_CHANGED, this._doLayoutDirty, this), i.off(n.POSITION_CHANGED, this._doLayoutDirty, this), i.off(n.ANCHOR_CHANGED, this._doLayoutDirty, this), i.off("active-in-hierarchy-changed", this._doLayoutDirty, this)
                    }
                },
                _childAdded: function(t) {
                    t.on(n.SCALE_CHANGED, this._doScaleDirty, this), t.on(n.SIZE_CHANGED, this._doLayoutDirty, this), t.on(n.POSITION_CHANGED, this._doLayoutDirty, this), t.on(n.ANCHOR_CHANGED, this._doLayoutDirty, this), t.on("active-in-hierarchy-changed", this._doLayoutDirty, this), this._doLayoutDirty()
                },
                _childRemoved: function(t) {
                    t.off(n.SCALE_CHANGED, this._doScaleDirty, this), t.off(n.SIZE_CHANGED, this._doLayoutDirty, this), t.off(n.POSITION_CHANGED, this._doLayoutDirty, this), t.off(n.ANCHOR_CHANGED, this._doLayoutDirty, this), t.off("active-in-hierarchy-changed", this._doLayoutDirty, this), this._doLayoutDirty()
                },
                _resized: function() {
                    this._layoutSize = this.node.getContentSize(), this._doLayoutDirty()
                },
                _doLayoutHorizontally: function(t, e, i, n) {
                    var o = this.node.getAnchorPoint(),
                        h = this.node.children,
                        c = 1,
                        u = this.paddingLeft,
                        _ = -o.x * t;
                    this.horizontalDirection === l.RIGHT_TO_LEFT && (c = -1, _ = (1 - o.x) * t, u = this.paddingRight);
                    for (var f = _ + c * u - c * this.spacingX, d = 0, p = 0, m = 0, y = 0, v = 0, g = 0, x = 0, b = 0; b < h.length; ++b) {
                        (C = h[b]).activeInHierarchy && x++
                    }
                    var A = this.cellSize.width;
                    this.type !== r.GRID && this.resizeMode === s.CHILDREN && (A = (t - (this.paddingLeft + this.paddingRight) - (x - 1) * this.spacingX) / x);
                    for (b = 0; b < h.length; ++b) {
                        var C = h[b],
                            T = this._getUsedScaleValue(C.scaleX),
                            S = this._getUsedScaleValue(C.scaleY);
                        if (C.activeInHierarchy) {
                            this._resize === s.CHILDREN && (C.width = A / T, this.type === r.GRID && (C.height = this.cellSize.height / S));
                            var w = C.anchorX,
                                E = C.width * T,
                                M = C.height * S;
                            m > p && (p = m), M >= p && (m = p, p = M, g = C.getAnchorPoint().y), this.horizontalDirection === l.RIGHT_TO_LEFT && (w = 1 - C.anchorX), f = f + c * w * E + c * this.spacingX;
                            var D = c * (1 - w) * E;
                            if (e) {
                                var B = f + D + c * (c > 0 ? this.paddingRight : this.paddingLeft),
                                    I = this.horizontalDirection === l.LEFT_TO_RIGHT && B > (1 - o.x) * t,
                                    P = this.horizontalDirection === l.RIGHT_TO_LEFT && B < -o.x * t;
                                (I || P) && (M >= p ? (0 === m && (m = p), d += m, m = p) : (d += p, m = M, p = 0), f = _ + c * (u + w * E), y++)
                            }
                            var R = i(C, d, y);
                            t >= E + this.paddingLeft + this.paddingRight && n && C.setPosition(cc.v2(f, R));
                            var O, L = 1,
                                F = 0 === p ? M : p;
                            this.verticalDirection === a.TOP_TO_BOTTOM ? (v = v || this.node._contentSize.height, (O = R + (L = -1) * (F * g + this.paddingBottom)) < v && (v = O)) : (v = v || -this.node._contentSize.height, (O = R + L * (F * g + this.paddingTop)) > v && (v = O)), f += D
                        }
                    }
                    return v
                },
                _getVerticalBaseHeight: function(t) {
                    var e = 0,
                        i = 0;
                    if (this.resizeMode === s.CONTAINER) {
                        for (var n = 0; n < t.length; ++n) {
                            var r = t[n];
                            r.activeInHierarchy && (i++, e += r.height * this._getUsedScaleValue(r.scaleY))
                        }
                        e += (i - 1) * this.spacingY + this.paddingBottom + this.paddingTop
                    } else e = this.node.getContentSize().height;
                    return e
                },
                _doLayoutVertically: function(t, e, i, n) {
                    var o = this.node.getAnchorPoint(),
                        h = this.node.children,
                        c = 1,
                        u = this.paddingBottom,
                        _ = -o.y * t;
                    this.verticalDirection === a.TOP_TO_BOTTOM && (c = -1, _ = (1 - o.y) * t, u = this.paddingTop);
                    for (var f = _ + c * u - c * this.spacingY, d = 0, p = 0, m = 0, y = 0, v = 0, g = 0, x = 0, b = 0; b < h.length; ++b) {
                        (C = h[b]).activeInHierarchy && x++
                    }
                    var A = this.cellSize.height;
                    this.type !== r.GRID && this.resizeMode === s.CHILDREN && (A = (t - (this.paddingTop + this.paddingBottom) - (x - 1) * this.spacingY) / x);
                    for (b = 0; b < h.length; ++b) {
                        var C = h[b],
                            T = this._getUsedScaleValue(C.scaleX),
                            S = this._getUsedScaleValue(C.scaleY);
                        if (C.activeInHierarchy) {
                            this.resizeMode === s.CHILDREN && (C.height = A / S, this.type === r.GRID && (C.width = this.cellSize.width / T));
                            var w = C.anchorY,
                                E = C.width * T,
                                M = C.height * S;
                            m > p && (p = m), E >= p && (m = p, p = E, g = C.getAnchorPoint().x), this.verticalDirection === a.TOP_TO_BOTTOM && (w = 1 - C.anchorY), f = f + c * w * M + c * this.spacingY;
                            var D = c * (1 - w) * M;
                            if (e) {
                                var B = f + D + c * (c > 0 ? this.paddingTop : this.paddingBottom),
                                    I = this.verticalDirection === a.BOTTOM_TO_TOP && B > (1 - o.y) * t,
                                    P = this.verticalDirection === a.TOP_TO_BOTTOM && B < -o.y * t;
                                (I || P) && (E >= p ? (0 === m && (m = p), d += m, m = p) : (d += p, m = E, p = 0), f = _ + c * (u + w * M), y++)
                            }
                            var R = i(C, d, y);
                            t >= M + (this.paddingTop + this.paddingBottom) && n && C.setPosition(cc.v2(R, f));
                            var O, L = 1,
                                F = 0 === p ? E : p;
                            this.horizontalDirection === l.RIGHT_TO_LEFT ? (L = -1, v = v || this.node._contentSize.width, (O = R + L * (F * g + this.paddingLeft)) < v && (v = O)) : (v = v || -this.node._contentSize.width, (O = R + L * (F * g + this.paddingRight)) > v && (v = O)), f += D
                        }
                    }
                    return v
                },
                _doLayoutBasic: function() {
                    for (var t = this.node.children, e = null, i = 0; i < t.length; ++i) {
                        var n = t[i];
                        n.activeInHierarchy && (e ? e.union(e, n.getBoundingBoxToWorld()) : e = n.getBoundingBoxToWorld())
                    }
                    if (e) {
                        var r = this.node.convertToNodeSpaceAR(cc.v2(e.x, e.y));
                        r = cc.v2(r.x - this.paddingLeft, r.y - this.paddingBottom);
                        var s = this.node.convertToNodeSpaceAR(cc.v2(e.xMax, e.yMax)),
                            o = (s = cc.v2(s.x + this.paddingRight, s.y + this.paddingTop)).sub(r);
                        if (0 !== (o = cc.size(parseFloat(o.x.toFixed(2)), parseFloat(o.y.toFixed(2)))).width) {
                            var a = -r.x / o.width;
                            this.node.anchorX = parseFloat(a.toFixed(2))
                        }
                        if (0 !== o.height) {
                            var l = -r.y / o.height;
                            this.node.anchorY = parseFloat(l.toFixed(2))
                        }
                        this.node.setContentSize(o)
                    }
                },
                _doLayoutGridAxisHorizontal: function(t, e) {
                    var i = e.width,
                        n = 1,
                        r = -t.y * e.height,
                        o = this.paddingBottom;
                    this.verticalDirection === a.TOP_TO_BOTTOM && (n = -1, r = (1 - t.y) * e.height, o = this.paddingTop);
                    var l = function(t, e, i) {
                            return r + n * (e + t.anchorY * t.height * this._getUsedScaleValue(t.scaleY) + o + i * this.spacingY)
                        }.bind(this),
                        h = 0;
                    if (this.resizeMode === s.CONTAINER) {
                        var c = this._doLayoutHorizontally(i, !0, l, !1);
                        (h = r - c) < 0 && (h *= -1), r = -t.y * h, this.verticalDirection === a.TOP_TO_BOTTOM && (n = -1, r = (1 - t.y) * h)
                    }
                    this._doLayoutHorizontally(i, !0, l, !0), this.resizeMode === s.CONTAINER && this.node.setContentSize(i, h)
                },
                _doLayoutGridAxisVertical: function(t, e) {
                    var i = e.height,
                        n = 1,
                        r = -t.x * e.width,
                        o = this.paddingLeft;
                    this.horizontalDirection === l.RIGHT_TO_LEFT && (n = -1, r = (1 - t.x) * e.width, o = this.paddingRight);
                    var a = function(t, e, i) {
                            return r + n * (e + t.anchorX * t.width * this._getUsedScaleValue(t.scaleX) + o + i * this.spacingX)
                        }.bind(this),
                        h = 0;
                    if (this.resizeMode === s.CONTAINER) {
                        var c = this._doLayoutVertically(i, !0, a, !1);
                        (h = r - c) < 0 && (h *= -1), r = -t.x * h, this.horizontalDirection === l.RIGHT_TO_LEFT && (n = -1, r = (1 - t.x) * h)
                    }
                    this._doLayoutVertically(i, !0, a, !0), this.resizeMode === s.CONTAINER && this.node.setContentSize(h, i)
                },
                _doLayoutGrid: function() {
                    var t = this.node.getAnchorPoint(),
                        e = this.node.getContentSize();
                    this.startAxis === o.HORIZONTAL ? this._doLayoutGridAxisHorizontal(t, e) : this.startAxis === o.VERTICAL && this._doLayoutGridAxisVertical(t, e)
                },
                _getHorizontalBaseWidth: function(t) {
                    var e = 0,
                        i = 0;
                    if (this.resizeMode === s.CONTAINER) {
                        for (var n = 0; n < t.length; ++n) {
                            var r = t[n];
                            r.activeInHierarchy && (i++, e += r.width * this._getUsedScaleValue(r.scaleX))
                        }
                        e += (i - 1) * this.spacingX + this.paddingLeft + this.paddingRight
                    } else e = this.node.getContentSize().width;
                    return e
                },
                _doLayout: function() {
                    if (this.type === r.HORIZONTAL) {
                        var t = this._getHorizontalBaseWidth(this.node.children);
                        this._doLayoutHorizontally(t, !1, (function(t) {
                            return t.y
                        }), !0), this.node.width = t
                    } else if (this.type === r.VERTICAL) {
                        var e = this._getVerticalBaseHeight(this.node.children);
                        this._doLayoutVertically(e, !1, (function(t) {
                            return t.x
                        }), !0), this.node.height = e
                    } else this.type === r.NONE ? this.resizeMode === s.CONTAINER && this._doLayoutBasic() : this.type === r.GRID && this._doLayoutGrid()
                },
                _getUsedScaleValue: function(t) {
                    return this.affectedByScale ? Math.abs(t) : 1
                },
                updateLayout: function() {
                    this._layoutDirty && this.node.children.length > 0 && (this._doLayout(), this._layoutDirty = !1)
                }
            });
        Object.defineProperty(h.prototype, "padding", {
            get: function() {
                return cc.warnID(4100), this.paddingLeft
            },
            set: function(t) {
                this._N$padding = t, this._migratePaddingData(), this._doLayoutDirty()
            }
        }), cc.Layout = e.exports = h
    }), {
        "../CCNode": 52,
        "./CCComponent": 95
    }],
    101: [(function(t, e, i) {
        "use strict";
        var n = (function(t) {
                return t && t.__esModule ? t : {
                    default: t
                }
            })(t("../../renderer/gfx")),
            r = t("../vmath");
        var s = t("../utils/misc"),
            o = t("../assets/material/CCMaterial"),
            a = t("./CCRenderComponent"),
            l = t("../renderer/render-flow"),
            h = t("../graphics/graphics"),
            c = t("../CCNode"),
            u = cc.v2(),
            _ = r.mat4.create(),
            f = [];

        function d(t, e, i) {
            f.length = 0;
            for (var n = 2 * Math.PI / i, r = 0; r < i; ++r) f.push(cc.v2(e.x * Math.cos(n * r) + t.x, e.y * Math.sin(n * r) + t.y));
            return f
        }
        var p = cc.Enum({
                RECT: 0,
                ELLIPSE: 1,
                IMAGE_STENCIL: 2
            }),
            m = cc.Class({
                name: "cc.Mask",
                extends: a,
                editor: !1,
                ctor: function() {
                    this._graphics = null, this._enableMaterial = null, this._exitMaterial = null, this._clearMaterial = null
                },
                properties: {
                    _spriteFrame: {
                        default: null,
                        type: cc.SpriteFrame
                    },
                    _type: p.RECT,
                    type: {
                        get: function() {
                            return this._type
                        },
                        set: function(t) {
                            this._type !== t && this._resetAssembler(), this._type = t, this._type !== p.IMAGE_STENCIL && (this.spriteFrame = null, this.alphaThreshold = 0, this._updateGraphics()), this._activateMaterial()
                        },
                        type: p,
                        tooltip: !1
                    },
                    spriteFrame: {
                        type: cc.SpriteFrame,
                        tooltip: !1,
                        get: function() {
                            return this._spriteFrame
                        },
                        set: function(t) {
                            var e = this._spriteFrame;
                            e !== t && (this._spriteFrame = t, this._applySpriteFrame(e))
                        }
                    },
                    alphaThreshold: {
                        default: .1,
                        type: cc.Float,
                        range: [0, 1, .1],
                        slide: !0,
                        tooltip: !1,
                        notify: function() {
                            if (cc.game.renderType !== cc.game.RENDER_TYPE_CANVAS) {
                                var t = this.sharedMaterials[0];
                                t && t.setProperty("alphaThreshold", this.alphaThreshold)
                            } else cc.warnID(4201)
                        }
                    },
                    inverted: {
                        default: !1,
                        type: cc.Boolean,
                        tooltip: !1,
                        notify: function() {
                            cc.game.renderType !== cc.game.RENDER_TYPE_CANVAS || cc.warnID(4202)
                        }
                    },
                    _segments: 64,
                    segements: {
                        get: function() {
                            return this._segments
                        },
                        set: function(t) {
                            this._segments = s.clampf(t, 3, 1e4), this._updateGraphics()
                        },
                        type: cc.Integer,
                        tooltip: !1
                    },
                    _resizeToTarget: {
                        animatable: !1,
                        set: function(t) {
                            t && this._resizeNodeToTargetNode()
                        }
                    }
                },
                statics: {
                    Type: p
                },
                onLoad: function() {
                    this._createGraphics()
                },
                onRestore: function() {
                    this._createGraphics(), this._type !== p.IMAGE_STENCIL ? this._updateGraphics() : this._applySpriteFrame()
                },
                onEnable: function() {
                    this._super(), this._type === p.IMAGE_STENCIL ? this._spriteFrame && this._spriteFrame.textureLoaded() || (this.markForRender(!1), this._spriteFrame && (this.markForUpdateRenderData(!1), this._spriteFrame.once("load", this._onTextureLoaded, this), this._spriteFrame.ensureLoadTexture())) : this._updateGraphics(), this.node.on(cc.Node.EventType.POSITION_CHANGED, this._updateGraphics, this), this.node.on(cc.Node.EventType.ROTATION_CHANGED, this._updateGraphics, this), this.node.on(cc.Node.EventType.SCALE_CHANGED, this._updateGraphics, this), this.node.on(cc.Node.EventType.SIZE_CHANGED, this._updateGraphics, this), this.node.on(cc.Node.EventType.ANCHOR_CHANGED, this._updateGraphics, this), this.node._renderFlag |= l.FLAG_POST_RENDER, this._activateMaterial()
                },
                onDisable: function() {
                    this._super(), this.node.off(cc.Node.EventType.POSITION_CHANGED, this._updateGraphics, this), this.node.off(cc.Node.EventType.ROTATION_CHANGED, this._updateGraphics, this), this.node.off(cc.Node.EventType.SCALE_CHANGED, this._updateGraphics, this), this.node.off(cc.Node.EventType.SIZE_CHANGED, this._updateGraphics, this), this.node.off(cc.Node.EventType.ANCHOR_CHANGED, this._updateGraphics, this), this.node._renderFlag &= ~l.FLAG_POST_RENDER
                },
                onDestroy: function() {
                    this._super(), this._removeGraphics()
                },
                _resizeNodeToTargetNode: !1,
                _onTextureLoaded: function() {
                    this.setVertsDirty(), this._assembler && this._assembler._renderData && this.markForUpdateRenderData(!0), this.enabledInHierarchy && this._activateMaterial()
                },
                _applySpriteFrame: function(t) {
                    t && t.off && t.off("load", this._onTextureLoaded, this);
                    var e = this._spriteFrame;
                    e ? e.textureLoaded() ? this._onTextureLoaded(null) : (e.once("load", this._onTextureLoaded, this), e.ensureLoadTexture()) : this.disableRender()
                },
                _activateMaterial: function() {
                    if (this._type !== p.IMAGE_STENCIL || this.spriteFrame && this.spriteFrame.textureLoaded()) {
                        if (cc.game.renderType !== cc.game.RENDER_TYPE_CANVAS) {
                            var t = this.sharedMaterials[0];
                            if ((t = t ? o.getInstantiatedMaterial(t, this) : o.getInstantiatedBuiltinMaterial("2d-sprite", this)).define("USE_ALPHA_TEST", !0), this._type === p.IMAGE_STENCIL) {
                                var e = this.spriteFrame.getTexture();
                                t.define("CC_USE_MODEL", !1), t.define("USE_TEXTURE", !0), t.setProperty("texture", e), t.setProperty("alphaThreshold", this.alphaThreshold)
                            } else t.define("CC_USE_MODEL", !0), t.define("USE_TEXTURE", !1);
                            this._enableMaterial || (this._enableMaterial = o.getInstantiatedBuiltinMaterial("2d-sprite", this)), this._exitMaterial || (this._exitMaterial = o.getInstantiatedBuiltinMaterial("2d-sprite", this), this._exitMaterial.effect.setStencilEnabled(n.default.STENCIL_DISABLE)), this._clearMaterial || (this._clearMaterial = o.getInstantiatedBuiltinMaterial("clear-stencil", this)), this.setMaterial(0, t)
                        }
                        this.markForRender(!0)
                    } else this.markForRender(!1)
                },
                _createGraphics: function() {
                    this._graphics || (this._graphics = new h, cc.Assembler.init(this._graphics), this._graphics.node = this.node, this._graphics.lineWidth = 0, this._graphics.strokeColor = cc.color(0, 0, 0, 0)), this._clearGraphics || (this._clearGraphics = new h, cc.Assembler.init(this._clearGraphics), this._clearGraphics.node = new c, this._clearGraphics._activateMaterial(), this._clearGraphics.lineWidth = 0, this._clearGraphics.rect(-1, -1, 2, 2), this._clearGraphics.fill())
                },
                _updateGraphics: function() {
                    var t = this.node,
                        e = this._graphics;
                    e.clear(!1);
                    var i = t._contentSize.width,
                        n = t._contentSize.height,
                        r = -i * t._anchorPoint.x,
                        s = -n * t._anchorPoint.y;
                    if (this._type === p.RECT) e.rect(r, s, i, n);
                    else if (this._type === p.ELLIPSE) {
                        for (var o = d(cc.v2(r + i / 2, s + n / 2), {
                                x: i / 2,
                                y: n / 2
                            }, this._segments), a = 0; a < o.length; ++a) {
                            var l = o[a];
                            0 === a ? e.moveTo(l.x, l.y) : e.lineTo(l.x, l.y)
                        }
                        e.close()
                    }
                    cc.game.renderType === cc.game.RENDER_TYPE_CANVAS ? e.stroke() : e.fill()
                },
                _removeGraphics: function() {
                    this._graphics && (this._graphics.destroy(), this._graphics = null), this._clearGraphics && (this._clearGraphics.destroy(), this._clearGraphics = null)
                },
                _hitTest: function(t) {
                    var e = this.node,
                        i = e.getContentSize(),
                        n = i.width,
                        s = i.height,
                        o = u;
                    if (e._updateWorldMatrix(), !r.mat4.invert(_, e._worldMatrix)) return !1;
                    r.vec2.transformMat4(o, t, _), o.x += e._anchorPoint.x * n, o.y += e._anchorPoint.y * s;
                    var a = !1;
                    if (this.type === p.RECT || this.type === p.IMAGE_STENCIL) a = o.x >= 0 && o.y >= 0 && o.x <= n && o.y <= s;
                    else if (this.type === p.ELLIPSE) {
                        var l = n / 2,
                            h = s / 2,
                            c = o.x - .5 * n,
                            f = o.y - .5 * s;
                        a = c * c / (l * l) + f * f / (h * h) < 1
                    }
                    return this.inverted && (a = !a), a
                },
                markForUpdateRenderData: function(t) {
                    t && this.enabledInHierarchy ? this.node._renderFlag |= l.FLAG_UPDATE_RENDER_DATA : t || (this.node._renderFlag &= ~l.FLAG_UPDATE_RENDER_DATA)
                },
                markForRender: function(t) {
                    t && this.enabledInHierarchy ? this.node._renderFlag |= l.FLAG_RENDER | l.FLAG_UPDATE_RENDER_DATA | l.FLAG_POST_RENDER : t || (this.node._renderFlag &= ~(l.FLAG_RENDER | l.FLAG_POST_RENDER))
                },
                disableRender: function() {
                    this.node._renderFlag &= ~(l.FLAG_RENDER | l.FLAG_UPDATE_RENDER_DATA | l.FLAG_POST_RENDER)
                }
            });
        cc.Mask = e.exports = m
    }), {
        "../../renderer/gfx": 360,
        "../CCNode": 52,
        "../assets/material/CCMaterial": 75,
        "../graphics/graphics": 140,
        "../renderer/render-flow": 248,
        "../utils/misc": 300,
        "../vmath": 326,
        "./CCRenderComponent": 106
    }],
    102: [(function(t, e, i) {
        "use strict";
        var n = t("../components/CCRenderComponent"),
            r = t("../assets/material/CCMaterial"),
            s = t("../utils/texture-util"),
            o = t("../../core/utils/blend-func"),
            a = cc.Class({
                name: "cc.MotionStreak",
                extends: n,
                mixins: [o],
                editor: !1,
                ctor: function() {
                    this._points = []
                },
                properties: {
                    preview: {
                        default: !1,
                        editorOnly: !0,
                        notify: !1,
                        animatable: !1
                    },
                    _fadeTime: 1,
                    fadeTime: {
                        get: function() {
                            return this._fadeTime
                        },
                        set: function(t) {
                            this._fadeTime = t, this.reset()
                        },
                        animatable: !1,
                        tooltip: !1
                    },
                    _minSeg: 1,
                    minSeg: {
                        get: function() {
                            return this._minSeg
                        },
                        set: function(t) {
                            this._minSeg = t
                        },
                        animatable: !1,
                        tooltip: !1
                    },
                    _stroke: 64,
                    stroke: {
                        get: function() {
                            return this._stroke
                        },
                        set: function(t) {
                            this._stroke = t
                        },
                        animatable: !1,
                        tooltip: !1
                    },
                    _texture: {
                        default: null,
                        type: cc.Texture2D
                    },
                    texture: {
                        get: function() {
                            return this._texture
                        },
                        set: function(t) {
                            this._texture !== t && (this._texture = t, t && t.loaded ? this._activateMaterial() : (this.disableRender(), this._ensureLoadTexture()))
                        },
                        type: cc.Texture2D,
                        animatable: !1,
                        tooltip: !1
                    },
                    _color: cc.Color.WHITE,
                    color: {
                        get: function() {
                            return this._color
                        },
                        set: function(t) {
                            this._color = t
                        },
                        type: cc.Color,
                        tooltip: !1
                    },
                    _fastMode: !1,
                    fastMode: {
                        get: function() {
                            return this._fastMode
                        },
                        set: function(t) {
                            this._fastMode = t
                        },
                        animatable: !1,
                        tooltip: !1
                    }
                },
                onEnable: function() {
                    this._super(), this._texture && this._texture.loaded ? this._activateMaterial() : (this.disableRender(), this._ensureLoadTexture()), this.reset()
                },
                _ensureLoadTexture: function() {
                    if (this._texture && !this._texture.loaded) {
                        var t = this;
                        s.postLoadTexture(this._texture, (function() {
                            t._activateMaterial()
                        }))
                    }
                },
                _activateMaterial: function() {
                    if (this._texture && this._texture.loaded) {
                        var t = this.sharedMaterials[0];
                        (t = t ? r.getInstantiatedMaterial(t, this) : r.getInstantiatedBuiltinMaterial("2d-sprite", this)).setProperty("texture", this._texture), this.setMaterial(0, t), this.markForRender(!0)
                    } else this.disableRender()
                },
                onFocusInEditor: !1,
                onLostFocusInEditor: !1,
                reset: function() {
                    this._points.length = 0, this._assembler._renderData.clear()
                },
                update: function(t) {
                    this._assembler.update(this, t)
                }
            });
        cc.MotionStreak = e.exports = a
    }), {
        "../../core/utils/blend-func": 293,
        "../assets/material/CCMaterial": 75,
        "../components/CCRenderComponent": 106,
        "../utils/texture-util": 308
    }],
    103: [(function(t, e, i) {
        "use strict";
        var n = cc.Enum({
                Unified: 0,
                Free: 1
            }),
            r = cc.Enum({
                Horizontal: 0,
                Vertical: 1
            }),
            s = cc.Enum({
                PAGE_TURNING: 0
            }),
            o = cc.Class({
                name: "cc.PageView",
                extends: cc.ScrollView,
                editor: !1,
                ctor: function() {
                    this._curPageIdx = 0, this._lastPageIdx = 0, this._pages = [], this._initContentPos = cc.v2(), this._scrollCenterOffsetX = [], this._scrollCenterOffsetY = []
                },
                properties: {
                    sizeMode: {
                        default: n.Unified,
                        type: n,
                        tooltip: !1,
                        notify: function() {
                            this._syncSizeMode()
                        }
                    },
                    direction: {
                        default: r.Horizontal,
                        type: r,
                        tooltip: !1,
                        notify: function() {
                            this._syncScrollDirection()
                        }
                    },
                    scrollThreshold: {
                        default: .5,
                        type: cc.Float,
                        slide: !0,
                        range: [0, 1, .01],
                        tooltip: !1
                    },
                    autoPageTurningThreshold: {
                        default: 100,
                        type: cc.Float,
                        tooltip: !1
                    },
                    pageTurningEventTiming: {
                        default: .1,
                        type: cc.Float,
                        range: [0, 1, .01],
                        tooltip: !1
                    },
                    indicator: {
                        default: null,
                        type: cc.PageViewIndicator,
                        tooltip: !1,
                        notify: function() {
                            this.indicator && this.indicator.setPageView(this)
                        }
                    },
                    pageTurningSpeed: {
                        default: .3,
                        type: cc.Float,
                        tooltip: !1
                    },
                    pageEvents: {
                        default: [],
                        type: cc.Component.EventHandler,
                        tooltip: !1
                    }
                },
                statics: {
                    SizeMode: n,
                    Direction: r,
                    EventType: s
                },
                __preload: function() {
                    this.node.on(cc.Node.EventType.SIZE_CHANGED, this._updateAllPagesSize, this)
                },
                onEnable: function() {
                    this._super(), this.node.on("scroll-ended-with-threshold", this._dispatchPageTurningEvent, this)
                },
                onDisable: function() {
                    this._super(), this.node.off("scroll-ended-with-threshold", this._dispatchPageTurningEvent, this)
                },
                onLoad: function() {
                    this._initPages(), this.indicator && this.indicator.setPageView(this)
                },
                onDestroy: function() {
                    this.node.off(cc.Node.EventType.SIZE_CHANGED, this._updateAllPagesSize, this)
                },
                getCurrentPageIndex: function() {
                    return this._curPageIdx
                },
                setCurrentPageIndex: function(t) {
                    this.scrollToPage(t, !0)
                },
                getPages: function() {
                    return this._pages
                },
                addPage: function(t) {
                    t && -1 === this._pages.indexOf(t) && this.content && (this.content.addChild(t), this._pages.push(t), this._updatePageView())
                },
                insertPage: function(t, e) {
                    e < 0 || !t || -1 !== this._pages.indexOf(t) || !this.content || (e >= this._pages.length ? this.addPage(t) : (this._pages.splice(e, 0, t), this.content.addChild(t), this._updatePageView()))
                },
                removePage: function(t) {
                    if (t && this.content) {
                        var e = this._pages.indexOf(t); - 1 !== e ? this.removePageAtIndex(e) : cc.warnID(4300, t.name)
                    }
                },
                removePageAtIndex: function(t) {
                    var e = this._pages;
                    if (!(t < 0 || t >= e.length)) {
                        var i = e[t];
                        i && (this.content.removeChild(i), e.splice(t, 1), this._updatePageView())
                    }
                },
                removeAllPages: function() {
                    if (this.content) {
                        for (var t = this._pages, e = 0, i = t.length; e < i; e++) this.content.removeChild(t[e]);
                        this._pages.length = 0, this._updatePageView()
                    }
                },
                scrollToPage: function(t, e) {
                    t < 0 || t >= this._pages.length || (e = void 0 !== e ? e : .3, this._curPageIdx = t, this.scrollToOffset(this._moveOffsetValue(t), e, !0), this.indicator && this.indicator._changedState())
                },
                getScrollEndedEventTiming: function() {
                    return this.pageTurningEventTiming
                },
                _syncScrollDirection: function() {
                    this.horizontal = this.direction === r.Horizontal, this.vertical = this.direction === r.Vertical
                },
                _syncSizeMode: function() {
                    if (this.content) {
                        var t = this.content.getComponent(cc.Layout);
                        if (t) {
                            if (this.sizeMode === n.Free && this._pages.length > 0) {
                                var e = this._pages[this._pages.length - 1];
                                this.direction === r.Horizontal ? (t.paddingLeft = (this._view.width - this._pages[0].width) / 2, t.paddingRight = (this._view.width - e.width) / 2) : this.direction === r.Vertical && (t.paddingTop = (this._view.height - this._pages[0].height) / 2, t.paddingBottom = (this._view.height - e.height) / 2)
                            }
                            t.updateLayout()
                        }
                    }
                },
                _updatePageView: function() {
                    var t = this.content.getComponent(cc.Layout);
                    t && t.enabled && t.updateLayout();
                    var e = this._pages.length;
                    this._curPageIdx >= e && (this._curPageIdx = 0 === e ? 0 : e - 1, this._lastPageIdx = this._curPageIdx);
                    for (var i = this._initContentPos, n = 0; n < e; ++n) {
                        var s = this._pages[n];
                        s.setSiblingIndex(n), this.direction === r.Horizontal ? this._scrollCenterOffsetX[n] = Math.abs(i.x + s.x) : this._scrollCenterOffsetY[n] = Math.abs(i.y + s.y)
                    }
                    this.indicator && this.indicator._refresh()
                },
                _updateAllPagesSize: function() {
                    if (this.sizeMode === n.Unified)
                        for (var t = this._pages, e = this._view.getContentSize(), i = 0, r = t.length; i < r; i++) t[i].setContentSize(e)
                },
                _initPages: function() {
                    if (this.content) {
                        this._initContentPos = this.content.position;
                        for (var t = this.content.children, e = 0; e < t.length; ++e) {
                            var i = t[e];
                            this._pages.indexOf(i) >= 0 || this._pages.push(i)
                        }
                        this._syncScrollDirection(), this._syncSizeMode(), this._updatePageView()
                    }
                },
                _dispatchPageTurningEvent: function() {
                    this._lastPageIdx !== this._curPageIdx && (this._lastPageIdx = this._curPageIdx, cc.Component.EventHandler.emitEvents(this.pageEvents, this, s.PAGE_TURNING), this.node.emit("page-turning", this))
                },
                _isScrollable: function(t, e, i) {
                    if (this.sizeMode === n.Free) {
                        var s, o;
                        if (this.direction === r.Horizontal) return s = this._scrollCenterOffsetX[e], o = this._scrollCenterOffsetX[i], Math.abs(t.x) >= Math.abs(s - o) * this.scrollThreshold;
                        if (this.direction === r.Vertical) return s = this._scrollCenterOffsetY[e], o = this._scrollCenterOffsetY[i], Math.abs(t.y) >= Math.abs(s - o) * this.scrollThreshold
                    } else {
                        if (this.direction === r.Horizontal) return Math.abs(t.x) >= this._view.width * this.scrollThreshold;
                        if (this.direction === r.Vertical) return Math.abs(t.y) >= this._view.height * this.scrollThreshold
                    }
                },
                _isQuicklyScrollable: function(t) {
                    if (this.direction === r.Horizontal) {
                        if (Math.abs(t.x) > this.autoPageTurningThreshold) return !0
                    } else if (this.direction === r.Vertical && Math.abs(t.y) > this.autoPageTurningThreshold) return !0;
                    return !1
                },
                _moveOffsetValue: function(t) {
                    var e = cc.v2(0, 0);
                    return this.sizeMode === n.Free ? this.direction === r.Horizontal ? e.x = this._scrollCenterOffsetX[t] : this.direction === r.Vertical && (e.y = this._scrollCenterOffsetY[t]) : this.direction === r.Horizontal ? e.x = t * this._view.width : this.direction === r.Vertical && (e.y = t * this._view.height), e
                },
                _getDragDirection: function(t) {
                    return this.direction === r.Horizontal ? 0 === t.x ? 0 : t.x > 0 ? 1 : -1 : this.direction === r.Vertical ? 0 === t.y ? 0 : t.y < 0 ? 1 : -1 : void 0
                },
                _handleReleaseLogic: function(t) {
                    this._autoScrollToPage(), this._scrolling && (this._scrolling = !1, this._autoScrolling || this._dispatchEvent("scroll-ended"))
                },
                _autoScrollToPage: function() {
                    var t = this._startBounceBackIfNeeded(),
                        e = this._touchBeganPosition.sub(this._touchEndPosition);
                    if (t) {
                        var i = this._getDragDirection(e);
                        if (0 === i) return;
                        this._curPageIdx = i > 0 ? this._pages.length - 1 : 0, this.indicator && this.indicator._changedState()
                    } else {
                        var n = this._curPageIdx,
                            r = n + this._getDragDirection(e),
                            s = this.pageTurningSpeed * Math.abs(n - r);
                        if (r < this._pages.length) {
                            if (this._isScrollable(e, n, r)) return void this.scrollToPage(r, s);
                            var o = this._calculateTouchMoveVelocity();
                            if (this._isQuicklyScrollable(o)) return void this.scrollToPage(r, s)
                        }
                        this.scrollToPage(n, s)
                    }
                },
                _onTouchBegan: function(t, e) {
                    this._touchBeganPosition = t.touch.getLocation(), this._super(t, e)
                },
                _onTouchMoved: function(t, e) {
                    this._super(t, e)
                },
                _onTouchEnded: function(t, e) {
                    this._touchEndPosition = t.touch.getLocation(), this._super(t, e)
                },
                _onTouchCancelled: function(t, e) {
                    this._touchEndPosition = t.touch.getLocation(), this._super(t, e)
                },
                _onMouseWheel: function() {}
            });
        cc.PageView = e.exports = o
    }), {}],
    104: [(function(t, e, i) {
        "use strict";
        var n = cc.Enum({
                HORIZONTAL: 0,
                VERTICAL: 1
            }),
            r = cc.Class({
                name: "cc.PageViewIndicator",
                extends: t("./CCComponent"),
                editor: !1,
                properties: {
                    _layout: null,
                    _pageView: null,
                    _indicators: [],
                    spriteFrame: {
                        default: null,
                        type: cc.SpriteFrame,
                        tooltip: !1
                    },
                    direction: {
                        default: n.HORIZONTAL,
                        type: n,
                        tooltip: !1
                    },
                    cellSize: {
                        default: cc.size(20, 20),
                        tooltip: !1
                    },
                    spacing: {
                        default: 0,
                        tooltip: !1
                    }
                },
                statics: {
                    Direction: n
                },
                onLoad: function() {
                    this._updateLayout()
                },
                setPageView: function(t) {
                    this._pageView = t, this._refresh()
                },
                _updateLayout: function() {
                    this._layout = this.getComponent(cc.Layout), this._layout || (this._layout = this.addComponent(cc.Layout)), this.direction === n.HORIZONTAL ? (this._layout.type = cc.Layout.Type.HORIZONTAL, this._layout.spacingX = this.spacing) : this.direction === n.VERTICAL && (this._layout.type = cc.Layout.Type.VERTICAL, this._layout.spacingY = this.spacing), this._layout.resizeMode = cc.Layout.ResizeMode.CONTAINER
                },
                _createIndicator: function() {
                    var t = new cc.Node;
                    return t.addComponent(cc.Sprite).spriteFrame = this.spriteFrame, t.parent = this.node, t.width = this.cellSize.width, t.height = this.cellSize.height, t
                },
                _changedState: function() {
                    var t = this._indicators;
                    if (0 !== t.length) {
                        var e = this._pageView._curPageIdx;
                        if (!(e >= t.length)) {
                            for (var i = 0; i < t.length; ++i) {
                                t[i].opacity = 127.5
                            }
                            t[e].opacity = 255
                        }
                    }
                },
                _refresh: function() {
                    if (this._pageView) {
                        var t = this._indicators,
                            e = this._pageView.getPages();
                        if (e.length !== t.length) {
                            var i = 0;
                            if (e.length > t.length)
                                for (i = 0; i < e.length; ++i) t[i] || (t[i] = this._createIndicator());
                            else
                                for (i = t.length - e.length; i > 0; --i) {
                                    var n = t[i - 1];
                                    this.node.removeChild(n), t.splice(i - 1, 1)
                                }
                            this._layout && this._layout.enabledInHierarchy && this._layout.updateLayout(), this._changedState()
                        }
                    }
                }
            });
        cc.PageViewIndicator = e.exports = r
    }), {
        "./CCComponent": 95
    }],
    105: [(function(t, e, i) {
        "use strict";
        var n = t("../utils/misc"),
            r = t("./CCComponent"),
            s = cc.Enum({
                HORIZONTAL: 0,
                VERTICAL: 1,
                FILLED: 2
            }),
            o = cc.Class({
                name: "cc.ProgressBar",
                extends: r,
                editor: !1,
                _initBarSprite: function() {
                    if (this.barSprite) {
                        var t = this.barSprite.node;
                        if (!t) return;
                        var e = this.node.getContentSize(),
                            i = this.node.getAnchorPoint(),
                            n = t.getContentSize();
                        t.parent === this.node && this.node.setContentSize(n), this.barSprite.fillType === cc.Sprite.FillType.RADIAL && (this.mode = s.FILLED);
                        var r = t.getContentSize();
                        if (this.mode === s.HORIZONTAL ? this.totalLength = r.width : this.mode === s.VERTICAL ? this.totalLength = r.height : this.totalLength = this.barSprite.fillRange, t.parent === this.node) {
                            var o = -e.width * i.x;
                            t.setPosition(cc.v2(o, 0))
                        }
                    }
                },
                _updateBarStatus: function() {
                    if (this.barSprite) {
                        var t = this.barSprite.node;
                        if (!t) return;
                        var e, i, r, o = t.getAnchorPoint(),
                            a = t.getContentSize(),
                            l = t.getPosition(),
                            h = cc.v2(0, .5),
                            c = n.clamp01(this.progress),
                            u = this.totalLength * c;
                        switch (this.mode) {
                            case s.HORIZONTAL:
                                this.reverse && (h = cc.v2(1, .5)), e = cc.size(u, a.height), i = this.totalLength, r = a.height;
                                break;
                            case s.VERTICAL:
                                h = this.reverse ? cc.v2(.5, 1) : cc.v2(.5, 0), e = cc.size(a.width, u), i = a.width, r = this.totalLength
                        }
                        if (this.mode === s.FILLED) this.barSprite.type !== cc.Sprite.Type.FILLED ? cc.warn("ProgressBar FILLED mode only works when barSprite's Type is FILLED!") : (this.reverse && (u *= -1), this.barSprite.fillRange = u);
                        else if (this.barSprite.type !== cc.Sprite.Type.FILLED) {
                            var _ = h.x - o.x,
                                f = h.y - o.y,
                                d = cc.v2(i * _, r * f);
                            t.setPosition(l.x + d.x, l.y + d.y), t.setAnchorPoint(h), t.setContentSize(e)
                        } else cc.warn("ProgressBar non-FILLED mode only works when barSprite's Type is non-FILLED!")
                    }
                },
                properties: {
                    barSprite: {
                        default: null,
                        type: cc.Sprite,
                        tooltip: !1,
                        notify: function() {
                            this._initBarSprite()
                        },
                        animatable: !1
                    },
                    mode: {
                        default: s.HORIZONTAL,
                        type: s,
                        tooltip: !1,
                        notify: function() {
                            if (this.barSprite) {
                                var t = this.barSprite.node;
                                if (!t) return;
                                var e = t.getContentSize();
                                this.mode === s.HORIZONTAL ? this.totalLength = e.width : this.mode === s.VERTICAL ? this.totalLength = e.height : this.mode === s.FILLED && (this.totalLength = this.barSprite.fillRange)
                            }
                        },
                        animatable: !1
                    },
                    _N$totalLength: 1,
                    totalLength: {
                        range: [0, Number.MAX_VALUE],
                        tooltip: !1,
                        get: function() {
                            return this._N$totalLength
                        },
                        set: function(t) {
                            this.mode === s.FILLED && (t = n.clamp01(t)), this._N$totalLength = t, this._updateBarStatus()
                        }
                    },
                    progress: {
                        default: 1,
                        type: cc.Float,
                        range: [0, 1, .1],
                        slide: !0,
                        tooltip: !1,
                        notify: function() {
                            this._updateBarStatus()
                        }
                    },
                    reverse: {
                        default: !1,
                        tooltip: !1,
                        notify: function() {
                            this.barSprite && (this.barSprite.fillStart = 1 - this.barSprite.fillStart), this._updateBarStatus()
                        },
                        animatable: !1
                    }
                },
                statics: {
                    Mode: s
                }
            });
        cc.ProgressBar = e.exports = o
    }), {
        "../utils/misc": 300,
        "./CCComponent": 95
    }],
    106: [(function(t, e, i) {
        "use strict";
        var n = (function(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        })(t("../renderer/assembler"));
        var r = t("./CCComponent"),
            s = t("../renderer/render-flow"),
            o = t("../assets/material/CCMaterial"),
            a = cc.Class({
                name: "RenderComponent",
                extends: r,
                editor: !1,
                properties: {
                    _materials: {
                        default: [],
                        type: o
                    },
                    sharedMaterials: {
                        get: function() {
                            return this._materials
                        },
                        set: function(t) {
                            this._materials = t, this._activateMaterial(!0)
                        },
                        type: [o],
                        displayName: "Materials",
                        animatable: !1
                    }
                },
                ctor: function() {
                    this._vertsDirty = !0, this._material = null, this._assembler = null
                },
                _resetAssembler: function() {
                    this.setVertsDirty(!0), n.default.init(this), this._updateColor()
                },
                __preload: function() {
                    this._resetAssembler()
                },
                onEnable: function() {
                    this.node._renderComponent && (this.node._renderComponent.enabled = !1), this.node._renderComponent = this, this.node.on(cc.Node.EventType.SIZE_CHANGED, this._onNodeSizeDirty, this), this.node.on(cc.Node.EventType.ANCHOR_CHANGED, this._onNodeSizeDirty, this), this.node._renderFlag |= s.FLAG_RENDER | s.FLAG_UPDATE_RENDER_DATA | s.FLAG_OPACITY_COLOR
                },
                onDisable: function() {
                    this.node._renderComponent = null, this.node.off(cc.Node.EventType.SIZE_CHANGED, this._onNodeSizeDirty, this), this.node.off(cc.Node.EventType.ANCHOR_CHANGED, this._onNodeSizeDirty, this), this.disableRender()
                },
                onDestroy: function() {
                    for (var t = this._materials, e = 0; e < t.length; e++) cc.pool.material.put(t[e]);
                    t.length = 0, cc.pool.assembler.put(this._assembler)
                },
                setVertsDirty: function() {
                    this._vertsDirty = !0, this.markForUpdateRenderData(!0)
                },
                _onNodeSizeDirty: function() {
                    this.setVertsDirty()
                },
                _on3DNodeChanged: function() {
                    this.setVertsDirty()
                },
                _canRender: function() {
                    return this._enabled && this.node._activeInHierarchy
                },
                markForUpdateRenderData: function(t) {
                    t && this._canRender() ? this.node._renderFlag |= s.FLAG_UPDATE_RENDER_DATA : t || (this.node._renderFlag &= ~s.FLAG_UPDATE_RENDER_DATA)
                },
                markForRender: function(t) {
                    t && this._canRender() ? this.node._renderFlag |= s.FLAG_RENDER : t || (this.node._renderFlag &= ~s.FLAG_RENDER)
                },
                disableRender: function() {
                    this.node._renderFlag &= ~(s.FLAG_RENDER | s.FLAG_UPDATE_RENDER_DATA)
                },
                getMaterial: function(t) {
                    if (t < 0 || t >= this._materials.length) return null;
                    var e = this._materials[t];
                    if (!e) return null;
                    var i = o.getInstantiatedMaterial(e, this);
                    return i !== e && this.setMaterial(t, i), this._materials[t]
                },
                setMaterial: function(t, e) {
                    this._materials[t] = e, e && this.markForUpdateRenderData(!0)
                },
                _activateMaterial: function(t) {},
                _updateColor: function() {
                    this._assembler.updateColor && this._assembler.updateColor(this)
                },
                _checkBacth: function(t, e) {
                    var i = this.sharedMaterials[0];
                    (i && i.getHash() !== t.material.getHash() || t.cullingMask !== e) && (t._flush(), t.node = i.getDefine("CC_USE_MODEL") ? this.node : t._dummyNode, t.material = i, t.cullingMask = e)
                }
            });
        cc.RenderComponent = e.exports = a
    }), {
        "../assets/material/CCMaterial": 75,
        "../renderer/assembler": 227,
        "../renderer/render-flow": 248,
        "./CCComponent": 95
    }],
    107: [(function(t, e, i) {
        "use strict";
        var n = t("../platform/js"),
            r = t("../platform/CCMacro"),
            s = t("../utils/text-utils"),
            o = new(t("../utils/html-text-parser")),
            a = r.TextAlignment,
            l = r.VerticalTextAlignment;
        var h = new n.Pool(function(t) {
            if (!cc.isValid(t)) return !1;
            var e = t.getComponent(cc.LabelOutline);
            return e && (e.width = 0), !0
        }, 20);
        h.get = function(t, e) {
            var i = this._get();
            i || (i = new cc.PrivateNode("RICHTEXT_CHILD"));
            var n = i.getComponent(cc.Label);
            return n || (n = i.addComponent(cc.Label)), i.setPosition(0, 0), i.setAnchorPoint(.5, .5), i.setContentSize(128, 128), i.skewX = 0, "string" != typeof t && (t = "" + t), e.font instanceof cc.Font ? n.font = e.font : n.fontFamily = e.fontFamily, n.string = t, n.horizontalAlign = a.LEFT, n.verticalAlign = l.TOP, n.fontSize = e.fontSize || 40, n.overflow = 0, n.enableWrapText = !0, n.lineHeight = 40, n._enableBold(!1), n._enableItalics(!1), n._enableUnderline(!1), i
        };
        var c = cc.Class({
            name: "cc.RichText",
            extends: cc.Component,
            ctor: function() {
                this._textArray = null, this._labelSegments = [], this._labelSegmentsCache = [], this._linesWidth = [], this._updateRichTextStatus = this._updateRichText
            },
            editor: !1,
            properties: {
                string: {
                    default: "<color=#00ff00>Rich</c><color=#0fffff>Text</color>",
                    multiline: !0,
                    tooltip: !1,
                    notify: function() {
                        this._updateRichTextStatus()
                    }
                },
                horizontalAlign: {
                    default: a.LEFT,
                    type: a,
                    tooltip: !1,
                    animatable: !1,
                    notify: function(t) {
                        this.horizontalAlign !== t && (this._layoutDirty = !0, this._updateRichTextStatus())
                    }
                },
                fontSize: {
                    default: 40,
                    tooltip: !1,
                    notify: function(t) {
                        this.fontSize !== t && (this._layoutDirty = !0, this._updateRichTextStatus())
                    }
                },
                _fontFamily: "Arial",
                fontFamily: {
                    tooltip: !1,
                    get: function() {
                        return this._fontFamily
                    },
                    set: function(t) {
                        this._fontFamily !== t && (this._fontFamily = t, this._layoutDirty = !0, this._updateRichTextStatus())
                    },
                    animatable: !1
                },
                font: {
                    default: null,
                    type: cc.TTFFont,
                    tooltip: !1,
                    notify: function(t) {
                        this.font !== t && (this._layoutDirty = !0, this.font ? (this.useSystemFont = !1, this._onTTFLoaded()) : this.useSystemFont = !0, this._updateRichTextStatus())
                    }
                },
                _isSystemFontUsed: !0,
                useSystemFont: {
                    get: function() {
                        return this._isSystemFontUsed
                    },
                    set: function(t) {
                        this._isSystemFontUsed !== t && (this._isSystemFontUsed = t, this._layoutDirty = !0, this._updateRichTextStatus())
                    },
                    animatable: !1,
                    tooltip: !1
                },
                maxWidth: {
                    default: 0,
                    tooltip: !1,
                    notify: function(t) {
                        this.maxWidth !== t && (this._layoutDirty = !0, this._updateRichTextStatus())
                    }
                },
                lineHeight: {
                    default: 40,
                    tooltip: !1,
                    notify: function(t) {
                        this.lineHeight !== t && (this._layoutDirty = !0, this._updateRichTextStatus())
                    }
                },
                imageAtlas: {
                    default: null,
                    type: cc.SpriteAtlas,
                    tooltip: !1,
                    notify: function(t) {
                        this.imageAtlas !== t && (this._layoutDirty = !0, this._updateRichTextStatus())
                    }
                },
                handleTouchEvent: {
                    default: !0,
                    tooltip: !1,
                    notify: function(t) {
                        this.handleTouchEvent !== t && this.enabledInHierarchy && (this.handleTouchEvent ? this._addEventListeners() : this._removeEventListeners())
                    }
                }
            },
            statics: {
                HorizontalAlign: a,
                VerticalAlign: l
            },
            onEnable: function() {
                this.handleTouchEvent && this._addEventListeners(), this._updateRichText(), this._activateChildren(!0)
            },
            onDisable: function() {
                this.handleTouchEvent && this._removeEventListeners(), this._activateChildren(!1)
            },
            start: function() {
                this._onTTFLoaded()
            },
            _onColorChanged: function(t) {
                this.node.children.forEach((function(e) {
                    e.color = t
                }))
            },
            _addEventListeners: function() {
                this.node.on(cc.Node.EventType.TOUCH_END, this._onTouchEnded, this), this.node.on(cc.Node.EventType.COLOR_CHANGED, this._onColorChanged, this)
            },
            _removeEventListeners: function() {
                this.node.off(cc.Node.EventType.TOUCH_END, this._onTouchEnded, this), this.node.off(cc.Node.EventType.COLOR_CHANGED, this._onColorChanged, this)
            },
            _updateLabelSegmentTextAttributes: function() {
                this._labelSegments.forEach(function(t) {
                    this._applyTextAttribute(t)
                }.bind(this))
            },
            _createFontLabel: function(t) {
                return h.get(t, this)
            },
            _onTTFLoaded: function() {
                if (this.font instanceof cc.TTFFont)
                    if (this.font._nativeAsset) this._layoutDirty = !0, this._updateRichText();
                    else {
                        var t = this;
                        cc.loader.load(this.font.nativeUrl, (function(e, i) {
                            t._layoutDirty = !0, t._updateRichText()
                        }))
                    }
                else this._layoutDirty = !0, this._updateRichText()
            },
            _measureText: function(t, e) {
                var i = this,
                    n = function(e) {
                        var n = void 0;
                        return 0 === i._labelSegmentsCache.length ? (n = i._createFontLabel(e), i._labelSegmentsCache.push(n)) : (n = i._labelSegmentsCache[0]).getComponent(cc.Label).string = e, n._styleIndex = t, i._applyTextAttribute(n), n.getContentSize().width
                    };
                return e ? n(e) : n
            },
            _onTouchEnded: function(t) {
                for (var e = this, i = this.node.getComponents(cc.Component), n = function(n) {
                        var r = e._labelSegments[n],
                            s = r._clickHandler,
                            o = r._clickParam;
                        s && e._containsTouchLocation(r, t.touch.getLocation()) && (i.forEach((function(e) {
                            e.enabledInHierarchy && e[s] && e[s](t, o)
                        })), t.stopPropagation())
                    }, r = 0; r < this._labelSegments.length; ++r) n(r)
            },
            _containsTouchLocation: function(t, e) {
                return t.getBoundingBoxToWorld().contains(e)
            },
            _resetState: function() {
                for (var t = this.node.children, e = t.length - 1; e >= 0; e--) {
                    var i = t[e];
                    "RICHTEXT_CHILD" !== i.name && "RICHTEXT_Image_CHILD" !== i.name || (i.parent === this.node ? i.parent = null : t.splice(e, 1), "RICHTEXT_CHILD" === i.name && h.put(i))
                }
                this._labelSegments.length = 0, this._labelSegmentsCache.length = 0, this._linesWidth.length = 0, this._lineOffsetX = 0, this._lineCount = 1, this._labelWidth = 0, this._labelHeight = 0, this._layoutDirty = !0
            },
            onRestore: !1,
            _activateChildren: function(t) {
                for (var e = this.node.children.length - 1; e >= 0; e--) {
                    var i = this.node.children[e];
                    "RICHTEXT_CHILD" !== i.name && "RICHTEXT_Image_CHILD" !== i.name || (i.active = t)
                }
            },
            _addLabelSegment: function(t, e) {
                var i = void 0;
                return 0 === this._labelSegmentsCache.length ? i = this._createFontLabel(t) : (i = this._labelSegmentsCache.pop()).getComponent(cc.Label).string = t, i._styleIndex = e, i._lineCount = this._lineCount, i.active = this.node.active, i.setAnchorPoint(0, 0), this._applyTextAttribute(i), this.node.addChild(i), this._labelSegments.push(i), i
            },
            _updateRichTextWithMaxWidth: function(t, e, i) {
                var n = e;
                if (this._lineOffsetX > 0 && n + this._lineOffsetX > this.maxWidth)
                    for (var r = 0; this._lineOffsetX <= this.maxWidth;) {
                        var o = this._getFirstWordLen(t, r, t.length),
                            a = t.substr(r, o),
                            l = this._measureText(i, a);
                        if (!(this._lineOffsetX + l <= this.maxWidth)) {
                            if (r > 0) {
                                var h = t.substr(0, r);
                                this._addLabelSegment(h, i), t = t.substr(r, t.length), n = this._measureText(i, t)
                            }
                            this._updateLineInfo();
                            break
                        }
                        this._lineOffsetX += l, r += o
                    }
                if (n > this.maxWidth)
                    for (var c = s.fragmentText(t, n, this.maxWidth, this._measureText(i)), u = 0; u < c.length; ++u) {
                        var _ = c[u],
                            f = this._addLabelSegment(_, i).getContentSize();
                        this._lineOffsetX += f.width, c.length > 1 && u < c.length - 1 && this._updateLineInfo()
                    } else this._lineOffsetX += n, this._addLabelSegment(t, i)
            },
            _isLastComponentCR: function(t) {
                return t.length - 1 === t.lastIndexOf("\n")
            },
            _updateLineInfo: function() {
                this._linesWidth.push(this._lineOffsetX), this._lineOffsetX = 0, this._lineCount++
            },
            _needsUpdateTextLayout: function(t) {
                if (this._layoutDirty || !this._textArray || !t) return !0;
                if (this._textArray.length !== t.length) return !0;
                for (var e = 0; e < this._textArray.length; ++e) {
                    var i = this._textArray[e],
                        n = t[e];
                    if (i.text !== n.text) return !0;
                    if (i.style) {
                        if (n.style) {
                            if (!!n.style.outline != !!i.style.outline) return !0;
                            if (i.style.size !== n.style.size || i.style.italic !== n.style.italic || i.style.isImage !== n.style.isImage) return !0;
                            if (i.style.isImage === n.style.isImage && i.style.src !== n.style.src) return !0
                        } else if (i.style.size || i.style.italic || i.style.isImage || i.style.outline) return !0
                    } else if (n.style && (n.style.size || n.style.italic || n.style.isImage || n.style.outline)) return !0
                }
                return !1
            },
            _addRichTextImageElement: function(t) {
                var e = t.style.src,
                    i = this.imageAtlas.getSpriteFrame(e);
                if (i) {
                    var n = new cc.PrivateNode("RICHTEXT_Image_CHILD"),
                        r = n.addComponent(cc.Sprite);
                    n.setAnchorPoint(0, 0), r.type = cc.Sprite.Type.SLICED, r.sizeMode = cc.Sprite.SizeMode.CUSTOM, this.node.addChild(n), this._labelSegments.push(n);
                    var s = i.getRect(),
                        o = 1,
                        a = s.width,
                        l = s.height,
                        h = t.style.imageWidth,
                        c = t.style.imageHeight;
                    c > 0 && c < this.lineHeight ? (a *= o = c / l, l *= o) : (a *= o = this.lineHeight / l, l *= o), h > 0 && (a = h), this.maxWidth > 0 ? (this._lineOffsetX + a > this.maxWidth && this._updateLineInfo(), this._lineOffsetX += a) : (this._lineOffsetX += a, this._lineOffsetX > this._labelWidth && (this._labelWidth = this._lineOffsetX)), r.spriteFrame = i, n.setContentSize(a, l), n._lineCount = this._lineCount, t.style.event ? (t.style.event.click && (n._clickHandler = t.style.event.click), t.style.event.param ? n._clickParam = t.style.event.param : n._clickParam = "") : n._clickHandler = null
                } else cc.warnID(4400)
            },
            _updateRichText: function() {
                if (this.enabled) {
                    var t = o.parse(this.string);
                    if (!this._needsUpdateTextLayout(t)) return this._textArray = t, void this._updateLabelSegmentTextAttributes();
                    this._textArray = t, this._resetState();
                    for (var e = !1, i = void 0, n = 0; n < this._textArray.length; ++n) {
                        var r = this._textArray[n],
                            a = r.text;
                        if ("" === a) {
                            if (r.style && r.style.newline) {
                                this._updateLineInfo();
                                continue
                            }
                            if (r.style && r.style.isImage && this.imageAtlas) {
                                this._addRichTextImageElement(r);
                                continue
                            }
                        }
                        for (var l = a.split("\n"), h = 0; h < l.length; ++h) {
                            var c = l[h];
                            if ("" !== c)
                                if (e = !1, this.maxWidth > 0) {
                                    var u = this._measureText(n, c);
                                    this._updateRichTextWithMaxWidth(c, u, n), l.length > 1 && h < l.length - 1 && this._updateLineInfo()
                                } else i = this._addLabelSegment(c, n).getContentSize(), this._lineOffsetX += i.width, this._lineOffsetX > this._labelWidth && (this._labelWidth = this._lineOffsetX), l.length > 1 && h < l.length - 1 && this._updateLineInfo();
                            else {
                                if (this._isLastComponentCR(a) && h === l.length - 1) continue;
                                this._updateLineInfo(), e = !0
                            }
                        }
                    }
                    e || this._linesWidth.push(this._lineOffsetX), this.maxWidth > 0 && (this._labelWidth = this.maxWidth), this._labelHeight = (this._lineCount + s.BASELINE_RATIO) * this.lineHeight, this.node.setContentSize(this._labelWidth, this._labelHeight), this._updateRichTextPosition(), this._layoutDirty = !1
                }
            },
            _getFirstWordLen: function(t, e, i) {
                var n = t.charAt(e);
                if (s.isUnicodeCJK(n) || s.isUnicodeSpace(n)) return 1;
                for (var r = 1, o = e + 1; o < i && (n = t.charAt(o), !s.isUnicodeSpace(n) && !s.isUnicodeCJK(n)); ++o) r++;
                return r
            },
            _updateRichTextPosition: function() {
                for (var t = 0, e = 1, i = this._lineCount, n = 0; n < this._labelSegments.length; ++n) {
                    var r = this._labelSegments[n],
                        s = r._lineCount;
                    s > e && (t = 0, e = s);
                    var o = 0;
                    switch (this.horizontalAlign) {
                        case a.LEFT:
                            o = -this._labelWidth / 2;
                            break;
                        case a.CENTER:
                            o = -this._linesWidth[s - 1] / 2;
                            break;
                        case a.RIGHT:
                            o = this._labelWidth / 2 - this._linesWidth[s - 1]
                    }
                    r.x = t + o;
                    var l = r.getContentSize();
                    r.y = this.lineHeight * (i - s) - this._labelHeight / 2, s === e && (t += l.width)
                }
            },
            _convertLiteralColorValue: function(t) {
                var e = t.toUpperCase();
                return cc.Color[e] ? cc.Color[e] : cc.color().fromHEX(t)
            },
            _applyTextAttribute: function(t) {
                var e = t.getComponent(cc.Label);
                if (e) {
                    var i = t._styleIndex;
                    this._isSystemFontUsed && (e.fontFamily = this._fontFamily), e.useSystemFont = this._isSystemFontUsed, e.lineHeight = this.lineHeight, e.horizontalAlign = a.LEFT, e.verticalAlign = l.CENTER;
                    var n = null;
                    if (this._textArray[i] && (n = this._textArray[i].style), n && n.color ? t.color = this._convertLiteralColorValue(n.color) : t.color = this.node.color, e._enableBold(n && n.bold), e._enableItalics(n && n.italic), n && n.italic && (t.skewX = 12), e._enableUnderline(n && n.underline), n && n.outline) {
                        var r = t.getComponent(cc.LabelOutline);
                        r || (r = t.addComponent(cc.LabelOutline)), r.color = this._convertLiteralColorValue(n.outline.color), r.width = n.outline.width
                    }
                    n && n.size ? e.fontSize = n.size : e.fontSize = this.fontSize, e._forceUpdateRenderData(), n && n.event ? (n.event.click && (t._clickHandler = n.event.click), n.event.param ? t._clickParam = n.event.param : t._clickParam = "") : t._clickHandler = null
                }
            },
            onDestroy: function() {
                for (var t = 0; t < this._labelSegments.length; ++t) this._labelSegments[t].removeFromParent(), h.put(this._labelSegments[t])
            }
        });
        cc.RichText = e.exports = c
    }), {
        "../platform/CCMacro": 203,
        "../platform/js": 218,
        "../utils/html-text-parser": 297,
        "../utils/text-utils": 307
    }],
    108: [(function(t, e, i) {
        "use strict";
        var n = t("../utils/misc"),
            r = (t("./CCComponent"), cc.Enum({
                HORIZONTAL: 0,
                VERTICAL: 1
            })),
            s = cc.Class({
                name: "cc.Scrollbar",
                extends: t("./CCComponent"),
                editor: !1,
                properties: {
                    _scrollView: null,
                    _touching: !1,
                    _autoHideRemainingTime: {
                        default: 0,
                        serializable: !1
                    },
                    _opacity: 255,
                    handle: {
                        default: null,
                        type: cc.Sprite,
                        tooltip: !1,
                        notify: function() {
                            this._onScroll(cc.v2(0, 0))
                        },
                        animatable: !1
                    },
                    direction: {
                        default: r.HORIZONTAL,
                        type: r,
                        tooltip: !1,
                        notify: function() {
                            this._onScroll(cc.v2(0, 0))
                        },
                        animatable: !1
                    },
                    enableAutoHide: {
                        default: !0,
                        animatable: !1,
                        tooltip: !1
                    },
                    autoHideTime: {
                        default: 1,
                        animatable: !1,
                        tooltip: !1
                    }
                },
                statics: {
                    Direction: r
                },
                setTargetScrollView: function(t) {
                    this._scrollView = t
                },
                _convertToScrollViewSpace: function(t) {
                    var e = this._scrollView.node,
                        i = t.convertToWorldSpaceAR(cc.v2(-t.anchorX * t.width, -t.anchorY * t.height)),
                        n = e.convertToNodeSpaceAR(i);
                    return n.x += e.anchorX * e.width, n.y += e.anchorY * e.height, n
                },
                _setOpacity: function(t) {
                    this.handle && (this.node.opacity = t, this.handle.node.opacity = t)
                },
                _onScroll: function(t) {
                    if (this._scrollView) {
                        var e = this._scrollView.content;
                        if (e) {
                            var i = e.getContentSize(),
                                n = this._scrollView.node.getContentSize(),
                                s = this.node.getContentSize();
                            if (this._conditionalDisableScrollBar(i, n)) return;
                            this.enableAutoHide && (this._autoHideRemainingTime = this.autoHideTime, this._setOpacity(this._opacity));
                            var o = 0,
                                a = 0,
                                l = 0,
                                h = 0,
                                c = 0;
                            this.direction === r.HORIZONTAL ? (o = i.width, a = n.width, c = s.width, l = t.x, h = -this._convertToScrollViewSpace(e).x) : this.direction === r.VERTICAL && (o = i.height, a = n.height, c = s.height, l = t.y, h = -this._convertToScrollViewSpace(e).y);
                            var u = this._calculateLength(o, a, c, l),
                                _ = this._calculatePosition(o, a, c, h, l, u);
                            this._updateLength(u), this._updateHanlderPosition(_)
                        }
                    }
                },
                _updateHanlderPosition: function(t) {
                    if (this.handle) {
                        var e = this._fixupHandlerPosition();
                        this.handle.node.setPosition(t.x + e.x, t.y + e.y)
                    }
                },
                _fixupHandlerPosition: function() {
                    var t = this.node.getContentSize(),
                        e = this.node.getAnchorPoint(),
                        i = this.handle.node.getContentSize(),
                        n = this.handle.node.parent,
                        s = this.node.convertToWorldSpaceAR(cc.v2(-t.width * e.x, -t.height * e.y)),
                        o = n.convertToNodeSpaceAR(s);
                    return this.direction === r.HORIZONTAL ? o = cc.v2(o.x, o.y + (t.height - i.height) / 2) : this.direction === r.VERTICAL && (o = cc.v2(o.x + (t.width - i.width) / 2, o.y)), this.handle.node.setPosition(o), o
                },
                _onTouchBegan: function() {
                    this.enableAutoHide && (this._touching = !0)
                },
                _conditionalDisableScrollBar: function(t, e) {
                    return t.width <= e.width && this.direction === r.HORIZONTAL || t.height <= e.height && this.direction === r.VERTICAL
                },
                _onTouchEnded: function() {
                    if (this.enableAutoHide && (this._touching = !1, !(this.autoHideTime <= 0))) {
                        if (this._scrollView) {
                            var t = this._scrollView.content;
                            if (t) {
                                var e = t.getContentSize(),
                                    i = this._scrollView.node.getContentSize();
                                if (this._conditionalDisableScrollBar(e, i)) return
                            }
                        }
                        this._autoHideRemainingTime = this.autoHideTime
                    }
                },
                _calculateLength: function(t, e, i, n) {
                    var r = t;
                    return n && (r += 20 * (n > 0 ? n : -n)), i * (e / r)
                },
                _calculatePosition: function(t, e, i, s, o, a) {
                    var l = t - e;
                    o && (l += Math.abs(o));
                    var h = 0;
                    l && (h = s / l, h = n.clamp01(h));
                    var c = (i - a) * h;
                    return this.direction === r.VERTICAL ? cc.v2(0, c) : cc.v2(c, 0)
                },
                _updateLength: function(t) {
                    if (this.handle) {
                        var e = this.handle.node,
                            i = e.getContentSize();
                        e.setAnchorPoint(cc.v2(0, 0)), this.direction === r.HORIZONTAL ? e.setContentSize(t, i.height) : e.setContentSize(i.width, t)
                    }
                },
                _processAutoHide: function(t) {
                    if (this.enableAutoHide && !(this._autoHideRemainingTime <= 0) && !this._touching && (this._autoHideRemainingTime -= t, this._autoHideRemainingTime <= this.autoHideTime)) {
                        this._autoHideRemainingTime = Math.max(0, this._autoHideRemainingTime);
                        var e = this._opacity * (this._autoHideRemainingTime / this.autoHideTime);
                        this._setOpacity(e)
                    }
                },
                start: function() {
                    this.enableAutoHide && this._setOpacity(0)
                },
                hide: function() {
                    this._autoHideRemainingTime = 0, this._setOpacity(0)
                },
                show: function() {
                    this._autoHideRemainingTime = this.autoHideTime, this._setOpacity(this._opacity)
                },
                update: function(t) {
                    this._processAutoHide(t)
                }
            });
        cc.Scrollbar = e.exports = s
    }), {
        "../utils/misc": 300,
        "./CCComponent": 95
    }],
    109: [(function(t, e, i) {
        "use strict";
        var n = t("../CCNode").EventType,
            r = function(t) {
                return (t -= 1) * t * t * t * t + 1
            },
            s = function() {
                return (new Date).getMilliseconds()
            },
            o = cc.Enum({
                SCROLL_TO_TOP: 0,
                SCROLL_TO_BOTTOM: 1,
                SCROLL_TO_LEFT: 2,
                SCROLL_TO_RIGHT: 3,
                SCROLLING: 4,
                BOUNCE_TOP: 5,
                BOUNCE_BOTTOM: 6,
                BOUNCE_LEFT: 7,
                BOUNCE_RIGHT: 8,
                SCROLL_ENDED: 9,
                TOUCH_UP: 10,
                AUTOSCROLL_ENDED_WITH_THRESHOLD: 11,
                SCROLL_BEGAN: 12
            }),
            a = {
                "scroll-to-top": o.SCROLL_TO_TOP,
                "scroll-to-bottom": o.SCROLL_TO_BOTTOM,
                "scroll-to-left": o.SCROLL_TO_LEFT,
                "scroll-to-right": o.SCROLL_TO_RIGHT,
                scrolling: o.SCROLLING,
                "bounce-bottom": o.BOUNCE_BOTTOM,
                "bounce-left": o.BOUNCE_LEFT,
                "bounce-right": o.BOUNCE_RIGHT,
                "bounce-top": o.BOUNCE_TOP,
                "scroll-ended": o.SCROLL_ENDED,
                "touch-up": o.TOUCH_UP,
                "scroll-ended-with-threshold": o.AUTOSCROLL_ENDED_WITH_THRESHOLD,
                "scroll-began": o.SCROLL_BEGAN
            },
            l = cc.Class({
                name: "cc.ScrollView",
                extends: t("./CCViewGroup"),
                editor: !1,
                ctor: function() {
                    this._topBoundary = 0, this._bottomBoundary = 0, this._leftBoundary = 0, this._rightBoundary = 0, this._touchMoveDisplacements = [], this._touchMoveTimeDeltas = [], this._touchMovePreviousTimestamp = 0, this._touchMoved = !1, this._autoScrolling = !1, this._autoScrollAttenuate = !1, this._autoScrollStartPosition = cc.v2(0, 0), this._autoScrollTargetDelta = cc.v2(0, 0), this._autoScrollTotalTime = 0, this._autoScrollAccumulatedTime = 0, this._autoScrollCurrentlyOutOfBoundary = !1, this._autoScrollBraking = !1, this._autoScrollBrakingStartPosition = cc.v2(0, 0), this._outOfBoundaryAmount = cc.v2(0, 0), this._outOfBoundaryAmountDirty = !0, this._stopMouseWheel = !1, this._mouseWheelEventElapsedTime = 0, this._isScrollEndedWithThresholdEventFired = !1, this._scrollEventEmitMask = 0, this._isBouncing = !1, this._scrolling = !1
                },
                properties: {
                    content: {
                        default: void 0,
                        type: cc.Node,
                        tooltip: !1,
                        formerlySerializedAs: "content",
                        notify: function(t) {
                            this._calculateBoundary()
                        }
                    },
                    horizontal: {
                        default: !0,
                        animatable: !1,
                        tooltip: !1
                    },
                    vertical: {
                        default: !0,
                        animatable: !1,
                        tooltip: !1
                    },
                    inertia: {
                        default: !0,
                        tooltip: !1
                    },
                    brake: {
                        default: .5,
                        type: cc.Float,
                        range: [0, 1, .1],
                        tooltip: !1
                    },
                    elastic: {
                        default: !0,
                        animatable: !1,
                        tooltip: !1
                    },
                    bounceDuration: {
                        default: 1,
                        range: [0, 10],
                        tooltip: !1
                    },
                    horizontalScrollBar: {
                        default: void 0,
                        type: cc.Scrollbar,
                        tooltip: !1,
                        notify: function() {
                            this.horizontalScrollBar && (this.horizontalScrollBar.setTargetScrollView(this), this._updateScrollBar(0))
                        },
                        animatable: !1
                    },
                    verticalScrollBar: {
                        default: void 0,
                        type: cc.Scrollbar,
                        tooltip: !1,
                        notify: function() {
                            this.verticalScrollBar && (this.verticalScrollBar.setTargetScrollView(this), this._updateScrollBar(0))
                        },
                        animatable: !1
                    },
                    scrollEvents: {
                        default: [],
                        type: cc.Component.EventHandler,
                        tooltip: !1
                    },
                    cancelInnerEvents: {
                        default: !0,
                        animatable: !1,
                        tooltip: !1
                    },
                    _view: {
                        get: function() {
                            if (this.content) return this.content.parent
                        }
                    }
                },
                statics: {
                    EventType: o
                },
                scrollToBottom: function(t, e) {
                    var i = this._calculateMovePercentDelta({
                        anchor: cc.v2(0, 0),
                        applyToHorizontal: !1,
                        applyToVertical: !0
                    });
                    t ? this._startAutoScroll(i, t, !1 !== e) : this._moveContent(i, !0)
                },
                scrollToTop: function(t, e) {
                    var i = this._calculateMovePercentDelta({
                        anchor: cc.v2(0, 1),
                        applyToHorizontal: !1,
                        applyToVertical: !0
                    });
                    t ? this._startAutoScroll(i, t, !1 !== e) : this._moveContent(i)
                },
                scrollToLeft: function(t, e) {
                    var i = this._calculateMovePercentDelta({
                        anchor: cc.v2(0, 0),
                        applyToHorizontal: !0,
                        applyToVertical: !1
                    });
                    t ? this._startAutoScroll(i, t, !1 !== e) : this._moveContent(i)
                },
                scrollToRight: function(t, e) {
                    var i = this._calculateMovePercentDelta({
                        anchor: cc.v2(1, 0),
                        applyToHorizontal: !0,
                        applyToVertical: !1
                    });
                    t ? this._startAutoScroll(i, t, !1 !== e) : this._moveContent(i)
                },
                scrollToTopLeft: function(t, e) {
                    var i = this._calculateMovePercentDelta({
                        anchor: cc.v2(0, 1),
                        applyToHorizontal: !0,
                        applyToVertical: !0
                    });
                    t ? this._startAutoScroll(i, t, !1 !== e) : this._moveContent(i)
                },
                scrollToTopRight: function(t, e) {
                    var i = this._calculateMovePercentDelta({
                        anchor: cc.v2(1, 1),
                        applyToHorizontal: !0,
                        applyToVertical: !0
                    });
                    t ? this._startAutoScroll(i, t, !1 !== e) : this._moveContent(i)
                },
                scrollToBottomLeft: function(t, e) {
                    var i = this._calculateMovePercentDelta({
                        anchor: cc.v2(0, 0),
                        applyToHorizontal: !0,
                        applyToVertical: !0
                    });
                    t ? this._startAutoScroll(i, t, !1 !== e) : this._moveContent(i)
                },
                scrollToBottomRight: function(t, e) {
                    var i = this._calculateMovePercentDelta({
                        anchor: cc.v2(1, 0),
                        applyToHorizontal: !0,
                        applyToVertical: !0
                    });
                    t ? this._startAutoScroll(i, t, !1 !== e) : this._moveContent(i)
                },
                scrollToOffset: function(t, e, i) {
                    var n = this.getMaxScrollOffset(),
                        r = cc.v2(0, 0);
                    0 === n.x ? r.x = 0 : r.x = t.x / n.x, 0 === n.y ? r.y = 1 : r.y = (n.y - t.y) / n.y, this.scrollTo(r, e, i)
                },
                getScrollOffset: function() {
                    var t = this._getContentTopBoundary() - this._topBoundary,
                        e = this._getContentLeftBoundary() - this._leftBoundary;
                    return cc.v2(e, t)
                },
                getMaxScrollOffset: function() {
                    var t = this._view.getContentSize(),
                        e = this.content.getContentSize(),
                        i = e.width - t.width,
                        n = e.height - t.height;
                    return i = i >= 0 ? i : 0, n = n >= 0 ? n : 0, cc.v2(i, n)
                },
                scrollToPercentHorizontal: function(t, e, i) {
                    var n = this._calculateMovePercentDelta({
                        anchor: cc.v2(t, 0),
                        applyToHorizontal: !0,
                        applyToVertical: !1
                    });
                    e ? this._startAutoScroll(n, e, !1 !== i) : this._moveContent(n)
                },
                scrollTo: function(t, e, i) {
                    var n = this._calculateMovePercentDelta({
                        anchor: cc.v2(t),
                        applyToHorizontal: !0,
                        applyToVertical: !0
                    });
                    e ? this._startAutoScroll(n, e, !1 !== i) : this._moveContent(n)
                },
                scrollToPercentVertical: function(t, e, i) {
                    var n = this._calculateMovePercentDelta({
                        anchor: cc.v2(0, t),
                        applyToHorizontal: !1,
                        applyToVertical: !0
                    });
                    e ? this._startAutoScroll(n, e, !1 !== i) : this._moveContent(n)
                },
                stopAutoScroll: function() {
                    this._autoScrolling = !1, this._autoScrollAccumulatedTime = this._autoScrollTotalTime
                },
                setContentPosition: function(t) {
                    t.fuzzyEquals(this.getContentPosition(), 1e-4) || (this.content.setPosition(t), this._outOfBoundaryAmountDirty = !0)
                },
                getContentPosition: function() {
                    return this.content.getPosition()
                },
                isScrolling: function() {
                    return this._scrolling
                },
                isAutoScrolling: function() {
                    return this._autoScrolling
                },
                _registerEvent: function() {
                    this.node.on(cc.Node.EventType.TOUCH_START, this._onTouchBegan, this, !0), this.node.on(cc.Node.EventType.TOUCH_MOVE, this._onTouchMoved, this, !0), this.node.on(cc.Node.EventType.TOUCH_END, this._onTouchEnded, this, !0), this.node.on(cc.Node.EventType.TOUCH_CANCEL, this._onTouchCancelled, this, !0), this.node.on(cc.Node.EventType.MOUSE_WHEEL, this._onMouseWheel, this, !0)
                },
                _unregisterEvent: function() {
                    this.node.off(cc.Node.EventType.TOUCH_START, this._onTouchBegan, this, !0), this.node.off(cc.Node.EventType.TOUCH_MOVE, this._onTouchMoved, this, !0), this.node.off(cc.Node.EventType.TOUCH_END, this._onTouchEnded, this, !0), this.node.off(cc.Node.EventType.TOUCH_CANCEL, this._onTouchCancelled, this, !0), this.node.off(cc.Node.EventType.MOUSE_WHEEL, this._onMouseWheel, this, !0)
                },
                _onMouseWheel: function(t, e) {
                    if (this.enabledInHierarchy && !this._hasNestedViewGroup(t, e)) {
                        var i = cc.v2(0, 0),
                            n = -.1;
                        0, this.vertical ? i = cc.v2(0, t.getScrollY() * n) : this.horizontal && (i = cc.v2(t.getScrollY() * n, 0)), this._mouseWheelEventElapsedTime = 0, this._processDeltaMove(i), this._stopMouseWheel || (this._handlePressLogic(), this.schedule(this._checkMouseWheel, 1 / 60), this._stopMouseWheel = !0), this._stopPropagationIfTargetIsMe(t)
                    }
                },
                _checkMouseWheel: function(t) {
                    if (!this._getHowMuchOutOfBoundary().fuzzyEquals(cc.v2(0, 0), 1e-4)) return this._processInertiaScroll(), this.unschedule(this._checkMouseWheel), void(this._stopMouseWheel = !1);
                    this._mouseWheelEventElapsedTime += t, this._mouseWheelEventElapsedTime > .1 && (this._onScrollBarTouchEnded(), this.unschedule(this._checkMouseWheel), this._stopMouseWheel = !1)
                },
                _calculateMovePercentDelta: function(t) {
                    var e = t.anchor,
                        i = t.applyToHorizontal,
                        n = t.applyToVertical;
                    this._calculateBoundary(), e = e.clampf(cc.v2(0, 0), cc.v2(1, 1));
                    var r = this._view.getContentSize(),
                        s = this.content.getContentSize(),
                        o = this._getContentBottomBoundary() - this._bottomBoundary;
                    o = -o;
                    var a = this._getContentLeftBoundary() - this._leftBoundary;
                    a = -a;
                    var l = cc.v2(0, 0),
                        h = 0;
                    return i && (h = s.width - r.width, l.x = a - h * e.x), n && (h = s.height - r.height, l.y = o - h * e.y), l
                },
                _moveContentToTopLeft: function(t) {
                    var e = this.content.getContentSize(),
                        i = this._getContentBottomBoundary() - this._bottomBoundary;
                    i = -i;
                    var n = cc.v2(0, 0),
                        r = 0,
                        s = this._getContentLeftBoundary() - this._leftBoundary;
                    s = -s, e.height < t.height && (r = e.height - t.height, n.y = i - r), e.width < t.width && (r = e.width - t.width, n.x = s), this._updateScrollBarState(), this._moveContent(n), this._adjustContentOutOfBoundary()
                },
                _calculateBoundary: function() {
                    if (this.content) {
                        var t = this.content.getComponent(cc.Layout);
                        t && t.enabledInHierarchy && t.updateLayout();
                        var e = this._view.getContentSize(),
                            i = e.width * this._view.anchorX,
                            n = e.height * this._view.anchorY;
                        this._leftBoundary = -i, this._bottomBoundary = -n, this._rightBoundary = this._leftBoundary + e.width, this._topBoundary = this._bottomBoundary + e.height, this._moveContentToTopLeft(e)
                    }
                },
                _hasNestedViewGroup: function(t, e) {
                    if (t.eventPhase === cc.Event.CAPTURING_PHASE) {
                        if (e)
                            for (var i = 0; i < e.length; ++i) {
                                var n = e[i];
                                if (this.node === n) return !!t.target.getComponent(cc.ViewGroup);
                                if (n.getComponent(cc.ViewGroup)) return !0
                            }
                        return !1
                    }
                },
                _stopPropagationIfTargetIsMe: function(t) {
                    t.eventPhase === cc.Event.AT_TARGET && t.target === this.node && t.stopPropagation()
                },
                _onTouchBegan: function(t, e) {
                    if (this.enabledInHierarchy && !this._hasNestedViewGroup(t, e)) {
                        var i = t.touch;
                        this.content && this._handlePressLogic(i), this._touchMoved = !1, this._stopPropagationIfTargetIsMe(t)
                    }
                },
                _onTouchMoved: function(t, e) {
                    if (this.enabledInHierarchy && !this._hasNestedViewGroup(t, e)) {
                        var i = t.touch;
                        if (this.content && this._handleMoveLogic(i), this.cancelInnerEvents) {
                            if (i.getLocation().sub(i.getStartLocation()).mag() > 7 && !this._touchMoved && t.target !== this.node) {
                                var n = new cc.Event.EventTouch(t.getTouches(), t.bubbles);
                                n.type = cc.Node.EventType.TOUCH_CANCEL, n.touch = t.touch, n.simulate = !0, t.target.dispatchEvent(n), this._touchMoved = !0
                            }
                            this._stopPropagationIfTargetIsMe(t)
                        }
                    }
                },
                _onTouchEnded: function(t, e) {
                    if (this.enabledInHierarchy && !this._hasNestedViewGroup(t, e)) {
                        this._dispatchEvent("touch-up");
                        var i = t.touch;
                        this.content && this._handleReleaseLogic(i), this._touchMoved ? t.stopPropagation() : this._stopPropagationIfTargetIsMe(t)
                    }
                },
                _onTouchCancelled: function(t, e) {
                    if (this.enabledInHierarchy && !this._hasNestedViewGroup(t, e)) {
                        if (!t.simulate) {
                            var i = t.touch;
                            this.content && this._handleReleaseLogic(i)
                        }
                        this._stopPropagationIfTargetIsMe(t)
                    }
                },
                _processDeltaMove: function(t) {
                    this._scrollChildren(t), this._gatherTouchMove(t)
                },
                _handleMoveLogic: function(t) {
                    var e = t.getDelta();
                    this._processDeltaMove(e)
                },
                _scrollChildren: function(t) {
                    var e = t = this._clampDelta(t),
                        i = void 0;
                    this.elastic && (i = this._getHowMuchOutOfBoundary(), e.x *= 0 === i.x ? 1 : .5, e.y *= 0 === i.y ? 1 : .5), this.elastic || (i = this._getHowMuchOutOfBoundary(e), e = e.add(i));
                    var n = -1;
                    if (e.y > 0) this.content.y - this.content.anchorY * this.content.height + e.y > this._bottomBoundary && (n = "scroll-to-bottom");
                    else if (e.y < 0) {
                        this.content.y - this.content.anchorY * this.content.height + this.content.height + e.y <= this._topBoundary && (n = "scroll-to-top")
                    }
                    if (e.x < 0) this.content.x - this.content.anchorX * this.content.width + this.content.width + e.x <= this._rightBoundary && (n = "scroll-to-right");
                    else if (e.x > 0) {
                        this.content.x - this.content.anchorX * this.content.width + e.x >= this._leftBoundary && (n = "scroll-to-left")
                    }
                    this._moveContent(e, !1), 0 === e.x && 0 === e.y || (this._scrolling || (this._scrolling = !0, this._dispatchEvent("scroll-began")), this._dispatchEvent("scrolling")), -1 !== n && this._dispatchEvent(n)
                },
                _handlePressLogic: function() {
                    this._autoScrolling && this._dispatchEvent("scroll-ended"), this._autoScrolling = !1, this._isBouncing = !1, this._touchMovePreviousTimestamp = s(), this._touchMoveDisplacements.length = 0, this._touchMoveTimeDeltas.length = 0, this._onScrollBarTouchBegan()
                },
                _clampDelta: function(t) {
                    var e = this.content.getContentSize(),
                        i = this._view.getContentSize();
                    return e.width < i.width && (t.x = 0), e.height < i.height && (t.y = 0), t
                },
                _gatherTouchMove: function(t) {
                    for (t = this._clampDelta(t); this._touchMoveDisplacements.length >= 5;) this._touchMoveDisplacements.shift(), this._touchMoveTimeDeltas.shift();
                    this._touchMoveDisplacements.push(t);
                    var e = s();
                    this._touchMoveTimeDeltas.push((e - this._touchMovePreviousTimestamp) / 1e3), this._touchMovePreviousTimestamp = e
                },
                _startBounceBackIfNeeded: function() {
                    if (!this.elastic) return !1;
                    var t = this._getHowMuchOutOfBoundary();
                    if ((t = this._clampDelta(t)).fuzzyEquals(cc.v2(0, 0), 1e-4)) return !1;
                    var e = Math.max(this.bounceDuration, 0);
                    return this._startAutoScroll(t, e, !0), this._isBouncing || (t.y > 0 && this._dispatchEvent("bounce-top"), t.y < 0 && this._dispatchEvent("bounce-bottom"), t.x > 0 && this._dispatchEvent("bounce-right"), t.x < 0 && this._dispatchEvent("bounce-left"), this._isBouncing = !0), !0
                },
                _processInertiaScroll: function() {
                    if (!this._startBounceBackIfNeeded() && this.inertia) {
                        var t = this._calculateTouchMoveVelocity();
                        !t.fuzzyEquals(cc.v2(0, 0), 1e-4) && this.brake < 1 && this._startInertiaScroll(t)
                    }
                    this._onScrollBarTouchEnded()
                },
                _handleReleaseLogic: function(t) {
                    var e = t.getDelta();
                    this._gatherTouchMove(e), this._processInertiaScroll(), this._scrolling && (this._scrolling = !1, this._autoScrolling || this._dispatchEvent("scroll-ended"))
                },
                _isOutOfBoundary: function() {
                    return !this._getHowMuchOutOfBoundary().fuzzyEquals(cc.v2(0, 0), 1e-4)
                },
                _isNecessaryAutoScrollBrake: function() {
                    if (this._autoScrollBraking) return !0;
                    if (this._isOutOfBoundary()) {
                        if (!this._autoScrollCurrentlyOutOfBoundary) return this._autoScrollCurrentlyOutOfBoundary = !0, this._autoScrollBraking = !0, this._autoScrollBrakingStartPosition = this.getContentPosition(), !0
                    } else this._autoScrollCurrentlyOutOfBoundary = !1;
                    return !1
                },
                getScrollEndedEventTiming: function() {
                    return 1e-4
                },
                _processAutoScrolling: function(t) {
                    var e = this._isNecessaryAutoScrollBrake(),
                        i = e ? .05 : 1;
                    this._autoScrollAccumulatedTime += t * (1 / i);
                    var n = Math.min(1, this._autoScrollAccumulatedTime / this._autoScrollTotalTime);
                    this._autoScrollAttenuate && (n = r(n));
                    var s = this._autoScrollStartPosition.add(this._autoScrollTargetDelta.mul(n)),
                        o = Math.abs(n - 1) <= 1e-4;
                    if (Math.abs(n - 1) <= this.getScrollEndedEventTiming() && !this._isScrollEndedWithThresholdEventFired && (this._dispatchEvent("scroll-ended-with-threshold"), this._isScrollEndedWithThresholdEventFired = !0), this.elastic) {
                        var a = s.sub(this._autoScrollBrakingStartPosition);
                        e && (a = a.mul(i)), s = this._autoScrollBrakingStartPosition.add(a)
                    } else {
                        var l = s.sub(this.getContentPosition()),
                            h = this._getHowMuchOutOfBoundary(l);
                        h.fuzzyEquals(cc.v2(0, 0), 1e-4) || (s = s.add(h), o = !0)
                    }
                    o && (this._autoScrolling = !1);
                    var c = s.sub(this.getContentPosition());
                    this._moveContent(this._clampDelta(c), o), this._dispatchEvent("scrolling"), this._autoScrolling || (this._isBouncing = !1, this._scrolling = !1, this._dispatchEvent("scroll-ended"))
                },
                _startInertiaScroll: function(t) {
                    var e = t.mul(.7);
                    this._startAttenuatingAutoScroll(e, t)
                },
                _calculateAttenuatedFactor: function(t) {
                    return this.brake <= 0 ? 1 - this.brake : (1 - this.brake) * (1 / (1 + 14e-6 * t + t * t * 8e-9))
                },
                _startAttenuatingAutoScroll: function(t, e) {
                    var i = this._calculateAutoScrollTimeByInitalSpeed(e.mag()),
                        n = t.normalize(),
                        r = this.content.getContentSize(),
                        s = this._view.getContentSize(),
                        o = r.width - s.width,
                        a = r.height - s.height,
                        l = this._calculateAttenuatedFactor(o),
                        h = this._calculateAttenuatedFactor(a);
                    n = cc.v2(n.x * o * (1 - this.brake) * l, n.y * a * h * (1 - this.brake));
                    var c = t.mag(),
                        u = n.mag() / c;
                    n = n.add(t), this.brake > 0 && u > 7 && (u = Math.sqrt(u), n = t.mul(u).add(t)), this.brake > 0 && u > 3 && (i *= u = 3), 0 === this.brake && u > 1 && (i *= u), this._startAutoScroll(n, i, !0)
                },
                _calculateAutoScrollTimeByInitalSpeed: function(t) {
                    return Math.sqrt(Math.sqrt(t / 5))
                },
                _startAutoScroll: function(t, e, i) {
                    var n = this._flattenVectorByDirection(t);
                    this._autoScrolling = !0, this._autoScrollTargetDelta = n, this._autoScrollAttenuate = i, this._autoScrollStartPosition = this.getContentPosition(), this._autoScrollTotalTime = e, this._autoScrollAccumulatedTime = 0, this._autoScrollBraking = !1, this._isScrollEndedWithThresholdEventFired = !1, this._autoScrollBrakingStartPosition = cc.v2(0, 0), this._getHowMuchOutOfBoundary().fuzzyEquals(cc.v2(0, 0), 1e-4) || (this._autoScrollCurrentlyOutOfBoundary = !0)
                },
                _calculateTouchMoveVelocity: function() {
                    var t = 0;
                    if ((t = this._touchMoveTimeDeltas.reduce((function(t, e) {
                            return t + e
                        }), t)) <= 0 || t >= .5) return cc.v2(0, 0);
                    var e = cc.v2(0, 0);
                    return e = this._touchMoveDisplacements.reduce((function(t, e) {
                        return t.add(e)
                    }), e), cc.v2(e.x * (1 - this.brake) / t, e.y * (1 - this.brake) / t)
                },
                _flattenVectorByDirection: function(t) {
                    var e = t;
                    return e.x = this.horizontal ? e.x : 0, e.y = this.vertical ? e.y : 0, e
                },
                _moveContent: function(t, e) {
                    var i = this._flattenVectorByDirection(t),
                        n = this.getContentPosition().add(i);
                    this.setContentPosition(n);
                    var r = this._getHowMuchOutOfBoundary();
                    this._updateScrollBar(r), this.elastic && e && this._startBounceBackIfNeeded()
                },
                _getContentLeftBoundary: function() {
                    return this.getContentPosition().x - this.content.getAnchorPoint().x * this.content.getContentSize().width
                },
                _getContentRightBoundary: function() {
                    var t = this.content.getContentSize();
                    return this._getContentLeftBoundary() + t.width
                },
                _getContentTopBoundary: function() {
                    var t = this.content.getContentSize();
                    return this._getContentBottomBoundary() + t.height
                },
                _getContentBottomBoundary: function() {
                    return this.getContentPosition().y - this.content.getAnchorPoint().y * this.content.getContentSize().height
                },
                _getHowMuchOutOfBoundary: function(t) {
                    if ((t = t || cc.v2(0, 0)).fuzzyEquals(cc.v2(0, 0), 1e-4) && !this._outOfBoundaryAmountDirty) return this._outOfBoundaryAmount;
                    var e = cc.v2(0, 0);
                    return this._getContentLeftBoundary() + t.x > this._leftBoundary ? e.x = this._leftBoundary - (this._getContentLeftBoundary() + t.x) : this._getContentRightBoundary() + t.x < this._rightBoundary && (e.x = this._rightBoundary - (this._getContentRightBoundary() + t.x)), this._getContentTopBoundary() + t.y < this._topBoundary ? e.y = this._topBoundary - (this._getContentTopBoundary() + t.y) : this._getContentBottomBoundary() + t.y > this._bottomBoundary && (e.y = this._bottomBoundary - (this._getContentBottomBoundary() + t.y)), t.fuzzyEquals(cc.v2(0, 0), 1e-4) && (this._outOfBoundaryAmount = e, this._outOfBoundaryAmountDirty = !1), e = this._clampDelta(e)
                },
                _updateScrollBarState: function() {
                    if (this.content) {
                        var t = this.content.getContentSize(),
                            e = this._view.getContentSize();
                        this.verticalScrollBar && (t.height < e.height ? this.verticalScrollBar.hide() : this.verticalScrollBar.show()), this.horizontalScrollBar && (t.width < e.width ? this.horizontalScrollBar.hide() : this.horizontalScrollBar.show())
                    }
                },
                _updateScrollBar: function(t) {
                    this.horizontalScrollBar && this.horizontalScrollBar._onScroll(t), this.verticalScrollBar && this.verticalScrollBar._onScroll(t)
                },
                _onScrollBarTouchBegan: function() {
                    this.horizontalScrollBar && this.horizontalScrollBar._onTouchBegan(), this.verticalScrollBar && this.verticalScrollBar._onTouchBegan()
                },
                _onScrollBarTouchEnded: function() {
                    this.horizontalScrollBar && this.horizontalScrollBar._onTouchEnded(), this.verticalScrollBar && this.verticalScrollBar._onTouchEnded()
                },
                _dispatchEvent: function(t) {
                    if ("scroll-ended" === t) this._scrollEventEmitMask = 0;
                    else if ("scroll-to-top" === t || "scroll-to-bottom" === t || "scroll-to-left" === t || "scroll-to-right" === t) {
                        var e = 1 << a[t];
                        if (this._scrollEventEmitMask & e) return;
                        this._scrollEventEmitMask |= e
                    }
                    cc.Component.EventHandler.emitEvents(this.scrollEvents, this, a[t]), this.node.emit(t, this)
                },
                _adjustContentOutOfBoundary: function() {
                    if (this._outOfBoundaryAmountDirty = !0, this._isOutOfBoundary()) {
                        var t = this._getHowMuchOutOfBoundary(cc.v2(0, 0)),
                            e = this.getContentPosition().add(t);
                        this.content && (this.content.setPosition(e), this._updateScrollBar(0))
                    }
                },
                start: function() {
                    this._calculateBoundary(), this.content && cc.director.once(cc.Director.EVENT_BEFORE_DRAW, this._adjustContentOutOfBoundary, this)
                },
                _hideScrollbar: function() {
                    this.horizontalScrollBar && this.horizontalScrollBar.hide(), this.verticalScrollBar && this.verticalScrollBar.hide()
                },
                onDisable: function() {
                    this._unregisterEvent(), this.content && (this.content.off(n.SIZE_CHANGED, this._calculateBoundary, this), this.content.off(n.SCALE_CHANGED, this._calculateBoundary, this), this._view && (this._view.off(n.POSITION_CHANGED, this._calculateBoundary, this), this._view.off(n.SCALE_CHANGED, this._calculateBoundary, this), this._view.off(n.SIZE_CHANGED, this._calculateBoundary, this))), this._hideScrollbar(), this.stopAutoScroll()
                },
                onEnable: function() {
                    this._registerEvent(), this.content && (this.content.on(n.SIZE_CHANGED, this._calculateBoundary, this), this.content.on(n.SCALE_CHANGED, this._calculateBoundary, this), this._view && (this._view.on(n.POSITION_CHANGED, this._calculateBoundary, this), this._view.on(n.SCALE_CHANGED, this._calculateBoundary, this), this._view.on(n.SIZE_CHANGED, this._calculateBoundary, this))), this._updateScrollBarState()
                },
                update: function(t) {
                    this._autoScrolling && this._processAutoScrolling(t)
                }
            });
        cc.ScrollView = e.exports = l
    }), {
        "../CCNode": 52,
        "./CCViewGroup": 116
    }],
    110: [(function(t, e, i) {
        "use strict";
        var n = t("../utils/misc"),
            r = t("./CCComponent"),
            s = cc.Enum({
                Horizontal: 0,
                Vertical: 1
            }),
            o = cc.Class({
                name: "cc.Slider",
                extends: r,
                editor: !1,
                ctor: function() {
                    this._offset = cc.v2(), this._touchHandle = !1, this._dragging = !1
                },
                properties: {
                    handle: {
                        default: null,
                        type: cc.Button,
                        tooltip: !1,
                        notify: function() {
                            0
                        }
                    },
                    direction: {
                        default: s.Horizontal,
                        type: s,
                        tooltip: !1
                    },
                    progress: {
                        default: .5,
                        type: cc.Float,
                        range: [0, 1, .1],
                        slide: !0,
                        tooltip: !1,
                        notify: function() {
                            this._updateHandlePosition()
                        }
                    },
                    slideEvents: {
                        default: [],
                        type: cc.Component.EventHandler,
                        tooltip: !1
                    }
                },
                statics: {
                    Direction: s
                },
                __preload: function() {
                    this._updateHandlePosition()
                },
                onEnable: function() {
                    this.node.on(cc.Node.EventType.TOUCH_START, this._onTouchBegan, this), this.node.on(cc.Node.EventType.TOUCH_MOVE, this._onTouchMoved, this), this.node.on(cc.Node.EventType.TOUCH_END, this._onTouchEnded, this), this.node.on(cc.Node.EventType.TOUCH_CANCEL, this._onTouchCancelled, this), this.handle && this.handle.isValid && (this.handle.node.on(cc.Node.EventType.TOUCH_START, this._onHandleDragStart, this), this.handle.node.on(cc.Node.EventType.TOUCH_MOVE, this._onTouchMoved, this), this.handle.node.on(cc.Node.EventType.TOUCH_END, this._onTouchEnded, this))
                },
                onDisable: function() {
                    this.node.off(cc.Node.EventType.TOUCH_START, this._onTouchBegan, this), this.node.off(cc.Node.EventType.TOUCH_MOVE, this._onTouchMoved, this), this.node.off(cc.Node.EventType.TOUCH_END, this._onTouchEnded, this), this.node.off(cc.Node.EventType.TOUCH_CANCEL, this._onTouchCancelled, this), this.handle && this.handle.isValid && (this.handle.node.off(cc.Node.EventType.TOUCH_START, this._onHandleDragStart, this), this.handle.node.off(cc.Node.EventType.TOUCH_MOVE, this._onTouchMoved, this), this.handle.node.off(cc.Node.EventType.TOUCH_END, this._onTouchEnded, this))
                },
                _onHandleDragStart: function(t) {
                    this._dragging = !0, this._touchHandle = !0, this._offset = this.handle.node.convertToNodeSpaceAR(t.touch.getLocation()), t.stopPropagation()
                },
                _onTouchBegan: function(t) {
                    this.handle && (this._dragging = !0, this._touchHandle || this._handleSliderLogic(t.touch), t.stopPropagation())
                },
                _onTouchMoved: function(t) {
                    this._dragging && (this._handleSliderLogic(t.touch), t.stopPropagation())
                },
                _onTouchEnded: function(t) {
                    this._dragging = !1, this._touchHandle = !1, this._offset = cc.v2(), t.stopPropagation()
                },
                _onTouchCancelled: function(t) {
                    this._dragging = !1, t.stopPropagation()
                },
                _handleSliderLogic: function(t) {
                    this._updateProgress(t), this._emitSlideEvent()
                },
                _emitSlideEvent: function() {
                    cc.Component.EventHandler.emitEvents(this.slideEvents, this), this.node.emit("slide", this)
                },
                _updateProgress: function(t) {
                    if (this.handle) {
                        var e = this.node,
                            i = e.convertToNodeSpaceAR(t.getLocation());
                        this.direction === s.Horizontal ? this.progress = n.clamp01((i.x - this._offset.x + e.anchorX * e.width) / e.width) : this.progress = n.clamp01((i.y - this._offset.y + e.anchorY * e.height) / e.height)
                    }
                },
                _updateHandlePosition: function() {
                    if (this.handle) {
                        var t;
                        t = this.direction === s.Horizontal ? cc.v2(-this.node.width * this.node.anchorX + this.progress * this.node.width, 0) : cc.v2(0, -this.node.height * this.node.anchorY + this.progress * this.node.height);
                        var e = this.node.convertToWorldSpaceAR(t);
                        this.handle.node.position = this.handle.node.parent.convertToNodeSpaceAR(e)
                    }
                }
            });
        cc.Slider = e.exports = o
    }), {
        "../utils/misc": 300,
        "./CCComponent": 95
    }],
    111: [(function(t, e, i) {
        "use strict";
        var n = t("../utils/misc"),
            r = (t("../CCNode").EventType, t("./CCRenderComponent")),
            s = t("../utils/blend-func"),
            o = (t("../renderer/render-flow"), t("../assets/material/CCMaterial")),
            a = cc.Enum({
                SIMPLE: 0,
                SLICED: 1,
                TILED: 2,
                FILLED: 3,
                MESH: 4
            }),
            l = cc.Enum({
                HORIZONTAL: 0,
                VERTICAL: 1,
                RADIAL: 2
            }),
            h = cc.Enum({
                CUSTOM: 0,
                TRIMMED: 1,
                RAW: 2
            }),
            c = cc.Enum({
                NORMAL: 0,
                GRAY: 1
            }),
            u = cc.Class({
                name: "cc.Sprite",
                extends: r,
                mixins: [s],
                editor: !1,
                ctor: function() {
                    cc.game.renderType === cc.game.RENDER_TYPE_CANVAS ? this._activateMaterial = this._activateMaterialCanvas : this._activateMaterial = this._activateMaterialWebgl
                },
                properties: {
                    _spriteFrame: {
                        default: null,
                        type: cc.SpriteFrame
                    },
                    _type: a.SIMPLE,
                    _sizeMode: h.TRIMMED,
                    _fillType: 0,
                    _fillCenter: cc.v2(0, 0),
                    _fillStart: 0,
                    _fillRange: 0,
                    _isTrimmedMode: !0,
                    _atlas: {
                        default: null,
                        type: cc.SpriteAtlas,
                        tooltip: !1,
                        editorOnly: !0,
                        visible: !0,
                        animatable: !1
                    },
                    spriteFrame: {
                        get: function() {
                            return this._spriteFrame
                        },
                        set: function(t, e) {
                            var i = this._spriteFrame;
                            i !== t && (this._spriteFrame = t, this.markForUpdateRenderData(!1), this._applySpriteFrame(i))
                        },
                        type: cc.SpriteFrame
                    },
                    type: {
                        get: function() {
                            return this._type
                        },
                        set: function(t) {
                            this._type !== t && (this._type = t, this._resetAssembler())
                        },
                        type: a,
                        animatable: !1,
                        tooltip: !1
                    },
                    fillType: {
                        get: function() {
                            return this._fillType
                        },
                        set: function(t) {
                            t !== this._fillType && (this._fillType = t, this._resetAssembler())
                        },
                        type: l,
                        tooltip: !1
                    },
                    fillCenter: {
                        get: function() {
                            return this._fillCenter
                        },
                        set: function(t) {
                            this._fillCenter.x = t.x, this._fillCenter.y = t.y, this._type === a.FILLED && this.setVertsDirty()
                        },
                        tooltip: !1
                    },
                    fillStart: {
                        get: function() {
                            return this._fillStart
                        },
                        set: function(t) {
                            this._fillStart = n.clampf(t, -1, 1), this._type === a.FILLED && this.setVertsDirty()
                        },
                        tooltip: !1
                    },
                    fillRange: {
                        get: function() {
                            return this._fillRange
                        },
                        set: function(t) {
                            this._fillRange = n.clampf(t, -1, 1), this._type === a.FILLED && this.setVertsDirty()
                        },
                        tooltip: !1
                    },
                    trim: {
                        get: function() {
                            return this._isTrimmedMode
                        },
                        set: function(t) {
                            this._isTrimmedMode !== t && (this._isTrimmedMode = t, this._type !== a.SIMPLE && this._type !== a.MESH || this.setVertsDirty())
                        },
                        animatable: !1,
                        tooltip: !1
                    },
                    sizeMode: {
                        get: function() {
                            return this._sizeMode
                        },
                        set: function(t) {
                            this._sizeMode = t, t !== h.CUSTOM && this._applySpriteSize()
                        },
                        animatable: !1,
                        type: h,
                        tooltip: !1
                    }
                },
                statics: {
                    FillType: l,
                    Type: a,
                    SizeMode: h,
                    State: c
                },
                setVisible: function(t) {
                    this.enabled = t
                },
                setState: function() {},
                getState: function() {},
                onEnable: function() {
                    this._super(), this._spriteFrame && this._spriteFrame.textureLoaded() ? this._activateMaterial() : (this.disableRender(), this._spriteFrame && (this._spriteFrame.once("load", this._onTextureLoaded, this), this._spriteFrame.ensureLoadTexture()))
                },
                _on3DNodeChanged: function() {
                    this._resetAssembler()
                },
                _activateMaterialCanvas: function() {
                    this.setVertsDirty(), this.markForUpdateRenderData(!0), this.markForRender(!0)
                },
                _activateMaterialWebgl: function() {
                    var t = this._spriteFrame;
                    if (t && t.textureLoaded()) {
                        var e = this.sharedMaterials[0];
                        (e = e ? o.getInstantiatedMaterial(e, this) : o.getInstantiatedBuiltinMaterial("2d-sprite", this)).setProperty("texture", t.getTexture()), this.setVertsDirty(), this.setMaterial(0, e), this.markForRender(!0)
                    } else this.disableRender()
                },
                _applyAtlas: !1,
                _canRender: function() {
                    if (cc.game.renderType === cc.game.RENDER_TYPE_CANVAS) {
                        if (!this._enabled) return !1
                    } else if (!this._enabled || !this.sharedMaterials[0] || !this.node._activeInHierarchy) return !1;
                    var t = this._spriteFrame;
                    return !(!t || !t.textureLoaded())
                },
                _applySpriteSize: function() {
                    if (this._spriteFrame) {
                        if (h.RAW === this._sizeMode) {
                            var t = this._spriteFrame._originalSize;
                            this.node.setContentSize(t)
                        } else if (h.TRIMMED === this._sizeMode) {
                            var e = this._spriteFrame._rect;
                            this.node.setContentSize(e.width, e.height)
                        }
                        this.setVertsDirty(), this._activateMaterial()
                    }
                },
                _onTextureLoaded: function() {
                    this.isValid && this._applySpriteSize()
                },
                _applySpriteFrame: function(t) {
                    t && !t.textureLoaded() && t.off("load", this._onTextureLoaded, this);
                    var e = this._spriteFrame;
                    e ? e.textureLoaded() ? this._applySpriteSize() : (this.markForRender(!1), e.once("load", this._onTextureLoaded, this), e.ensureLoadTexture()) : this.markForRender(!1)
                },
                _resized: !1
            });
        cc.Sprite = e.exports = u
    }), {
        "../CCNode": 52,
        "../assets/material/CCMaterial": 75,
        "../renderer/render-flow": 248,
        "../utils/blend-func": 293,
        "../utils/misc": 300,
        "./CCRenderComponent": 106
    }],
    112: [(function(t, e, i) {
        "use strict";
        var n = cc.Enum({
                NONE: 0,
                CHECKBOX: 1,
                TEXT_ATLAS: 2,
                SLIDER_BAR: 3,
                LIST_VIEW: 4,
                PAGE_VIEW: 5
            }),
            r = cc.Enum({
                VERTICAL: 0,
                HORIZONTAL: 1
            }),
            s = cc.Enum({
                TOP: 0,
                CENTER: 1,
                BOTTOM: 2
            }),
            o = cc.Enum({
                LEFT: 0,
                CENTER: 1,
                RIGHT: 2
            }),
            a = cc.Class({
                name: "cc.StudioComponent",
                extends: cc.Component,
                editor: !1,
                properties: !1,
                statics: {
                    ComponentType: n,
                    ListDirection: r,
                    VerticalAlign: s,
                    HorizontalAlign: o
                }
            }),
            l = t("../utils/prefab-helper");
        a.PlaceHolder = cc.Class({
            name: "cc.StudioComponent.PlaceHolder",
            extends: cc.Component,
            properties: {
                _baseUrl: "",
                nestedPrefab: cc.Prefab
            },
            onLoad: function() {
                this.nestedPrefab && this._replaceWithNestedPrefab()
            },
            _replaceWithNestedPrefab: function() {
                var t = this.node,
                    e = t._prefab;
                e.root = t, e.asset = this.nestedPrefab, l.syncWithPrefab(t)
            }
        }), cc.StudioComponent = e.exports = a;
        var h = cc.Class({
            name: "cc.StudioWidget",
            extends: cc.Widget,
            editor: !1,
            _validateTargetInDEV: function() {}
        });
        cc.StudioWidget = e.exports = h
    }), {
        "../utils/prefab-helper": 303
    }],
    113: [(function(t, e, i) {
        "use strict";
        var n = t("../utils/gray-sprite-state"),
            r = cc.Class({
                name: "cc.Toggle",
                extends: t("./CCButton"),
                mixins: [n],
                editor: !1,
                properties: {
                    _N$isChecked: !0,
                    isChecked: {
                        get: function() {
                            return this._N$isChecked
                        },
                        set: function(t) {
                            if (t !== this._N$isChecked) {
                                var e = this.toggleGroup || this._toggleContainer;
                                e && e.enabled && this._N$isChecked && !e.allowSwitchOff || (this._N$isChecked = t, this._updateCheckMark(), e && e.enabled && e.updateToggles(this), this._emitToggleEvents())
                            }
                        },
                        tooltip: !1
                    },
                    toggleGroup: {
                        default: null,
                        tooltip: !1,
                        type: t("./CCToggleGroup")
                    },
                    checkMark: {
                        default: null,
                        type: cc.Sprite,
                        tooltip: !1
                    },
                    checkEvents: {
                        default: [],
                        type: cc.Component.EventHandler
                    },
                    _resizeToTarget: {
                        animatable: !1,
                        set: function(t) {
                            t && this._resizeNodeToTargetNode()
                        }
                    }
                },
                onEnable: function() {
                    this._super(), this._registerToggleEvent(), this.toggleGroup && this.toggleGroup.enabledInHierarchy && this.toggleGroup.addToggle(this)
                },
                onDisable: function() {
                    this._super(), this._unregisterToggleEvent(), this.toggleGroup && this.toggleGroup.enabledInHierarchy && this.toggleGroup.removeToggle(this)
                },
                _hideCheckMark: function() {
                    this._N$isChecked = !1, this._updateCheckMark()
                },
                toggle: function(t) {
                    this.isChecked = !this.isChecked
                },
                check: function() {
                    this.isChecked = !0
                },
                uncheck: function() {
                    this.isChecked = !1
                },
                _updateCheckMark: function() {
                    this.checkMark && (this.checkMark.node.active = !!this.isChecked)
                },
                _updateDisabledState: function() {
                    if (this._super(), this.enableAutoGrayEffect && this.checkMark) {
                        var t = !this.interactable;
                        this._switchGrayMaterial(t, this.checkMark)
                    }
                },
                _registerToggleEvent: function() {
                    this.node.on("click", this.toggle, this)
                },
                _unregisterToggleEvent: function() {
                    this.node.off("click", this.toggle, this)
                },
                _emitToggleEvents: function() {
                    this.node.emit("toggle", this), this.checkEvents && cc.Component.EventHandler.emitEvents(this.checkEvents, this)
                }
            });
        cc.Toggle = e.exports = r, t("../platform/js").get(r.prototype, "_toggleContainer", (function() {
            var t = this.node.parent;
            return cc.Node.isNode(t) ? t.getComponent(cc.ToggleContainer) : null
        }))
    }), {
        "../platform/js": 218,
        "../utils/gray-sprite-state": 296,
        "./CCButton": 93,
        "./CCToggleGroup": 115
    }],
    114: [(function(t, e, i) {
        "use strict";
        var n = cc.Class({
            name: "cc.ToggleContainer",
            extends: cc.Component,
            editor: !1,
            properties: {
                allowSwitchOff: {
                    tooltip: !1,
                    default: !1
                },
                checkEvents: {
                    default: [],
                    type: cc.Component.EventHandler
                }
            },
            updateToggles: function(t) {
                this.enabledInHierarchy && t.isChecked && (this.toggleItems.forEach((function(e) {
                    e !== t && e.isChecked && e.enabled && e._hideCheckMark()
                })), this.checkEvents && cc.Component.EventHandler.emitEvents(this.checkEvents, t))
            },
            _allowOnlyOneToggleChecked: function() {
                var t = !1;
                return this.toggleItems.forEach((function(e) {
                    t ? e._hideCheckMark() : e.isChecked && (t = !0)
                })), t
            },
            _makeAtLeastOneToggleChecked: function() {
                if (!this._allowOnlyOneToggleChecked() && !this.allowSwitchOff) {
                    var t = this.toggleItems;
                    t.length > 0 && t[0].check()
                }
            },
            onEnable: function() {
                this.node.on("child-added", this._allowOnlyOneToggleChecked, this), this.node.on("child-removed", this._makeAtLeastOneToggleChecked, this)
            },
            onDisable: function() {
                this.node.off("child-added", this._allowOnlyOneToggleChecked, this), this.node.off("child-removed", this._makeAtLeastOneToggleChecked, this)
            },
            start: function() {
                this._makeAtLeastOneToggleChecked()
            }
        });
        t("../platform/js").get(n.prototype, "toggleItems", (function() {
            return this.node.getComponentsInChildren(cc.Toggle)
        })), cc.ToggleContainer = e.exports = n
    }), {
        "../platform/js": 218
    }],
    115: [(function(t, e, i) {
        "use strict";
        var n = cc.Class({
                name: "cc.ToggleGroup",
                extends: cc.Component,
                ctor: function() {
                    this._toggleItems = []
                },
                editor: !1,
                properties: {
                    allowSwitchOff: {
                        tooltip: !1,
                        default: !1
                    },
                    toggleItems: {
                        get: function() {
                            return this._toggleItems
                        }
                    }
                },
                updateToggles: function(t) {
                    this.enabledInHierarchy && this._toggleItems.forEach((function(e) {
                        t.isChecked && e !== t && e.isChecked && e.enabled && e._hideCheckMark()
                    }))
                },
                addToggle: function(t) {
                    -1 === this._toggleItems.indexOf(t) && this._toggleItems.push(t), this._allowOnlyOneToggleChecked()
                },
                removeToggle: function(t) {
                    var e = this._toggleItems.indexOf(t);
                    e > -1 && this._toggleItems.splice(e, 1), this._makeAtLeastOneToggleChecked()
                },
                _allowOnlyOneToggleChecked: function() {
                    var t = !1;
                    return this._toggleItems.forEach((function(e) {
                        t && e.enabled && e._hideCheckMark(), e.isChecked && e.enabled && (t = !0)
                    })), t
                },
                _makeAtLeastOneToggleChecked: function() {
                    this._allowOnlyOneToggleChecked() || this.allowSwitchOff || this._toggleItems.length > 0 && (this._toggleItems[0].isChecked = !0)
                },
                start: function() {
                    this._makeAtLeastOneToggleChecked()
                }
            }),
            r = !1;
        t("../platform/js").get(cc, "ToggleGroup", (function() {
            return r || (cc.logID(1405, "cc.ToggleGroup", "cc.ToggleContainer"), r = !0), n
        })), e.exports = n
    }), {
        "../platform/js": 218
    }],
    116: [(function(t, e, i) {
        "use strict";
        var n = cc.Class({
            name: "cc.ViewGroup",
            extends: t("./CCComponent")
        });
        cc.ViewGroup = e.exports = n
    }), {
        "./CCComponent": 95
    }],
    117: [(function(t, e, i) {
        "use strict";
        var n = t("../base-ui/CCWidgetManager"),
            r = n.AlignMode,
            s = n._AlignFlags,
            o = s.TOP,
            a = s.MID,
            l = s.BOT,
            h = s.LEFT,
            c = s.CENTER,
            u = s.RIGHT,
            _ = o | l,
            f = h | u,
            d = cc.Class({
                name: "cc.Widget",
                extends: t("./CCComponent"),
                editor: !1,
                properties: {
                    target: {
                        get: function() {
                            return this._target
                        },
                        set: function(t) {
                            this._target = t
                        },
                        type: cc.Node,
                        tooltip: !1
                    },
                    isAlignTop: {
                        get: function() {
                            return (this._alignFlags & o) > 0
                        },
                        set: function(t) {
                            this._setAlign(o, t)
                        },
                        animatable: !1,
                        tooltip: !1
                    },
                    isAlignVerticalCenter: {
                        get: function() {
                            return (this._alignFlags & a) > 0
                        },
                        set: function(t) {
                            t ? (this.isAlignTop = !1, this.isAlignBottom = !1, this._alignFlags |= a) : this._alignFlags &= ~a
                        },
                        animatable: !1,
                        tooltip: !1
                    },
                    isAlignBottom: {
                        get: function() {
                            return (this._alignFlags & l) > 0
                        },
                        set: function(t) {
                            this._setAlign(l, t)
                        },
                        animatable: !1,
                        tooltip: !1
                    },
                    isAlignLeft: {
                        get: function() {
                            return (this._alignFlags & h) > 0
                        },
                        set: function(t) {
                            this._setAlign(h, t)
                        },
                        animatable: !1,
                        tooltip: !1
                    },
                    isAlignHorizontalCenter: {
                        get: function() {
                            return (this._alignFlags & c) > 0
                        },
                        set: function(t) {
                            t ? (this.isAlignLeft = !1, this.isAlignRight = !1, this._alignFlags |= c) : this._alignFlags &= ~c
                        },
                        animatable: !1,
                        tooltip: !1
                    },
                    isAlignRight: {
                        get: function() {
                            return (this._alignFlags & u) > 0
                        },
                        set: function(t) {
                            this._setAlign(u, t)
                        },
                        animatable: !1,
                        tooltip: !1
                    },
                    isStretchWidth: {
                        get: function() {
                            return (this._alignFlags & f) === f
                        },
                        visible: !1
                    },
                    isStretchHeight: {
                        get: function() {
                            return (this._alignFlags & _) === _
                        },
                        visible: !1
                    },
                    top: {
                        get: function() {
                            return this._top
                        },
                        set: function(t) {
                            this._top = t
                        },
                        tooltip: !1
                    },
                    bottom: {
                        get: function() {
                            return this._bottom
                        },
                        set: function(t) {
                            this._bottom = t
                        },
                        tooltip: !1
                    },
                    left: {
                        get: function() {
                            return this._left
                        },
                        set: function(t) {
                            this._left = t
                        },
                        tooltip: !1
                    },
                    right: {
                        get: function() {
                            return this._right
                        },
                        set: function(t) {
                            this._right = t
                        },
                        tooltip: !1
                    },
                    horizontalCenter: {
                        get: function() {
                            return this._horizontalCenter
                        },
                        set: function(t) {
                            this._horizontalCenter = t
                        },
                        tooltip: !1
                    },
                    verticalCenter: {
                        get: function() {
                            return this._verticalCenter
                        },
                        set: function(t) {
                            this._verticalCenter = t
                        },
                        tooltip: !1
                    },
                    isAbsoluteHorizontalCenter: {
                        get: function() {
                            return this._isAbsHorizontalCenter
                        },
                        set: function(t) {
                            this._isAbsHorizontalCenter = t
                        },
                        animatable: !1
                    },
                    isAbsoluteVerticalCenter: {
                        get: function() {
                            return this._isAbsVerticalCenter
                        },
                        set: function(t) {
                            this._isAbsVerticalCenter = t
                        },
                        animatable: !1
                    },
                    isAbsoluteTop: {
                        get: function() {
                            return this._isAbsTop
                        },
                        set: function(t) {
                            this._isAbsTop = t
                        },
                        animatable: !1
                    },
                    isAbsoluteBottom: {
                        get: function() {
                            return this._isAbsBottom
                        },
                        set: function(t) {
                            this._isAbsBottom = t
                        },
                        animatable: !1
                    },
                    isAbsoluteLeft: {
                        get: function() {
                            return this._isAbsLeft
                        },
                        set: function(t) {
                            this._isAbsLeft = t
                        },
                        animatable: !1
                    },
                    isAbsoluteRight: {
                        get: function() {
                            return this._isAbsRight
                        },
                        set: function(t) {
                            this._isAbsRight = t
                        },
                        animatable: !1
                    },
                    alignMode: {
                        default: r.ON_WINDOW_RESIZE,
                        type: r,
                        tooltip: !1
                    },
                    _wasAlignOnce: {
                        default: void 0,
                        formerlySerializedAs: "isAlignOnce"
                    },
                    _target: null,
                    _alignFlags: 0,
                    _left: 0,
                    _right: 0,
                    _top: 0,
                    _bottom: 0,
                    _verticalCenter: 0,
                    _horizontalCenter: 0,
                    _isAbsLeft: !0,
                    _isAbsRight: !0,
                    _isAbsTop: !0,
                    _isAbsBottom: !0,
                    _isAbsHorizontalCenter: !0,
                    _isAbsVerticalCenter: !0,
                    _originalWidth: 0,
                    _originalHeight: 0
                },
                statics: {
                    AlignMode: r
                },
                onLoad: function() {
                    void 0 !== this._wasAlignOnce && (this.alignMode = this._wasAlignOnce ? r.ONCE : r.ALWAYS, this._wasAlignOnce = void 0)
                },
                onEnable: function() {
                    n.add(this)
                },
                onDisable: function() {
                    n.remove(this)
                },
                _validateTargetInDEV: !1,
                _setAlign: function(t, e) {
                    if (e !== (this._alignFlags & t) > 0) {
                        var i = (t & f) > 0;
                        e ? (this._alignFlags |= t, i ? (this.isAlignHorizontalCenter = !1, this.isStretchWidth && (this._originalWidth = this.node.width)) : (this.isAlignVerticalCenter = !1, this.isStretchHeight && (this._originalHeight = this.node.height))) : (i ? this.isStretchWidth && (this.node.width = this._originalWidth) : this.isStretchHeight && (this.node.height = this._originalHeight), this._alignFlags &= ~t)
                    }
                },
                updateAlignment: function() {
                    n.updateAlignment(this.node)
                }
            });
        Object.defineProperty(d.prototype, "isAlignOnce", {
            get: function() {
                return this.alignMode === r.ONCE
            },
            set: function(t) {
                this.alignMode = t ? r.ONCE : r.ALWAYS
            }
        }), cc.Widget = e.exports = d
    }), {
        "../base-ui/CCWidgetManager": 79,
        "./CCComponent": 95
    }],
    118: [(function(t, e, i) {
        "use strict";
        var n = t("../../platform/CCMacro"),
            r = t("../editbox/EditBoxImplBase"),
            s = t("../CCLabel"),
            o = t("./types"),
            a = o.InputMode,
            l = o.InputFlag,
            h = o.KeyboardReturnType;

        function c(t) {
            return t.replace(/(?:^|\s)\S/g, (function(t) {
                return t.toUpperCase()
            }))
        }

        function u(t) {
            return t.charAt(0).toUpperCase() + t.slice(1)
        }
        var _ = cc.Class({
            name: "cc.EditBox",
            extends: cc.Component,
            editor: !1,
            properties: {
                _useOriginalSize: !0,
                _string: "",
                string: {
                    tooltip: !1,
                    get: function() {
                        return this._string
                    },
                    set: function(t) {
                        t = "" + t, this.maxLength >= 0 && t.length >= this.maxLength && (t = t.slice(0, this.maxLength)), this._string = t, this._updateString(t)
                    }
                },
                textLabel: {
                    tooltip: !1,
                    default: null,
                    type: s,
                    notify: function(t) {
                        this.textLabel && this.textLabel !== t && (this._updateTextLabel(), this._updateLabels())
                    }
                },
                placeholderLabel: {
                    tooltip: !1,
                    default: null,
                    type: s,
                    notify: function(t) {
                        this.placeholderLabel && this.placeholderLabel !== t && (this._updatePlaceholderLabel(), this._updateLabels())
                    }
                },
                background: {
                    tooltip: !1,
                    default: null,
                    type: cc.Sprite,
                    notify: function(t) {
                        this.background && this.background !== t && this._updateBackgroundSprite()
                    }
                },
                _N$backgroundImage: {
                    default: void 0,
                    type: cc.SpriteFrame
                },
                backgroundImage: {
                    get: function() {
                        return this.background ? this.background.spriteFrame : null
                    },
                    set: function(t) {
                        this.background && (this.background.spriteFrame = t)
                    }
                },
                returnType: {
                    default: h.DEFAULT,
                    tooltip: !1,
                    displayName: "KeyboardReturnType",
                    type: h
                },
                _N$returnType: {
                    default: void 0,
                    type: cc.Float
                },
                inputFlag: {
                    tooltip: !1,
                    default: l.DEFAULT,
                    type: l,
                    notify: function() {
                        this._updateString(this._string)
                    }
                },
                inputMode: {
                    tooltip: !1,
                    default: a.ANY,
                    type: a,
                    notify: function(t) {
                        this.inputMode !== t && (this._updateTextLabel(), this._updatePlaceholderLabel())
                    }
                },
                fontSize: {
                    get: function() {
                        return this.textLabel ? this.textLabel.fontSize : null
                    },
                    set: function(t) {
                        this.textLabel && (this.textLabel.fontSize = t)
                    }
                },
                _N$fontSize: {
                    default: void 0,
                    type: cc.Float
                },
                lineHeight: {
                    get: function() {
                        return this.textLabel ? this.textLabel.lineHeight : null
                    },
                    set: function(t) {
                        this.textLabel && (this.textLabel.lineHeight = t)
                    }
                },
                _N$lineHeight: {
                    default: void 0,
                    type: cc.Float
                },
                fontColor: {
                    get: function() {
                        return this.textLabel ? this.textLabel.node.color : null
                    },
                    set: function(t) {
                        this.textLabel && (this.textLabel.node.color = t, this.textLabel.node.opacity = t.a)
                    }
                },
                _N$fontColor: void 0,
                placeholder: {
                    tooltip: !1,
                    get: function() {
                        return this.placeholderLabel ? this.placeholderLabel.string : ""
                    },
                    set: function(t) {
                        this.placeholderLabel && (this.placeholderLabel.string = t)
                    }
                },
                _N$placeholder: {
                    default: void 0,
                    type: cc.String
                },
                placeholderFontSize: {
                    get: function() {
                        return this.placeholderLabel ? this.placeholderLabel.fontSize : null
                    },
                    set: function(t) {
                        this.placeholderLabel && (this.placeholderLabel.fontSize = t)
                    }
                },
                _N$placeholderFontSize: {
                    default: void 0,
                    type: cc.Float
                },
                placeholderFontColor: {
                    get: function() {
                        return this.placeholderLabel ? this.placeholderLabel.node.color : null
                    },
                    set: function(t) {
                        this.placeholderLabel && (this.placeholderLabel.node.color = t, this.placeholderLabel.node.opacity = t.a)
                    }
                },
                _N$placeholderFontColor: void 0,
                maxLength: {
                    tooltip: !1,
                    default: 20
                },
                _N$maxLength: {
                    default: void 0,
                    type: cc.Float
                },
                stayOnTop: {
                    default: !1,
                    notify: function() {
                        cc.warn("editBox.stayOnTop is removed since v2.1.")
                    }
                },
                _tabIndex: 0,
                tabIndex: {
                    tooltip: !1,
                    get: function() {
                        return this._tabIndex
                    },
                    set: function(t) {
                        this._tabIndex !== t && (this._tabIndex = t, this._impl && this._impl.setTabIndex(t))
                    }
                },
                editingDidBegan: {
                    default: [],
                    type: cc.Component.EventHandler
                },
                textChanged: {
                    default: [],
                    type: cc.Component.EventHandler
                },
                editingDidEnded: {
                    default: [],
                    type: cc.Component.EventHandler
                },
                editingReturn: {
                    default: [],
                    type: cc.Component.EventHandler
                }
            },
            statics: {
                _ImplClass: r,
                KeyboardReturnType: h,
                InputFlag: l,
                InputMode: a
            },
            _init: function() {
                this._upgradeComp(), this._isLabelVisible = !0, this.node.on(cc.Node.EventType.SIZE_CHANGED, this._syncSize, this), (this._impl = new _._ImplClass).init(this), this._updateString(this._string), this._syncSize()
            },
            _updateBackgroundSprite: function() {
                var t = this.background;
                if (!t) {
                    var e = this.node.getChildByName("BACKGROUND_SPRITE");
                    e || (e = new cc.Node("BACKGROUND_SPRITE")), (t = e.getComponent(cc.Sprite)) || (t = e.addComponent(cc.Sprite)), e.parent = this.node, this.background = t
                }
                t.type = cc.Sprite.Type.SLICED, void 0 !== this._N$backgroundImage && (t.spriteFrame = this._N$backgroundImage, this._N$backgroundImage = void 0)
            },
            _updateTextLabel: function() {
                var t = this.textLabel;
                if (!t) {
                    var e = this.node.getChildByName("TEXT_LABEL");
                    e || (e = new cc.Node("TEXT_LABEL")), (t = e.getComponent(s)) || (t = e.addComponent(s)), e.parent = this.node, this.textLabel = t
                }
                t.node.setAnchorPoint(0, 1), t.overflow = s.Overflow.CLAMP, this.inputMode === a.ANY ? (t.verticalAlign = n.VerticalTextAlignment.TOP, t.enableWrapText = !0) : (t.verticalAlign = n.VerticalTextAlignment.CENTER, t.enableWrapText = !1), t.string = this._updateLabelStringStyle(this._string), void 0 !== this._N$fontColor && (t.node.color = this._N$fontColor, t.node.opacity = this._N$fontColor.a, this._N$fontColor = void 0), void 0 !== this._N$fontSize && (t.fontSize = this._N$fontSize, this._N$fontSize = void 0), void 0 !== this._N$lineHeight && (t.lineHeight = this._N$lineHeight, this._N$lineHeight = void 0)
            },
            _updatePlaceholderLabel: function() {
                var t = this.placeholderLabel;
                if (!t) {
                    var e = this.node.getChildByName("PLACEHOLDER_LABEL");
                    e || (e = new cc.Node("PLACEHOLDER_LABEL")), (t = e.getComponent(s)) || (t = e.addComponent(s)), e.parent = this.node, this.placeholderLabel = t
                }
                t.node.setAnchorPoint(0, 1), t.overflow = s.Overflow.CLAMP, this.inputMode === a.ANY ? (t.verticalAlign = n.VerticalTextAlignment.TOP, t.enableWrapText = !0) : (t.verticalAlign = n.VerticalTextAlignment.CENTER, t.enableWrapText = !1), t.string = this.placeholder, void 0 !== this._N$placeholderFontColor && (t.node.color = this._N$placeholderFontColor, t.node.opacity = this._N$placeholderFontColor.a, this._N$placeholderFontColor = void 0), void 0 !== this._N$placeholderFontSize && (t.fontSize = this._N$placeholderFontSize, this._N$placeholderFontSize = void 0)
            },
            _upgradeComp: function() {
                void 0 !== this._N$returnType && (this.returnType = this._N$returnType, this._N$returnType = void 0), void 0 !== this._N$maxLength && (this.maxLength = this._N$maxLength, this._N$maxLength = void 0), void 0 !== this._N$backgroundImage && this._updateBackgroundSprite(), void 0 === this._N$fontColor && void 0 === this._N$fontSize && void 0 === this._N$lineHeight || this._updateTextLabel(), void 0 === this._N$placeholderFontColor && void 0 === this._N$placeholderFontSize || this._updatePlaceholderLabel(), void 0 !== this._N$placeholder && (this.placeholder = this._N$placeholder, this._N$placeholder = void 0)
            },
            _syncSize: function() {
                if (this._impl) {
                    var t = this.node.getContentSize();
                    this._impl.setSize(t.width, t.height)
                }
            },
            _showLabels: function() {
                this._isLabelVisible = !0, this._updateLabels()
            },
            _hideLabels: function() {
                this._isLabelVisible = !1, this.textLabel && (this.textLabel.node.active = !1), this.placeholderLabel && (this.placeholderLabel.node.active = !1)
            },
            _updateLabels: function() {
                if (this._isLabelVisible) {
                    var t = this._string;
                    this.textLabel && (this.textLabel.node.active = "" !== t), this.placeholderLabel && (this.placeholderLabel.node.active = "" === t)
                }
            },
            _updateString: function(t) {
                var e = this.textLabel;
                if (e) {
                    var i = t;
                    i && (i = this._updateLabelStringStyle(i)), e.string = i, this._updateLabels()
                }
            },
            _updateLabelStringStyle: function(t, e) {
                var i = this.inputFlag;
                if (e || i !== l.PASSWORD) i === l.INITIAL_CAPS_ALL_CHARACTERS ? t = t.toUpperCase() : i === l.INITIAL_CAPS_WORD ? t = c(t) : i === l.INITIAL_CAPS_SENTENCE && (t = u(t));
                else {
                    for (var n = "", r = t.length, s = 0; s < r; ++s) n += "\u25cf";
                    t = n
                }
                return t
            },
            editBoxEditingDidBegan: function() {
                cc.Component.EventHandler.emitEvents(this.editingDidBegan, this), this.node.emit("editing-did-began", this)
            },
            editBoxEditingDidEnded: function() {
                cc.Component.EventHandler.emitEvents(this.editingDidEnded, this), this.node.emit("editing-did-ended", this)
            },
            editBoxTextChanged: function(t) {
                t = this._updateLabelStringStyle(t, !0), this.string = t, cc.Component.EventHandler.emitEvents(this.textChanged, t, this), this.node.emit("text-changed", this)
            },
            editBoxEditingReturn: function() {
                cc.Component.EventHandler.emitEvents(this.editingReturn, this), this.node.emit("editing-return", this)
            },
            onEnable: function() {
                this._registerEvent(), this._impl && this._impl.enable()
            },
            onDisable: function() {
                this._unregisterEvent(), this._impl && this._impl.disable()
            },
            onDestroy: function() {
                this._impl && this._impl.clear()
            },
            __preload: function() {
                this._init()
            },
            _registerEvent: function() {
                this.node.on(cc.Node.EventType.TOUCH_START, this._onTouchBegan, this), this.node.on(cc.Node.EventType.TOUCH_END, this._onTouchEnded, this)
            },
            _unregisterEvent: function() {
                this.node.off(cc.Node.EventType.TOUCH_START, this._onTouchBegan, this), this.node.off(cc.Node.EventType.TOUCH_END, this._onTouchEnded, this)
            },
            _onTouchBegan: function(t) {
                t.stopPropagation()
            },
            _onTouchCancel: function(t) {
                t.stopPropagation()
            },
            _onTouchEnded: function(t) {
                this._impl && this._impl.beginEditing(), t.stopPropagation()
            },
            setFocus: function() {
                cc.warnID(1400, "setFocus()", "focus()"), this._impl && this._impl.setFocus(!0)
            },
            focus: function() {
                this._impl && this._impl.setFocus(!0)
            },
            blur: function() {
                this._impl && this._impl.setFocus(!1)
            },
            isFocused: function() {
                return !!this._impl && this._impl.isFocused()
            },
            update: function() {
                this._impl && this._impl.update()
            }
        });
        cc.EditBox = e.exports = _, cc.sys.isBrowser && t("./WebEditBoxImpl")
    }), {
        "../../platform/CCMacro": 203,
        "../CCLabel": 97,
        "../editbox/EditBoxImplBase": 119,
        "./WebEditBoxImpl": 120,
        "./types": 122
    }],
    119: [(function(t, e, i) {
        "use strict";
        var n = cc.Class({
            ctor: function() {
                this._delegate = null, this._editing = !1
            },
            init: function(t) {},
            enable: function() {},
            disable: function() {
                this._editing && this.endEditing()
            },
            clear: function() {},
            update: function() {},
            setTabIndex: function(t) {},
            setSize: function(t, e) {},
            setFocus: function(t) {
                t ? this.beginEditing() : this.endEditing()
            },
            isFocused: function() {
                return this._editing
            },
            beginEditing: function() {},
            endEditing: function() {}
        });
        e.exports = n
    }), {}],
    120: [(function(t, e, i) {
        "use strict";
        var n = t("../../platform/utils"),
            r = t("../../platform/CCMacro"),
            s = t("./types"),
            o = t("../CCLabel"),
            a = t("./tabIndexUtil"),
            l = cc.EditBox,
            h = cc.js,
            c = s.InputMode,
            u = s.InputFlag,
            _ = s.KeyboardReturnType,
            f = cc.vmath,
            d = {
                zoomInvalid: !1
            };
        cc.sys.OS_ANDROID !== cc.sys.os || cc.sys.browserType !== cc.sys.BROWSER_TYPE_SOUGOU && cc.sys.browserType !== cc.sys.BROWSER_TYPE_360 || (d.zoomInvalid = !0);
        var p = 0,
            m = cc.v3(),
            y = null,
            v = !1,
            g = !1,
            x = l._ImplClass;

        function b() {
            x.call(this), this._domId = "EditBoxId_" + ++p, this._placeholderStyleSheet = null, this._elem = null, this._isTextArea = !1, this._worldMat = f.mat4.create(), this._cameraMat = f.mat4.create(), this._m00 = 0, this._m01 = 0, this._m04 = 0, this._m05 = 0, this._m12 = 0, this._m13 = 0, this._w = 0, this._h = 0, this._inputMode = null, this._inputFlag = null, this._returnType = null, this._eventListeners = {}, this._textLabelFont = null, this._textLabelFontSize = null, this._textLabelFontColor = null, this._textLabelAlign = null, this._placeholderLabelFont = null, this._placeholderLabelFontSize = null, this._placeholderLabelFontColor = null, this._placeholderLabelAlign = null, this._placeholderLineHeight = null
        }
        h.extend(b, x), l._ImplClass = b, Object.assign(b.prototype, {
            init: function(t) {
                t && (this._delegate = t, t.inputMode === c.ANY ? this._createTextArea() : this._createInput(), a.add(this), this.setTabIndex(t.tabIndex), this._initStyleSheet(), this._registerEventListeners(), this._addDomToGameContainer(), v = cc.view.isAutoFullScreenEnabled(), g = cc.view._resizeWithBrowserSize)
            },
            clear: function() {
                this._removeEventListeners(), this._removeDomFromGameContainer(), a.remove(this), y === this && (y = null)
            },
            update: function() {
                this._updateMatrix()
            },
            setTabIndex: function(t) {
                this._elem.tabIndex = t, a.resort()
            },
            setSize: function(t, e) {
                var i = this._elem;
                i.style.width = t + "px", i.style.height = e + "px"
            },
            beginEditing: function() {
                y && y !== this && y.setFocus(!1), this._editing = !0, y = this, this._delegate.editBoxEditingDidBegan(), this._showDom(), this._elem.focus()
            },
            endEditing: function() {
                this._elem && this._elem.blur()
            },
            _createInput: function() {
                this._isTextArea = !1, this._elem = document.createElement("input")
            },
            _createTextArea: function() {
                this._isTextArea = !0, this._elem = document.createElement("textarea")
            },
            _addDomToGameContainer: function() {
                cc.game.container.appendChild(this._elem), document.head.appendChild(this._placeholderStyleSheet)
            },
            _removeDomFromGameContainer: function() {
                n.contains(cc.game.container, this._elem) && cc.game.container.removeChild(this._elem), n.contains(document.head, this._placeholderStyleSheet) && document.head.removeChild(this._placeholderStyleSheet), delete this._elem, delete this._placeholderStyleSheet
            },
            _showDom: function() {
                this._updateMaxLength(), this._updateInputType(), this._updateStyleSheet(), this._elem.style.display = "", this._delegate._hideLabels(), cc.sys.isMobile && this._showDomOnMobile()
            },
            _hideDom: function() {
                this._elem.style.display = "none", this._delegate._showLabels(), cc.sys.isMobile && this._hideDomOnMobile()
            },
            _showDomOnMobile: function() {
                cc.sys.os === cc.sys.OS_ANDROID && (v && (cc.view.enableAutoFullScreen(!1), cc.screen.exitFullScreen()), g && cc.view.resizeWithBrowserSize(!1), this._adjustWindowScroll())
            },
            _hideDomOnMobile: function() {
                cc.sys.os === cc.sys.OS_ANDROID && setTimeout((function() {
                    y || (v && cc.view.enableAutoFullScreen(!0), g && cc.view.resizeWithBrowserSize(!0))
                }), 800), this._scrollBackWindow()
            },
            _adjustWindowScroll: function() {
                var t = this;
                setTimeout((function() {
                    window.scrollY < 100 && t._elem.scrollIntoView({
                        block: "start",
                        inline: "nearest",
                        behavior: "smooth"
                    })
                }), 800)
            },
            _scrollBackWindow: function() {
                setTimeout((function() {
                    var t = cc.sys;
                    t.browserType !== t.BROWSER_TYPE_WECHAT || t.os !== t.OS_IOS ? window.scrollTo(0, 0) : window.top && window.top.scrollTo(0, 0)
                }), 800)
            },
            _updateMatrix: function() {
                var t = this._delegate.node;
                t.getWorldMatrix(this._worldMat);
                var e = this._worldMat,
                    i = e.m;
                if (this._m00 !== i[0] || this._m01 !== i[1] || this._m04 !== i[4] || this._m05 !== i[5] || this._m12 !== i[12] || this._m13 !== i[13] || this._w !== t._contentSize.width || this._h !== t._contentSize.height) {
                    this._m00 = i[0], this._m01 = i[1], this._m04 = i[4], this._m05 = i[5], this._m12 = i[12], this._m13 = i[13], this._w = t._contentSize.width, this._h = t._contentSize.height;
                    var n = cc.view._scaleX,
                        r = cc.view._scaleY,
                        s = cc.view._viewportRect,
                        o = cc.view._devicePixelRatio;
                    m.x = -t._anchorPoint.x * this._w, m.y = -t._anchorPoint.y * this._h, f.mat4.translate(e, e, m);
                    var a = void 0;
                    cc.Camera.findCamera(t).getWorldToScreenMatrix2D(this._cameraMat), a = this._cameraMat, f.mat4.mul(a, a, e), n /= o, r /= o;
                    var l = cc.game.container,
                        h = a.m,
                        c = h[0] * n,
                        u = h[1],
                        _ = h[4],
                        p = h[5] * r,
                        y = l && l.style.paddingLeft && parseInt(l.style.paddingLeft);
                    y += s.x / o;
                    var v = l && l.style.paddingBottom && parseInt(l.style.paddingBottom);
                    v += s.y / o;
                    var g = h[12] * n + y,
                        x = h[13] * r + v;
                    d.zoomInvalid && (this.setSize(t.width * c, t.height * p), c = 1, p = 1);
                    var b = this._elem,
                        A = "matrix(" + c + "," + -u + "," + -_ + "," + p + "," + g + "," + -x + ")";
                    b.style.transform = A, b.style["-webkit-transform"] = A, b.style["transform-origin"] = "0px 100% 0px", b.style["-webkit-transform-origin"] = "0px 100% 0px"
                }
            },
            _updateInputType: function() {
                var t = this._delegate,
                    e = t.inputMode,
                    i = t.inputFlag,
                    n = t.returnType,
                    r = this._elem;
                if (this._inputMode !== e || this._inputFlag !== i || this._returnType !== n) {
                    if (this._inputMode = e, this._inputFlag = i, this._returnType = n, this._isTextArea) {
                        var s = "none";
                        return i === u.INITIAL_CAPS_ALL_CHARACTERS ? s = "uppercase" : i === u.INITIAL_CAPS_WORD && (s = "capitalize"), void(r.style.textTransform = s)
                    }
                    if (i !== u.PASSWORD) {
                        var o = r.type;
                        e === c.EMAIL_ADDR ? o = "email" : e === c.NUMERIC || e === c.DECIMAL ? o = "number" : e === c.PHONE_NUMBER ? (o = "number", r.pattern = "[0-9]*") : e === c.URL ? o = "url" : (o = "text", n === _.SEARCH && (o = "search")), r.type = o;
                        var a = "none";
                        i === u.INITIAL_CAPS_ALL_CHARACTERS ? a = "uppercase" : i === u.INITIAL_CAPS_WORD && (a = "capitalize"), r.style.textTransform = a
                    } else r.type = "password"
                }
            },
            _updateMaxLength: function() {
                var t = this._delegate.maxLength;
                t < 0 && (t = 65535), this._elem.maxLength = t
            },
            _initStyleSheet: function() {
                var t = this._elem;
                t.style.display = "none", t.style.border = 0, t.style.background = "transparent", t.style.width = "100%", t.style.height = "100%", t.style.active = 0, t.style.outline = "medium", t.style.padding = "0", t.style.textTransform = "uppercase", t.style.position = "absolute", t.style.bottom = "0px", t.style.left = "2px", t.className = "cocosEditBox", t.id = this._domId, this._isTextArea ? (t.style.resize = "none", t.style.overflow_y = "scroll") : (t.type = "text", t.style["-moz-appearance"] = "textfield"), this._placeholderStyleSheet = document.createElement("style")
            },
            _updateStyleSheet: function() {
                var t = this._delegate,
                    e = this._elem;
                e.value = t.string, e.placeholder = t.placeholder, this._updateTextLabel(t.textLabel), this._updatePlaceholderLabel(t.placeholderLabel)
            },
            _updateTextLabel: function(t) {
                if (t) {
                    var e = t.font;
                    e = !e || e instanceof cc.BitmapFont ? t.fontFamily : e._fontFamily;
                    var i = t.fontSize * t.node.scaleY;
                    if (this._textLabelFont !== e || this._textLabelFontSize !== i || this._textLabelFontColor !== t.fontColor || this._textLabelAlign !== t.horizontalAlign) {
                        this._textLabelFont = e, this._textLabelFontSize = i, this._textLabelFontColor = t.fontColor, this._textLabelAlign = t.horizontalAlign;
                        var n = this._elem;
                        switch (n.style.fontSize = i + "px", n.style.color = t.node.color.toCSS("rgba"), n.style.fontFamily = e, t.horizontalAlign) {
                            case o.HorizontalAlign.LEFT:
                                n.style.textAlign = "left";
                                break;
                            case o.HorizontalAlign.CENTER:
                                n.style.textAlign = "center";
                                break;
                            case o.HorizontalAlign.RIGHT:
                                n.style.textAlign = "right"
                        }
                    }
                }
            },
            _updatePlaceholderLabel: function(t) {
                if (t) {
                    var e = t.font;
                    e = !e || e instanceof cc.BitmapFont ? t.fontFamily : t.font._fontFamily;
                    var i = t.fontSize * t.node.scaleY;
                    if (this._placeholderLabelFont !== e || this._placeholderLabelFontSize !== i || this._placeholderLabelFontColor !== t.fontColor || this._placeholderLabelAlign !== t.horizontalAlign || this._placeholderLineHeight !== t.fontSize) {
                        this._placeholderLabelFont = e, this._placeholderLabelFontSize = i, this._placeholderLabelFontColor = t.fontColor, this._placeholderLabelAlign = t.horizontalAlign, this._placeholderLineHeight = t.fontSize;
                        var n = this._placeholderStyleSheet,
                            r = t.node.color.toCSS("rgba"),
                            s = t.fontSize,
                            a = void 0;
                        switch (t.horizontalAlign) {
                            case o.HorizontalAlign.LEFT:
                                a = "left";
                                break;
                            case o.HorizontalAlign.CENTER:
                                a = "center";
                                break;
                            case o.HorizontalAlign.RIGHT:
                                a = "right"
                        }
                        n.innerHTML = "#" + this._domId + "::-webkit-input-placeholder,#" + this._domId + "::-moz-placeholder,#" + this._domId + ":-ms-input-placeholder{text-transform: initial; font-family: " + e + "; font-size: " + i + "px; color: " + r + "; line-height: " + s + "px; text-align: " + a + ";}", cc.sys.browserType === cc.sys.BROWSER_TYPE_EDGE && (n.innerHTML += "#" + this._domId + "::-ms-clear{display: none;}")
                    }
                }
            },
            _registerEventListeners: function() {
                var t = this,
                    e = this._elem,
                    i = !1,
                    n = this._eventListeners;
                n.compositionStart = function() {
                    i = !0
                }, n.compositionEnd = function() {
                    i = !1, t._delegate.editBoxTextChanged(e.value)
                }, n.onInput = function() {
                    i || t._delegate.editBoxTextChanged(e.value)
                }, n.onClick = function(e) {
                    t._editing && cc.sys.isMobile && t._adjustWindowScroll()
                }, n.onKeydown = function(i) {
                    i.keyCode === r.KEY.enter ? (i.stopPropagation(), t._delegate.editBoxEditingReturn(), t._isTextArea || e.blur()) : i.keyCode === r.KEY.tab && (i.stopPropagation(), i.preventDefault(), a.next(t))
                }, n.onBlur = function() {
                    t._editing = !1, y = null, t._hideDom(), t._delegate.editBoxEditingDidEnded()
                }, e.addEventListener("compositionstart", n.compositionStart), e.addEventListener("compositionend", n.compositionEnd), e.addEventListener("input", n.onInput), e.addEventListener("keydown", n.onKeydown), e.addEventListener("blur", n.onBlur), e.addEventListener("touchstart", n.onClick)
            },
            _removeEventListeners: function() {
                var t = this._elem,
                    e = this._eventListeners;
                t.removeEventListener("compositionstart", e.compositionStart), t.removeEventListener("compositionend", e.compositionEnd), t.removeEventListener("input", e.onInput), t.removeEventListener("keydown", e.onKeydown), t.removeEventListener("blur", e.onBlur), t.removeEventListener("touchstart", e.onClick), e.compositionStart = null, e.compositionEnd = null, e.onInput = null, e.onKeydown = null, e.onBlur = null, e.onClick = null
            }
        })
    }), {
        "../../platform/CCMacro": 203,
        "../../platform/utils": 222,
        "../CCLabel": 97,
        "./tabIndexUtil": 121,
        "./types": 122
    }],
    121: [(function(t, e, i) {
        "use strict";
        e.exports = {
            _tabIndexList: [],
            add: function(t) {
                var e = this._tabIndexList; - 1 === e.indexOf(t) && e.push(t)
            },
            remove: function(t) {
                var e = this._tabIndexList,
                    i = e.indexOf(t); - 1 !== i && e.splice(i, 1)
            },
            resort: function() {
                this._tabIndexList.sort((function(t, e) {
                    return t._delegate._tabIndex - e._delegate._tabIndex
                }))
            },
            next: function(t) {
                var e = this._tabIndexList,
                    i = e.indexOf(t);
                if (t.setFocus(!1), -1 !== i) {
                    var n = e[i + 1];
                    n && n._delegate._tabIndex >= 0 && n.setFocus(!0)
                }
            }
        }
    }), {}],
    122: [(function(t, e, i) {
        "use strict";
        var n = cc.Enum({
                DEFAULT: 0,
                DONE: 1,
                SEND: 2,
                SEARCH: 3,
                GO: 4,
                NEXT: 5
            }),
            r = cc.Enum({
                ANY: 0,
                EMAIL_ADDR: 1,
                NUMERIC: 2,
                PHONE_NUMBER: 3,
                URL: 4,
                DECIMAL: 5,
                SINGLE_LINE: 6
            }),
            s = cc.Enum({
                PASSWORD: 0,
                SENSITIVE: 1,
                INITIAL_CAPS_WORD: 2,
                INITIAL_CAPS_SENTENCE: 3,
                INITIAL_CAPS_ALL_CHARACTERS: 4,
                DEFAULT: 5
            });
        e.exports = {
            KeyboardReturnType: n,
            InputMode: r,
            InputFlag: s
        }
    }), {}],
    123: [(function(t, e, i) {
        "use strict";
        t("./CCComponent"), t("./CCComponentEventHandler"), t("./missing-script");
        var n = t("./WXSubContextView"),
            r = t("./SwanSubContextView");
        n || (n = cc.Class({
            name: "cc.WXSubContextView",
            extends: cc.Component
        })), r || (r = cc.Class({
            name: "cc.SwanSubContextView",
            extends: cc.Component
        }));
        var s = [t("./CCSprite"), t("./CCWidget"), t("./CCCanvas"), t("./CCAudioSource"), t("./CCAnimation"), t("./CCButton"), t("./CCLabel"), t("./CCProgressBar"), t("./CCMask"), t("./CCScrollBar"), t("./CCScrollView"), t("./CCPageViewIndicator"), t("./CCPageView"), t("./CCSlider"), t("./CCLayout"), t("./editbox/CCEditBox"), t("./CCLabelOutline"), t("./CCLabelShadow"), t("./CCRichText"), t("./CCToggleContainer"), t("./CCToggleGroup"), t("./CCToggle"), t("./CCBlockInputEvents"), t("./CCMotionStreak"), n, r];
        e.exports = s
    }), {
        "./CCAnimation": 90,
        "./CCAudioSource": 91,
        "./CCBlockInputEvents": 92,
        "./CCButton": 93,
        "./CCCanvas": 94,
        "./CCComponent": 95,
        "./CCComponentEventHandler": 96,
        "./CCLabel": 97,
        "./CCLabelOutline": 98,
        "./CCLabelShadow": 99,
        "./CCLayout": 100,
        "./CCMask": 101,
        "./CCMotionStreak": 102,
        "./CCPageView": 103,
        "./CCPageViewIndicator": 104,
        "./CCProgressBar": 105,
        "./CCRichText": 107,
        "./CCScrollBar": 108,
        "./CCScrollView": 109,
        "./CCSlider": 110,
        "./CCSprite": 111,
        "./CCToggle": 113,
        "./CCToggleContainer": 114,
        "./CCToggleGroup": 115,
        "./CCWidget": 117,
        "./SwanSubContextView": void 0,
        "./WXSubContextView": void 0,
        "./editbox/CCEditBox": 118,
        "./missing-script": 124
    }],
    124: [(function(t, e, i) {
        "use strict";
        var n = cc.js,
            r = t("../utils/misc").BUILTIN_CLASSID_RE,
            s = cc.Class({
                name: "cc.MissingClass",
                properties: {
                    _$erialized: {
                        default: null,
                        visible: !1,
                        editorOnly: !0
                    }
                }
            }),
            o = cc.Class({
                name: "cc.MissingScript",
                extends: cc.Component,
                editor: {
                    inspector: "packages://inspector/inspectors/comps/missing-script.js"
                },
                properties: {
                    compiled: {
                        default: !1,
                        serializable: !1
                    },
                    _$erialized: {
                        default: null,
                        visible: !1,
                        editorOnly: !0
                    }
                },
                ctor: !1,
                statics: {
                    safeFindClass: function(t, e) {
                        var i = n._getClassById(t);
                        return i || (t ? (cc.deserialize.reportMissingClass(t), o.getMissingWrapper(t, e)) : null)
                    },
                    getMissingWrapper: function(t, e) {
                        return e.node && (/^[0-9a-zA-Z+/]{23}$/.test(t) || r.test(t)) ? o : s
                    }
                },
                onLoad: function() {
                    cc.warnID(4600, this.node.name)
                }
            });
        cc._MissingScript = e.exports = o
    }), {
        "../utils/misc": 300
    }],
    125: [(function(t, e, i) {
        "use strict";
        var n = cc.js;
        t("../event/event");
        var r = function(t, e) {
            cc.Event.call(this, cc.Event.MOUSE, e), this._eventType = t, this._button = 0, this._x = 0, this._y = 0, this._prevX = 0, this._prevY = 0, this._scrollX = 0, this._scrollY = 0
        };
        n.extend(r, cc.Event);
        var s = r.prototype;
        s.setScrollData = function(t, e) {
            this._scrollX = t, this._scrollY = e
        }, s.getScrollX = function() {
            return this._scrollX
        }, s.getScrollY = function() {
            return this._scrollY
        }, s.setLocation = function(t, e) {
            this._x = t, this._y = e
        }, s.getLocation = function() {
            return cc.v2(this._x, this._y)
        }, s.getLocationInView = function() {
            return cc.v2(this._x, cc.view._designResolutionSize.height - this._y)
        }, s._setPrevCursor = function(t, e) {
            this._prevX = t, this._prevY = e
        }, s.getPreviousLocation = function() {
            return cc.v2(this._prevX, this._prevY)
        }, s.getDelta = function() {
            return cc.v2(this._x - this._prevX, this._y - this._prevY)
        }, s.getDeltaX = function() {
            return this._x - this._prevX
        }, s.getDeltaY = function() {
            return this._y - this._prevY
        }, s.setButton = function(t) {
            this._button = t
        }, s.getButton = function() {
            return this._button
        }, s.getLocationX = function() {
            return this._x
        }, s.getLocationY = function() {
            return this._y
        }, r.NONE = 0, r.DOWN = 1, r.UP = 2, r.MOVE = 3, r.SCROLL = 4, r.BUTTON_LEFT = 0, r.BUTTON_RIGHT = 2, r.BUTTON_MIDDLE = 1, r.BUTTON_4 = 3, r.BUTTON_5 = 4, r.BUTTON_6 = 5, r.BUTTON_7 = 6, r.BUTTON_8 = 7;
        var o = function(t, e) {
            cc.Event.call(this, cc.Event.TOUCH, e), this._eventCode = 0, this._touches = t || [], this.touch = null, this.currentTouch = null
        };
        n.extend(o, cc.Event), (s = o.prototype).getEventCode = function() {
            return this._eventCode
        }, s.getTouches = function() {
            return this._touches
        }, s._setEventCode = function(t) {
            this._eventCode = t
        }, s._setTouches = function(t) {
            this._touches = t
        }, s.setLocation = function(t, e) {
            this.touch && this.touch.setTouchInfo(this.touch.getID(), t, e)
        }, s.getLocation = function() {
            return this.touch ? this.touch.getLocation() : cc.v2()
        }, s.getLocationInView = function() {
            return this.touch ? this.touch.getLocationInView() : cc.v2()
        }, s.getPreviousLocation = function() {
            return this.touch ? this.touch.getPreviousLocation() : cc.v2()
        }, s.getStartLocation = function() {
            return this.touch ? this.touch.getStartLocation() : cc.v2()
        }, s.getID = function() {
            return this.touch ? this.touch.getID() : null
        }, s.getDelta = function() {
            return this.touch ? this.touch.getDelta() : cc.v2()
        }, s.getDeltaX = function() {
            return this.touch ? this.touch.getDelta().x : 0
        }, s.getDeltaY = function() {
            return this.touch ? this.touch.getDelta().y : 0
        }, s.getLocationX = function() {
            return this.touch ? this.touch.getLocationX() : 0
        }, s.getLocationY = function() {
            return this.touch ? this.touch.getLocationY() : 0
        }, o.MAX_TOUCHES = 5, o.BEGAN = 0, o.MOVED = 1, o.ENDED = 2, o.CANCELED = 3;
        var a = function(t, e) {
            cc.Event.call(this, cc.Event.ACCELERATION, e), this.acc = t
        };
        n.extend(a, cc.Event);
        var l = function(t, e, i) {
            cc.Event.call(this, cc.Event.KEYBOARD, i), this.keyCode = t, this.isPressed = e
        };
        n.extend(l, cc.Event), cc.Event.EventMouse = r, cc.Event.EventTouch = o, cc.Event.EventAcceleration = a, cc.Event.EventKeyboard = l, e.exports = cc.Event
    }), {
        "../event/event": 132
    }],
    126: [(function(t, e, i) {
        "use strict";
        var n = t("../platform/js");
        cc.EventListener = function(t, e, i) {
            this._onEvent = i, this._type = t || 0, this._listenerID = e || "", this._registered = !1, this._fixedPriority = 0, this._node = null, this._target = null, this._paused = !0, this._isEnabled = !0
        }, cc.EventListener.prototype = {
            constructor: cc.EventListener,
            _setPaused: function(t) {
                this._paused = t
            },
            _isPaused: function() {
                return this._paused
            },
            _setRegistered: function(t) {
                this._registered = t
            },
            _isRegistered: function() {
                return this._registered
            },
            _getType: function() {
                return this._type
            },
            _getListenerID: function() {
                return this._listenerID
            },
            _setFixedPriority: function(t) {
                this._fixedPriority = t
            },
            _getFixedPriority: function() {
                return this._fixedPriority
            },
            _setSceneGraphPriority: function(t) {
                this._target = t, this._node = t
            },
            _getSceneGraphPriority: function() {
                return this._node
            },
            checkAvailable: function() {
                return null !== this._onEvent
            },
            clone: function() {
                return null
            },
            setEnabled: function(t) {
                this._isEnabled = t
            },
            isEnabled: function() {
                return this._isEnabled
            },
            retain: function() {},
            release: function() {}
        }, cc.EventListener.UNKNOWN = 0, cc.EventListener.TOUCH_ONE_BY_ONE = 1, cc.EventListener.TOUCH_ALL_AT_ONCE = 2, cc.EventListener.KEYBOARD = 3, cc.EventListener.MOUSE = 4, cc.EventListener.ACCELERATION = 6, cc.EventListener.CUSTOM = 8;
        var r = cc.EventListener.ListenerID = {
                MOUSE: "__cc_mouse",
                TOUCH_ONE_BY_ONE: "__cc_touch_one_by_one",
                TOUCH_ALL_AT_ONCE: "__cc_touch_all_at_once",
                KEYBOARD: "__cc_keyboard",
                ACCELERATION: "__cc_acceleration"
            },
            s = function(t, e) {
                this._onCustomEvent = e, cc.EventListener.call(this, cc.EventListener.CUSTOM, t, this._callback)
            };
        n.extend(s, cc.EventListener), n.mixin(s.prototype, {
            _onCustomEvent: null,
            _callback: function(t) {
                null !== this._onCustomEvent && this._onCustomEvent(t)
            },
            checkAvailable: function() {
                return cc.EventListener.prototype.checkAvailable.call(this) && null !== this._onCustomEvent
            },
            clone: function() {
                return new s(this._listenerID, this._onCustomEvent)
            }
        });
        var o = function() {
            cc.EventListener.call(this, cc.EventListener.MOUSE, r.MOUSE, this._callback)
        };
        n.extend(o, cc.EventListener), n.mixin(o.prototype, {
            onMouseDown: null,
            onMouseUp: null,
            onMouseMove: null,
            onMouseScroll: null,
            _callback: function(t) {
                var e = cc.Event.EventMouse;
                switch (t._eventType) {
                    case e.DOWN:
                        this.onMouseDown && this.onMouseDown(t);
                        break;
                    case e.UP:
                        this.onMouseUp && this.onMouseUp(t);
                        break;
                    case e.MOVE:
                        this.onMouseMove && this.onMouseMove(t);
                        break;
                    case e.SCROLL:
                        this.onMouseScroll && this.onMouseScroll(t)
                }
            },
            clone: function() {
                var t = new o;
                return t.onMouseDown = this.onMouseDown, t.onMouseUp = this.onMouseUp, t.onMouseMove = this.onMouseMove, t.onMouseScroll = this.onMouseScroll, t
            },
            checkAvailable: function() {
                return !0
            }
        });
        var a = function() {
            cc.EventListener.call(this, cc.EventListener.TOUCH_ONE_BY_ONE, r.TOUCH_ONE_BY_ONE, null), this._claimedTouches = []
        };
        n.extend(a, cc.EventListener), n.mixin(a.prototype, {
            constructor: a,
            _claimedTouches: null,
            swallowTouches: !1,
            onTouchBegan: null,
            onTouchMoved: null,
            onTouchEnded: null,
            onTouchCancelled: null,
            setSwallowTouches: function(t) {
                this.swallowTouches = t
            },
            isSwallowTouches: function() {
                return this.swallowTouches
            },
            clone: function() {
                var t = new a;
                return t.onTouchBegan = this.onTouchBegan, t.onTouchMoved = this.onTouchMoved, t.onTouchEnded = this.onTouchEnded, t.onTouchCancelled = this.onTouchCancelled, t.swallowTouches = this.swallowTouches, t
            },
            checkAvailable: function() {
                return !!this.onTouchBegan || (cc.logID(1801), !1)
            }
        });
        var l = function() {
            cc.EventListener.call(this, cc.EventListener.TOUCH_ALL_AT_ONCE, r.TOUCH_ALL_AT_ONCE, null)
        };
        n.extend(l, cc.EventListener), n.mixin(l.prototype, {
            constructor: l,
            onTouchesBegan: null,
            onTouchesMoved: null,
            onTouchesEnded: null,
            onTouchesCancelled: null,
            clone: function() {
                var t = new l;
                return t.onTouchesBegan = this.onTouchesBegan, t.onTouchesMoved = this.onTouchesMoved, t.onTouchesEnded = this.onTouchesEnded, t.onTouchesCancelled = this.onTouchesCancelled, t
            },
            checkAvailable: function() {
                return null !== this.onTouchesBegan || null !== this.onTouchesMoved || null !== this.onTouchesEnded || null !== this.onTouchesCancelled || (cc.logID(1802), !1)
            }
        });
        var h = function(t) {
            this._onAccelerationEvent = t, cc.EventListener.call(this, cc.EventListener.ACCELERATION, r.ACCELERATION, this._callback)
        };
        n.extend(h, cc.EventListener), n.mixin(h.prototype, {
            constructor: h,
            _onAccelerationEvent: null,
            _callback: function(t) {
                this._onAccelerationEvent(t.acc, t)
            },
            checkAvailable: function() {
                return cc.assertID(this._onAccelerationEvent, 1803), !0
            },
            clone: function() {
                return new h(this._onAccelerationEvent)
            }
        });
        var c = function() {
            cc.EventListener.call(this, cc.EventListener.KEYBOARD, r.KEYBOARD, this._callback)
        };
        n.extend(c, cc.EventListener), n.mixin(c.prototype, {
            constructor: c,
            onKeyPressed: null,
            onKeyReleased: null,
            _callback: function(t) {
                t.isPressed ? this.onKeyPressed && this.onKeyPressed(t.keyCode, t) : this.onKeyReleased && this.onKeyReleased(t.keyCode, t)
            },
            clone: function() {
                var t = new c;
                return t.onKeyPressed = this.onKeyPressed, t.onKeyReleased = this.onKeyReleased, t
            },
            checkAvailable: function() {
                return null !== this.onKeyPressed || null !== this.onKeyReleased || (cc.logID(1800), !1)
            }
        }), cc.EventListener.create = function(t) {
            cc.assertID(t && t.event, 1900);
            var e = t.event;
            delete t.event;
            var i = null;
            for (var n in e === cc.EventListener.TOUCH_ONE_BY_ONE ? i = new a : e === cc.EventListener.TOUCH_ALL_AT_ONCE ? i = new l : e === cc.EventListener.MOUSE ? i = new o : e === cc.EventListener.CUSTOM ? (i = new s(t.eventName, t.callback), delete t.eventName, delete t.callback) : e === cc.EventListener.KEYBOARD ? i = new c : e === cc.EventListener.ACCELERATION && (i = new h(t.callback), delete t.callback), t) i[n] = t[n];
            return i
        }, e.exports = cc.EventListener
    }), {
        "../platform/js": 218
    }],
    127: [(function(t, e, i) {
        "use strict";
        var n = t("../platform/js");
        t("./CCEventListener");
        var r = cc.EventListener.ListenerID,
            s = function() {
                this._fixedListeners = [], this._sceneGraphListeners = [], this.gt0Index = 0
            };
        s.prototype = {
            constructor: s,
            size: function() {
                return this._fixedListeners.length + this._sceneGraphListeners.length
            },
            empty: function() {
                return 0 === this._fixedListeners.length && 0 === this._sceneGraphListeners.length
            },
            push: function(t) {
                0 === t._getFixedPriority() ? this._sceneGraphListeners.push(t) : this._fixedListeners.push(t)
            },
            clearSceneGraphListeners: function() {
                this._sceneGraphListeners.length = 0
            },
            clearFixedListeners: function() {
                this._fixedListeners.length = 0
            },
            clear: function() {
                this._sceneGraphListeners.length = 0, this._fixedListeners.length = 0
            },
            getFixedPriorityListeners: function() {
                return this._fixedListeners
            },
            getSceneGraphPriorityListeners: function() {
                return this._sceneGraphListeners
            }
        };
        var o = function(t) {
                var e = cc.Event,
                    i = t.type;
                return i === e.ACCELERATION ? r.ACCELERATION : i === e.KEYBOARD ? r.KEYBOARD : i.startsWith(e.MOUSE) ? r.MOUSE : (i.startsWith(e.TOUCH) && cc.logID(2e3), "")
            },
            a = {
                DIRTY_NONE: 0,
                DIRTY_FIXED_PRIORITY: 1,
                DIRTY_SCENE_GRAPH_PRIORITY: 2,
                DIRTY_ALL: 3,
                _listenersMap: {},
                _priorityDirtyFlagMap: {},
                _nodeListenersMap: {},
                _toAddedListeners: [],
                _toRemovedListeners: [],
                _dirtyListeners: {},
                _inDispatch: 0,
                _isEnabled: !1,
                _internalCustomListenerIDs: [],
                _setDirtyForNode: function(t) {
                    var e = this._nodeListenersMap[t._id];
                    if (void 0 !== e)
                        for (var i = 0, n = e.length; i < n; i++) {
                            var r = e[i]._getListenerID();
                            null == this._dirtyListeners[r] && (this._dirtyListeners[r] = !0)
                        }
                    if (t.getChildren) {
                        var s = t.getChildren(),
                            o = 0;
                        for (n = s ? s.length : 0; o < n; o++) this._setDirtyForNode(s[o])
                    }
                },
                pauseTarget: function(t, e) {
                    if (t instanceof cc._BaseNode) {
                        var i, n, r = this._nodeListenersMap[t._id];
                        if (r)
                            for (i = 0, n = r.length; i < n; i++) r[i]._setPaused(!0);
                        if (!0 === e) {
                            var s = t.getChildren();
                            for (i = 0, n = s ? s.length : 0; i < n; i++) this.pauseTarget(s[i], !0)
                        }
                    } else cc.warnID(3506)
                },
                resumeTarget: function(t, e) {
                    if (t instanceof cc._BaseNode) {
                        var i, n, r = this._nodeListenersMap[t._id];
                        if (r)
                            for (i = 0, n = r.length; i < n; i++) r[i]._setPaused(!1);
                        if (this._setDirtyForNode(t), !0 === e && t.getChildren) {
                            var s = t.getChildren();
                            for (i = 0, n = s ? s.length : 0; i < n; i++) this.resumeTarget(s[i], !0)
                        }
                    } else cc.warnID(3506)
                },
                _addListener: function(t) {
                    0 === this._inDispatch ? this._forceAddEventListener(t) : this._toAddedListeners.push(t)
                },
                _forceAddEventListener: function(t) {
                    var e = t._getListenerID(),
                        i = this._listenersMap[e];
                    if (i || (i = new s, this._listenersMap[e] = i), i.push(t), 0 === t._getFixedPriority()) {
                        this._setDirty(e, this.DIRTY_SCENE_GRAPH_PRIORITY);
                        var n = t._getSceneGraphPriority();
                        null === n && cc.logID(3507), this._associateNodeAndEventListener(n, t), n.activeInHierarchy && this.resumeTarget(n)
                    } else this._setDirty(e, this.DIRTY_FIXED_PRIORITY)
                },
                _getListeners: function(t) {
                    return this._listenersMap[t]
                },
                _updateDirtyFlagForSceneGraph: function() {
                    var t = this._dirtyListeners;
                    for (var e in t) this._setDirty(e, this.DIRTY_SCENE_GRAPH_PRIORITY);
                    this._dirtyListeners = {}
                },
                _removeAllListenersInVector: function(t) {
                    if (t)
                        for (var e, i = t.length - 1; i >= 0; i--)(e = t[i])._setRegistered(!1), null != e._getSceneGraphPriority() && (this._dissociateNodeAndEventListener(e._getSceneGraphPriority(), e), e._setSceneGraphPriority(null)), 0 === this._inDispatch && cc.js.array.removeAt(t, i)
                },
                _removeListenersForListenerID: function(t) {
                    var e, i = this._listenersMap[t];
                    if (i) {
                        var n = i.getFixedPriorityListeners(),
                            r = i.getSceneGraphPriorityListeners();
                        this._removeAllListenersInVector(r), this._removeAllListenersInVector(n), delete this._priorityDirtyFlagMap[t], this._inDispatch || (i.clear(), delete this._listenersMap[t])
                    }
                    var s, o = this._toAddedListeners;
                    for (e = o.length - 1; e >= 0; e--)(s = o[e]) && s._getListenerID() === t && cc.js.array.removeAt(o, e)
                },
                _sortEventListeners: function(t) {
                    var e = this.DIRTY_NONE,
                        i = this._priorityDirtyFlagMap;
                    (i[t] && (e = i[t]), e !== this.DIRTY_NONE) && (i[t] = this.DIRTY_NONE, e & this.DIRTY_FIXED_PRIORITY && this._sortListenersOfFixedPriority(t), e & this.DIRTY_SCENE_GRAPH_PRIORITY && cc.director.getScene() && this._sortListenersOfSceneGraphPriority(t))
                },
                _sortListenersOfSceneGraphPriority: function(t) {
                    var e = this._getListeners(t);
                    if (e) {
                        var i = e.getSceneGraphPriorityListeners();
                        i && 0 !== i.length && e.getSceneGraphPriorityListeners().sort(this._sortEventListenersOfSceneGraphPriorityDes)
                    }
                },
                _sortEventListenersOfSceneGraphPriorityDes: function(t, e) {
                    var i = t._getSceneGraphPriority(),
                        n = e._getSceneGraphPriority();
                    if (!(e && n && n._activeInHierarchy && null !== n._parent)) return -1;
                    if (!t || !i || !i._activeInHierarchy || null === i._parent) return 1;
                    for (var r = i, s = n, o = !1; r._parent._id !== s._parent._id;) r = null === r._parent._parent ? (o = !0) && n : r._parent, s = null === s._parent._parent ? (o = !0) && i : s._parent;
                    if (r._id === s._id) {
                        if (r._id === n._id) return -1;
                        if (r._id === i._id) return 1
                    }
                    return o ? r._localZOrder - s._localZOrder : s._localZOrder - r._localZOrder
                },
                _sortListenersOfFixedPriority: function(t) {
                    var e = this._listenersMap[t];
                    if (e) {
                        var i = e.getFixedPriorityListeners();
                        if (i && 0 !== i.length) {
                            i.sort(this._sortListenersOfFixedPriorityAsc);
                            for (var n = 0, r = i.length; n < r && !(i[n]._getFixedPriority() >= 0);) ++n;
                            e.gt0Index = n
                        }
                    }
                },
                _sortListenersOfFixedPriorityAsc: function(t, e) {
                    return t._getFixedPriority() - e._getFixedPriority()
                },
                _onUpdateListeners: function(t) {
                    var e, i, n, r = t.getFixedPriorityListeners(),
                        s = t.getSceneGraphPriorityListeners(),
                        o = this._toRemovedListeners;
                    if (s)
                        for (e = s.length - 1; e >= 0; e--)(i = s[e])._isRegistered() || (cc.js.array.removeAt(s, e), -1 !== (n = o.indexOf(i)) && o.splice(n, 1));
                    if (r)
                        for (e = r.length - 1; e >= 0; e--)(i = r[e])._isRegistered() || (cc.js.array.removeAt(r, e), -1 !== (n = o.indexOf(i)) && o.splice(n, 1));
                    s && 0 === s.length && t.clearSceneGraphListeners(), r && 0 === r.length && t.clearFixedListeners()
                },
                frameUpdateListeners: function() {
                    var t = this._listenersMap,
                        e = this._priorityDirtyFlagMap;
                    for (var i in t) t[i].empty() && (delete e[i], delete t[i]);
                    var n = this._toAddedListeners;
                    if (0 !== n.length) {
                        for (var r = 0, s = n.length; r < s; r++) this._forceAddEventListener(n[r]);
                        n.length = 0
                    }
                    0 !== this._toRemovedListeners.length && this._cleanToRemovedListeners()
                },
                _updateTouchListeners: function(t) {
                    var e = this._inDispatch;
                    if (cc.assertID(e > 0, 3508), !(e > 1)) {
                        var i;
                        (i = this._listenersMap[r.TOUCH_ONE_BY_ONE]) && this._onUpdateListeners(i), (i = this._listenersMap[r.TOUCH_ALL_AT_ONCE]) && this._onUpdateListeners(i), cc.assertID(1 === e, 3509);
                        var n = this._toAddedListeners;
                        if (0 !== n.length) {
                            for (var s = 0, o = n.length; s < o; s++) this._forceAddEventListener(n[s]);
                            this._toAddedListeners.length = 0
                        }
                        0 !== this._toRemovedListeners.length && this._cleanToRemovedListeners()
                    }
                },
                _cleanToRemovedListeners: function() {
                    for (var t = this._toRemovedListeners, e = 0; e < t.length; e++) {
                        var i = t[e],
                            n = this._listenersMap[i._getListenerID()];
                        if (n) {
                            var r, s = n.getFixedPriorityListeners(),
                                o = n.getSceneGraphPriorityListeners();
                            o && -1 !== (r = o.indexOf(i)) && o.splice(r, 1), s && -1 !== (r = s.indexOf(i)) && s.splice(r, 1)
                        }
                    }
                    t.length = 0
                },
                _onTouchEventCallback: function(t, e) {
                    if (!t._isRegistered()) return !1;
                    var i = e.event,
                        n = i.currentTouch;
                    i.currentTarget = t._node;
                    var r, s = !1,
                        o = i.getEventCode(),
                        l = cc.Event.EventTouch;
                    return o === l.BEGAN ? t.onTouchBegan && (s = t.onTouchBegan(n, i)) && t._registered && t._claimedTouches.push(n) : t._claimedTouches.length > 0 && -1 !== (r = t._claimedTouches.indexOf(n)) && (s = !0, o === l.MOVED && t.onTouchMoved ? t.onTouchMoved(n, i) : o === l.ENDED ? (t.onTouchEnded && t.onTouchEnded(n, i), t._registered && t._claimedTouches.splice(r, 1)) : o === l.CANCELLED && (t.onTouchCancelled && t.onTouchCancelled(n, i), t._registered && t._claimedTouches.splice(r, 1))), i.isStopped() ? (a._updateTouchListeners(i), !0) : !(!s || !t.swallowTouches) && (e.needsMutableSet && e.touches.splice(n, 1), !0)
                },
                _dispatchTouchEvent: function(t) {
                    this._sortEventListeners(r.TOUCH_ONE_BY_ONE), this._sortEventListeners(r.TOUCH_ALL_AT_ONCE);
                    var e = this._getListeners(r.TOUCH_ONE_BY_ONE),
                        i = this._getListeners(r.TOUCH_ALL_AT_ONCE);
                    if (null !== e || null !== i) {
                        var n = t.getTouches(),
                            s = cc.js.array.copy(n),
                            o = {
                                event: t,
                                needsMutableSet: e && i,
                                touches: s,
                                selTouch: null
                            };
                        if (e)
                            for (var a = 0; a < n.length; a++) t.currentTouch = n[a], t._propagationStopped = t._propagationImmediateStopped = !1, this._dispatchEventToListeners(e, this._onTouchEventCallback, o);
                        i && s.length > 0 && (this._dispatchEventToListeners(i, this._onTouchesEventCallback, {
                            event: t,
                            touches: s
                        }), t.isStopped()) || this._updateTouchListeners(t)
                    }
                },
                _onTouchesEventCallback: function(t, e) {
                    if (!t._registered) return !1;
                    var i = cc.Event.EventTouch,
                        n = e.event,
                        r = e.touches,
                        s = n.getEventCode();
                    return n.currentTarget = t._node, s === i.BEGAN && t.onTouchesBegan ? t.onTouchesBegan(r, n) : s === i.MOVED && t.onTouchesMoved ? t.onTouchesMoved(r, n) : s === i.ENDED && t.onTouchesEnded ? t.onTouchesEnded(r, n) : s === i.CANCELLED && t.onTouchesCancelled && t.onTouchesCancelled(r, n), !!n.isStopped() && (a._updateTouchListeners(n), !0)
                },
                _associateNodeAndEventListener: function(t, e) {
                    var i = this._nodeListenersMap[t._id];
                    i || (i = [], this._nodeListenersMap[t._id] = i), i.push(e)
                },
                _dissociateNodeAndEventListener: function(t, e) {
                    var i = this._nodeListenersMap[t._id];
                    i && (cc.js.array.remove(i, e), 0 === i.length && delete this._nodeListenersMap[t._id])
                },
                _dispatchEventToListeners: function(t, e, i) {
                    var n, r, s = !1,
                        o = t.getFixedPriorityListeners(),
                        a = t.getSceneGraphPriorityListeners(),
                        l = 0;
                    if (o && 0 !== o.length)
                        for (; l < t.gt0Index; ++l)
                            if ((r = o[l]).isEnabled() && !r._isPaused() && r._isRegistered() && e(r, i)) {
                                s = !0;
                                break
                            }
                    if (a && !s)
                        for (n = 0; n < a.length; n++)
                            if ((r = a[n]).isEnabled() && !r._isPaused() && r._isRegistered() && e(r, i)) {
                                s = !0;
                                break
                            }
                    if (o && !s)
                        for (; l < o.length; ++l)
                            if ((r = o[l]).isEnabled() && !r._isPaused() && r._isRegistered() && e(r, i)) {
                                s = !0;
                                break
                            }
                },
                _setDirty: function(t, e) {
                    var i = this._priorityDirtyFlagMap;
                    null == i[t] ? i[t] = e : i[t] = e | i[t]
                },
                _sortNumberAsc: function(t, e) {
                    return t - e
                },
                hasEventListener: function(t) {
                    return !!this._getListeners(t)
                },
                addListener: function(t, e) {
                    if (cc.assertID(t && e, 3503), cc.js.isNumber(e) || e instanceof cc._BaseNode) {
                        if (t instanceof cc.EventListener) {
                            if (t._isRegistered()) return void cc.logID(3505)
                        } else cc.assertID(!cc.js.isNumber(e), 3504), t = cc.EventListener.create(t);
                        if (t.checkAvailable()) {
                            if (cc.js.isNumber(e)) {
                                if (0 === e) return void cc.logID(3500);
                                t._setSceneGraphPriority(null), t._setFixedPriority(e), t._setRegistered(!0), t._setPaused(!1), this._addListener(t)
                            } else t._setSceneGraphPriority(e), t._setFixedPriority(0), t._setRegistered(!0), this._addListener(t);
                            return t
                        }
                    } else cc.warnID(3506)
                },
                addCustomListener: function(t, e) {
                    var i = new cc.EventListener.create({
                        event: cc.EventListener.CUSTOM,
                        eventName: t,
                        callback: e
                    });
                    return this.addListener(i, 1), i
                },
                removeListener: function(t) {
                    if (null != t) {
                        var e, i = this._listenersMap;
                        for (var n in i) {
                            var r = i[n],
                                s = r.getFixedPriorityListeners(),
                                o = r.getSceneGraphPriorityListeners();
                            if ((e = this._removeListenerInVector(o, t)) ? this._setDirty(t._getListenerID(), this.DIRTY_SCENE_GRAPH_PRIORITY) : (e = this._removeListenerInVector(s, t)) && this._setDirty(t._getListenerID(), this.DIRTY_FIXED_PRIORITY), r.empty() && (delete this._priorityDirtyFlagMap[t._getListenerID()], delete i[n]), e) break
                        }
                        if (!e)
                            for (var a = this._toAddedListeners, l = a.length - 1; l >= 0; l--) {
                                var h = a[l];
                                if (h === t) {
                                    cc.js.array.removeAt(a, l), h._setRegistered(!1);
                                    break
                                }
                            }
                    }
                },
                _removeListenerInCallback: function(t, e) {
                    if (null == t) return !1;
                    for (var i = t.length - 1; i >= 0; i--) {
                        var n = t[i];
                        if (n._onCustomEvent === e || n._onEvent === e) return n._setRegistered(!1), null != n._getSceneGraphPriority() && (this._dissociateNodeAndEventListener(n._getSceneGraphPriority(), n), n._setSceneGraphPriority(null)), 0 === this._inDispatch ? cc.js.array.removeAt(t, i) : this._toRemovedListeners.push(n), !0
                    }
                    return !1
                },
                _removeListenerInVector: function(t, e) {
                    if (null == t) return !1;
                    for (var i = t.length - 1; i >= 0; i--) {
                        var n = t[i];
                        if (n === e) return n._setRegistered(!1), null != n._getSceneGraphPriority() && (this._dissociateNodeAndEventListener(n._getSceneGraphPriority(), n), n._setSceneGraphPriority(null)), 0 === this._inDispatch ? cc.js.array.removeAt(t, i) : this._toRemovedListeners.push(n), !0
                    }
                    return !1
                },
                removeListeners: function(t, e) {
                    var i = this;
                    if (cc.js.isNumber(t) || t instanceof cc._BaseNode)
                        if (void 0 !== t._id) {
                            var n, s = i._nodeListenersMap[t._id];
                            if (s) {
                                var o = cc.js.array.copy(s);
                                for (n = 0; n < o.length; n++) i.removeListener(o[n]);
                                delete i._nodeListenersMap[t._id]
                            }
                            var a = i._toAddedListeners;
                            for (n = 0; n < a.length;) {
                                var l = a[n];
                                l._getSceneGraphPriority() === t ? (l._setSceneGraphPriority(null), l._setRegistered(!1), a.splice(n, 1)) : ++n
                            }
                            if (!0 === e) {
                                var h, c = t.getChildren();
                                for (n = 0, h = c.length; n < h; n++) i.removeListeners(c[n], !0)
                            }
                        } else t === cc.EventListener.TOUCH_ONE_BY_ONE ? i._removeListenersForListenerID(r.TOUCH_ONE_BY_ONE) : t === cc.EventListener.TOUCH_ALL_AT_ONCE ? i._removeListenersForListenerID(r.TOUCH_ALL_AT_ONCE) : t === cc.EventListener.MOUSE ? i._removeListenersForListenerID(r.MOUSE) : t === cc.EventListener.ACCELERATION ? i._removeListenersForListenerID(r.ACCELERATION) : t === cc.EventListener.KEYBOARD ? i._removeListenersForListenerID(r.KEYBOARD) : cc.logID(3501);
                    else cc.warnID(3506)
                },
                removeCustomListeners: function(t) {
                    this._removeListenersForListenerID(t)
                },
                removeAllListeners: function() {
                    var t = this._listenersMap,
                        e = this._internalCustomListenerIDs;
                    for (var i in t) - 1 === e.indexOf(i) && this._removeListenersForListenerID(i)
                },
                setPriority: function(t, e) {
                    if (null != t) {
                        var i = this._listenersMap;
                        for (var n in i) {
                            var r = i[n].getFixedPriorityListeners();
                            if (r)
                                if (-1 !== r.indexOf(t)) return null != t._getSceneGraphPriority() && cc.logID(3502), void(t._getFixedPriority() !== e && (t._setFixedPriority(e), this._setDirty(t._getListenerID(), this.DIRTY_FIXED_PRIORITY)))
                        }
                    }
                },
                setEnabled: function(t) {
                    this._isEnabled = t
                },
                isEnabled: function() {
                    return this._isEnabled
                },
                dispatchEvent: function(t) {
                    if (this._isEnabled)
                        if (this._updateDirtyFlagForSceneGraph(), this._inDispatch++, t && t.getType) {
                            if (t.getType().startsWith(cc.Event.TOUCH)) return this._dispatchTouchEvent(t), void this._inDispatch--;
                            var e = o(t);
                            this._sortEventListeners(e);
                            var i = this._listenersMap[e];
                            null != i && (this._dispatchEventToListeners(i, this._onListenerCallback, t), this._onUpdateListeners(i)), this._inDispatch--
                        } else cc.errorID(3511)
                },
                _onListenerCallback: function(t, e) {
                    return e.currentTarget = t._target, t._onEvent(e), e.isStopped()
                },
                dispatchCustomEvent: function(t, e) {
                    var i = new cc.Event.EventCustom(t);
                    i.setUserData(e), this.dispatchEvent(i)
                }
            };
        n.get(cc, "eventManager", (function() {
            return cc.warnID(1405, "cc.eventManager", "cc.EventTarget or cc.systemEvent"), a
        })), e.exports = a
    }), {
        "../platform/js": 218,
        "./CCEventListener": 126
    }],
    128: [(function(t, e, i) {
        "use strict";
        cc.Touch = function(t, e, i) {
            this._lastModified = 0, this.setTouchInfo(i, t, e)
        }, cc.Touch.prototype = {
            constructor: cc.Touch,
            getLocation: function() {
                return cc.v2(this._point.x, this._point.y)
            },
            getLocationX: function() {
                return this._point.x
            },
            getLocationY: function() {
                return this._point.y
            },
            getPreviousLocation: function() {
                return cc.v2(this._prevPoint.x, this._prevPoint.y)
            },
            getStartLocation: function() {
                return cc.v2(this._startPoint.x, this._startPoint.y)
            },
            getDelta: function() {
                return this._point.sub(this._prevPoint)
            },
            getLocationInView: function() {
                return cc.v2(this._point.x, cc.view._designResolutionSize.height - this._point.y)
            },
            getPreviousLocationInView: function() {
                return cc.v2(this._prevPoint.x, cc.view._designResolutionSize.height - this._prevPoint.y)
            },
            getStartLocationInView: function() {
                return cc.v2(this._startPoint.x, cc.view._designResolutionSize.height - this._startPoint.y)
            },
            getID: function() {
                return this._id
            },
            setTouchInfo: function(t, e, i) {
                this._prevPoint = this._point, this._point = cc.v2(e || 0, i || 0), this._id = t, this._startPointCaptured || (this._startPoint = cc.v2(this._point), cc.view._convertPointWithScale(this._startPoint), this._startPointCaptured = !0)
            },
            _setPoint: function(t, e) {
                void 0 === e ? (this._point.x = t.x, this._point.y = t.y) : (this._point.x = t, this._point.y = e)
            },
            _setPrevPoint: function(t, e) {
                this._prevPoint = void 0 === e ? cc.v2(t.x, t.y) : cc.v2(t || 0, e || 0)
            }
        }
    }), {}],
    129: [(function(t, e, i) {
        "use strict";
        t("./CCEvent"), t("./CCTouch"), t("./CCEventListener");
        var n = t("./CCEventManager");
        e.exports = n
    }), {
        "./CCEvent": 125,
        "./CCEventListener": 126,
        "./CCEventManager": 127,
        "./CCTouch": 128
    }],
    130: [(function(t, e, i) {
        "use strict";
        var n = cc.js,
            r = t("../platform/callbacks-invoker");

        function s() {
            r.call(this)
        }
        n.extend(s, r), s.prototype.emit = function(t, e) {
            var i = t.type,
                n = this._callbackTable[i];
            if (n) {
                var r = !n.isInvoking;
                n.isInvoking = !0;
                for (var s = n.callbackInfos, o = 0, a = s.length; o < a; ++o) {
                    var l = s[o];
                    if (l && l.callback && (l.callback.call(l.target, t, e), t._propagationImmediateStopped)) break
                }
                r && (n.isInvoking = !1, n.containCanceled && n.purgeCanceled())
            }
        }, e.exports = s
    }), {
        "../platform/callbacks-invoker": 211
    }],
    131: [(function(t, e, i) {
        "use strict";
        var n = t("../platform/js"),
            r = t("../platform/callbacks-invoker"),
            s = n.array.fastRemove;

        function o() {
            r.call(this)
        }
        n.extend(o, r);
        var a = o.prototype;
        a.__on = a.on, a.on = function(t, e, i, n) {
            if (e) return this.hasEventListener(t, e, i) || (this.__on(t, e, i, n), i && i.__eventTargets && i.__eventTargets.push(this)), e;
            cc.errorID(6800)
        }, a.__off = a.off, a.off = function(t, e, i) {
            if (e) this.__off(t, e, i), i && i.__eventTargets && s(i.__eventTargets, this);
            else {
                var n = this._callbackTable[t];
                if (!n) return;
                for (var r = n.callbackInfos, o = 0; o < r.length; ++o) {
                    var a = r[o] && r[o].target;
                    a && a.__eventTargets && s(a.__eventTargets, this)
                }
                this.removeAll(t)
            }
        }, a.targetOff = function(t) {
            this.removeAll(t), t && t.__eventTargets && s(t.__eventTargets, this)
        }, a.once = function(t, e, i) {
            this.on(t, e, i, !0)
        }, a.dispatchEvent = function(t) {
            this.emit(t.type, t)
        }, cc.EventTarget = e.exports = o
    }), {
        "../platform/callbacks-invoker": 211,
        "../platform/js": 218
    }],
    132: [(function(t, e, i) {
        "use strict";
        var n = t("../platform/js");
        cc.Event = function(t, e) {
            this.type = t, this.bubbles = !!e, this.target = null, this.currentTarget = null, this.eventPhase = 0, this._propagationStopped = !1, this._propagationImmediateStopped = !1
        }, cc.Event.prototype = {
            constructor: cc.Event,
            unuse: function() {
                this.type = cc.Event.NO_TYPE, this.target = null, this.currentTarget = null, this.eventPhase = cc.Event.NONE, this._propagationStopped = !1, this._propagationImmediateStopped = !1
            },
            reuse: function(t, e) {
                this.type = t, this.bubbles = e || !1
            },
            stopPropagation: function() {
                this._propagationStopped = !0
            },
            stopPropagationImmediate: function() {
                this._propagationImmediateStopped = !0
            },
            isStopped: function() {
                return this._propagationStopped || this._propagationImmediateStopped
            },
            getCurrentTarget: function() {
                return this.currentTarget
            },
            getType: function() {
                return this.type
            }
        }, cc.Event.NO_TYPE = "no_type", cc.Event.TOUCH = "touch", cc.Event.MOUSE = "mouse", cc.Event.KEYBOARD = "keyboard", cc.Event.ACCELERATION = "acceleration", cc.Event.NONE = 0, cc.Event.CAPTURING_PHASE = 1, cc.Event.AT_TARGET = 2, cc.Event.BUBBLING_PHASE = 3;
        var r = function(t, e) {
            cc.Event.call(this, t, e), this.detail = null
        };
        n.extend(r, cc.Event), r.prototype.reset = r, r.prototype.setUserData = function(t) {
            this.detail = t
        }, r.prototype.getUserData = function() {
            return this.detail
        }, r.prototype.getEventName = cc.Event.prototype.getType;
        var s = new n.Pool(10);
        r.put = function(t) {
            s.put(t)
        }, r.get = function(t, e) {
            var i = s._get();
            return i ? i.reset(t, e) : i = new r(t, e), i
        }, cc.Event.EventCustom = r, e.exports = cc.Event
    }), {
        "../platform/js": 218
    }],
    133: [(function(t, e, i) {
        "use strict";
        t("./event"), t("./event-listeners"), t("./event-target"), t("./system-event")
    }), {
        "./event": 132,
        "./event-listeners": 130,
        "./event-target": 131,
        "./system-event": 134
    }],
    134: [(function(t, e, i) {
        "use strict";
        var n = t("../event/event-target"),
            r = t("../event-manager"),
            s = t("../platform/CCInputManager"),
            o = cc.Enum({
                KEY_DOWN: "keydown",
                KEY_UP: "keyup",
                DEVICEMOTION: "devicemotion"
            }),
            a = null,
            l = null,
            h = cc.Class({
                name: "SystemEvent",
                extends: n,
                statics: {
                    EventType: o
                },
                setAccelerometerEnabled: function(t) {
                    t && window.DeviceMotionEvent && "function" == typeof DeviceMotionEvent.requestPermission ? DeviceMotionEvent.requestPermission().then((function(t) {
                        console.log("Device Motion Event request permission: " + t), s.setAccelerometerEnabled("granted" === t)
                    })) : s.setAccelerometerEnabled(t)
                },
                setAccelerometerInterval: function(t) {
                    s.setAccelerometerInterval(t)
                },
                on: function(t, e, i, n) {
                    this._super(t, e, i, n), t !== o.KEY_DOWN && t !== o.KEY_UP || (a || (a = cc.EventListener.create({
                        event: cc.EventListener.KEYBOARD,
                        onKeyPressed: function(t, e) {
                            e.type = o.KEY_DOWN, cc.systemEvent.dispatchEvent(e)
                        },
                        onKeyReleased: function(t, e) {
                            e.type = o.KEY_UP, cc.systemEvent.dispatchEvent(e)
                        }
                    })), r.hasEventListener(cc.EventListener.ListenerID.KEYBOARD) || r.addListener(a, 1)), t === o.DEVICEMOTION && (l || (l = cc.EventListener.create({
                        event: cc.EventListener.ACCELERATION,
                        callback: function(t, e) {
                            e.type = o.DEVICEMOTION, cc.systemEvent.dispatchEvent(e)
                        }
                    })), r.hasEventListener(cc.EventListener.ListenerID.ACCELERATION) || r.addListener(l, 1))
                },
                off: function(t, e, i) {
                    if (this._super(t, e, i), a && (t === o.KEY_DOWN || t === o.KEY_UP)) {
                        var n = this.hasEventListener(o.KEY_DOWN),
                            s = this.hasEventListener(o.KEY_UP);
                        n || s || r.removeListener(a)
                    }
                    l && t === o.DEVICEMOTION && r.removeListener(l)
                }
            });
        cc.SystemEvent = e.exports = h, cc.systemEvent = new cc.SystemEvent
    }), {
        "../event-manager": 129,
        "../event/event-target": 131,
        "../platform/CCInputManager": 202
    }],
    135: [(function(t, e, i) {
        "use strict";
        var n = cc.vmath.vec3,
            r = cc.vmath.mat3,
            s = n.create(),
            o = n.create(),
            a = r.create(),
            l = function(t, e, i) {
                var r = a.m,
                    s = i.m;
                r[0] = Math.abs(s[0]), r[1] = Math.abs(s[1]), r[2] = Math.abs(s[2]), r[3] = Math.abs(s[4]), r[4] = Math.abs(s[5]), r[5] = Math.abs(s[6]), r[6] = Math.abs(s[8]), r[7] = Math.abs(s[9]), r[8] = Math.abs(s[10]), n.transformMat3(t, e, a)
            };

        function h(t, e, i, n, r, s) {
            this.center = cc.v3(t, e, i), this.halfExtents = cc.v3(n, r, s)
        }
        var c = h.prototype;
        c.getBoundary = function(t, e) {
            n.sub(t, this.center, this.halfExtents), n.add(e, this.center, this.halfExtents)
        }, c.transform = function(t, e, i, r, s) {
            s || (s = this), n.transformMat4(s.center, this.center, t), l(s.halfExtents, this.halfExtents, t)
        }, h.create = function(t, e, i, n, r, s) {
            return new h(t, e, i, n, r, s)
        }, h.clone = function(t) {
            return new h(t.center.x, t.center.y, t.center.z, t.halfExtents.x, t.halfExtents.y, t.halfExtents.z)
        }, h.copy = function(t, e) {
            return n.copy(t.center, e.center), n.copy(t.halfExtents, e.halfExtents), t
        }, h.fromPoints = function(t, e, i) {
            return n.scale(t.center, n.add(s, e, i), .5), n.scale(t.halfExtents, n.sub(o, i, e), .5), t
        }, h.set = function(t, e, i, r, s, o, a) {
            return n.set(t.center, e, i, r), n.set(t.halfExtents, s, o, a), t
        }, e.exports = h
    }), {}],
    136: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, cc.geomUtils = {
            Triangle: t("./triangle"),
            Aabb: t("./aabb"),
            Ray: t("./ray"),
            intersect: t("./intersect")
        }, i.default = cc.geomUtils, e.exports = i.default
    }), {
        "./aabb": 135,
        "./intersect": 137,
        "./ray": 138,
        "./triangle": 139
    }],
    137: [(function(t, e, i) {
        "use strict";
        var n = s(t("../../renderer/gfx")),
            r = s(t("../../renderer/memop/recycle-pool"));

        function s(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }
        var o = t("./aabb"),
            a = t("./ray"),
            l = t("./triangle"),
            h = cc.vmath.mat4,
            c = cc.vmath.vec3,
            u = {};
        u.rayAabb = (function() {
            var t = c.create(),
                e = c.create();
            return function(i, n) {
                var r = i.o,
                    s = i.d,
                    o = 1 / s.x,
                    a = 1 / s.y,
                    l = 1 / s.z;
                c.sub(t, n.center, n.halfExtents), c.add(e, n.center, n.halfExtents);
                var h = (t.x - r.x) * o,
                    u = (e.x - r.x) * o,
                    _ = (t.y - r.y) * a,
                    f = (e.y - r.y) * a,
                    d = (t.z - r.z) * l,
                    p = (e.z - r.z) * l,
                    m = Math.max(Math.max(Math.min(h, u), Math.min(_, f)), Math.min(d, p)),
                    y = Math.min(Math.min(Math.max(h, u), Math.max(_, f)), Math.max(d, p));
                return y < 0 || m > y ? 0 : m
            }
        })(), u.rayTriangle = (function() {
            var t = c.create(0, 0, 0),
                e = c.create(0, 0, 0),
                i = c.create(0, 0, 0),
                n = c.create(0, 0, 0),
                r = c.create(0, 0, 0);
            return function(s, o) {
                c.sub(t, o.b, o.a), c.sub(e, o.c, o.a), c.cross(i, s.d, e);
                var a = c.dot(t, i);
                if (a <= 0) return 0;
                c.sub(n, s.o, o.a);
                var l = c.dot(n, i);
                if (l < 0 || l > a) return 0;
                c.cross(r, n, t);
                var h = c.dot(s.d, r);
                if (h < 0 || l + h > a) return 0;
                var u = c.dot(e, r) / a;
                return u < 0 ? 0 : u
            }
        })(), u.rayMesh = (function() {
            var t = l.create(),
                e = 1 / 0,
                i = {
                    5120: "getInt8",
                    5121: "getUint8",
                    5122: "getInt16",
                    5123: "getUint16",
                    5124: "getInt32",
                    5125: "getUint32",
                    5126: "getFloat32"
                },
                r = (function() {
                    var t = new ArrayBuffer(2);
                    return new DataView(t).setInt16(0, 256, !0), 256 === new Int16Array(t)[0]
                })();

            function s(t, e, i, n, s) {
                c.set(t, e[i](s, r), e[i](s += n, r), e[i](s += n, r))
            }
            return function(r, o) {
                e = 1 / 0;
                for (var a = o._subMeshes, l = 0; l < a.length; l++)
                    if (a[l]._primitiveType === n.default.PT_TRIANGLES)
                        for (var h = o._subDatas[l] || o._subDatas[0], c = h.vData, _ = new DataView(c.buffer, c.byteOffset, c.byteLength), f = h.getIData(Uint16Array), d = h.vfm.element(n.default.ATTR_POSITION), p = d.offset, m = d.stride, y = i[d.type], v = 0; v < f.length; v += 3) {
                            s(t.a, _, y, 4, f[v] * m + p), s(t.b, _, y, 4, f[v + 1] * m + p), s(t.c, _, y, 4, f[v + 2] * m + p);
                            var g = u.rayTriangle(r, t);
                            g > 0 && g < e && (e = g)
                        }
                return e
            }
        })(), u.raycast = (function() {
            function t(e, i) {
                for (var n = e.children, r = n.length - 1; r >= 0; r--) {
                    t(n[r], i)
                }
                i(e)
            }

            function e(t, e) {
                return t.distance - e.distance
            }

            function i(t, e, i) {
                var n = i.m,
                    r = e.x,
                    s = e.y,
                    o = e.z,
                    a = n[3] * r + n[7] * s + n[11] * o;
                return a = a ? 1 / a : 1, t.x = (n[0] * r + n[4] * s + n[8] * o) * a, t.y = (n[1] * r + n[5] * s + n[9] * o) * a, t.z = (n[2] * r + n[6] * s + n[10] * o) * a, t
            }
            var n = new r.default(function() {
                    return {
                        distance: 0,
                        node: null
                    }
                }, 1),
                s = [],
                l = o.create(),
                _ = c.create(),
                f = c.create(),
                d = a.create(),
                p = h.create(),
                m = h.create(),
                y = c.create();

            function v(t) {
                return t > 0 && t < 1 / 0
            }
            return function(r, a, g, x) {
                return n.reset(), s.length = 0, t(r = r || cc.director.getScene(), (function(t) {
                    if (!x || x(t)) {
                        h.invert(m, t.getWorldMatrix(p)), c.transformMat4(d.o, a.o, m), c.normalize(d.d, i(d.d, a.d, m));
                        var e = 1 / 0,
                            r = t._renderComponent;
                        if (r instanceof cc.MeshRenderer ? e = u.rayAabb(d, r._boundingBox) : t.width && t.height && (c.set(_, -t.width * t.anchorX, -t.height * t.anchorY, t.z), c.set(f, t.width * (1 - t.anchorX), t.height * (1 - t.anchorY), t.z), o.fromPoints(l, _, f), e = u.rayAabb(d, l)), v(e) && (g && (e = g(d, t, e)), v(e))) {
                            c.scale(y, d.d, e), i(y, y, p);
                            var b = n.add();
                            b.node = t, b.distance = cc.vmath.vec3.mag(y), s.push(b)
                        }
                    }
                })), s.sort(e), s
            }
        })(), e.exports = u
    }), {
        "../../renderer/gfx": 360,
        "../../renderer/memop/recycle-pool": 375,
        "./aabb": 135,
        "./ray": 138,
        "./triangle": 139
    }],
    138: [(function(t, e, i) {
        "use strict";
        var n = cc.vmath.vec3;

        function r(t, e, i, n, r, s) {
            this.o = cc.v3(t, e, i), this.d = cc.v3(n, r, s)
        }
        r.create = function(t, e, i, n, s, o) {
            return new r(t, e, i, n, s, o)
        }, r.clone = function(t) {
            return new r(t.o.x, t.o.y, t.o.z, t.d.x, t.d.y, t.d.z)
        }, r.copy = function(t, e) {
            return t.o.x = e.o.x, t.o.y = e.o.y, t.o.z = e.o.z, t.d.x = e.d.x, t.d.y = e.d.y, t.d.z = e.d.z, t
        }, r.set = function(t, e, i, n, r, s, o) {
            return t.o.x = e, t.o.y = i, t.o.z = n, t.d.x = r, t.d.y = s, t.d.z = o, t
        }, r.fromPoints = function(t, e, i) {
            return n.copy(t.o, e), n.normalize(t.d, n.sub(t.d, i, e)), t
        }, e.exports = r
    }), {}],
    139: [(function(t, e, i) {
        "use strict";
        var n = cc.vmath.vec3;

        function r(t, e, i, n, r, s, o, a, l) {
            this.a = cc.v3(t, e, i), this.b = cc.v3(n, r, s), this.c = cc.v3(o, a, l)
        }
        r.create = function(t, e, i, n, s, o, a, l, h) {
            return new r(t, e, i, n, s, o, a, l, h)
        }, r.clone = function(t) {
            return new r(t.a.x, t.a.y, t.a.z, t.b.x, t.b.y, t.b.z, t.c.x, t.c.y, t.c.z)
        }, r.copy = function(t, e) {
            return n.copy(t.a, e.a), n.copy(t.b, e.b), n.copy(t.c, e.c), t
        }, r.fromPoints = function(t, e, i, r) {
            return n.copy(t.a, e), n.copy(t.b, i), n.copy(t.c, r), t
        }, r.set = function(t, e, i, n, r, s, o, a, l, h) {
            return t.a.x = e, t.a.y = i, t.a.z = n, t.b.x = r, t.b.y = s, t.b.z = o, t.c.x = a, t.c.y = l, t.c.z = h, t
        }, e.exports = r
    }), {}],
    140: [(function(t, e, i) {
        "use strict";
        var n = t("../components/CCRenderComponent"),
            r = t("../assets/material/CCMaterial"),
            s = t("./types"),
            o = s.LineCap,
            a = s.LineJoin,
            l = cc.Class({
                name: "cc.Graphics",
                extends: n,
                editor: !1,
                ctor: function() {
                    this._impl = new l._Impl(this)
                },
                properties: {
                    _lineWidth: 1,
                    _strokeColor: cc.Color.BLACK,
                    _lineJoin: a.MITER,
                    _lineCap: o.BUTT,
                    _fillColor: cc.Color.WHITE,
                    _miterLimit: 10,
                    lineWidth: {
                        get: function() {
                            return this._lineWidth
                        },
                        set: function(t) {
                            this._lineWidth = t, this._impl.lineWidth = t
                        }
                    },
                    lineJoin: {
                        get: function() {
                            return this._lineJoin
                        },
                        set: function(t) {
                            this._lineJoin = t, this._impl.lineJoin = t
                        },
                        type: a
                    },
                    lineCap: {
                        get: function() {
                            return this._lineCap
                        },
                        set: function(t) {
                            this._lineCap = t, this._impl.lineCap = t
                        },
                        type: o
                    },
                    strokeColor: {
                        get: function() {
                            return this._strokeColor
                        },
                        set: function(t) {
                            this._impl.strokeColor = this._strokeColor = cc.color(t)
                        }
                    },
                    fillColor: {
                        get: function() {
                            return this._fillColor
                        },
                        set: function(t) {
                            this._impl.fillColor = this._fillColor = cc.color(t)
                        }
                    },
                    miterLimit: {
                        get: function() {
                            return this._miterLimit
                        },
                        set: function(t) {
                            this._miterLimit = t, this._impl.miterLimit = t
                        }
                    }
                },
                statics: {
                    LineJoin: a,
                    LineCap: o
                },
                onRestore: function() {
                    this._impl || (this._impl = new l._Impl(this))
                },
                onEnable: function() {
                    this._super(), this._activateMaterial()
                },
                onDestroy: function() {
                    this.clear(!0), this._super(), this._impl = null
                },
                _activateMaterial: function() {
                    if (cc.game.renderType !== cc.game.RENDER_TYPE_CANVAS) {
                        var t = this.sharedMaterials[0];
                        (t = t ? r.getInstantiatedMaterial(t, this) : r.getInstantiatedBuiltinMaterial("2d-base", this)).define("CC_USE_MODEL", !0), this.setMaterial(0, t)
                    } else this.disableRender()
                },
                moveTo: function(t, e) {
                    this._impl.moveTo(t, e)
                },
                lineTo: function(t, e) {
                    this._impl.lineTo(t, e)
                },
                bezierCurveTo: function(t, e, i, n, r, s) {
                    this._impl.bezierCurveTo(t, e, i, n, r, s)
                },
                quadraticCurveTo: function(t, e, i, n) {
                    this._impl.quadraticCurveTo(t, e, i, n)
                },
                arc: function(t, e, i, n, r, s) {
                    this._impl.arc(t, e, i, n, r, s)
                },
                ellipse: function(t, e, i, n) {
                    this._impl.ellipse(t, e, i, n)
                },
                circle: function(t, e, i) {
                    this._impl.circle(t, e, i)
                },
                rect: function(t, e, i, n) {
                    this._impl.rect(t, e, i, n)
                },
                roundRect: function(t, e, i, n, r) {
                    this._impl.roundRect(t, e, i, n, r)
                },
                fillRect: function(t, e, i, n) {
                    this.rect(t, e, i, n), this.fill()
                },
                clear: function(t) {
                    this._impl.clear(t), this._assembler && this._assembler.clear(t)
                },
                close: function() {
                    this._impl.close()
                },
                stroke: function() {
                    this._assembler || this._resetAssembler(), this._assembler.stroke(this)
                },
                fill: function() {
                    this._assembler || this._resetAssembler(), this._assembler.fill(this)
                }
            });
        cc.Graphics = e.exports = l, cc.Graphics.Types = s, cc.Graphics.Helper = t("./helper")
    }), {
        "../assets/material/CCMaterial": 75,
        "../components/CCRenderComponent": 106,
        "./helper": 141,
        "./types": 143
    }],
    141: [(function(t, e, i) {
        "use strict";
        var n = t("./types").PointFlags,
            r = Math.PI,
            s = Math.min,
            o = Math.max,
            a = Math.cos,
            l = Math.sin,
            h = Math.abs,
            c = Math.sign,
            u = .5522847493;
        e.exports = {
            arc: function(t, e, i, n, c, u, _) {
                var f, d, p, m = 0,
                    y = 0,
                    v = 0,
                    g = 0,
                    x = 0,
                    b = 0,
                    A = 0,
                    C = 0,
                    T = 0,
                    S = 0,
                    w = 0,
                    E = 0,
                    M = 0;
                if (y = u - c, _ = _ || !1)
                    if (h(y) >= 2 * r) y = 2 * r;
                    else
                        for (; y < 0;) y += 2 * r;
                else if (h(y) >= 2 * r) y = 2 * -r;
                else
                    for (; y > 0;) y -= 2 * r;
                for (p = 0 | o(1, s(h(y) / (.5 * r) + .5, 5)), v = h(4 / 3 * (1 - a(f = y / p / 2)) / l(f)), _ || (v = -v), d = 0; d <= p; d++) b = e + (g = a(m = c + y * (d / p))) * n, A = i + (x = l(m)) * n, C = -x * n * v, T = g * n * v, 0 === d ? t.moveTo(b, A) : t.bezierCurveTo(S + E, w + M, b - C, A - T, b, A), S = b, w = A, E = C, M = T
            },
            ellipse: function(t, e, i, n, r) {
                t.moveTo(e - n, i), t.bezierCurveTo(e - n, i + r * u, e - n * u, i + r, e, i + r), t.bezierCurveTo(e + n * u, i + r, e + n, i + r * u, e + n, i), t.bezierCurveTo(e + n, i - r * u, e + n * u, i - r, e, i - r), t.bezierCurveTo(e - n * u, i - r, e - n, i - r * u, e - n, i), t.close()
            },
            roundRect: function(t, e, i, n, r, o) {
                if (o < .1) t.rect(e, i, n, r);
                else {
                    var a = s(o, .5 * h(n)) * c(n),
                        l = s(o, .5 * h(r)) * c(r);
                    t.moveTo(e, i + l), t.lineTo(e, i + r - l), t.bezierCurveTo(e, i + r - l * (1 - u), e + a * (1 - u), i + r, e + a, i + r), t.lineTo(e + n - a, i + r), t.bezierCurveTo(e + n - a * (1 - u), i + r, e + n, i + r - l * (1 - u), e + n, i + r - l), t.lineTo(e + n, i + l), t.bezierCurveTo(e + n, i + l * (1 - u), e + n - a * (1 - u), i, e + n - a, i), t.lineTo(e + a, i), t.bezierCurveTo(e + a * (1 - u), i, e, i + l * (1 - u), e, i + l), t.close()
                }
            },
            tesselateBezier: function t(e, i, r, s, o, a, l, c, u, _, f) {
                var d, p, m, y, v, g, x, b, A, C, T, S, w, E, M, D;
                _ > 10 || (v = .5 * (a + c), g = .5 * (l + u), x = .5 * ((d = .5 * (i + s)) + (m = .5 * (s + a))), b = .5 * ((p = .5 * (r + o)) + (y = .5 * (o + l))), ((M = h((s - c) * (E = u - r) - (o - u) * (w = c - i))) + (D = h((a - c) * E - (l - u) * w))) * (M + D) < e._tessTol * (w * w + E * E) ? e._addPoint(c, u, 0 === f ? f | n.PT_BEVEL : f) : (t(e, i, r, d, p, x, b, T = .5 * (x + (A = .5 * (m + v))), S = .5 * (b + (C = .5 * (y + g))), _ + 1, 0), t(e, T, S, A, C, v, g, c, u, _ + 1, f)))
            }
        }
    }), {
        "./types": 143
    }],
    142: [(function(t, e, i) {
        "use strict";
        t("./graphics")
    }), {
        "./graphics": 140
    }],
    143: [(function(t, e, i) {
        "use strict";
        var n = cc.Enum({
                BUTT: 0,
                ROUND: 1,
                SQUARE: 2
            }),
            r = cc.Enum({
                BEVEL: 0,
                ROUND: 1,
                MITER: 2
            }),
            s = cc.Enum({
                PT_CORNER: 1,
                PT_LEFT: 2,
                PT_BEVEL: 4,
                PT_INNERBEVEL: 8
            });
        e.exports = {
            LineCap: n,
            LineJoin: r,
            PointFlags: s
        }
    }), {}],
    144: [(function(t, e, i) {
        "use strict";
        t("./platform"), t("./assets"), t("./CCNode"), t("./CCPrivateNode"), t("./CCScene"), t("./components"), t("./graphics"), t("./collider"), t("./collider/CCIntersection"), t("./physics"), t("./camera/CCCamera"), t("./geom-utils"), t("./mesh"), t("./3d"), t("./3d/polyfill-3d"), t("./base-ui/CCWidgetManager")
    }), {
        "./3d": 29,
        "./3d/polyfill-3d": 30,
        "./CCNode": 52,
        "./CCPrivateNode": 53,
        "./CCScene": 54,
        "./assets": 74,
        "./base-ui/CCWidgetManager": 79,
        "./camera/CCCamera": 80,
        "./collider": 88,
        "./collider/CCIntersection": 86,
        "./components": 123,
        "./geom-utils": 136,
        "./graphics": 142,
        "./mesh": 167,
        "./physics": 182,
        "./platform": 215
    }],
    145: [(function(t, e, i) {
        "use strict";
        var n = t("../platform/js"),
            r = t("./pipeline"),
            s = t("./loading-items"),
            o = t("./asset-loader"),
            a = t("./downloader"),
            l = t("./loader"),
            h = t("./asset-table"),
            c = t("../platform/utils").callInNextTick,
            u = t("./auto-release-utils"),
            _ = Object.create(null);
        _.assets = new h, _.internal = new h;
        var f = {
            url: null,
            raw: !1
        };

        function d(t) {
            var e, i, n;
            if ("object" == typeof t) {
                if (i = t, t.url) return i;
                e = t.uuid
            } else i = {}, e = t;
            return n = i.type ? "uuid" === i.type : cc.AssetLibrary._uuidInSettings(e), cc.AssetLibrary._getAssetInfoInRuntime(e, f), i.url = n ? f.url : e, f.url && "uuid" === i.type && f.raw ? (i.type = null, i.isRawAsset = !0) : n || (i.isRawAsset = !0), i
        }
        var p = [],
            m = [];

        function y() {
            var t = new o,
                e = new a,
                i = new l;
            r.call(this, [t, e, i]), this.assetLoader = t, this.md5Pipe = null, this.downloader = e, this.loader = i, this.onProgress = null, this._autoReleaseSetting = n.createMap(!0)
        }
        n.extend(y, r);
        var v = y.prototype;
        v.init = function(t) {}, v.getXMLHttpRequest = function() {
            return window.XMLHttpRequest ? new window.XMLHttpRequest : new ActiveXObject("MSXML2.XMLHTTP")
        }, v.addDownloadHandlers = function(t) {
            this.downloader.addHandlers(t)
        }, v.addLoadHandlers = function(t) {
            this.loader.addHandlers(t)
        }, v.load = function(t, e, i) {
            void 0 === i && (i = e, e = this.onProgress || null);
            var n, r = this,
                o = !1;
            t instanceof Array || (t ? (o = !0, t = [t]) : t = []), p.length = 0;
            for (var a = 0; a < t.length; ++a) {
                var l = t[a];
                if (l && l.id && (cc.warnID(4920, l.id), l.uuid || l.url || (l.url = l.id)), (n = d(l)).url || n.uuid) {
                    var h = this._cache[n.url];
                    p.push(h || n)
                }
            }
            var u = s.create(this, e, (function(t, e) {
                c((function() {
                    if (i) {
                        if (o) {
                            var s = n.url;
                            i.call(r, t, e.getContent(s))
                        } else i.call(r, t, e);
                        i = null
                    }
                    e.destroy()
                }))
            }));
            s.initQueueDeps(u), u.append(p), p.length = 0
        }, v.flowInDeps = function(t, e, i) {
            m.length = 0;
            for (var n = 0; n < e.length; ++n) {
                var r = d(e[n]);
                if (r.url || r.uuid) {
                    var o = this._cache[r.url];
                    o ? m.push(o) : m.push(r)
                }
            }
            var a = s.create(this, t ? function(t, e, i) {
                this._ownerQueue && this._ownerQueue.onProgress && this._ownerQueue._childOnProgress(i)
            } : null, (function(e, n) {
                i(e, n), t && t.deps && (t.deps.length = 0), n.destroy()
            }));
            if (t) {
                var l = s.getQueue(t);
                a._ownerQueue = l._ownerQueue || l
            }
            var h = a.append(m, t);
            return m.length = 0, h
        }, v._assetTables = _, v._getResUuid = function(t, e, i, n) {
            var r = _[i = i || "assets"];
            if (!t || !r) return null;
            var s = t.indexOf("?"); - 1 !== s && (t = t.substr(0, s));
            var o = r.getUuid(t, e);
            if (!o) {
                var a = cc.path.extname(t);
                a && (t = t.slice(0, -a.length), (o = r.getUuid(t, e)) && !n && cc.warnID(4901, t, a))
            }
            return o
        }, v._getReferenceKey = function(t) {
            var e;
            return "object" == typeof t ? e = t._uuid || null : "string" == typeof t && (e = this._getResUuid(t, null, null, !0) || t), e ? (cc.AssetLibrary._getAssetInfoInRuntime(e, f), this._cache[f.url] ? f.url : e) : (cc.warnID(4800, t), e)
        }, v._urlNotFound = function(t, e, i) {
            c((function() {
                t = cc.url.normalize(t);
                var r = (e ? n.getClassName(e) : "Asset") + ' in "resources/' + t + '" does not exist.';
                i && i(new Error(r), [])
            }))
        }, v._parseLoadResArgs = function(t, e, i) {
            if (void 0 === i) {
                var r = t instanceof Array || n.isChildClassOf(t, cc.RawAsset);
                e ? (i = e, r && (e = this.onProgress || null)) : void 0 !== e || r || (i = t, e = this.onProgress || null, t = null), void 0 === e || r || (e = t, t = null)
            }
            return {
                type: t,
                onProgress: e,
                onComplete: i
            }
        }, v.loadRes = function(t, e, i, n, r) {
            5 !== arguments.length && (r = n, n = i, i = "assets");
            var s = this._parseLoadResArgs(e, n, r);
            e = s.type, n = s.onProgress, r = s.onComplete;
            var o = this,
                a = o._getResUuid(t, e, i);
            a ? this.load({
                type: "uuid",
                uuid: a
            }, n, (function(t, e) {
                e && o.setAutoReleaseRecursively(a, !1), r && r(t, e)
            })) : o._urlNotFound(t, e, r)
        }, v._loadResUuids = function(t, e, i, n) {
            if (t.length > 0) {
                var r = this,
                    s = t.map((function(t) {
                        return {
                            type: "uuid",
                            uuid: t
                        }
                    }));
                this.load(s, e, (function(t, e) {
                    if (i) {
                        for (var o = [], a = n && [], l = 0; l < s.length; ++l) {
                            var h = s[l].uuid,
                                c = this._getReferenceKey(h),
                                u = e.getContent(c);
                            u && (r.setAutoReleaseRecursively(h, !1), o.push(u), a && a.push(n[l]))
                        }
                        n ? i(t, o, a) : i(t, o)
                    }
                }))
            } else i && c((function() {
                n ? i(null, [], []) : i(null, [])
            }))
        }, v.loadResArray = function(t, e, i, n, r) {
            5 !== arguments.length && (r = n, n = i, i = "assets");
            var s = this._parseLoadResArgs(e, n, r);
            e = s.type, n = s.onProgress, r = s.onComplete;
            for (var o = [], a = e instanceof Array, l = 0; l < t.length; l++) {
                var h = t[l],
                    c = a ? e[l] : e,
                    u = this._getResUuid(h, c, i);
                if (!u) return void this._urlNotFound(h, c, r);
                o.push(u)
            }
            this._loadResUuids(o, n, r)
        }, v.loadResDir = function(t, e, i, n, r) {
            if (5 !== arguments.length && (r = n, n = i, i = "assets"), _[i]) {
                var s = this._parseLoadResArgs(e, n, r);
                e = s.type, n = s.onProgress, r = s.onComplete;
                var o = [],
                    a = _[i].getUuidArray(t, e, o);
                this._loadResUuids(a, n, r, o)
            }
        }, v.getRes = function(t, e) {
            var i = this._cache[t];
            if (!i) {
                var n = this._getResUuid(t, e, null, !0);
                if (!n) return null;
                var r = this._getReferenceKey(n);
                i = this._cache[r]
            }
            return i && i.alias && (i = i.alias), i && i.complete ? i.content : null
        }, v.getResCount = function() {
            return Object.keys(this._cache).length
        }, v.getDependsRecursively = function(t) {
            if (t) {
                var e = this._getReferenceKey(t),
                    i = u.getDependsRecursively(e);
                return i.push(e), i
            }
            return []
        }, v.release = function(t) {
            if (Array.isArray(t))
                for (var e = 0; e < t.length; e++) {
                    var i = t[e];
                    this.release(i)
                } else if (t) {
                    var n = this._getReferenceKey(t);
                    if (n && n in cc.AssetLibrary.getBuiltinDeps()) return;
                    var r = this.getItem(n);
                    if (r) {
                        this.removeItem(n);
                        t = r.content
                    }
                    if (t instanceof cc.Asset) {
                        var s = t.nativeUrl;
                        s && this.release(s), t.destroy()
                    }
                }
        }, v.releaseAsset = function(t) {
            var e = t._uuid;
            e && this.release(e)
        }, v.releaseRes = function(t, e, i) {
            var n = this._getResUuid(t, e, i);
            n ? this.release(n) : cc.errorID(4914, t)
        }, v.releaseResDir = function(t, e, i) {
            if (_[i = i || "assets"])
                for (var n = _[i].getUuidArray(t, e), r = 0; r < n.length; r++) {
                    var s = n[r];
                    this.release(s)
                }
        }, v.releaseAll = function() {
            for (var t in this._cache) this.release(t)
        }, v.removeItem = function(t) {
            var e = r.prototype.removeItem.call(this, t);
            return delete this._autoReleaseSetting[t], e
        }, v.setAutoRelease = function(t, e) {
            var i = this._getReferenceKey(t);
            i && (this._autoReleaseSetting[i] = !!e)
        }, v.setAutoReleaseRecursively = function(t, e) {
            e = !!e;
            var i = this._getReferenceKey(t);
            if (i) {
                this._autoReleaseSetting[i] = e;
                for (var n = u.getDependsRecursively(i), r = 0; r < n.length; r++) {
                    var s = n[r];
                    this._autoReleaseSetting[s] = e
                }
            } else 0
        }, v.isAutoRelease = function(t) {
            var e = this._getReferenceKey(t);
            return !!e && !!this._autoReleaseSetting[e]
        }, cc.loader = new y, e.exports = cc.loader
    }), {
        "../platform/js": 218,
        "../platform/utils": 222,
        "./asset-loader": 146,
        "./asset-table": 147,
        "./auto-release-utils": 149,
        "./downloader": 151,
        "./loader": 154,
        "./loading-items": 155,
        "./pipeline": 158,
        "./released-asset-checker": 159
    }],
    146: [(function(t, e, i) {
        "use strict";
        t("../utils/CCPath");
        var n = t("../CCDebug"),
            r = t("./pipeline"),
            s = t("./loading-items"),
            o = "AssetLoader",
            a = function(t) {
                this.id = o, this.async = !0, this.pipeline = null
            };
        a.ID = o;
        var l = [];
        a.prototype.handle = function(t, e) {
            var i = t.uuid;
            if (!i) return t.content || null;
            cc.AssetLibrary.queryAssetInfo(i, (function(r, o, a) {
                if (r) e(r);
                else if (t.url = t.rawUrl = o, t.isRawAsset = a, a) {
                    var h = cc.path.extname(o).toLowerCase();
                    if (!h) return void e(new Error(n.getError(4931, i, o)));
                    h = h.substr(1);
                    var c = s.getQueue(t);
                    l[0] = {
                        queueId: t.queueId,
                        id: o,
                        url: o,
                        type: h,
                        error: null,
                        alias: t,
                        complete: !0
                    }, c.append(l), t.type = h, e(null, t.content)
                } else t.type = "uuid", e(null, t.content)
            }))
        }, r.AssetLoader = e.exports = a
    }), {
        "../CCDebug": 49,
        "../utils/CCPath": 289,
        "./loading-items": 155,
        "./pipeline": 158
    }],
    147: [(function(t, e, i) {
        "use strict";
        var n = t("../utils/misc").pushToMap,
            r = t("../platform/js");

        function s(t, e) {
            this.uuid = t, this.type = e
        }

        function o() {
            this._pathToUuid = r.createMap(!0)
        }

        function a(t, e) {
            if (t.length > e.length) {
                var i = t.charCodeAt(e.length);
                return 46 === i || 47 === i
            }
            return !0
        }
        var l = o.prototype;
        l.getUuid = function(t, e) {
            t = cc.url.normalize(t);
            var i = this._pathToUuid[t];
            if (i)
                if (Array.isArray(i)) {
                    if (!e) return i[0].uuid;
                    for (var n = 0; n < i.length; n++) {
                        var s = i[n];
                        if (r.isChildClassOf(s.type, e)) return s.uuid
                    }
                } else {
                    if (!e || r.isChildClassOf(i.type, e)) return i.uuid
                }
            return ""
        }, l.getUuidArray = function(t, e, i) {
            "/" === (t = cc.url.normalize(t))[t.length - 1] && (t = t.slice(0, -1));
            var n = this._pathToUuid,
                s = [],
                o = r.isChildClassOf;
            for (var l in n)
                if (l.startsWith(t) && a(l, t) || !t) {
                    var h = n[l];
                    if (Array.isArray(h))
                        for (var c = 0; c < h.length; c++) {
                            var u = h[c];
                            (!e || o(u.type, e)) && (s.push(u.uuid), i && i.push(l))
                        } else(!e || o(h.type, e)) && (s.push(h.uuid), i && i.push(l))
                }
            return s
        }, l.add = function(t, e, i, r) {
            t = t.substring(0, t.length - cc.path.extname(t).length);
            var o = new s(e, i);
            n(this._pathToUuid, t, o, r)
        }, l._getInfo_DEBUG = !1, l.reset = function() {
            this._pathToUuid = r.createMap(!0)
        }, e.exports = o
    }), {
        "../platform/js": 218,
        "../utils/misc": 300
    }],
    148: [(function(t, e, i) {
        "use strict";
        var n = t("../platform/CCSys"),
            r = t("../CCDebug"),
            s = n.__audioSupport,
            o = s.format,
            a = s.context;

        function l(t, e) {
            var i = document.createElement("audio");
            i.src = t.url;
            var n = function() {
                    clearTimeout(r), i.removeEventListener("canplaythrough", o, !1), i.removeEventListener("error", a, !1), s.USE_LOADER_EVENT && i.removeEventListener(s.USE_LOADER_EVENT, o, !1)
                },
                r = setTimeout((function() {
                    0 === i.readyState ? a() : o()
                }), 8e3),
                o = function() {
                    n(), e(null, i)
                },
                a = function() {
                    n();
                    var i = "load audio failure - " + t.url;
                    cc.log(i), e(i)
                };
            i.addEventListener("canplaythrough", o, !1), i.addEventListener("error", a, !1), s.USE_LOADER_EVENT && i.addEventListener(s.USE_LOADER_EVENT, o, !1)
        }

        function h(t, e) {
            a || e(new Error(r.getError(4926)));
            var i = cc.loader.getXMLHttpRequest();
            i.open("GET", t.url, !0), i.responseType = "arraybuffer", i.onload = function() {
                a.decodeAudioData(i.response, (function(t) {
                    e(null, t)
                }), (function() {
                    e("decode error - " + t.id, null)
                }))
            }, i.onerror = function() {
                e("request error - " + t.id, null)
            }, i.send()
        }
        e.exports = function(t, e) {
            if (0 === o.length) return new Error(r.getError(4927));
            var i;
            i = s.WEB_AUDIO ? t._owner instanceof cc.AudioClip ? t._owner.loadMode === cc.AudioClip.LoadMode.WEB_AUDIO ? h : l : t.urlParam && t.urlParam.useDom ? l : h : l, i(t, e)
        }
    }), {
        "../CCDebug": 49,
        "../platform/CCSys": 207
    }],
    149: [(function(t, e, i) {
        "use strict";
        var n = t("../platform/js");

        function r(t, e) {
            var i = cc.loader.getItem(t);
            if (i) {
                var n = i.dependKeys;
                if (n)
                    for (var s = 0; s < n.length; s++) {
                        var o = n[s];
                        e[o] || (e[o] = !0, r(o, e))
                    }
            }
        }

        function s(t, e) {
            if (t._uuid) {
                var i = cc.loader._getReferenceKey(t);
                e[i] || (e[i] = !0, r(i, e))
            }
        }

        function o(t, e) {
            for (var i = Object.getOwnPropertyNames(t), n = 0; n < i.length; n++) {
                var r = t[i[n]];
                if ("object" == typeof r && r)
                    if (Array.isArray(r))
                        for (var o = 0; o < r.length; o++) {
                            var a = r[o];
                            a instanceof cc.RawAsset && s(a, e)
                        } else if (r.constructor && r.constructor !== Object) r instanceof cc.RawAsset && s(r, e);
                        else
                            for (var l = Object.getOwnPropertyNames(r), h = 0; h < l.length; h++) {
                                var c = r[l[h]];
                                c instanceof cc.RawAsset && s(c, e)
                            }
            }
        }

        function a(t, e) {
            for (var i = 0; i < t._components.length; i++) o(t._components[i], e);
            for (var n = 0; n < t._children.length; n++) a(t._children[n], e)
        }
        e.exports = {
            autoRelease: function(t, e, i) {
                var r = cc.loader._autoReleaseSetting,
                    s = n.createMap();
                if (e)
                    for (var o = 0; o < e.length; o++) s[e[o]] = !0;
                for (var l = 0; l < i.length; l++) a(i[l], s);
                if (t)
                    for (var h = 0; h < t.length; h++) {
                        var c = t[h];
                        !1 === r[c] || s[c] || cc.loader.release(c)
                    }
                for (var u = Object.keys(r), _ = 0; _ < u.length; _++) {
                    var f = u[_];
                    !0 !== r[f] || s[f] || cc.loader.release(f)
                }
            },
            getDependsRecursively: function(t) {
                var e = {};
                return r(t, e), Object.keys(e)
            }
        }
    }), {
        "../platform/js": 218
    }],
    150: [(function(t, e, i) {
        "use strict";
        e.exports = function(t, e) {
            var i = t.url,
                n = cc.loader.getXMLHttpRequest(),
                r = "Load binary data failed: " + i;
            n.open("GET", i, !0), n.responseType = "arraybuffer", n.onload = function() {
                var t = n.response;
                if (t) {
                    var i = new Uint8Array(t);
                    e(null, i)
                } else e({
                    status: n.status,
                    errorMessage: r + "(no response)"
                })
            }, n.onerror = function() {
                e({
                    status: n.status,
                    errorMessage: r + "(error)"
                })
            }, n.ontimeout = function() {
                e({
                    status: n.status,
                    errorMessage: r + "(time out)"
                })
            }, n.send(null)
        }
    }), {}],
    151: [(function(t, e, i) {
        "use strict";
        var n = t("../platform/js"),
            r = t("../CCDebug");
        t("../utils/CCPath");
        var s, o = t("./pipeline"),
            a = t("./pack-downloader"),
            l = t("./binary-downloader"),
            h = t("./text-downloader"),
            c = t("./utils").urlAppendTimestamp;

        function u() {
            return null
        }

        function _(t, e, i) {
            var n = t.url,
                s = document,
                o = document.createElement("script");

            function a() {
                o.parentNode.removeChild(o), o.removeEventListener("load", a, !1), o.removeEventListener("error", l, !1), e(null, n)
            }

            function l() {
                o.parentNode.removeChild(o), o.removeEventListener("load", a, !1), o.removeEventListener("error", l, !1), e(new Error(r.getError(4928, n)))
            }
            "file:" !== window.location.protocol && (o.crossOrigin = "anonymous"), o.async = i, o.src = c(n), o.addEventListener("load", a, !1), o.addEventListener("error", l, !1), s.body.appendChild(o)
        }

        function f(t, e, i, n) {
            void 0 === i && (i = !0);
            var s = c(t.url);
            if (n = n || new Image, i && "file:" !== window.location.protocol ? n.crossOrigin = "anonymous" : n.crossOrigin = null, n.complete && n.naturalWidth > 0 && n.src === s) return n;
            var o = function i() {
                    n.removeEventListener("load", i), n.removeEventListener("error", a), n.id = t.id, e(null, n)
                },
                a = function i() {
                    n.removeEventListener("load", o), n.removeEventListener("error", i), "https:" !== window.location.protocol && n.crossOrigin && "anonymous" === n.crossOrigin.toLowerCase() ? f(t, e, !1, n) : e(new Error(r.getError(4930, s)))
                };
            n.addEventListener("load", o), n.addEventListener("error", a), n.src = s
        }
        var d = {
                js: _,
                png: f,
                jpg: f,
                bmp: f,
                jpeg: f,
                gif: f,
                ico: f,
                tiff: f,
                webp: f,
                image: f,
                pvr: l,
                pkm: l,
                mp3: s = t("./audio-downloader"),
                ogg: s,
                wav: s,
                m4a: s,
                txt: h,
                xml: h,
                vsh: h,
                fsh: h,
                atlas: h,
                tmx: h,
                tsx: h,
                json: h,
                ExportJson: h,
                plist: h,
                fnt: h,
                font: u,
                eot: u,
                ttf: u,
                woff: u,
                svg: u,
                ttc: u,
                uuid: function(t, e) {
                    var i = a.load(t, e);
                    return void 0 === i ? this.extMap.json(t, e) : i || void 0
                },
                binary: l,
                bin: l,
                dbbin: l,
                default: h
            },
            p = "Downloader",
            m = function(t) {
                this.id = p, this.async = !0, this.pipeline = null, this._curConcurrent = 0, this._loadQueue = [], this._subpackages = {}, this.extMap = n.mixin(t, d)
            };
        m.ID = p, m.PackDownloader = a, m.prototype.addHandlers = function(t) {
            n.mixin(this.extMap, t)
        }, m.prototype._handleLoadQueue = function() {
            for (; this._curConcurrent < cc.macro.DOWNLOAD_MAX_CONCURRENT;) {
                var t = this._loadQueue.shift();
                if (!t) break;
                var e = this.handle(t.item, t.callback);
                void 0 !== e && (e instanceof Error ? t.callback(e) : t.callback(null, e))
            }
        }, m.prototype.handle = function(t, e) {
            var i = this,
                n = this.extMap[t.type] || this.extMap.default,
                r = void 0;
            if (this._curConcurrent < cc.macro.DOWNLOAD_MAX_CONCURRENT) {
                if (this._curConcurrent++, void 0 !== (r = n.call(this, t, (function(t, n) {
                        i._curConcurrent = Math.max(0, i._curConcurrent - 1), i._handleLoadQueue(), e && e(t, n)
                    })))) return this._curConcurrent = Math.max(0, this._curConcurrent - 1), this._handleLoadQueue(), r
            } else if (t.ignoreMaxConcurrency) {
                if (void 0 !== (r = n.call(this, t, e))) return r
            } else this._loadQueue.push({
                item: t,
                callback: e
            })
        }, m.prototype.loadSubpackage = function(t, e) {
            var i = this._subpackages[t];
            i ? i.loaded ? e && e() : _({
                url: i.path + "index.js"
            }, (function(t) {
                t || (i.loaded = !0), e && e(t)
            })) : e && e(new Error("Can't find subpackage " + t))
        }, o.Downloader = e.exports = m
    }), {
        "../CCDebug": 49,
        "../platform/js": 218,
        "../utils/CCPath": 289,
        "./audio-downloader": 148,
        "./binary-downloader": 150,
        "./pack-downloader": 157,
        "./pipeline": 158,
        "./text-downloader": 161,
        "./utils": 163
    }],
    152: [(function(t, e, i) {
        "use strict";
        var n = t("../utils/text-utils"),
            r = null,
            s = "BES bswy:->@123\u4e01\u3041\u1101",
            o = {},
            a = -1,
            l = [],
            h = 3e3,
            c = (function() {
                var t = void 0;
                return function() {
                    if (void 0 === t)
                        if (window.FontFace) {
                            var e = /Gecko.*Firefox\/(\d+)/.exec(window.navigator.userAgent),
                                i = /OS X.*Version\/10\..*Safari/.exec(window.navigator.userAgent) && /Apple/.exec(window.navigator.vendor);
                            t = e ? parseInt(e[1], 10) > 42 : !i
                        } else t = !1;
                    return t
                }
            })();

        function u() {
            for (var t = !0, e = Date.now(), i = l.length - 1; i >= 0; i--) {
                var o = l[i],
                    c = o.fontFamilyName;
                if (e - o.startTime > h) cc.warnID(4933, c), o.callback(null, c), l.splice(i, 1);
                else {
                    var u = o.refWidth;
                    r.font = "40px " + c, u !== n.safeMeasureText(r, s) ? (l.splice(i, 1), o.callback(null, c)) : t = !1
                }
            }
            t && (clearInterval(a), a = -1)
        }

        function _(t, e, i) {
            var n = new Promise(function(i, n) {
                    (function r() {
                        Date.now() - t >= h ? n() : document.fonts.load("40px " + e).then((function(t) {
                            t.length >= 1 ? i() : setTimeout(r, 100)
                        }), (function() {
                            n()
                        }))
                    })()
                }),
                r = null,
                s = new Promise(function(t, e) {
                    r = setTimeout(e, h)
                });
            Promise.race([s, n]).then((function() {
                r && (clearTimeout(r), r = null), i(null, e)
            }), (function() {
                cc.warnID(4933, e), i(null, e)
            }))
        }
        var f = {
            loadFont: function(t, e) {
                var i = t.url,
                    h = f._getFontFamily(i);
                if (o[h]) return h;
                if (!r) {
                    var d = document.createElement("canvas");
                    d.width = 100, d.height = 100, r = d.getContext("2d")
                }
                var p = "40px " + h;
                r.font = p;
                var m = n.safeMeasureText(r, s),
                    y = document.createElement("style");
                y.type = "text/css";
                var v = "";
                isNaN(h - 0) ? v += "@font-face { font-family:" + h + "; src:" : v += "@font-face { font-family:'" + h + "'; src:", v += "url('" + i + "');", y.textContent = v + "}", document.body.appendChild(y);
                var g = document.createElement("div"),
                    x = g.style;
                if (x.fontFamily = h, g.innerHTML = ".", x.position = "absolute", x.left = "-100px", x.top = "-100px", document.body.appendChild(g), c()) _(Date.now(), h, e);
                else {
                    var b = {
                        fontFamilyName: h,
                        refWidth: m,
                        callback: e,
                        startTime: Date.now()
                    };
                    l.push(b), -1 === a && (a = setInterval(u, 100))
                }
                o[h] = y
            },
            _getFontFamily: function(t) {
                var e = t.lastIndexOf(".ttf");
                if (-1 === e) return t;
                var i, n = t.lastIndexOf("/");
                return -1 !== (i = -1 === n ? t.substring(0, e) + "_LABEL" : t.substring(n + 1, e) + "_LABEL").indexOf(" ") && (i = '"' + i + '"'), i
            }
        };
        e.exports = f
    }), {
        "../utils/text-utils": 307
    }],
    153: [(function(t, e, i) {
        "use strict";
        t("./downloader"), t("./loader"), t("./loading-items"), t("./pipeline"), t("./CCLoader")
    }), {
        "./CCLoader": 145,
        "./downloader": 151,
        "./loader": 154,
        "./loading-items": 155,
        "./pipeline": 158
    }],
    154: [(function(t, e, i) {
        "use strict";
        var n = t("../platform/js"),
            r = t("../platform/CCSAXParser").plistParser,
            s = t("./pipeline"),
            o = t("../assets/CCTexture2D"),
            a = t("./uuid-loader"),
            l = t("./font-loader");

        function h(t) {
            if ("string" != typeof t.content) return new Error("JSON Loader: Input item doesn't contain string content");
            try {
                return JSON.parse(t.content)
            } catch (e) {
                return new Error("JSON Loader: Parse json [" + t.id + "] failed : " + e)
            }
        }

        function c(t) {
            if (t._owner instanceof cc.Asset) return null;
            var e = t.content;
            if (cc.sys.platform !== cc.sys.FB_PLAYABLE_ADS && !(e instanceof Image)) return new Error("Image Loader: Input item doesn't contain Image content");
            var i = t.texture || new o;
            return i._uuid = t.uuid, i.url = t.url, i._setRawAsset(t.rawUrl, !1), i._nativeAsset = e, i
        }

        function u(t, e) {
            if (t._owner instanceof cc.Asset) return null;
            var i = new cc.AudioClip;
            return i._setRawAsset(t.rawUrl, !1), i._nativeAsset = t.content, i.url = t.url, i
        }

        function _(t) {
            return t.load ? t.load(t.content) : null
        }
        var f = 13,
            d = 55727696,
            p = 0,
            m = 6,
            y = 7,
            v = 12;
        var g = 16,
            x = 6,
            b = 8,
            A = 10,
            C = 12,
            T = 14,
            S = 0,
            w = 1,
            E = 3;

        function M(t, e) {
            return t[e] << 8 | t[e + 1]
        }
        var D = {
                png: c,
                jpg: c,
                bmp: c,
                jpeg: c,
                gif: c,
                ico: c,
                tiff: c,
                webp: c,
                image: c,
                pvr: function(t) {
                    var e = t.content instanceof ArrayBuffer ? t.content : t.content.buffer,
                        i = new Int32Array(e, 0, f);
                    if (i[p] != d) return new Error("Invalid magic number in PVR header");
                    var n = i[y],
                        r = i[m],
                        s = i[v] + 52;
                    return {
                        _data: new Uint8Array(e, s),
                        _compressed: !0,
                        width: n,
                        height: r
                    }
                },
                pkm: function(t) {
                    var e = t.content instanceof ArrayBuffer ? t.content : t.content.buffer,
                        i = new Uint8Array(e),
                        n = M(i, x);
                    if (n !== S && n !== w && n !== E) return new Error("Invalid magic number in ETC header");
                    var r = M(i, C),
                        s = M(i, T);
                    return M(i, b), M(i, A), {
                        _data: new Uint8Array(e, g),
                        _compressed: !0,
                        width: r,
                        height: s
                    }
                },
                mp3: u,
                ogg: u,
                wav: u,
                m4a: u,
                json: h,
                ExportJson: h,
                plist: function(t) {
                    if ("string" != typeof t.content) return new Error("Plist Loader: Input item doesn't contain string content");
                    var e = r.parse(t.content);
                    return e || new Error("Plist Loader: Parse [" + t.id + "] failed")
                },
                uuid: a,
                prefab: a,
                fire: a,
                scene: a,
                binary: _,
                dbbin: _,
                bin: _,
                font: l.loadFont,
                eot: l.loadFont,
                ttf: l.loadFont,
                woff: l.loadFont,
                svg: l.loadFont,
                ttc: l.loadFont,
                default: function() {
                    return null
                }
            },
            B = function(t) {
                this.id = "Loader", this.async = !0, this.pipeline = null, this.extMap = n.mixin(t, D)
            };
        B.ID = "Loader", B.prototype.addHandlers = function(t) {
            this.extMap = n.mixin(this.extMap, t)
        }, B.prototype.handle = function(t, e) {
            return (this.extMap[t.type] || this.extMap.default).call(this, t, e)
        }, s.Loader = e.exports = B
    }), {
        "../assets/CCTexture2D": 73,
        "../platform/CCSAXParser": 205,
        "../platform/js": 218,
        "./font-loader": 152,
        "./pipeline": 158,
        "./uuid-loader": 164
    }],
    155: [(function(t, e, i) {
        "use strict";
        var n = t("../platform/callbacks-invoker");
        t("../utils/CCPath");
        var r = t("../platform/js"),
            s = 0 | 998 * Math.random(),
            o = r.createMap(!0),
            a = [],
            l = {
                WORKING: 1,
                COMPLETE: 2,
                ERROR: 3
            },
            h = r.createMap(!0);

        function c(t) {
            return "string" == typeof(t.url || t)
        }

        function u(t) {
            if (t) {
                var e = t.split("?");
                if (e && e[0] && e[1]) {
                    var i = {};
                    return e[1].split("&").forEach((function(t) {
                        var e = t.split("=");
                        i[e[0]] = e[1]
                    })), i
                }
            }
        }

        function _(t, e) {
            var i = "object" == typeof t ? t.url : t,
                n = {
                    queueId: e,
                    id: i,
                    url: i,
                    rawUrl: void 0,
                    urlParam: u(i),
                    type: "",
                    error: null,
                    content: null,
                    complete: !1,
                    states: {},
                    deps: null
                };
            if ("object" == typeof t && (r.mixin(n, t), t.skips))
                for (var s = 0; s < t.skips.length; s++) {
                    var o = t.skips[s];
                    n.states[o] = l.COMPLETE
                }
            return n.rawUrl = n.url, i && !n.type && (n.type = cc.path.extname(i).toLowerCase().substr(1)), n
        }
        var f = [];

        function d(t, e, i) {
            if (!t || !e) return !1;
            var n = !1;
            if (f.push(e.id), e.deps) {
                var r, s, o = e.deps;
                for (r = 0; r < o.length; r++) {
                    if ((s = o[r]).id === t.id) {
                        n = !0;
                        break
                    }
                    if (!(f.indexOf(s.id) >= 0) && (s.deps && d(t, s, !0))) {
                        n = !0;
                        break
                    }
                }
            }
            return i || (f.length = 0), n
        }
        var p = function(t, e, i, a) {
            n.call(this), this._id = ++s, o[this._id] = this, this._pipeline = t, this._errorUrls = r.createMap(!0), this._appending = !1, this._ownerQueue = null, this.onProgress = i, this.onComplete = a, this.map = r.createMap(!0), this.completed = {}, this.totalCount = 0, this.completedCount = 0, this._pipeline ? this.active = !0 : this.active = !1, e && (e.length > 0 ? this.append(e) : this.allComplete())
        };
        p.ItemState = new cc.Enum(l), p.create = function(t, e, i, n) {
            void 0 === i ? "function" == typeof e && (n = e, e = i = null) : void 0 === n && ("function" == typeof e ? (n = i, i = e, e = null) : (n = i, i = null));
            var r = a.pop();
            return r ? (r._pipeline = t, r.onProgress = i, r.onComplete = n, o[r._id] = r, r._pipeline && (r.active = !0), e && r.append(e)) : r = new p(t, e, i, n), r
        }, p.getQueue = function(t) {
            return t.queueId ? o[t.queueId] : null
        }, p.itemComplete = function(t) {
            var e = o[t.queueId];
            e && e.itemComplete(t.id)
        }, p.initQueueDeps = function(t) {
            var e = h[t._id];
            e ? (e.completed.length = 0, e.deps.length = 0) : e = h[t._id] = {
                completed: [],
                deps: []
            }
        }, p.registerQueueDep = function(t, e) {
            var i = t.queueId || t;
            if (!i) return !1;
            var n = h[i];
            if (n) - 1 === n.deps.indexOf(e) && n.deps.push(e);
            else if (t.id)
                for (var r in h) {
                    var s = h[r]; - 1 !== s.deps.indexOf(t.id) && -1 === s.deps.indexOf(e) && s.deps.push(e)
                }
        }, p.finishDep = function(t) {
            for (var e in h) {
                var i = h[e]; - 1 !== i.deps.indexOf(t) && -1 === i.completed.indexOf(t) && i.completed.push(t)
            }
        };
        var m = p.prototype;
        r.mixin(m, n.prototype), m.append = function(t, e) {
            if (!this.active) return [];
            e && !e.deps && (e.deps = []), this._appending = !0;
            var i, n, r, s = [];
            for (i = 0; i < t.length; ++i)
                if (!(n = t[i]).queueId || this.map[n.id]) {
                    if (c(n)) {
                        var a = (r = _(n, this._id)).id;
                        this.map[a] || (this.map[a] = r, this.totalCount++, e && e.deps.push(r), p.registerQueueDep(e || this._id, a), s.push(r))
                    }
                } else {
                    if (this.map[n.id] = n, e && e.deps.push(n), n.complete || d(e, n)) {
                        this.totalCount++, this.itemComplete(n.id);
                        continue
                    }
                    var l = this,
                        h = o[n.queueId];
                    h && (this.totalCount++, p.registerQueueDep(e || this._id, n.id), h.addListener(n.id, (function(t) {
                        l.itemComplete(t.id)
                    })))
                }
            return this._appending = !1, this.completedCount === this.totalCount ? this.allComplete() : this._pipeline.flowIn(s), s
        }, m._childOnProgress = function(t) {
            if (this.onProgress) {
                var e = h[this._id];
                this.onProgress(e ? e.completed.length : this.completedCount, e ? e.deps.length : this.totalCount, t)
            }
        }, m.allComplete = function() {
            var t = r.isEmptyObject(this._errorUrls) ? null : this._errorUrls;
            this.onComplete && this.onComplete(t, this)
        }, m.isCompleted = function() {
            return this.completedCount >= this.totalCount
        }, m.isItemCompleted = function(t) {
            return !!this.completed[t]
        }, m.exists = function(t) {
            return !!this.map[t]
        }, m.getContent = function(t) {
            var e = this.map[t],
                i = null;
            return e && (e.content ? i = e.content : e.alias && (i = e.alias.content)), i
        }, m.getError = function(t) {
            var e = this.map[t],
                i = null;
            return e && (e.error ? i = e.error : e.alias && (i = e.alias.error)), i
        }, m.addListener = n.prototype.on, m.hasListener = n.prototype.hasEventListener, m.removeListener = n.prototype.off, m.removeAllListeners = n.prototype.removeAll, m.removeItem = function(t) {
            var e = this.map[t];
            e && this.completed[e.alias || t] && (delete this.completed[t], delete this.map[t], e.alias && (delete this.completed[e.alias.id], delete this.map[e.alias.id]), this.completedCount--, this.totalCount--)
        }, m.itemComplete = function(t) {
            var e = this.map[t];
            if (e) {
                var i = t in this._errorUrls;
                if (e.error instanceof Error || r.isString(e.error) ? this._errorUrls[t] = e.error : e.error ? r.mixin(this._errorUrls, e.error) : !e.error && i && delete this._errorUrls[t], this.completed[t] = e, this.completedCount++, p.finishDep(e.id), this.onProgress) {
                    var n = h[this._id];
                    this.onProgress(n ? n.completed.length : this.completedCount, n ? n.deps.length : this.totalCount, e)
                }
                this.emit(t, e), this.removeAll(t), !this._appending && this.completedCount >= this.totalCount && this.allComplete()
            }
        }, m.destroy = function() {
            this.active = !1, this._appending = !1, this._pipeline = null, this._ownerQueue = null, r.clear(this._errorUrls), this.onProgress = null, this.onComplete = null, this.map = r.createMap(!0), this.completed = {}, this.totalCount = 0, this.completedCount = 0, n.call(this), h[this._id] && (h[this._id].completed.length = 0, h[this._id].deps.length = 0), delete o[this._id], delete h[this._id], -1 === a.indexOf(this) && a.length < 10 && a.push(this)
        }, cc.LoadingItems = e.exports = p
    }), {
        "../platform/callbacks-invoker": 211,
        "../platform/js": 218,
        "../utils/CCPath": 289
    }],
    156: [(function(t, e, i) {
        "use strict";
        var n = t("./pipeline"),
            r = "MD5Pipe",
            s = /.*[/\\][0-9a-fA-F]{2}[/\\]([0-9a-fA-F-]{8,})/,
            o = function(t, e, i) {
                this.id = r, this.async = !1, this.pipeline = null, this.md5AssetsMap = t, this.md5NativeAssetsMap = e, this.libraryBase = i
            };
        o.ID = r, o.prototype.handle = function(t) {
            return t.url = this.transformURL(t.url), null
        }, o.prototype.transformURL = function(t) {
            var e = !t.startsWith(this.libraryBase) ? this.md5NativeAssetsMap : this.md5AssetsMap;
            return t = t.replace(s, (function(t, i) {
                var n = e[i];
                return n ? t + "." + n : t
            }))
        }, n.MD5Pipe = e.exports = o
    }), {
        "./pipeline": 158
    }],
    157: [(function(t, e, i) {
        "use strict";
        var n = t("./unpackers"),
            r = t("../utils/misc").pushToMap,
            s = {
                Invalid: 0,
                Removed: 1,
                Downloading: 2,
                Loaded: 3
            };

        function o() {
            this.unpacker = null, this.state = s.Invalid, this.duration = 0
        }
        var a = {},
            l = {},
            h = {},
            c = [],
            u = null;

        function _(t, e) {
            return new Error("Can not retrieve " + t + " from packer " + e)
        }
        e.exports = {
            msToRelease: 12e4,
            initPacks: function(t) {
                for (var e in l = t, a = {}, t)
                    for (var i = t[e], n = 0; n < i.length; n++) {
                        var s = i[n],
                            o = 1 === i.length;
                        r(a, s, e, o)
                    }
            },
            _loadNewPack: function(t, e, i) {
                var n = this,
                    r = cc.AssetLibrary.getLibUrlNoExt(e) + ".json";
                cc.loader.load({
                    url: r,
                    ignoreMaxConcurrency: !0
                }, (function(s, o) {
                    if (s) return cc.errorID(4916, t), i(s);
                    h[e].url = r;
                    var a = n._doLoadNewPack(t, e, o);
                    a ? i(null, a) : i(_(t, e))
                }))
            },
            _doPreload: function(t, e) {
                var i = h[t];
                i || ((i = h[t] = new o).state = s.Downloading), i.state !== s.Loaded && (i.unpacker = new n.JsonUnpacker, i.unpacker.load(l[t], e), i.state = s.Loaded)
            },
            _doLoadNewPack: function(t, e, i) {
                var r = h[e];
                if (r.state !== s.Loaded) {
                    "string" == typeof i && (i = JSON.parse(i)), Array.isArray(i) ? r.unpacker = new n.JsonUnpacker : i.type === n.TextureUnpacker.ID && (r.unpacker = new n.TextureUnpacker), r.unpacker.load(l[e], i), r.state = s.Loaded, r.duration = 0, c.push(e);
                    var o = this;
                    u || (u = setInterval((function() {
                        for (var t = o.msToRelease / 5e3, e = c.length - 1; e >= 0; e--) {
                            var i = c[e];
                            ++h[i].duration > t && o.release(i)
                        }
                        0 === c.length && (clearInterval(u), u = null)
                    }), 5e3))
                }
                return r.unpacker.retrieve(t)
            },
            _selectLoadedPack: function(t) {
                for (var e = s.Invalid, i = "", n = 0; n < t.length; n++) {
                    var r = t[n],
                        o = h[r];
                    if (o) {
                        var a = o.state;
                        if (a === s.Loaded) return r;
                        a > e && (e = a, i = r)
                    }
                }
                return e !== s.Invalid ? i : t[0]
            },
            load: function(t, e) {
                var i = t.uuid,
                    n = a[i];
                if (n) {
                    Array.isArray(n) && (n = this._selectLoadedPack(n));
                    var r = h[n];
                    if (r && r.state === s.Loaded) {
                        r.duration = 0;
                        var l = r.unpacker.retrieve(i);
                        return l || _(i, n)
                    }
                    return r || (console.log("Create unpacker %s for %s", n, i), (r = h[n] = new o).state = s.Downloading), this._loadNewPack(i, n, e), null
                }
            },
            release: function(t) {
                var e = h[t];
                e && (cc.loader.release(e.url), delete h[t], cc.js.array.fastRemove(c, t))
            }
        }
    }), {
        "../utils/misc": 300,
        "./unpackers": 162
    }],
    158: [(function(t, e, i) {
        "use strict";
        var n = t("../platform/js"),
            r = t("./loading-items"),
            s = r.ItemState;

        function o(t, e) {
            var i = t.id,
                n = e.states[i],
                r = t.next,
                a = t.pipeline;
            if (!e.error && n !== s.WORKING && n !== s.ERROR)
                if (n === s.COMPLETE) r ? o(r, e) : a.flowOut(e);
                else {
                    e.states[i] = s.WORKING;
                    var l = t.handle(e, (function(t, n) {
                        t ? (e.error = t, e.states[i] = s.ERROR, a.flowOut(e)) : (n && (e.content = n), e.states[i] = s.COMPLETE, r ? o(r, e) : a.flowOut(e))
                    }));
                    l instanceof Error ? (e.error = l, e.states[i] = s.ERROR, a.flowOut(e)) : void 0 !== l && (null !== l && (e.content = l), e.states[i] = s.COMPLETE, r ? o(r, e) : a.flowOut(e))
                }
        }
        var a = function(t) {
            this._pipes = t, this._cache = n.createMap(!0);
            for (var e = 0; e < t.length; ++e) {
                var i = t[e];
                i.handle && i.id && (i.pipeline = this, i.next = e < t.length - 1 ? t[e + 1] : null)
            }
        };
        a.ItemState = s;
        var l = a.prototype;
        l.insertPipe = function(t, e) {
            if (!t.handle || !t.id || e > this._pipes.length) cc.warnID(4921);
            else if (this._pipes.indexOf(t) > 0) cc.warnID(4922);
            else {
                t.pipeline = this;
                var i = null;
                e < this._pipes.length && (i = this._pipes[e]);
                var n = null;
                e > 0 && (n = this._pipes[e - 1]), n && (n.next = t), t.next = i, this._pipes.splice(e, 0, t)
            }
        }, l.insertPipeAfter = function(t, e) {
            var i = this._pipes.indexOf(t);
            i < 0 || this.insertPipe(e, i + 1)
        }, l.appendPipe = function(t) {
            t.handle && t.id && (t.pipeline = this, t.next = null, this._pipes.length > 0 && (this._pipes[this._pipes.length - 1].next = t), this._pipes.push(t))
        }, l.flowIn = function(t) {
            var e, i, n = this._pipes[0];
            if (n) {
                for (e = 0; e < t.length; e++) i = t[e], this._cache[i.id] = i;
                for (e = 0; e < t.length; e++) o(n, i = t[e])
            } else
                for (e = 0; e < t.length; e++) this.flowOut(t[e])
        }, l.flowInDeps = function(t, e, i) {
            return r.create(this, (function(t, e) {
                i(t, e), e.destroy()
            })).append(e, t)
        }, l.flowOut = function(t) {
            t.error ? delete this._cache[t.id] : this._cache[t.id] || (this._cache[t.id] = t), t.complete = !0, r.itemComplete(t)
        }, l.copyItemStates = function(t, e) {
            if (e instanceof Array)
                for (var i = 0; i < e.length; ++i) e[i].states = t.states;
            else e.states = t.states
        }, l.getItem = function(t) {
            var e = this._cache[t];
            return e ? (e.alias && (e = e.alias), e) : e
        }, l.removeItem = function(t) {
            var e = this._cache[t];
            return e && e.complete && delete this._cache[t], e
        }, l.clear = function() {
            for (var t in this._cache) {
                var e = this._cache[t];
                delete this._cache[t], e.complete || (e.error = new Error("Canceled manually"), this.flowOut(e))
            }
        }, cc.Pipeline = e.exports = a
    }), {
        "../platform/js": 218,
        "./loading-items": 155
    }],
    159: [(function(t, e, i) {
        "use strict"
    }), {
        "../platform/js": 218
    }],
    160: [(function(t, e, i) {
        "use strict";
        var n = t("./pipeline"),
            r = "SubPackPipe",
            s = /.*[/\\][0-9a-fA-F]{2}[/\\]([0-9a-fA-F-]{8,})/;

        function o(t) {
            var e = t.match(s);
            return e ? e[1] : ""
        }
        var a = Object.create(null),
            l = function(t) {
                for (var e in this.id = r, this.async = !1, this.pipeline = null, t) {
                    var i = t[e];
                    i.uuids && i.uuids.forEach((function(t) {
                        a[t] = i.path
                    }))
                }
            };
        l.ID = r, l.prototype.handle = function(t) {
            return t.url = this.transformURL(t.url), null
        }, l.prototype.transformURL = function(t) {
            var e = o(t);
            if (e) {
                var i = a[e];
                if (i) return t.replace("res/raw-assets/", i + "raw-assets/")
            }
            return t
        }, n.SubPackPipe = e.exports = l
    }), {
        "./pipeline": 158
    }],
    161: [(function(t, e, i) {
        "use strict";
        var n = t("./utils").urlAppendTimestamp;
        e.exports = function(t, e) {
            var i = t.url;
            i = n(i);
            var r = cc.loader.getXMLHttpRequest(),
                s = "Load text file failed: " + i;
            r.open("GET", i, !0), r.overrideMimeType && r.overrideMimeType("text/plain; charset=utf-8"), r.onload = function() {
                4 === r.readyState ? 200 === r.status || 0 === r.status ? e(null, r.responseText) : e({
                    status: r.status,
                    errorMessage: s + "(wrong status)"
                }) : e({
                    status: r.status,
                    errorMessage: s + "(wrong readyState)"
                })
            }, r.onerror = function() {
                e({
                    status: r.status,
                    errorMessage: s + "(error)"
                })
            }, r.ontimeout = function() {
                e({
                    status: r.status,
                    errorMessage: s + "(time out)"
                })
            }, r.send(null)
        }
    }), {
        "./utils": 163
    }],
    162: [(function(t, e, i) {
        "use strict";
        var n = t("../assets/CCTexture2D"),
            r = t("../platform/js");

        function s() {
            this.jsons = {}
        }

        function o() {
            this.contents = {}
        }
        s.prototype.load = function(t, e) {
            e.length !== t.length && cc.errorID(4915);
            for (var i = 0; i < t.length; i++) {
                var n = t[i],
                    r = e[i];
                this.jsons[n] = r
            }
        }, s.prototype.retrieve = function(t) {
            return this.jsons[t] || null
        }, o.ID = r._getClassId(n), o.prototype.load = function(t, e) {
            var i = e.data.split("|");
            i.length !== t.length && cc.errorID(4915);
            for (var n = 0; n < t.length; n++) this.contents[t[n]] = i[n]
        }, o.prototype.retrieve = function(t) {
            var e = this.contents[t];
            return e ? {
                __type__: o.ID,
                content: e
            } : null
        }, e.exports = {
            JsonUnpacker: s,
            TextureUnpacker: o
        }
    }), {
        "../assets/CCTexture2D": 73,
        "../platform/js": 218
    }],
    163: [(function(t, e, i) {
        "use strict";
        var n = /\?/;
        e.exports = {
            urlAppendTimestamp: function(t) {
                return cc.game.config.noCache && "string" == typeof t && (n.test(t) ? t += "&_t=" + (new Date - 0) : t += "?_t=" + (new Date - 0)), t
            }
        }
    }), {}],
    164: [(function(t, e, i) {
        "use strict";
        var n = t("../platform/js"),
            r = t("../CCDebug");
        t("../platform/deserialize");
        var s = t("./loading-items");

        function o(t) {
            return t && (t[0] && "cc.Scene" === t[0].__type__ || t[1] && "cc.Scene" === t[1].__type__ || t[0] && "cc.Prefab" === t[0].__type__)
        }

        function a(t, e, i, n) {
            var r, s, o, a = i.uuidList,
                l = i.uuidObjList,
                h = i.uuidPropList,
                c = i._stillUseUrl,
                u = t.dependKeys = [];
            if (n)
                for (r = [], s = 0; s < a.length; s++) {
                    o = a[s];
                    var _ = l[s],
                        f = h[s],
                        d = cc.AssetLibrary._getAssetInfoInRuntime(o);
                    if (d.raw) {
                        var p = d.url;
                        _[f] = p, u.push(p)
                    } else r.push({
                        type: "uuid",
                        uuid: o,
                        deferredLoadRaw: !0,
                        _owner: _,
                        _ownerProp: f,
                        _stillUseUrl: c[s]
                    })
                } else {
                    for (r = new Array(a.length), s = 0; s < a.length; s++) o = a[s], r[s] = {
                        type: "uuid",
                        uuid: o,
                        _owner: l[s],
                        _ownerProp: h[s],
                        _stillUseUrl: c[s]
                    };
                    e._native && !e.constructor.preventPreloadNativeObject && r.push({
                        url: e.nativeUrl,
                        _owner: e,
                        _ownerProp: "_nativeAsset"
                    })
                }
            return r
        }

        function l(t, e, i, n, r) {
            e.content = i;
            var o = e.dependKeys;
            t.flowInDeps(e, n, (function(t, e) {
                var a, l = e.map;
                for (var h in l)(a = l[h]).uuid && a.content && (a.content._uuid = a.uuid);

                function c(t) {
                    var e = t.content;
                    this._stillUseUrl && (e = e && cc.RawAsset.wasRawAssetType(e.constructor) ? e.nativeUrl : t.rawUrl), "_nativeAsset" === this._ownerProp && (this._owner.url = t.url), this._owner[this._ownerProp] = e, t.uuid !== i._uuid && o.indexOf(t.id) < 0 && o.push(t.id)
                }
                for (var u = 0; u < n.length; u++) {
                    var _ = n[u],
                        f = _.uuid,
                        d = _.url;
                    _._owner, _._ownerProp;
                    if (a = l[d]) {
                        var p = _;
                        if (a.complete || a.content) {
                            if (a.error) cc._throw(a.error.message || a.error.errorMessage || a.error);
                            else c.call(p, a)
                        } else {
                            var m = s.getQueue(a),
                                y = m._callbackTable[f];
                            y ? y.unshift(c, p) : m.addListener(f, c, p)
                        }
                    }
                }
                if (!t && i.onLoad) try {
                    i.onLoad()
                } catch (t) {
                    cc._throw(t)
                }
                r(t, i)
            }))
        }

        function h(t, e, i) {
            var n = e.deferredLoadRaw;
            return n ? t instanceof cc.Asset && t.constructor.preventDeferredLoadDependents && (n = !1) : i && (t instanceof cc.SceneAsset || t instanceof cc.Prefab) && (n = t.asyncLoadAssets), n
        }

        function c(t, e) {
            var i, s;
            if ("string" == typeof t.content) try {
                i = JSON.parse(t.content)
            } catch (e) {
                return new Error(r.getError(4923, t.id, e.stack))
            } else {
                if ("object" != typeof t.content) return new Error(r.getError(4924));
                i = t.content
            }
            var c = o(i);
            s = c ? cc._MissingScript.safeFindClass : function(t) {
                var e = n._getClassById(t);
                return e || (cc.warnID(4903, t), Object)
            };
            var u, _ = cc.deserialize.Details.pool.get();
            try {
                u = cc.deserialize(i, _, {
                    classFinder: s,
                    target: t.existingAsset,
                    customEnv: t
                })
            } catch (e) {
                cc.deserialize.Details.pool.put(_);
                var f = e.stack;
                return new Error(r.getError(4925, t.id, f))
            }
            u._uuid = t.uuid, u.url = u.nativeUrl;
            var d = a(t, u, _, h(u, t, c));
            if (cc.deserialize.Details.pool.put(_), 0 === d.length) return u.onLoad && u.onLoad(), e(null, u);
            l(this.pipeline, t, u, d, e)
        }
        e.exports = c, c.isSceneObj = o
    }), {
        "../CCDebug": 49,
        "../platform/deserialize": 213,
        "../platform/js": 218,
        "./loading-items": 155
    }],
    165: [(function(t, e, i) {
        "use strict";
        var n = o(t("../../renderer/core/input-assembler")),
            r = o(t("../../renderer/gfx")),
            s = t("./mesh-data");

        function o(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }
        var a = t("../renderer"),
            l = t("../event/event-target");

        function h(t, e, i) {
            t[e] = i._val
        }

        function c(t, e, i) {
            t[e] = i.x, t[e + 1] = i.y
        }

        function u(t, e, i) {
            t[e] = i.x, t[e + 1] = i.y, t[e + 2] = i.z
        }
        var _ = cc.Class({
            name: "cc.Mesh",
            extends: cc.Asset,
            mixins: [l],
            properties: {
                _nativeAsset: {
                    override: !0,
                    get: function() {
                        return this._buffer
                    },
                    set: function(t) {
                        this._buffer = ArrayBuffer.isView(t) ? t.buffer : t, this.initWithBuffer()
                    }
                },
                _vertexBundles: {
                    default: null,
                    type: s.VertexBundle
                },
                _primitives: {
                    default: null,
                    Primitive: s.Primitive
                },
                _minPos: cc.v3(),
                _maxPos: cc.v3(),
                subMeshes: {
                    get: function() {
                        return this._subMeshes
                    },
                    set: function(t) {
                        this._subMeshes = t
                    }
                },
                subDatas: {
                    get: function() {
                        return this._subDatas
                    }
                }
            },
            ctor: function() {
                this._subMeshes = [], this.loaded = !1, this._subDatas = []
            },
            initWithBuffer: function() {
                this._subMeshes.length = 0;
                for (var t = this._primitives, e = 0; e < t.length; e++) {
                    var i = t[e],
                        o = i.data,
                        l = new Uint8Array(this._buffer, o.offset, o.length),
                        h = this._vertexBundles[i.vertexBundleIndices[0]],
                        c = h.data,
                        u = new r.default.VertexFormat(h.formats),
                        _ = new Uint8Array(this._buffer, c.offset, c.length),
                        f = this._canVertexFormatBatch(u),
                        d = new s.MeshData;
                    d.vData = _, d.iData = l, d.vfm = u, d.offset = c.offset, d.canBatch = f, this._subDatas.push(d);
                    var p = new r.default.VertexBuffer(a.device, u, r.default.USAGE_STATIC, _),
                        m = new r.default.IndexBuffer(a.device, i.indexUnit, r.default.USAGE_STATIC, l);
                    this._subMeshes.push(new n.default(p, m))
                }
                this.loaded = !0, this.emit("load")
            },
            _canVertexFormatBatch: function(t) {
                var e = t._attr2el[r.default.ATTR_POSITION];
                return !e || e.type === r.default.ATTR_TYPE_FLOAT32 && t._bytes % 4 == 0
            },
            init: function(t, e) {
                var i = arguments.length > 2 && void 0 !== arguments[2] && arguments[2],
                    o = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : 0,
                    l = new Uint8Array(t._bytes * e),
                    h = new s.MeshData;
                h.vData = l, h.vfm = t, h.vDirty = !0, h.canBatch = this._canVertexFormatBatch(t);
                var c = new r.default.VertexBuffer(a.device, t, i ? r.default.USAGE_DYNAMIC : r.default.USAGE_STATIC, l);
                h.vb = c, this._subMeshes[o] = new n.default(h.vb);
                var u = this._subDatas[o];
                u && (u.vb && u.vb.destroy(), u.ib && u.ib.destroy()), this._subDatas[o] = h, this.loaded = !0, this.emit("load"), this.emit("init-format")
            },
            setVertices: function(t, e, i) {
                i = i || 0;
                var n = this._subDatas[i],
                    s = n.vfm.element(t);
                if (!s) return cc.warn("Cannot find " + t + " attribute in vertex defines.");
                var o = "number" == typeof e[0],
                    a = s.num,
                    l = o ? e.length / a | 0 : e.length;
                n.vData.byteLength < l * s.stride && (n.vData = new Uint8Array(l * n.vfm._bytes));
                var _ = void 0,
                    f = 4;
                t === r.default.ATTR_COLOR ? o ? (_ = n.getVData(), f = 1) : _ = n.getVData(Uint32Array) : _ = n.getVData(Float32Array);
                var d = s.stride / f,
                    p = s.offset / f;
                if (o)
                    for (var m = 0, y = e.length / a; m < y; m++)
                        for (var v = m * a, g = m * d + p, x = 0; x < a; x++) _[g + x] = e[v + x];
                else {
                    var b = void 0;
                    b = t === r.default.ATTR_COLOR ? h : 2 === a ? c : u;
                    for (var A = 0, C = e.length; A < C; A++) {
                        b(_, A * d + p, e[A])
                    }
                }
                n.vDirty = !0
            },
            setIndices: function(t, e, i) {
                e = e || 0;
                var n = t;
                t instanceof Uint16Array ? n = new Uint8Array(t.buffer, t.byteOffset, t.byteLength) : Array.isArray(t) && (n = new Uint16Array(t), n = new Uint8Array(n.buffer, n.byteOffset, n.byteLength));
                var s = i ? r.default.USAGE_DYNAMIC : r.default.USAGE_STATIC,
                    o = this._subDatas[e];
                if (o.ib) o.iData = n, o.iDirty = !0;
                else {
                    o.iData = n;
                    var l = new r.default.IndexBuffer(a.device, r.default.INDEX_FMT_UINT16, s, n, n.byteLength / r.default.IndexBuffer.BYTES_PER_INDEX[r.default.INDEX_FMT_UINT16]);
                    o.ib = l, this._subMeshes[e]._indexBuffer = o.ib
                }
            },
            setPrimitiveType: function(t, e) {
                e = e || 0, this._subMeshes[e] ? this._subMeshes[e]._primitiveType = t : cc.warn("Do not have sub mesh at index " + e)
            },
            clear: function() {
                this._subMeshes.length = 0;
                for (var t = this._subDatas, e = 0, i = t.length; e < i; e++) {
                    var n = t[e].vb;
                    n && n.destroy();
                    var r = t[e].ib;
                    r && r.destroy()
                }
                t.length = 0
            },
            setBoundingBox: function(t, e) {
                this._minPos = t, this._maxPos = e
            },
            destroy: function() {
                this.clear()
            },
            _uploadData: function() {
                for (var t = this._subDatas, e = 0, i = t.length; e < i; e++) {
                    var n = t[e];
                    if (n.vDirty) {
                        var r = n.vb,
                            s = n.vData;
                        r.update(0, s), n.vDirty = !1
                    }
                    if (n.iDirty) {
                        var o = n.ib,
                            a = n.iData;
                        o.update(0, a), n.iDirty = !1
                    }
                }
            }
        });
        cc.Mesh = e.exports = _
    }), {
        "../../renderer/core/input-assembler": 350,
        "../../renderer/gfx": 360,
        "../event/event-target": 131,
        "../renderer": 247,
        "./mesh-data": 168
    }],
    166: [(function(t, e, i) {
        "use strict";
        var n = a(t("../../renderer/gfx")),
            r = a(t("../../renderer/core/input-assembler")),
            s = a(t("../geom-utils")),
            o = (a(t("../assets/material/custom-properties")), t("../utils/mesh-util"));

        function a(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }
        var l = t("../components/CCRenderComponent"),
            h = t("./CCMesh"),
            c = t("../renderer/render-flow"),
            u = t("../renderer"),
            _ = t("../assets/material/CCMaterial"),
            f = cc.Color.BLACK,
            d = cc.Enum({
                OFF: 0,
                ON: 1
            }),
            p = cc.Class({
                name: "cc.MeshRenderer",
                extends: l,
                editor: !1,
                properties: {
                    _mesh: {
                        default: null,
                        type: h
                    },
                    _receiveShadows: !1,
                    _shadowCastingMode: d.OFF,
                    _enableAutoBatch: !1,
                    mesh: {
                        get: function() {
                            return this._mesh
                        },
                        set: function(t) {
                            this._mesh !== t && (this._setMesh(t), t ? (this.markForRender(!0), this._activateMaterial(!0), this.markForUpdateRenderData(!0), this.node._renderFlag |= c.FLAG_TRANSFORM) : this.markForRender(!1))
                        },
                        type: h,
                        animatable: !1
                    },
                    textures: {
                        default: [],
                        type: cc.Texture2D,
                        visible: !1
                    },
                    receiveShadows: {
                        get: function() {
                            return this._receiveShadows
                        },
                        set: function(t) {
                            this._receiveShadows = t, this._updateReceiveShadow()
                        },
                        animatable: !1
                    },
                    shadowCastingMode: {
                        get: function() {
                            return this._shadowCastingMode
                        },
                        set: function(t) {
                            this._shadowCastingMode = t, this._updateCastShadow()
                        },
                        type: d,
                        animatable: !1
                    },
                    enableAutoBatch: {
                        get: function() {
                            return this._enableAutoBatch
                        },
                        set: function(t) {
                            this._enableAutoBatch = t
                        }
                    }
                },
                statics: {
                    ShadowCastingMode: d
                },
                ctor: function() {
                    this._wireFrameDatas = [], this._boundingBox = null, this._customProperties = new cc.CustomProperties
                },
                onEnable: function() {
                    if (this._super(), this._mesh && !this._mesh.loaded) {
                        this.disableRender();
                        var t = this;
                        this._mesh.once("load", (function() {
                            t._setMesh(t._mesh), t._activateMaterial()
                        })), (0, o.postLoadMesh)(this._mesh)
                    } else this._setMesh(this._mesh), this._activateMaterial();
                    this._updateRenderNode()
                },
                onDestroy: function() {
                    this._setMesh(null), cc.pool.assembler.put(this._assembler)
                },
                _updateRenderNode: function() {
                    this._assembler.setRenderNode(this.node)
                },
                _setMesh: function(t) {
                    this._mesh && this._mesh.off("init-format", this._updateMeshAttribute, this), t && t.on("init-format", this._updateMeshAttribute, this), this._mesh = t
                },
                _getDefaultMaterial: function() {
                    return _.getBuiltinMaterial("unlit")
                },
                _activateMaterial: function(t) {
                    var e = this._mesh;
                    if (e && 0 !== e._subDatas.length) {
                        s.default && (this._boundingBox = s.default.Aabb.fromPoints(s.default.Aabb.create(), e._minPos, e._maxPos));
                        var i = this.textures;
                        if (i && i.length > 0)
                            for (var n = 0; n < i.length; n++) {
                                var r = this.sharedMaterials[n];
                                r || ((r = cc.Material.getInstantiatedMaterial(this._getDefaultMaterial(), this)).setProperty("diffuseTexture", i[n]), this.setMaterial(n, r))
                            }
                        var o = this.sharedMaterials;
                        if (!o[0]) {
                            var a = this._getDefaultMaterial();
                            o[0] = a
                        }
                        this._updateReceiveShadow(), this._updateCastShadow(), this._updateMeshAttribute(), this.markForUpdateRenderData(!0), this.markForRender(!0)
                    } else this.disableRender()
                },
                _updateReceiveShadow: function() {
                    this._customProperties.define("CC_USE_SHADOW_MAP", this._receiveShadows)
                },
                _updateCastShadow: function() {
                    this._customProperties.define("CC_SHADOW_CASTING", this._shadowCastingMode === d.ON)
                },
                _updateMeshAttribute: function() {
                    var t = this._mesh && this._mesh.subDatas;
                    if (t) {
                        var e = t[0].vfm;
                        this._customProperties.define("CC_USE_ATTRIBUTE_COLOR", !!e.element(n.default.ATTR_COLOR)), this._customProperties.define("CC_USE_ATTRIBUTE_UV0", !!e.element(n.default.ATTR_UV0)), this._customProperties.define("CC_USE_ATTRIBUTE_NORMAL", !!e.element(n.default.ATTR_NORMAL)), this._customProperties.define("CC_USE_ATTRIBUTE_TANGENT", !!e.element(n.default.ATTR_TANGENT)), this._wireFrameDatas.length = 0
                    }
                },
                _updateWireFrameDatas: function() {
                    var t = this._wireFrameDatas,
                        e = this._mesh.subMeshes;
                    if (e.length !== t.length) {
                        t.length = e.length;
                        for (var i = this._mesh._subDatas, n = 0; n < e.length; n++) t[n] = this._createWireFrameData(e[n], i[n].iData)
                    }
                },
                _createWireFrameData: function(t, e) {
                    var i = new _;
                    i.copy(_.getBuiltinMaterial("unlit")), i.setProperty("diffuseColor", f);
                    for (var s = [], o = 0; o < e.length; o += 3) {
                        var a = e[o + 0],
                            l = e[o + 1],
                            h = e[o + 2];
                        s.push(a, l, l, h, h, a)
                    }
                    var c = new Uint16Array(s),
                        d = new n.default.IndexBuffer(u.device, n.default.INDEX_FMT_UINT16, n.default.USAGE_STATIC, c, c.length);
                    return {
                        material: i,
                        ia: new r.default(t._vertexBuffer, d, n.default.PT_LINES)
                    }
                },
                _checkBacth: function() {}
            });
        cc.MeshRenderer = e.exports = p
    }), {
        "../../renderer/core/input-assembler": 350,
        "../../renderer/gfx": 360,
        "../assets/material/CCMaterial": 75,
        "../assets/material/custom-properties": 76,
        "../components/CCRenderComponent": 106,
        "../geom-utils": 136,
        "../renderer": 247,
        "../renderer/render-flow": 248,
        "../utils/mesh-util": 299,
        "./CCMesh": 165
    }],
    167: [(function(t, e, i) {
        "use strict";
        t("./CCMesh"), t("./CCMeshRenderer"), t("./mesh-renderer")
    }), {
        "./CCMesh": 165,
        "./CCMeshRenderer": 166,
        "./mesh-renderer": 169
    }],
    168: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.Primitive = i.VertexBundle = i.VertexFormat = i.BufferRange = void 0, i.MeshData = o;
        var n = (function(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        })(t("../../renderer/gfx"));
        var r = i.BufferRange = cc.Class({
                name: "cc.BufferRange",
                properties: {
                    offset: 0,
                    length: 0
                }
            }),
            s = i.VertexFormat = cc.Class({
                name: "cc.mesh.VertexFormat",
                properties: {
                    name: "",
                    type: -1,
                    num: -1,
                    normalize: !1
                }
            });
        i.VertexBundle = cc.Class({
            name: "cc.mesh.VertexBundle",
            properties: {
                data: {
                    default: null,
                    type: r
                },
                formats: {
                    default: [],
                    type: s
                },
                verticesCount: 0
            }
        }), i.Primitive = cc.Class({
            name: "cc.mesh.Primitive",
            properties: {
                vertexBundleIndices: {
                    default: [],
                    type: cc.Float
                },
                data: {
                    default: null,
                    type: r
                },
                indexUnit: n.default.INDEX_FMT_UINT16,
                topology: n.default.PT_TRIANGLES
            }
        });

        function o() {
            this.vData = null, this.float32VData = null, this.uint32VData = null, this.iData = null, this.uint16IData = null, this.vfm = null, this.offset = 0, this.vb = null, this.ib = null, this.vDirty = !1, this.iDirty = !1
        }
        o.prototype.getVData = function(t) {
            return t === Float32Array ? (this.float32VData || (this.float32VData = new Float32Array(this.vData.buffer, this.vData.byteOffset, this.vData.byteLength / 4)), this.float32VData) : t === Uint32Array ? (this.uint32VData || (this.uint32VData = new Uint32Array(this.vData.buffer, this.vData.byteOffset, this.vData.byteLength / 4)), this.uint32VData) : this.vData
        }, o.prototype.getIData = function(t) {
            return t === Uint16Array ? (this.uint16IData || (this.uint16IData = new Uint16Array(this.iData.buffer, this.iData.byteOffset, this.iData.byteLength / 2)), this.uint16IData) : this.iData
        }
    }), {
        "../../renderer/gfx": 360
    }],
    169: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.default = void 0;
        var n = o(t("../renderer/assembler")),
            r = o(t("../../renderer/gfx")),
            s = o(t("../vmath/vec3"));

        function o(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }

        function a(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }

        function l(t, e) {
            if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
            return !e || "object" != typeof e && "function" != typeof e ? t : e
        }

        function h(t, e) {
            if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e);
            t.prototype = Object.create(e && e.prototype, {
                constructor: {
                    value: t,
                    enumerable: !1,
                    writable: !0,
                    configurable: !0
                }
            }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e)
        }
        var c = t("./CCMeshRenderer"),
            u = (function(t) {
                function e(i) {
                    a(this, e);
                    var n = l(this, t.call(this, i));
                    return n._renderNode = null, n
                }
                return h(e, t), e.prototype.setRenderNode = function(t) {
                    this._renderNode = t
                }, e.prototype.fillBuffers = function(t, e) {
                    if (t.mesh) {
                        t.mesh._uploadData();
                        for (var i = e.customProperties && e.customProperties.getHash() === t._customProperties.getHash(), n = e.cullingMask === t.node._cullingMask, s = t.enableAutoBatch, o = t.sharedMaterials, a = t.mesh._subMeshes, l = t.mesh.subDatas, h = 0; h < a.length; h++) {
                            var c = a[h],
                                u = l[h],
                                _ = o[h] || o[0];
                            s && u.canBatch && c._primitiveType === r.default.PT_TRIANGLES ? (i && n && _.getHash() === e.material.getHash() || (e._flush(), e.material = _, e.cullingMask = t.node._cullingMask, e.customProperties = t._customProperties, e.node = e._dummyNode), this._fillBuffer(t, u, e)) : (e._flush(), e.material = _, e.cullingMask = t.node._cullingMask, e.customProperties = t._customProperties, e.node = this._renderNode, e._flushIA(c))
                        }
                        cc.macro.SHOW_MESH_WIREFRAME && this._drawWireFrames(t, e)
                    }
                }, e.prototype._fillBuffer = function(t, e, i) {
                    for (var n = t.node._worldMatrix, o = e.getVData(Float32Array), a = e.vfm, l = a._attr2el[r.default.ATTR_POSITION].offset / 4, h = a._bytes / 4, c = o.length / h | 0, u = e.getIData(Uint16Array), _ = u.length, f = i.getBuffer("mesh", a), d = f.request(c, _), p = d.indiceOffset, m = d.byteOffset >> 2, y = d.vertexOffset, v = f._vData, g = f._iData, x = cc.v3(), b = 0; b < c; b++) {
                        for (var A = b * h, C = 0; C < l; C++) v[m++] = o[A + C];
                        x.x = o[A + l], x.y = o[A + l + 1], x.z = o[A + l + 2], s.default.transformMat4(x, x, n), v[m++] = x.x, v[m++] = x.y, v[m++] = x.z;
                        for (var T = l + 3; T < h; T++) v[m++] = o[A + T]
                    }
                    for (var S = 0; S < _; S++) g[p + S] = y + u[S]
                }, e.prototype._drawWireFrames = function(t, e) {
                    e._flush(), t._updateWireFrameDatas(), e.node = this._renderNode;
                    for (var i = t._wireFrameDatas, n = 0; n < i.length; n++) {
                        var r = i[n],
                            s = r.material;
                        e.material = s, e._flushIA(r.ia)
                    }
                }, e
            })(n.default);
        i.default = u, n.default.register(c, u), e.exports = i.default
    }), {
        "../../renderer/gfx": 360,
        "../renderer/assembler": 227,
        "../vmath/vec3": 335,
        "./CCMeshRenderer": 166
    }],
    170: [(function(t, e, i) {
        "use strict";
        var n = t("./component-scheduler"),
            r = t("./platform/CCObject").Flags,
            s = t("./platform/js"),
            o = r.IsPreloadStarted,
            a = r.IsOnLoadStarted,
            l = r.IsOnLoadCalled,
            h = r.Deactivating,
            c = cc.Class({
                extends: n.LifeCycleInvoker,
                add: function(t) {
                    this._zero.array.push(t)
                },
                remove: function(t) {
                    this._zero.fastRemove(t)
                },
                cancelInactive: function(t) {
                    n.LifeCycleInvoker.stableRemoveInactive(this._zero, t)
                },
                invoke: function() {
                    this._invoke(this._zero), this._zero.array.length = 0
                }
            }),
            u = n.createInvokeImpl("c.__preload();"),
            _ = n.createInvokeImpl("c.onLoad();c._objFlags|=" + l, !1, l),
            f = new s.Pool(4);

        function d(t, e, i) {
            e ? t._removeComponent(e) : s.array.removeAt(t._components, i)
        }

        function p() {
            this._activatingStack = []
        }
        f.get = function() {
            var t = this._get() || {
                preload: new c(u),
                onLoad: new n.OneOffInvoker(_),
                onEnable: new n.OneOffInvoker(n.invokeOnEnable)
            };
            t.preload._zero.i = -1;
            var e = t.onLoad;
            return e._zero.i = -1, e._neg.i = -1, e._pos.i = -1, (e = t.onEnable)._zero.i = -1, e._neg.i = -1, e._pos.i = -1, t
        };
        var m = cc.Class({
            ctor: p,
            reset: p,
            _activateNodeRecursively: function(t, e, i, n) {
                if (t._objFlags & h) cc.errorID(3816, t.name);
                else {
                    t._activeInHierarchy = !0;
                    for (var r = t._components.length, s = 0; s < r; ++s) {
                        var o = t._components[s];
                        o instanceof cc.Component ? this.activateComp(o, e, i, n) : (d(t, o, s), --s, --r)
                    }
                    t._childArrivalOrder = t._children.length;
                    for (var a = 0, l = t._children.length; a < l; ++a) {
                        var c = t._children[a];
                        c._localZOrder = 4294901760 & c._localZOrder | a + 1, c._active && this._activateNodeRecursively(c, e, i, n)
                    }
                    t._onPostActivated(!0)
                }
            },
            _deactivateNodeRecursively: function(t) {
                t._objFlags |= h, t._activeInHierarchy = !1;
                for (var e = t._components.length, i = 0; i < e; ++i) {
                    var n = t._components[i];
                    if (n._enabled && (cc.director._compScheduler.disableComp(n), t._activeInHierarchy)) return void(t._objFlags &= ~h)
                }
                for (var r = 0, s = t._children.length; r < s; ++r) {
                    var o = t._children[r];
                    if (o._activeInHierarchy && (this._deactivateNodeRecursively(o), t._activeInHierarchy)) return void(t._objFlags &= ~h)
                }
                t._onPostActivated(!1), t._objFlags &= ~h
            },
            activateNode: function(t, e) {
                if (e) {
                    var i = f.get();
                    this._activatingStack.push(i), this._activateNodeRecursively(t, i.preload, i.onLoad, i.onEnable), i.preload.invoke(), i.onLoad.invoke(), i.onEnable.invoke(), this._activatingStack.pop(), f.put(i)
                } else {
                    this._deactivateNodeRecursively(t);
                    for (var n = this._activatingStack, r = 0; r < n.length; r++) {
                        var s = n[r];
                        s.preload.cancelInactive(o), s.onLoad.cancelInactive(a), s.onEnable.cancelInactive()
                    }
                }
                t.emit("active-in-hierarchy-changed", t)
            },
            activateComp: function(t, e, i, n) {
                if (cc.isValid(t, !0) && (t._objFlags & o || (t._objFlags |= o, t.__preload && (e ? e.add(t) : t.__preload())), t._objFlags & a || (t._objFlags |= a, t.onLoad ? i ? i.add(t) : (t.onLoad(), t._objFlags |= l) : t._objFlags |= l), t._enabled)) {
                    if (!t.node._activeInHierarchy) return;
                    cc.director._compScheduler.enableComp(t, n)
                }
            },
            destroyComp: function(t) {
                cc.director._compScheduler.disableComp(t), t.onDestroy && t._objFlags & l && t.onDestroy()
            },
            resetComp: !1
        });
        e.exports = m
    }), {
        "./component-scheduler": 89,
        "./platform/CCObject": 204,
        "./platform/js": 218,
        "./utils/misc": 300
    }],
    171: [(function(t, e, i) {
        "use strict";
        var n = t("./CCPhysicsTypes").PTM_RATIO,
            r = t("./CCPhysicsTypes").ContactType,
            s = [],
            o = [cc.v2(), cc.v2()],
            a = new b2.WorldManifold,
            l = {
                points: [],
                separations: [],
                normal: cc.v2()
            };

        function h() {
            this.localPoint = cc.v2(), this.normalImpulse = 0, this.tangentImpulse = 0
        }
        var c = [new h, new h],
            u = (new b2.Manifold, {
                type: 0,
                localPoint: cc.v2(),
                localNormal: cc.v2(),
                points: []
            }),
            _ = {
                normalImpulses: [],
                tangentImpulses: []
            };

        function f() {}
        f.prototype.init = function(t) {
            this.colliderA = t.GetFixtureA().collider, this.colliderB = t.GetFixtureB().collider, this.disabled = !1, this.disabledOnce = !1, this._impulse = null, this._inverted = !1, this._b2contact = t, t._contact = this
        }, f.prototype.reset = function() {
            this.setTangentSpeed(0), this.resetFriction(), this.resetRestitution(), this.colliderA = null, this.colliderB = null, this.disabled = !1, this._impulse = null, this._b2contact._contact = null, this._b2contact = null
        }, f.prototype.getWorldManifold = function() {
            var t = l.points,
                e = l.separations,
                i = l.normal;
            this._b2contact.GetWorldManifold(a);
            var r = a.points,
                s = a.separations,
                h = this._b2contact.GetManifold().pointCount;
            t.length = e.length = h;
            for (var c = 0; c < h; c++) {
                var u = o[c];
                u.x = r[c].x * n, u.y = r[c].y * n, t[c] = u, e[c] = s[c] * n
            }
            return i.x = a.normal.x, i.y = a.normal.y, this._inverted && (i.x *= -1, i.y *= -1), l
        }, f.prototype.getManifold = function() {
            for (var t = u.points, e = u.localNormal, i = u.localPoint, r = this._b2contact.GetManifold(), s = r.points, o = t.length = r.pointCount, a = 0; a < o; a++) {
                var l = c[a],
                    h = s[a];
                l.localPoint.x = h.localPoint.x * n, l.localPoint.Y = h.localPoint.Y * n, l.normalImpulse = h.normalImpulse * n, l.tangentImpulse = h.tangentImpulse, t[a] = l
            }
            return i.x = r.localPoint.x * n, i.y = r.localPoint.y * n, e.x = r.localNormal.x, e.y = r.localNormal.y, u.type = r.type, this._inverted && (e.x *= -1, e.y *= -1), u
        }, f.prototype.getImpulse = function() {
            var t = this._impulse;
            if (!t) return null;
            for (var e = _.normalImpulses, i = _.tangentImpulses, r = t.count, s = 0; s < r; s++) e[s] = t.normalImpulses[s] * n, i[s] = t.tangentImpulses[s];
            return i.length = e.length = r, _
        }, f.prototype.emit = function(t) {
            var e;
            switch (t) {
                case r.BEGIN_CONTACT:
                    e = "onBeginContact";
                    break;
                case r.END_CONTACT:
                    e = "onEndContact";
                    break;
                case r.PRE_SOLVE:
                    e = "onPreSolve";
                    break;
                case r.POST_SOLVE:
                    e = "onPostSolve"
            }
            var i, n, s, o, a = this.colliderA,
                l = this.colliderB,
                h = a.body,
                c = l.body;
            if (h.enabledContactListener)
                for (i = h.node._components, this._inverted = !1, n = 0, s = i.length; n < s; n++)(o = i[n])[e] && o[e](this, a, l);
            if (c.enabledContactListener)
                for (i = c.node._components, this._inverted = !0, n = 0, s = i.length; n < s; n++)(o = i[n])[e] && o[e](this, l, a);
            (this.disabled || this.disabledOnce) && (this.setEnabled(!1), this.disabledOnce = !1)
        }, f.get = function(t) {
            var e;
            return (e = 0 === s.length ? new cc.PhysicsContact : s.pop()).init(t), e
        }, f.put = function(t) {
            var e = t._contact;
            e && (s.push(e), e.reset())
        };
        var d = f.prototype;
        d.setEnabled = function(t) {
            this._b2contact.SetEnabled(t)
        }, d.isTouching = function() {
            return this._b2contact.IsTouching()
        }, d.setTangentSpeed = function(t) {
            this._b2contact.SetTangentSpeed(t / n)
        }, d.getTangentSpeed = function() {
            return this._b2contact.GetTangentSpeed() * n
        }, d.setFriction = function(t) {
            this._b2contact.SetFriction(t)
        }, d.getFriction = function() {
            return this._b2contact.GetFriction()
        }, d.resetFriction = function() {
            return this._b2contact.ResetFriction()
        }, d.setRestitution = function(t) {
            this._b2contact.SetRestitution(t)
        }, d.getRestitution = function() {
            return this._b2contact.GetRestitution()
        }, d.resetRestitution = function() {
            return this._b2contact.ResetRestitution()
        }, f.ContactType = r, cc.PhysicsContact = e.exports = f
    }), {
        "./CCPhysicsTypes": 173
    }],
    172: [(function(t, e, i) {
        "use strict";
        var n = t("./CCPhysicsTypes"),
            r = n.ContactType,
            s = n.BodyType,
            o = n.RayCastType,
            a = n.DrawBits,
            l = n.PTM_RATIO,
            h = (n.ANGLE_TO_PHYSICS_ANGLE, n.PHYSICS_ANGLE_TO_ANGLE),
            c = t("./utils").convertToNodeRotation,
            u = t("./platform/CCPhysicsDebugDraw"),
            _ = new b2.AABB,
            f = new b2.Vec2,
            d = new b2.Vec2,
            p = cc.v2(),
            m = cc.Class({
                mixins: [cc.EventTarget],
                statics: {
                    DrawBits: a,
                    PTM_RATIO: l,
                    VELOCITY_ITERATIONS: 10,
                    POSITION_ITERATIONS: 10,
                    FIXED_TIME_STEP: 1 / 60,
                    MAX_ACCUMULATOR: .2
                },
                ctor: function() {
                    this._debugDrawFlags = 0, this._debugDrawer = null, this._world = null, this._bodies = [], this._joints = [], this._contactMap = {}, this._contactID = 0, this._delayEvents = [], this._accumulator = 0, cc.director._scheduler && cc.director._scheduler.enableForTarget(this), this.enabledAccumulator = !1
                },
                pushDelayEvent: function(t, e, i) {
                    this._steping ? this._delayEvents.push({
                        target: t,
                        func: e,
                        args: i
                    }) : t[e].apply(t, i)
                },
                update: function(t) {
                    var e = this._world;
                    if (e && this.enabled) {
                        this.emit("before-step"), this._steping = !0;
                        var i = m.VELOCITY_ITERATIONS,
                            n = m.POSITION_ITERATIONS;
                        if (this.enabledAccumulator) {
                            this._accumulator += t;
                            var r = m.FIXED_TIME_STEP,
                                s = m.MAX_ACCUMULATOR;
                            for (this._accumulator > s && (this._accumulator = s); this._accumulator > r;) e.Step(r, i, n), this._accumulator -= r
                        } else {
                            var o = 1 / cc.game.config.frameRate;
                            e.Step(o, i, n)
                        }
                        this.debugDrawFlags && (this._checkDebugDrawValid(), this._debugDrawer.clear(), e.DrawDebugData()), this._steping = !1;
                        for (var a = this._delayEvents, l = 0, h = a.length; l < h; l++) {
                            var c = a[l];
                            c.target[c.func].apply(c.target, c.args)
                        }
                        a.length = 0, this._syncNode()
                    }
                },
                testPoint: function(t) {
                    var e = f.x = t.x / l,
                        i = f.y = t.y / l,
                        n = .2 / l;
                    _.lowerBound.x = e - n, _.lowerBound.y = i - n, _.upperBound.x = e + n, _.upperBound.y = i + n;
                    var r = this._aabbQueryCallback;
                    r.init(f), this._world.QueryAABB(r, _);
                    var s = r.getFixture();
                    return s ? s.collider : null
                },
                testAABB: function(t) {
                    _.lowerBound.x = t.xMin / l, _.lowerBound.y = t.yMin / l, _.upperBound.x = t.xMax / l, _.upperBound.y = t.yMax / l;
                    var e = this._aabbQueryCallback;
                    return e.init(), this._world.QueryAABB(e, _), e.getFixtures().map((function(t) {
                        return t.collider
                    }))
                },
                rayCast: function(t, e, i) {
                    if (t.equals(e)) return [];
                    i = i || o.Closest, f.x = t.x / l, f.y = t.y / l, d.x = e.x / l, d.y = e.y / l;
                    var n = this._raycastQueryCallback;
                    n.init(i), this._world.RayCast(n, f, d);
                    var r = n.getFixtures();
                    if (r.length > 0) {
                        for (var s = n.getPoints(), a = n.getNormals(), h = n.getFractions(), c = [], u = 0, _ = r.length; u < _; u++) {
                            var p = r[u],
                                m = p.collider;
                            if (i === o.AllClosest) {
                                var y = c.find((function(t) {
                                    return t.collider === m
                                }));
                                if (y) {
                                    h[u] < y.fraction && (y.fixtureIndex = m._getFixtureIndex(p), y.point.x = s[u].x * l, y.point.y = s[u].y * l, y.normal.x = a[u].x, y.normal.y = a[u].y, y.fraction = h[u]);
                                    continue
                                }
                            }
                            c.push({
                                collider: m,
                                fixtureIndex: m._getFixtureIndex(p),
                                point: cc.v2(s[u].x * l, s[u].y * l),
                                normal: cc.v2(a[u]),
                                fraction: h[u]
                            })
                        }
                        return c
                    }
                    return []
                },
                syncPosition: function() {
                    for (var t = this._bodies, e = 0; e < t.length; e++) t[e].syncPosition()
                },
                syncRotation: function() {
                    for (var t = this._bodies, e = 0; e < t.length; e++) t[e].syncRotation()
                },
                _registerContactFixture: function(t) {
                    this._contactListener.registerContactFixture(t)
                },
                _unregisterContactFixture: function(t) {
                    this._contactListener.unregisterContactFixture(t)
                },
                _addBody: function(t, e) {
                    var i = this._world,
                        n = t.node;
                    i && n && (t._b2Body = i.CreateBody(e), t._b2Body.body = t, this._bodies.push(t))
                },
                _removeBody: function(t) {
                    var e = this._world;
                    e && (t._b2Body.body = null, e.DestroyBody(t._b2Body), t._b2Body = null, cc.js.array.remove(this._bodies, t))
                },
                _addJoint: function(t, e) {
                    var i = this._world.CreateJoint(e);
                    i && (i._joint = t, t._joint = i, this._joints.push(t))
                },
                _removeJoint: function(t) {
                    t._isValid() && this._world.DestroyJoint(t._joint), t._joint && (t._joint._joint = null), cc.js.array.remove(this._joints, t)
                },
                _initCallback: function() {
                    if (this._world) {
                        if (!this._contactListener) {
                            var t = new cc.PhysicsContactListener;
                            t.setBeginContact(this._onBeginContact), t.setEndContact(this._onEndContact), t.setPreSolve(this._onPreSolve), t.setPostSolve(this._onPostSolve), this._world.SetContactListener(t), this._contactListener = t, this._aabbQueryCallback = new cc.PhysicsAABBQueryCallback, this._raycastQueryCallback = new cc.PhysicsRayCastCallback
                        }
                    } else cc.warn("Please init PhysicsManager first")
                },
                _init: function() {
                    this.enabled = !0, this.debugDrawFlags = a.e_shapeBit
                },
                _getWorld: function() {
                    return this._world
                },
                _syncNode: function() {
                    for (var t = this._bodies, e = 0, i = t.length; e < i; e++) {
                        var n = t[e],
                            r = n.node,
                            o = n._b2Body,
                            a = o.GetPosition();
                        p.x = a.x * l, p.y = a.y * l;
                        var u = o.GetAngle() * h;
                        null !== r.parent.parent && (p = r.parent.convertToNodeSpaceAR(p), u = c(r.parent, u));
                        var _ = r._eventMask;
                        r._eventMask = 0, r.position = p, r.angle = -u, r._eventMask = _, n.type === s.Animated && n.resetVelocity()
                    }
                },
                _onBeginContact: function(t) {
                    cc.PhysicsContact.get(t).emit(r.BEGIN_CONTACT)
                },
                _onEndContact: function(t) {
                    var e = t._contact;
                    e && (e.emit(r.END_CONTACT), cc.PhysicsContact.put(t))
                },
                _onPreSolve: function(t) {
                    var e = t._contact;
                    e && e.emit(r.PRE_SOLVE)
                },
                _onPostSolve: function(t, e) {
                    var i = t._contact;
                    i && (i._impulse = e, i.emit(r.POST_SOLVE), i._impulse = null)
                },
                _checkDebugDrawValid: function() {
                    if (!this._debugDrawer || !this._debugDrawer.isValid) {
                        var t = new cc.Node("PHYSICS_MANAGER_DEBUG_DRAW");
                        t.zIndex = cc.macro.MAX_ZINDEX, cc.game.addPersistRootNode(t), this._debugDrawer = t.addComponent(cc.Graphics);
                        var e = new u(this._debugDrawer);
                        e.SetFlags(this.debugDrawFlags), this._world.SetDebugDraw(e)
                    }
                }
            });
        cc.js.getset(m.prototype, "enabled", (function() {
            return this._enabled
        }), (function(t) {
            if (t && !this._world) {
                var e = new b2.World(new b2.Vec2(0, -10));
                e.SetAllowSleeping(!0), this._world = e, this._initCallback()
            }
            this._enabled = t
        })), cc.js.getset(m.prototype, "debugDrawFlags", (function() {
            return this._debugDrawFlags
        }), (function(t) {
            t && !this._debugDrawFlags ? this._debugDrawer && this._debugDrawer.node && (this._debugDrawer.node.active = !0) : !t && this._debugDrawFlags && this._debugDrawer && this._debugDrawer.node && (this._debugDrawer.node.active = !1), t && (this._checkDebugDrawValid(), this._world.m_debugDraw.SetFlags(t)), this._debugDrawFlags = t, t && (this._checkDebugDrawValid(), this._world.m_debugDraw.SetFlags(t))
        })), cc.js.getset(m.prototype, "gravity", (function() {
            if (this._world) {
                var t = this._world.GetGravity();
                return cc.v2(t.x * l, t.y * l)
            }
            return cc.v2()
        }), (function(t) {
            this._world && this._world.SetGravity(new b2.Vec2(t.x / l, t.y / l))
        })), cc.PhysicsManager = e.exports = m
    }), {
        "./CCPhysicsTypes": 173,
        "./platform/CCPhysicsDebugDraw": 194,
        "./utils": 196
    }],
    173: [(function(t, e, i) {
        "use strict";
        var n = cc.Enum({
            Static: 0,
            Kinematic: 1,
            Dynamic: 2,
            Animated: 3
        });
        cc.RigidBodyType = n;
        var r = cc.Enum({
            Closest: 0,
            Any: 1,
            AllClosest: 2,
            All: 3
        });
        cc.RayCastType = r, e.exports = {
            BodyType: n,
            ContactType: {
                BEGIN_CONTACT: "begin-contact",
                END_CONTACT: "end-contact",
                PRE_SOLVE: "pre-solve",
                POST_SOLVE: "post-solve"
            },
            RayCastType: r,
            DrawBits: b2.DrawFlags,
            PTM_RATIO: 32,
            ANGLE_TO_PHYSICS_ANGLE: -Math.PI / 180,
            PHYSICS_ANGLE_TO_ANGLE: -180 / Math.PI
        }
    }), {}],
    174: [(function(t, e, i) {
        "use strict";

        function n(t, e) {
            var i = e.length;
            return e[t < 0 ? i - -t % i : t % i]
        }

        function r(t, e, i) {
            for (var r = []; e < t;) e += i.length;
            for (; t <= e; ++t) r.push(n(t, i));
            return r
        }

        function s(t, e, i) {
            if (o(t, i)) {
                if (h(n(t, i), n(t - 1, i), n(e, i)) && c(n(t, i), n(t + 1, i), n(e, i))) return !1
            } else if (c(n(t, i), n(t + 1, i), n(e, i)) || h(n(t, i), n(t - 1, i), n(e, i))) return !1;
            if (o(e, i)) {
                if (h(n(e, i), n(e - 1, i), n(t, i)) && c(n(e, i), n(e + 1, i), n(t, i))) return !1
            } else if (c(n(e, i), n(e + 1, i), n(t, i)) || h(n(e, i), n(e - 1, i), n(t, i))) return !1;
            for (var r = 0; r < i.length; ++r)
                if ((r + 1) % i.length != t && r != t && (r + 1) % i.length != e && r != e) {
                    var s = cc.v2();
                    if (m(n(t, i), n(e, i), n(r, i), n(r + 1, i), s)) return !1
                }
            return !0
        }

        function o(t, e) {
            return a(t, e)
        }

        function a(t, e, i) {
            if (void 0 === i) {
                var r = t,
                    s = e;
                t = n(r - 1, s), e = n(r, s), i = n(r + 1, s)
            }
            return v(t, e, i) < 0
        }

        function l(t, e, i) {
            return v(t, e, i) > 0
        }

        function h(t, e, i) {
            return v(t, e, i) >= 0
        }

        function c(t, e, i) {
            return v(t, e, i) <= 0
        }

        function u(t, e) {
            var i = e.x - t.x,
                n = e.y - t.y;
            return i * i + n * n
        }

        function _(t) {
            f(t) || t.reverse()
        }

        function f(t) {
            return t.length < 3 || d(t) > 0
        }

        function d(t) {
            var e, i = 0;
            for (e = 0; e < t.length; e++) {
                var n = (e + 1) % t.length;
                i += t[e].x * t[n].y, i -= t[e].y * t[n].x
            }
            return i /= 2
        }

        function p(t, e, i, n) {
            var r = cc.v2(),
                s = e.y - t.y,
                o = t.x - e.x,
                a = s * t.x + o * t.y,
                l = n.y - i.y,
                h = i.x - n.x,
                c = l * i.x + h * i.y,
                u = s * h - l * o;
            return y(u, 0) || (r.x = (h * a - o * c) / u, r.y = (s * c - l * a) / u), r
        }

        function m(t, e, i, n, r) {
            if (t == i || t == n || e == i || e == n) return !1;
            var s = t.x,
                o = t.y,
                a = e.x,
                l = e.y,
                h = i.x,
                c = i.y,
                u = n.x,
                _ = n.y;
            if (Math.max(s, a) < Math.min(h, u) || Math.max(h, u) < Math.min(s, a)) return !1;
            if (Math.max(o, l) < Math.min(c, _) || Math.max(c, _) < Math.min(o, l)) return !1;
            var f = (u - h) * (o - c) - (_ - c) * (s - h),
                d = (a - s) * (o - c) - (l - o) * (s - h),
                p = (_ - c) * (a - s) - (u - h) * (l - o);
            return !(Math.abs(p) < 1e-6) && (d /= p, 0 < (f /= p) && f < 1 && 0 < d && d < 1 && (r.x = s + f * (a - s), r.y = o + f * (l - o), !0))
        }

        function y(t, e) {
            return Math.abs(t - e) <= 1e-6
        }

        function v(t, e, i) {
            return t.x * (e.y - i.y) + e.x * (i.y - t.y) + i.x * (t.y - e.y)
        }
        e.exports = {
            ConvexPartition: function t(e) {
                _(e);
                for (var i, f, d, m, y, v, g = [], x = cc.v2(), b = cc.v2(), A = 0, C = 0, T = 0; T < e.length; ++T)
                    if (o(T, e)) {
                        f = d = 1e8;
                        for (var S = 0; S < e.length; ++S) l(n(T - 1, e), n(T, e), n(S, e)) && c(n(T - 1, e), n(T, e), n(S - 1, e)) && (m = p(n(T - 1, e), n(T, e), n(S, e), n(S - 1, e)), a(n(T + 1, e), n(T, e), m) && (i = u(n(T, e), m)) < f && (f = i, x = m, A = S)), l(n(T + 1, e), n(T, e), n(S + 1, e)) && c(n(T + 1, e), n(T, e), n(S, e)) && (m = p(n(T + 1, e), n(T, e), n(S, e), n(S + 1, e)), l(n(T - 1, e), n(T, e), m) && (i = u(n(T, e), m)) < d && (d = i, C = S, b = m));
                        if (A == (C + 1) % e.length) {
                            var w = x.add(b).div(2);
                            (y = r(T, C, e)).push(w), (v = r(A, T, e)).push(w)
                        } else {
                            for (var E = 0, M = A; C < A;) C += e.length;
                            for (S = A; S <= C; ++S)
                                if (s(T, S, e)) {
                                    var D = 1 / (u(n(T, e), n(S, e)) + 1);
                                    o(S, e) ? c(n(S - 1, e), n(S, e), n(T, e)) && h(n(S + 1, e), n(S, e), n(T, e)) ? D += 3 : D += 2 : D += 1, D > E && (M = S, E = D)
                                }
                            y = r(T, M, e), v = r(M, T, e)
                        }
                        return g = (g = g.concat(t(y))).concat(t(v))
                    }
                g.push(e);
                for (T = g.length - 1; T >= 0; T--) 0 == g[T].length && g.splice(T, 0);
                return g
            },
            ForceCounterClockWise: _,
            IsCounterClockWise: f
        }
    }), {}],
    175: [(function(t, e, i) {
        "use strict";
        var n = t("../CCNode").EventType,
            r = t("./CCPhysicsTypes").PTM_RATIO,
            s = t("./CCPhysicsTypes").ANGLE_TO_PHYSICS_ANGLE,
            o = t("./CCPhysicsTypes").PHYSICS_ANGLE_TO_ANGLE,
            a = t("./utils").getWorldRotation,
            l = t("./CCPhysicsTypes").BodyType,
            h = new b2.Vec2,
            c = new b2.Vec2,
            u = cc.Vec2.ZERO,
            _ = cc.Class({
                name: "cc.RigidBody",
                extends: cc.Component,
                editor: !1,
                properties: {
                    _type: l.Dynamic,
                    _allowSleep: !0,
                    _gravityScale: 1,
                    _linearDamping: 0,
                    _angularDamping: 0,
                    _linearVelocity: cc.v2(0, 0),
                    _angularVelocity: 0,
                    _fixedRotation: !1,
                    enabled: {
                        get: function() {
                            return this._enabled
                        },
                        set: function() {
                            cc.warnID(8200)
                        },
                        visible: !1,
                        override: !0
                    },
                    enabledContactListener: {
                        default: !1,
                        tooltip: !1
                    },
                    bullet: {
                        default: !1,
                        tooltip: !1
                    },
                    type: {
                        type: l,
                        tooltip: !1,
                        get: function() {
                            return this._type
                        },
                        set: function(t) {
                            this._type = t, this._b2Body && (t === l.Animated ? this._b2Body.SetType(l.Kinematic) : this._b2Body.SetType(t))
                        }
                    },
                    allowSleep: {
                        tooltip: !1,
                        get: function() {
                            return this._b2Body ? this._b2Body.IsSleepingAllowed() : this._allowSleep
                        },
                        set: function(t) {
                            this._allowSleep = t, this._b2Body && this._b2Body.SetSleepingAllowed(t)
                        }
                    },
                    gravityScale: {
                        tooltip: !1,
                        get: function() {
                            return this._gravityScale
                        },
                        set: function(t) {
                            this._gravityScale = t, this._b2Body && this._b2Body.SetGravityScale(t)
                        }
                    },
                    linearDamping: {
                        tooltip: !1,
                        get: function() {
                            return this._linearDamping
                        },
                        set: function(t) {
                            this._linearDamping = t, this._b2Body && this._b2Body.SetLinearDamping(this._linearDamping)
                        }
                    },
                    angularDamping: {
                        tooltip: !1,
                        get: function() {
                            return this._angularDamping
                        },
                        set: function(t) {
                            this._angularDamping = t, this._b2Body && this._b2Body.SetAngularDamping(t)
                        }
                    },
                    linearVelocity: {
                        tooltip: !1,
                        type: cc.Vec2,
                        get: function() {
                            var t = this._linearVelocity;
                            if (this._b2Body) {
                                var e = this._b2Body.GetLinearVelocity();
                                t.x = e.x * r, t.y = e.y * r
                            }
                            return t
                        },
                        set: function(t) {
                            this._linearVelocity = t;
                            var e = this._b2Body;
                            if (e) {
                                var i = e.m_linearVelocity;
                                i.Set(t.x / r, t.y / r), e.SetLinearVelocity(i)
                            }
                        }
                    },
                    angularVelocity: {
                        tooltip: !1,
                        get: function() {
                            return this._b2Body ? this._b2Body.GetAngularVelocity() * o : this._angularVelocity
                        },
                        set: function(t) {
                            this._angularVelocity = t, this._b2Body && this._b2Body.SetAngularVelocity(t * s)
                        }
                    },
                    fixedRotation: {
                        tooltip: !1,
                        get: function() {
                            return this._fixedRotation
                        },
                        set: function(t) {
                            this._fixedRotation = t, this._b2Body && this._b2Body.SetFixedRotation(t)
                        }
                    },
                    awake: {
                        visible: !1,
                        tooltip: !1,
                        get: function() {
                            return !!this._b2Body && this._b2Body.IsAwake()
                        },
                        set: function(t) {
                            this._b2Body && this._b2Body.SetAwake(t)
                        }
                    },
                    awakeOnLoad: {
                        default: !0,
                        tooltip: !1,
                        animatable: !1
                    },
                    active: {
                        visible: !1,
                        get: function() {
                            return !!this._b2Body && this._b2Body.IsActive()
                        },
                        set: function(t) {
                            this._b2Body && this._b2Body.SetActive(t)
                        }
                    }
                },
                getLocalPoint: function(t, e) {
                    if (e = e || cc.v2(), this._b2Body) {
                        h.Set(t.x / r, t.y / r);
                        var i = this._b2Body.GetLocalPoint(h, e);
                        e.x = i.x * r, e.y = i.y * r
                    }
                    return e
                },
                getWorldPoint: function(t, e) {
                    if (e = e || cc.v2(), this._b2Body) {
                        h.Set(t.x / r, t.y / r);
                        var i = this._b2Body.GetWorldPoint(h, e);
                        e.x = i.x * r, e.y = i.y * r
                    }
                    return e
                },
                getWorldVector: function(t, e) {
                    if (e = e || cc.v2(), this._b2Body) {
                        h.Set(t.x / r, t.y / r);
                        var i = this._b2Body.GetWorldVector(h, e);
                        e.x = i.x * r, e.y = i.y * r
                    }
                    return e
                },
                getLocalVector: function(t, e) {
                    if (e = e || cc.v2(), this._b2Body) {
                        h.Set(t.x / r, t.y / r);
                        var i = this._b2Body.GetLocalVector(h, e);
                        e.x = i.x * r, e.y = i.y * r
                    }
                    return e
                },
                getWorldPosition: function(t) {
                    if (t = t || cc.v2(), this._b2Body) {
                        var e = this._b2Body.GetPosition();
                        t.x = e.x * r, t.y = e.y * r
                    }
                    return t
                },
                getWorldRotation: function() {
                    return this._b2Body ? this._b2Body.GetAngle() * o : 0
                },
                getLocalCenter: function(t) {
                    if (t = t || cc.v2(), this._b2Body) {
                        var e = this._b2Body.GetLocalCenter();
                        t.x = e.x * r, t.y = e.y * r
                    }
                    return t
                },
                getWorldCenter: function(t) {
                    if (t = t || cc.v2(), this._b2Body) {
                        var e = this._b2Body.GetWorldCenter();
                        t.x = e.x * r, t.y = e.y * r
                    }
                    return t
                },
                getLinearVelocityFromWorldPoint: function(t, e) {
                    if (e = e || cc.v2(), this._b2Body) {
                        h.Set(t.x / r, t.y / r);
                        var i = this._b2Body.GetLinearVelocityFromWorldPoint(h, e);
                        e.x = i.x * r, e.y = i.y * r
                    }
                    return e
                },
                getMass: function() {
                    return this._b2Body ? this._b2Body.GetMass() : 0
                },
                getInertia: function() {
                    return this._b2Body ? this._b2Body.GetInertia() * r * r : 0
                },
                getJointList: function() {
                    if (!this._b2Body) return [];
                    var t = [],
                        e = this._b2Body.GetJointList();
                    if (!e) return [];
                    t.push(e.joint._joint);
                    for (var i = e.prev; i;) t.push(i.joint._joint), i = i.prev;
                    for (var n = e.next; n;) t.push(n.joint._joint), n = n.next;
                    return t
                },
                applyForce: function(t, e, i) {
                    this._b2Body && (h.Set(t.x / r, t.y / r), c.Set(e.x / r, e.y / r), this._b2Body.ApplyForce(h, c, i))
                },
                applyForceToCenter: function(t, e) {
                    this._b2Body && (h.Set(t.x / r, t.y / r), this._b2Body.ApplyForceToCenter(h, e))
                },
                applyTorque: function(t, e) {
                    this._b2Body && this._b2Body.ApplyTorque(t / r, e)
                },
                applyLinearImpulse: function(t, e, i) {
                    this._b2Body && (h.Set(t.x / r, t.y / r), c.Set(e.x / r, e.y / r), this._b2Body.ApplyLinearImpulse(h, c, i))
                },
                applyAngularImpulse: function(t, e) {
                    this._b2Body && this._b2Body.ApplyAngularImpulse(t / r / r, e)
                },
                syncPosition: function(t) {
                    var e = this._b2Body;
                    if (e) {
                        var i, n = this.node.convertToWorldSpaceAR(u);
                        if ((i = this.type === l.Animated ? e.GetLinearVelocity() : e.GetPosition()).x = n.x / r, i.y = n.y / r, this.type === l.Animated && t) {
                            var s = e.GetPosition(),
                                o = cc.game.config.frameRate;
                            i.x = (i.x - s.x) * o, i.y = (i.y - s.y) * o, e.SetAwake(!0), e.SetLinearVelocity(i)
                        } else e.SetTransformVec(i, e.GetAngle())
                    }
                },
                syncRotation: function(t) {
                    var e = this._b2Body;
                    if (e) {
                        var i = s * a(this.node);
                        if (this.type === l.Animated && t) {
                            var n = e.GetAngle(),
                                r = cc.game.config.frameRate;
                            e.SetAwake(!0), e.SetAngularVelocity((i - n) * r)
                        } else e.SetTransformVec(e.GetPosition(), i)
                    }
                },
                resetVelocity: function() {
                    var t = this._b2Body;
                    if (t) {
                        var e = t.m_linearVelocity;
                        e.Set(0, 0), t.SetLinearVelocity(e), t.SetAngularVelocity(0)
                    }
                },
                onEnable: function() {
                    this._init()
                },
                onDisable: function() {
                    this._destroy()
                },
                _registerNodeEvents: function() {
                    var t = this.node;
                    t.on(n.POSITION_CHANGED, this._onNodePositionChanged, this), t.on(n.ROTATION_CHANGED, this._onNodeRotationChanged, this), t.on(n.SCALE_CHANGED, this._onNodeScaleChanged, this)
                },
                _unregisterNodeEvents: function() {
                    var t = this.node;
                    t.off(n.POSITION_CHANGED, this._onNodePositionChanged, this), t.off(n.ROTATION_CHANGED, this._onNodeRotationChanged, this), t.off(n.SCALE_CHANGED, this._onNodeScaleChanged, this)
                },
                _onNodePositionChanged: function() {
                    this.syncPosition(!0)
                },
                _onNodeRotationChanged: function(t) {
                    this.syncRotation(!0)
                },
                _onNodeScaleChanged: function(t) {
                    if (this._b2Body)
                        for (var e = this.getComponents(cc.PhysicsCollider), i = 0; i < e.length; i++) e[i].apply()
                },
                _init: function() {
                    cc.director.getPhysicsManager().pushDelayEvent(this, "__init", [])
                },
                _destroy: function() {
                    cc.director.getPhysicsManager().pushDelayEvent(this, "__destroy", [])
                },
                __init: function() {
                    if (!this._inited) {
                        this._registerNodeEvents();
                        var t = new b2.BodyDef;
                        this.type === l.Animated ? t.type = l.Kinematic : t.type = this.type, t.allowSleep = this.allowSleep, t.gravityScale = this.gravityScale, t.linearDamping = this.linearDamping, t.angularDamping = this.angularDamping;
                        var e = this.linearVelocity;
                        t.linearVelocity = new b2.Vec2(e.x / r, e.y / r), t.angularVelocity = this.angularVelocity * s, t.fixedRotation = this.fixedRotation, t.bullet = this.bullet;
                        var i = this.node,
                            n = i.convertToWorldSpaceAR(u);
                        t.position = new b2.Vec2(n.x / r, n.y / r), t.angle = -Math.PI / 180 * a(i), t.awake = this.awakeOnLoad, cc.director.getPhysicsManager()._addBody(this, t), this._inited = !0
                    }
                },
                __destroy: function() {
                    this._inited && (cc.director.getPhysicsManager()._removeBody(this), this._unregisterNodeEvents(), this._inited = !1)
                },
                _getBody: function() {
                    return this._b2Body
                }
            });
        cc.RigidBody = e.exports = _
    }), {
        "../CCNode": 52,
        "./CCPhysicsTypes": 173,
        "./utils": 196
    }],
    176: [(function(t, e, i) {
        "use strict";
        var n = t("../../../external/box2d/box2d");
        for (var r in window.b2 = {}, n)
            if (-1 === r.indexOf("b2_")) {
                var s = r.replace("b2", "");
                b2[s] = n[r]
            }
        b2.maxPolygonVertices = 8
    }), {
        "../../../external/box2d/box2d": 421
    }],
    177: [(function(t, e, i) {
        "use strict";
        var n = t("../CCPhysicsTypes").PTM_RATIO,
            r = cc.Class({
                name: "cc.PhysicsBoxCollider",
                extends: cc.PhysicsCollider,
                mixins: [cc.Collider.Box],
                editor: {
                    menu: !1,
                    requireComponent: cc.RigidBody
                },
                _createShape: function(t) {
                    var e = Math.abs(t.x),
                        i = Math.abs(t.y),
                        r = this.size.width / 2 / n * e,
                        s = this.size.height / 2 / n * i,
                        o = this.offset.x / n * e,
                        a = this.offset.y / n * i,
                        l = new b2.PolygonShape;
                    return l.SetAsBox(r, s, new b2.Vec2(o, a), 0), l
                }
            });
        cc.PhysicsBoxCollider = e.exports = r
    }), {
        "../CCPhysicsTypes": 173
    }],
    178: [(function(t, e, i) {
        "use strict";
        var n = t("../CCPhysicsTypes").PTM_RATIO,
            r = cc.Class({
                name: "cc.PhysicsChainCollider",
                extends: cc.PhysicsCollider,
                editor: {
                    menu: !1,
                    inspector: !1,
                    requireComponent: cc.RigidBody
                },
                properties: {
                    loop: !1,
                    points: {
                        default: function() {
                            return [cc.v2(-50, 0), cc.v2(50, 0)]
                        },
                        type: [cc.Vec2]
                    },
                    threshold: {
                        default: 1,
                        serializable: !1,
                        visible: !1
                    }
                },
                _createShape: function(t) {
                    for (var e = new b2.ChainShape, i = this.points, r = [], s = 0; s < i.length; s++) {
                        var o = i[s];
                        r.push(new b2.Vec2(o.x / n * t.x, o.y / n * t.y))
                    }
                    return this.loop ? e.CreateLoop(r, r.length) : e.CreateChain(r, r.length), e
                },
                resetInEditor: !1,
                resetPointsByContour: !1
            });
        cc.PhysicsChainCollider = e.exports = r
    }), {
        "../CCPhysicsTypes": 173
    }],
    179: [(function(t, e, i) {
        "use strict";
        var n = t("../CCPhysicsTypes").PTM_RATIO,
            r = cc.Class({
                name: "cc.PhysicsCircleCollider",
                extends: cc.PhysicsCollider,
                mixins: [cc.Collider.Circle],
                editor: {
                    menu: !1,
                    requireComponent: cc.RigidBody
                },
                _createShape: function(t) {
                    var e = Math.abs(t.x),
                        i = Math.abs(t.y),
                        r = this.offset.x / n * e,
                        s = this.offset.y / n * i,
                        o = new b2.CircleShape;
                    return o.m_radius = this.radius / n * e, o.m_p = new b2.Vec2(r, s), o
                }
            });
        cc.PhysicsCircleCollider = e.exports = r
    }), {
        "../CCPhysicsTypes": 173
    }],
    180: [(function(t, e, i) {
        "use strict";
        var n = t("../CCPhysicsTypes").PTM_RATIO,
            r = t("../utils").getWorldScale,
            s = cc.Class({
                name: "cc.PhysicsCollider",
                extends: cc.Collider,
                ctor: function() {
                    this._fixtures = [], this._shapes = [], this._inited = !1, this._rect = cc.rect()
                },
                properties: {
                    _density: 1,
                    _sensor: !1,
                    _friction: .2,
                    _restitution: 0,
                    density: {
                        tooltip: !1,
                        get: function() {
                            return this._density
                        },
                        set: function(t) {
                            this._density = t
                        }
                    },
                    sensor: {
                        tooltip: !1,
                        get: function() {
                            return this._sensor
                        },
                        set: function(t) {
                            this._sensor = t
                        }
                    },
                    friction: {
                        tooltip: !1,
                        get: function() {
                            return this._friction
                        },
                        set: function(t) {
                            this._friction = t
                        }
                    },
                    restitution: {
                        tooltip: !1,
                        get: function() {
                            return this._restitution
                        },
                        set: function(t) {
                            this._restitution = t
                        }
                    },
                    body: {
                        default: null,
                        type: cc.RigidBody,
                        visible: !1
                    }
                },
                onDisable: function() {
                    this._destroy()
                },
                onEnable: function() {
                    this._init()
                },
                start: function() {
                    this._init()
                },
                _getFixtureIndex: function(t) {
                    return this._fixtures.indexOf(t)
                },
                _init: function() {
                    cc.director.getPhysicsManager().pushDelayEvent(this, "__init", [])
                },
                _destroy: function() {
                    cc.director.getPhysicsManager().pushDelayEvent(this, "__destroy", [])
                },
                __init: function() {
                    if (!this._inited) {
                        var t = this.body || this.getComponent(cc.RigidBody);
                        if (t) {
                            var e = t._getBody();
                            if (e) {
                                var i = t.node,
                                    n = r(i);
                                this._scale = n;
                                var s = 0 === n.x && 0 === n.y ? [] : this._createShape(n);
                                s instanceof Array || (s = [s]);
                                for (var o = 1 << i.groupIndex, a = 0, l = cc.game.collisionMatrix[i.groupIndex], h = 0; h < l.length; h++) l[h] && (a |= 1 << h);
                                for (var c = {
                                        categoryBits: o,
                                        maskBits: a,
                                        groupIndex: 0
                                    }, u = cc.director.getPhysicsManager(), _ = 0; _ < s.length; _++) {
                                    var f = s[_],
                                        d = new b2.FixtureDef;
                                    d.density = this.density, d.isSensor = this.sensor, d.friction = this.friction, d.restitution = this.restitution, d.shape = f, d.filter = c;
                                    var p = e.CreateFixture(d);
                                    p.collider = this, t.enabledContactListener && u._registerContactFixture(p), this._shapes.push(f), this._fixtures.push(p)
                                }
                                this.body = t, this._inited = !0
                            }
                        }
                    }
                },
                __destroy: function() {
                    if (this._inited) {
                        for (var t = this._fixtures, e = this.body._getBody(), i = cc.director.getPhysicsManager(), n = t.length - 1; n >= 0; n--) {
                            var r = t[n];
                            r.collider = null, i._unregisterContactFixture(r), e && e.DestroyFixture(r)
                        }
                        this.body = null, this._fixtures.length = 0, this._shapes.length = 0, this._inited = !1
                    }
                },
                _createShape: function() {},
                apply: function() {
                    this._destroy(), this._init()
                },
                getAABB: function() {
                    for (var t = 1e7, e = 1e7, i = -1e7, r = -1e7, s = this._fixtures, o = 0; o < s.length; o++)
                        for (var a = s[o], l = a.GetShape().GetChildCount(), h = 0; h < l; h++) {
                            var c = a.GetAABB(h);
                            c.lowerBound.x < t && (t = c.lowerBound.x), c.lowerBound.y < e && (e = c.lowerBound.y), c.upperBound.x > i && (i = c.upperBound.x), c.upperBound.y > r && (r = c.upperBound.y)
                        }
                    t *= n, e *= n, i *= n, r *= n;
                    var u = this._rect;
                    return u.x = t, u.y = e, u.width = i - t, u.height = r - e, u
                }
            });
        cc.PhysicsCollider = e.exports = s
    }), {
        "../CCPhysicsTypes": 173,
        "../utils": 196
    }],
    181: [(function(t, e, i) {
        "use strict";
        var n = t("../CCPhysicsTypes").PTM_RATIO,
            r = t("../CCPolygonSeparator"),
            s = cc.Class({
                name: "cc.PhysicsPolygonCollider",
                extends: cc.PhysicsCollider,
                mixins: [cc.Collider.Polygon],
                editor: {
                    menu: !1,
                    inspector: !1,
                    requireComponent: cc.RigidBody
                },
                _createShape: function(t) {
                    var e = [],
                        i = this.points;
                    i.length > 0 && i[0].equals(i[i.length - 1]) && (i.length -= 1);
                    for (var s = r.ConvexPartition(i), o = this.offset, a = 0; a < s.length; a++) {
                        for (var l = s[a], h = null, c = [], u = null, _ = 0, f = l.length; _ < f; _++) {
                            h || (h = new b2.PolygonShape);
                            var d = l[_],
                                p = (d.x + o.x) / n * t.x,
                                m = (d.y + o.y) / n * t.y,
                                y = new b2.Vec2(p, m);
                            c.push(y), u || (u = y), c.length === b2.maxPolygonVertices && (h.Set(c, c.length), e.push(h), h = null, _ < f - 1 && (c = [u, c[c.length - 1]]))
                        }
                        h && (h.Set(c, c.length), e.push(h))
                    }
                    return e
                }
            });
        cc.PhysicsPolygonCollider = e.exports = s
    }), {
        "../CCPhysicsTypes": 173,
        "../CCPolygonSeparator": 174
    }],
    182: [(function(t, e, i) {
        "use strict";
        t("./box2d-adapter"), t("./CCPhysicsManager"), t("./CCRigidBody"), t("./CCPhysicsContact"), t("./collider/CCPhysicsCollider"), t("./collider/CCPhysicsChainCollider"), t("./collider/CCPhysicsCircleCollider"), t("./collider/CCPhysicsBoxCollider"), t("./collider/CCPhysicsPolygonCollider"), t("./joint/CCJoint"), t("./joint/CCDistanceJoint"), t("./joint/CCRevoluteJoint"), t("./joint/CCMouseJoint"), t("./joint/CCMotorJoint"), t("./joint/CCPrismaticJoint"), t("./joint/CCWeldJoint"), t("./joint/CCWheelJoint"), t("./joint/CCRopeJoint"), t("./platform/CCPhysicsContactListner"), t("./platform/CCPhysicsAABBQueryCallback"), t("./platform/CCPhysicsRayCastCallback")
    }), {
        "./CCPhysicsContact": 171,
        "./CCPhysicsManager": 172,
        "./CCRigidBody": 175,
        "./box2d-adapter": 176,
        "./collider/CCPhysicsBoxCollider": 177,
        "./collider/CCPhysicsChainCollider": 178,
        "./collider/CCPhysicsCircleCollider": 179,
        "./collider/CCPhysicsCollider": 180,
        "./collider/CCPhysicsPolygonCollider": 181,
        "./joint/CCDistanceJoint": 183,
        "./joint/CCJoint": 184,
        "./joint/CCMotorJoint": 185,
        "./joint/CCMouseJoint": 186,
        "./joint/CCPrismaticJoint": 187,
        "./joint/CCRevoluteJoint": 188,
        "./joint/CCRopeJoint": 189,
        "./joint/CCWeldJoint": 190,
        "./joint/CCWheelJoint": 191,
        "./platform/CCPhysicsAABBQueryCallback": 192,
        "./platform/CCPhysicsContactListner": 193,
        "./platform/CCPhysicsRayCastCallback": 195
    }],
    183: [(function(t, e, i) {
        "use strict";
        var n = t("../CCPhysicsTypes").PTM_RATIO,
            r = cc.Class({
                name: "cc.DistanceJoint",
                extends: cc.Joint,
                editor: !1,
                properties: {
                    _distance: 1,
                    _frequency: 0,
                    _dampingRatio: 0,
                    distance: {
                        tooltip: !1,
                        get: function() {
                            return this._distance
                        },
                        set: function(t) {
                            this._distance = t, this._joint && this._joint.SetLength(t)
                        }
                    },
                    frequency: {
                        tooltip: !1,
                        get: function() {
                            return this._frequency
                        },
                        set: function(t) {
                            this._frequency = t, this._joint && this._joint.SetFrequency(t)
                        }
                    },
                    dampingRatio: {
                        tooltip: !1,
                        get: function() {
                            return this._dampingRatio
                        },
                        set: function(t) {
                            this._dampingRatio = t, this._joint && this._joint.SetDampingRatio(t)
                        }
                    }
                },
                _createJointDef: function() {
                    var t = new b2.DistanceJointDef;
                    return t.localAnchorA = new b2.Vec2(this.anchor.x / n, this.anchor.y / n), t.localAnchorB = new b2.Vec2(this.connectedAnchor.x / n, this.connectedAnchor.y / n), t.length = this.distance / n, t.dampingRatio = this.dampingRatio, t.frequencyHz = this.frequency, t
                }
            });
        cc.DistanceJoint = e.exports = r
    }), {
        "../CCPhysicsTypes": 173
    }],
    184: [(function(t, e, i) {
        "use strict";
        var n = t("../CCPhysicsTypes").PTM_RATIO,
            r = cc.Class({
                name: "cc.Joint",
                extends: cc.Component,
                editor: {
                    requireComponent: cc.RigidBody
                },
                properties: {
                    anchor: {
                        default: cc.v2(0, 0),
                        tooltip: !1
                    },
                    connectedAnchor: {
                        default: cc.v2(0, 0),
                        tooltip: !1
                    },
                    connectedBody: {
                        default: null,
                        type: cc.RigidBody,
                        tooltip: !1
                    },
                    collideConnected: {
                        default: !1,
                        tooltip: !1
                    }
                },
                onDisable: function() {
                    this._destroy()
                },
                onEnable: function() {
                    this._init()
                },
                start: function() {
                    this._init()
                },
                apply: function() {
                    this._destroy(), this._init()
                },
                getWorldAnchor: function() {
                    if (this._joint) {
                        var t = this._joint.GetAnchorA();
                        return cc.v2(t.x * n, t.y * n)
                    }
                    return cc.Vec2.ZERO
                },
                getWorldConnectedAnchor: function() {
                    if (this._joint) {
                        var t = this._joint.GetAnchorB();
                        return cc.v2(t.x * n, t.y * n)
                    }
                    return cc.Vec2.ZERO
                },
                getReactionForce: function(t) {
                    var e = cc.v2();
                    return this._joint ? this._joint.GetReactionForce(t, e) : e
                },
                getReactionTorque: function(t) {
                    return this._joint ? this._joint.GetReactionTorque(t) : 0
                },
                _init: function() {
                    cc.director.getPhysicsManager().pushDelayEvent(this, "__init", [])
                },
                _destroy: function() {
                    cc.director.getPhysicsManager().pushDelayEvent(this, "__destroy", [])
                },
                __init: function() {
                    if (!this._inited && (this.body = this.getComponent(cc.RigidBody), this._isValid())) {
                        var t = this._createJointDef();
                        if (!t) return;
                        t.bodyA = this.body._getBody(), t.bodyB = this.connectedBody._getBody(), t.collideConnected = this.collideConnected, cc.director.getPhysicsManager()._addJoint(this, t), this._inited = !0
                    }
                },
                __destroy: function() {
                    this._inited && (cc.director.getPhysicsManager()._removeJoint(this), this._joint = null, this._inited = !1)
                },
                _createJointDef: function() {
                    return null
                },
                _isValid: function() {
                    return this.body && this.body._getBody() && this.connectedBody && this.connectedBody._getBody()
                }
            });
        cc.Joint = e.exports = r
    }), {
        "../CCPhysicsTypes": 173
    }],
    185: [(function(t, e, i) {
        "use strict";
        var n = t("../CCPhysicsTypes").PTM_RATIO,
            r = t("../CCPhysicsTypes").ANGLE_TO_PHYSICS_ANGLE,
            s = cc.Class({
                name: "cc.MotorJoint",
                extends: cc.Joint,
                editor: !1,
                properties: {
                    _linearOffset: cc.v2(0, 0),
                    _angularOffset: 0,
                    _maxForce: 1,
                    _maxTorque: 1,
                    _correctionFactor: .3,
                    anchor: {
                        tooltip: !1,
                        default: cc.v2(0, 0),
                        override: !0,
                        visible: !1
                    },
                    connectedAnchor: {
                        tooltip: !1,
                        default: cc.v2(0, 0),
                        override: !0,
                        visible: !1
                    },
                    linearOffset: {
                        tooltip: !1,
                        get: function() {
                            return this._linearOffset
                        },
                        set: function(t) {
                            this._linearOffset = t, this._joint && this._joint.SetLinearOffset(new b2.Vec2(t.x / n, t.y / n))
                        }
                    },
                    angularOffset: {
                        tooltip: !1,
                        get: function() {
                            return this._angularOffset
                        },
                        set: function(t) {
                            this._angularOffset = t, this._joint && this._joint.SetAngularOffset(t)
                        }
                    },
                    maxForce: {
                        tooltip: !1,
                        get: function() {
                            return this._maxForce
                        },
                        set: function(t) {
                            this._maxForce = t, this._joint && this._joint.SetMaxForce(t)
                        }
                    },
                    maxTorque: {
                        tooltip: !1,
                        get: function() {
                            return this._maxTorque
                        },
                        set: function(t) {
                            this._maxTorque = t, this._joint && this._joint.SetMaxTorque(t)
                        }
                    },
                    correctionFactor: {
                        tooltip: !1,
                        get: function() {
                            return this._correctionFactor
                        },
                        set: function(t) {
                            this._correctionFactor = t, this._joint && this._joint.SetCorrectionFactor(t)
                        }
                    }
                },
                _createJointDef: function() {
                    var t = new b2.MotorJointDef;
                    return t.linearOffset = new b2.Vec2(this.linearOffset.x / n, this.linearOffset.y / n), t.angularOffset = this.angularOffset * r, t.maxForce = this.maxForce, t.maxTorque = this.maxTorque, t.correctionFactor = this.correctionFactor, t
                }
            });
        cc.MotorJoint = e.exports = s
    }), {
        "../CCPhysicsTypes": 173
    }],
    186: [(function(t, e, i) {
        "use strict";
        var n = t("../CCPhysicsTypes").PTM_RATIO,
            r = new b2.Vec2,
            s = cc.Class({
                name: "cc.MouseJoint",
                extends: cc.Joint,
                editor: !1,
                properties: {
                    _target: 1,
                    _frequency: 5,
                    _dampingRatio: .7,
                    _maxForce: 0,
                    connectedBody: {
                        default: null,
                        type: cc.RigidBody,
                        visible: !1,
                        override: !0
                    },
                    collideConnected: {
                        default: !0,
                        visible: !1,
                        override: !0
                    },
                    anchor: {
                        tooltip: !1,
                        default: cc.v2(0, 0),
                        override: !0,
                        visible: !1
                    },
                    connectedAnchor: {
                        tooltip: !1,
                        default: cc.v2(0, 0),
                        override: !0,
                        visible: !1
                    },
                    mouseRegion: {
                        tooltip: !1,
                        default: null,
                        type: cc.Node
                    },
                    target: {
                        tooltip: !1,
                        visible: !1,
                        get: function() {
                            return this._target
                        },
                        set: function(t) {
                            this._target = t, this._joint && (r.x = t.x / n, r.y = t.y / n, this._joint.SetTarget(r))
                        }
                    },
                    frequency: {
                        tooltip: !1,
                        get: function() {
                            return this._frequency
                        },
                        set: function(t) {
                            this._frequency = t, this._joint && this._joint.SetFrequency(t)
                        }
                    },
                    dampingRatio: {
                        tooltip: !1,
                        get: function() {
                            return this._dampingRatio
                        },
                        set: function(t) {
                            this._dampingRatio = t, this._joint && this._joint.SetDampingRatio(t)
                        }
                    },
                    maxForce: {
                        tooltip: !1,
                        visible: !1,
                        get: function() {
                            return this._maxForce
                        },
                        set: function(t) {
                            this._maxForce = t, this._joint && this._joint.SetMaxForce(t)
                        }
                    }
                },
                onLoad: function() {
                    var t = this.mouseRegion || this.node;
                    t.on(cc.Node.EventType.TOUCH_START, this.onTouchBegan, this), t.on(cc.Node.EventType.TOUCH_MOVE, this.onTouchMove, this), t.on(cc.Node.EventType.TOUCH_END, this.onTouchEnd, this), t.on(cc.Node.EventType.TOUCH_CANCEL, this.onTouchEnd, this)
                },
                onEnable: function() {},
                start: function() {},
                onTouchBegan: function(t) {
                    var e = cc.director.getPhysicsManager(),
                        i = this._pressPoint = t.touch.getLocation();
                    cc.Camera && cc.Camera.main && (i = cc.Camera.main.getScreenToWorldPoint(i));
                    var n = e.testPoint(i);
                    n && ((this.connectedBody = n.body).awake = !0, this.maxForce = 1e3 * this.connectedBody.getMass(), this.target = i, this._init())
                },
                onTouchMove: function(t) {
                    this._pressPoint = t.touch.getLocation()
                },
                onTouchEnd: function(t) {
                    this._destroy(), this._pressPoint = null
                },
                _createJointDef: function() {
                    var t = new b2.MouseJointDef;
                    return r.x = this.target.x / n, r.y = this.target.y / n, t.target = r, t.maxForce = this.maxForce, t.dampingRatio = this.dampingRatio, t.frequencyHz = this.frequency, t
                },
                update: function() {
                    if (this._pressPoint && this._isValid()) {
                        var t = cc.Camera.findCamera(this.node);
                        this.target = t ? t.getScreenToWorldPoint(this._pressPoint) : this._pressPoint
                    }
                }
            });
        cc.MouseJoint = e.exports = s
    }), {
        "../CCPhysicsTypes": 173
    }],
    187: [(function(t, e, i) {
        "use strict";
        var n = t("../CCPhysicsTypes").PTM_RATIO,
            r = t("../CCPhysicsTypes").ANGLE_TO_PHYSICS_ANGLE,
            s = cc.Class({
                name: "cc.PrismaticJoint",
                extends: cc.Joint,
                editor: !1,
                properties: {
                    localAxisA: {
                        default: cc.v2(1, 0),
                        tooltip: !1
                    },
                    referenceAngle: {
                        default: 0,
                        tooltip: !1
                    },
                    enableLimit: {
                        default: !1,
                        tooltip: !1
                    },
                    enableMotor: {
                        default: !1,
                        tooltip: !1
                    },
                    lowerLimit: {
                        default: 0,
                        tooltip: !1
                    },
                    upperLimit: {
                        default: 0,
                        tooltip: !1
                    },
                    _maxMotorForce: 0,
                    _motorSpeed: 0,
                    maxMotorForce: {
                        tooltip: !1,
                        get: function() {
                            return this._maxMotorForce
                        },
                        set: function(t) {
                            this._maxMotorForce = t, this._joint && this._joint.SetMaxMotorForce(t)
                        }
                    },
                    motorSpeed: {
                        tooltip: !1,
                        get: function() {
                            return this._motorSpeed
                        },
                        set: function(t) {
                            this._motorSpeed = t, this._joint && this._joint.SetMotorSpeed(t)
                        }
                    }
                },
                _createJointDef: function() {
                    var t = new b2.PrismaticJointDef;
                    return t.localAnchorA = new b2.Vec2(this.anchor.x / n, this.anchor.y / n), t.localAnchorB = new b2.Vec2(this.connectedAnchor.x / n, this.connectedAnchor.y / n), t.localAxisA = new b2.Vec2(this.localAxisA.x, this.localAxisA.y), t.referenceAngle = this.referenceAngle * r, t.enableLimit = this.enableLimit, t.lowerTranslation = this.lowerLimit / n, t.upperTranslation = this.upperLimit / n, t.enableMotor = this.enableMotor, t.maxMotorForce = this.maxMotorForce, t.motorSpeed = this.motorSpeed, t
                }
            });
        cc.PrismaticJoint = e.exports = s
    }), {
        "../CCPhysicsTypes": 173
    }],
    188: [(function(t, e, i) {
        "use strict";
        var n = t("../CCPhysicsTypes").PTM_RATIO,
            r = t("../CCPhysicsTypes").ANGLE_TO_PHYSICS_ANGLE,
            s = t("../CCPhysicsTypes").PHYSICS_ANGLE_TO_ANGLE,
            o = cc.Class({
                name: "cc.RevoluteJoint",
                extends: cc.Joint,
                editor: !1,
                properties: {
                    _maxMotorTorque: 0,
                    _motorSpeed: 0,
                    _enableLimit: !1,
                    _enableMotor: !1,
                    referenceAngle: {
                        default: 0,
                        tooltip: !1
                    },
                    lowerAngle: {
                        default: 0,
                        tooltip: !1
                    },
                    upperAngle: {
                        default: 0,
                        tooltip: !1
                    },
                    maxMotorTorque: {
                        tooltip: !1,
                        get: function() {
                            return this._maxMotorTorque
                        },
                        set: function(t) {
                            this._maxMotorTorque = t, this._joint && this._joint.SetMaxMotorTorque(t)
                        }
                    },
                    motorSpeed: {
                        tooltip: !1,
                        get: function() {
                            return this._motorSpeed
                        },
                        set: function(t) {
                            this._motorSpeed = t, this._joint && this._joint.SetMotorSpeed(t * r)
                        }
                    },
                    enableLimit: {
                        tooltip: !1,
                        get: function() {
                            return this._enableLimit
                        },
                        set: function(t) {
                            this._enableLimit = t, this._joint && this._joint.EnableLimit(t)
                        }
                    },
                    enableMotor: {
                        tooltip: !1,
                        get: function() {
                            return this._enableMotor
                        },
                        set: function(t) {
                            this._enableMotor = t, this._joint && this._joint.EnableMotor(t)
                        }
                    }
                },
                getJointAngle: function() {
                    return this._joint ? this._joint.GetJointAngle() * s : 0
                },
                setLimits: function(t, e) {
                    if (this._joint) return this._joint.SetLimits(t * r, e * r)
                },
                _createJointDef: function() {
                    var t = new b2.RevoluteJointDef;
                    return t.localAnchorA = new b2.Vec2(this.anchor.x / n, this.anchor.y / n), t.localAnchorB = new b2.Vec2(this.connectedAnchor.x / n, this.connectedAnchor.y / n), t.lowerAngle = this.upperAngle * r, t.upperAngle = this.lowerAngle * r, t.maxMotorTorque = this.maxMotorTorque, t.motorSpeed = this.motorSpeed * r, t.enableLimit = this.enableLimit, t.enableMotor = this.enableMotor, t.referenceAngle = this.referenceAngle * r, t
                }
            });
        cc.RevoluteJoint = e.exports = o
    }), {
        "../CCPhysicsTypes": 173
    }],
    189: [(function(t, e, i) {
        "use strict";
        var n = t("../CCPhysicsTypes").PTM_RATIO,
            r = cc.Class({
                name: "cc.RopeJoint",
                extends: cc.Joint,
                editor: !1,
                properties: {
                    _maxLength: 1,
                    maxLength: {
                        tooltip: !1,
                        get: function() {
                            return this._maxLength
                        },
                        set: function(t) {
                            this._maxLength = t, this._joint && this._joint.SetMaxLength(t)
                        }
                    }
                },
                _createJointDef: function() {
                    var t = new b2.RopeJointDef;
                    return t.localAnchorA = new b2.Vec2(this.anchor.x / n, this.anchor.y / n), t.localAnchorB = new b2.Vec2(this.connectedAnchor.x / n, this.connectedAnchor.y / n), t.maxLength = this.maxLength / n, t
                }
            });
        cc.RopeJoint = e.exports = r
    }), {
        "../CCPhysicsTypes": 173
    }],
    190: [(function(t, e, i) {
        "use strict";
        var n = t("../CCPhysicsTypes").PTM_RATIO,
            r = t("../CCPhysicsTypes").ANGLE_TO_PHYSICS_ANGLE,
            s = cc.Class({
                name: "cc.WeldJoint",
                extends: cc.Joint,
                editor: !1,
                properties: {
                    referenceAngle: {
                        default: 0,
                        tooltip: !1
                    },
                    _frequency: 0,
                    _dampingRatio: 0,
                    frequency: {
                        tooltip: !1,
                        get: function() {
                            return this._frequency
                        },
                        set: function(t) {
                            this._frequency = t, this._joint && this._joint.SetFrequency(t)
                        }
                    },
                    dampingRatio: {
                        tooltip: !1,
                        get: function() {
                            return this._dampingRatio
                        },
                        set: function(t) {
                            this._dampingRatio = t, this._joint && this._joint.SetDampingRatio(t)
                        }
                    }
                },
                _createJointDef: function() {
                    var t = new b2.WeldJointDef;
                    return t.localAnchorA = new b2.Vec2(this.anchor.x / n, this.anchor.y / n), t.localAnchorB = new b2.Vec2(this.connectedAnchor.x / n, this.connectedAnchor.y / n), t.referenceAngle = this.referenceAngle * r, t.frequencyHz = this.frequency, t.dampingRatio = this.dampingRatio, t
                }
            });
        cc.WeldJoint = e.exports = s
    }), {
        "../CCPhysicsTypes": 173
    }],
    191: [(function(t, e, i) {
        "use strict";
        var n = t("../CCPhysicsTypes").PTM_RATIO,
            r = t("../CCPhysicsTypes").ANGLE_TO_PHYSICS_ANGLE,
            s = cc.Class({
                name: "cc.WheelJoint",
                extends: cc.Joint,
                editor: !1,
                properties: {
                    _maxMotorTorque: 0,
                    _motorSpeed: 0,
                    _enableMotor: !1,
                    _frequency: 2,
                    _dampingRatio: .7,
                    localAxisA: {
                        default: cc.v2(1, 0),
                        tooltip: !1
                    },
                    maxMotorTorque: {
                        tooltip: !1,
                        get: function() {
                            return this._maxMotorTorque
                        },
                        set: function(t) {
                            this._maxMotorTorque = t, this._joint && this._joint.SetMaxMotorTorque(t)
                        }
                    },
                    motorSpeed: {
                        tooltip: !1,
                        get: function() {
                            return this._motorSpeed
                        },
                        set: function(t) {
                            this._motorSpeed = t, this._joint && this._joint.SetMotorSpeed(t * r)
                        }
                    },
                    enableMotor: {
                        tooltip: !1,
                        get: function() {
                            return this._enableMotor
                        },
                        set: function(t) {
                            this._enableMotor = t, this._joint && this._joint.EnableMotor(t)
                        }
                    },
                    frequency: {
                        tooltip: !1,
                        get: function() {
                            return this._frequency
                        },
                        set: function(t) {
                            this._frequency = t, this._joint && this._joint.SetFrequency(t)
                        }
                    },
                    dampingRatio: {
                        tooltip: !1,
                        get: function() {
                            return this._dampingRatio
                        },
                        set: function(t) {
                            this._dampingRatio = t, this._joint && this._joint.SetDampingRatio(t)
                        }
                    }
                },
                _createJointDef: function() {
                    var t = new b2.WheelJointDef;
                    return t.localAnchorA = new b2.Vec2(this.anchor.x / n, this.anchor.y / n), t.localAnchorB = new b2.Vec2(this.connectedAnchor.x / n, this.connectedAnchor.y / n), t.localAxisA = new b2.Vec2(this.localAxisA.x, this.localAxisA.y), t.maxMotorTorque = this.maxMotorTorque, t.motorSpeed = this.motorSpeed * r, t.enableMotor = this.enableMotor, t.dampingRatio = this.dampingRatio, t.frequencyHz = this.frequency, t
                }
            });
        cc.WheelJoint = e.exports = s
    }), {
        "../CCPhysicsTypes": 173
    }],
    192: [(function(t, e, i) {
        "use strict";
        var n = t("../CCPhysicsTypes").BodyType;

        function r() {
            this._point = new b2.Vec2, this._isPoint = !1, this._fixtures = []
        }
        r.prototype.init = function(t) {
            t ? (this._isPoint = !0, this._point.x = t.x, this._point.y = t.y) : this._isPoint = !1, this._fixtures.length = 0
        }, r.prototype.ReportFixture = function(t) {
            if (t.GetBody().GetType() === n.Dynamic)
                if (this._isPoint) {
                    if (t.TestPoint(this._point)) return this._fixtures.push(t), !1
                } else this._fixtures.push(t);
            return !0
        }, r.prototype.getFixture = function() {
            return this._fixtures[0]
        }, r.prototype.getFixtures = function() {
            return this._fixtures
        }, cc.PhysicsAABBQueryCallback = e.exports = r
    }), {
        "../CCPhysicsTypes": 173
    }],
    193: [(function(t, e, i) {
        "use strict";

        function n() {
            this._contactFixtures = []
        }
        n.prototype.setBeginContact = function(t) {
            this._BeginContact = t
        }, n.prototype.setEndContact = function(t) {
            this._EndContact = t
        }, n.prototype.setPreSolve = function(t) {
            this._PreSolve = t
        }, n.prototype.setPostSolve = function(t) {
            this._PostSolve = t
        }, n.prototype.BeginContact = function(t) {
            if (this._BeginContact) {
                var e = t.GetFixtureA(),
                    i = t.GetFixtureB(),
                    n = this._contactFixtures;
                t._shouldReport = !1, -1 === n.indexOf(e) && -1 === n.indexOf(i) || (t._shouldReport = !0, this._BeginContact(t))
            }
        }, n.prototype.EndContact = function(t) {
            this._EndContact && t._shouldReport && (t._shouldReport = !1, this._EndContact(t))
        }, n.prototype.PreSolve = function(t, e) {
            this._PreSolve && t._shouldReport && this._PreSolve(t, e)
        }, n.prototype.PostSolve = function(t, e) {
            this._PostSolve && t._shouldReport && this._PostSolve(t, e)
        }, n.prototype.registerContactFixture = function(t) {
            this._contactFixtures.push(t)
        }, n.prototype.unregisterContactFixture = function(t) {
            cc.js.array.remove(this._contactFixtures, t)
        }, cc.PhysicsContactListener = e.exports = n
    }), {}],
    194: [(function(t, e, i) {
        "use strict";
        var n = t("../CCPhysicsTypes").PTM_RATIO,
            r = cc.v2(),
            s = cc.Color.GREEN,
            o = cc.Color.RED;

        function a(t) {
            b2.Draw.call(this), this._drawer = t, this._xf = this._dxf = new b2.Transform
        }
        cc.js.extend(a, b2.Draw), cc.js.mixin(a.prototype, {
            _DrawPolygon: function(t, e) {
                for (var i = this._drawer, s = 0; s < e; s++) {
                    b2.Transform.MulXV(this._xf, t[s], r);
                    var o = r.x * n,
                        a = r.y * n;
                    0 === s ? i.moveTo(o, a) : i.lineTo(o, a)
                }
                i.close()
            },
            DrawPolygon: function(t, e, i) {
                this._applyStrokeColor(i), this._DrawPolygon(t, e), this._drawer.stroke()
            },
            DrawSolidPolygon: function(t, e, i) {
                this._applyFillColor(i), this._DrawPolygon(t, e), this._drawer.fill(), this._drawer.stroke()
            },
            _DrawCircle: function(t, e) {
                var i = this._xf.p;
                this._drawer.circle((t.x + i.x) * n, (t.y + i.y) * n, e * n)
            },
            DrawCircle: function(t, e, i) {
                this._applyStrokeColor(i), this._DrawCircle(t, e), this._drawer.stroke()
            },
            DrawSolidCircle: function(t, e, i, n) {
                this._applyFillColor(n), this._DrawCircle(t, e), this._drawer.fill()
            },
            DrawSegment: function(t, e, i) {
                var s = this._drawer;
                if (t.x === e.x && t.y === e.y) return this._applyFillColor(i), this._DrawCircle(t, 2 / n), void s.fill();
                this._applyStrokeColor(i), b2.Transform.MulXV(this._xf, t, r), s.moveTo(r.x * n, r.y * n), b2.Transform.MulXV(this._xf, e, r), s.lineTo(r.x * n, r.y * n), s.stroke()
            },
            DrawTransform: function(t) {
                var e = this._drawer;
                e.strokeColor = o, r.x = r.y = 0, b2.Transform.MulXV(t, r, r), e.moveTo(r.x * n, r.y * n), r.x = 1, r.y = 0, b2.Transform.MulXV(t, r, r), e.lineTo(r.x * n, r.y * n), e.stroke(), e.strokeColor = s, r.x = r.y = 0, b2.Transform.MulXV(t, r, r), e.moveTo(r.x * n, r.y * n), r.x = 0, r.y = 1, b2.Transform.MulXV(t, r, r), e.lineTo(r.x * n, r.y * n), e.stroke()
            },
            DrawPoint: function(t, e, i) {},
            _applyStrokeColor: function(t) {
                var e = this._drawer.strokeColor;
                e.r = 255 * t.r, e.g = 255 * t.g, e.b = 255 * t.b, e.a = 150, this._drawer.strokeColor = e
            },
            _applyFillColor: function(t) {
                var e = this._drawer.fillColor;
                e.r = 255 * t.r, e.g = 255 * t.g, e.b = 255 * t.b, e.a = 150, this._drawer.fillColor = e
            },
            PushTransform: function(t) {
                this._xf = t
            },
            PopTransform: function() {
                this._xf = this._dxf
            }
        }), e.exports = a
    }), {
        "../CCPhysicsTypes": 173
    }],
    195: [(function(t, e, i) {
        "use strict";

        function n() {
            this._type = 0, this._fixtures = [], this._points = [], this._normals = [], this._fractions = []
        }
        n.prototype.init = function(t) {
            this._type = t, this._fixtures.length = 0, this._points.length = 0, this._normals.length = 0, this._fractions.length = 0
        }, n.prototype.ReportFixture = function(t, e, i, n) {
            return 0 === this._type ? (this._fixtures[0] = t, this._points[0] = e, this._normals[0] = i, this._fractions[0] = n, n) : (this._fixtures.push(t), this._points.push(cc.v2(e)), this._normals.push(cc.v2(i)), this._fractions.push(n), 1 === this._type ? 0 : this._type >= 2 ? 1 : n)
        }, n.prototype.getFixtures = function() {
            return this._fixtures
        }, n.prototype.getPoints = function() {
            return this._points
        }, n.prototype.getNormals = function() {
            return this._normals
        }, n.prototype.getFractions = function() {
            return this._fractions
        }, cc.PhysicsRayCastCallback = e.exports = n
    }), {}],
    196: [(function(t, e, i) {
        "use strict";
        e.exports = {
            getWorldRotation: function(t) {
                for (var e = t.angle, i = t.parent; i.parent;) e += i.angle, i = i.parent;
                return -e
            },
            getWorldScale: function(t) {
                for (var e = t.scaleX, i = t.scaleY, n = t.parent; n.parent;) e *= n.scaleX, i *= n.scaleY, n = n.parent;
                return cc.v2(e, i)
            },
            convertToNodeRotation: function(t, e) {
                e -= -t.angle;
                for (var i = t.parent; i.parent;) e -= -i.angle, i = i.parent;
                return e
            }
        }
    }), {}],
    197: [(function(t, e, i) {
        "use strict";
        t("../assets/CCAsset");
        var n = t("./utils").callInNextTick,
            r = t("../load-pipeline/CCLoader"),
            s = t("../load-pipeline/asset-table"),
            o = t("../load-pipeline/pack-downloader"),
            a = t("../load-pipeline/auto-release-utils"),
            l = t("../utils/decode-uuid"),
            h = t("../load-pipeline/md5-pipe"),
            c = t("../load-pipeline/subpackage-pipe"),
            u = t("./js"),
            _ = "",
            f = "",
            d = u.createMap(!0);

        function p(t) {
            return t && (t.constructor === cc.SceneAsset || t instanceof cc.Scene)
        }

        function m(t, e) {
            this.url = t, this.type = e
        }
        var y = {
                loadAsset: function(t, e, i) {
                    if ("string" != typeof t) return n(e, new Error("[AssetLibrary] uuid must be string"), null);
                    var s = {
                        uuid: t,
                        type: "uuid"
                    };
                    i && i.existingAsset && (s.existingAsset = i.existingAsset), r.load(s, (function(i, n) {
                        if (i || !n) {
                            var s = "string" == typeof i ? i : i ? i.message || i.errorMessage || JSON.stringify(i) : "Unknown error";
                            i = new Error("[AssetLibrary] loading JSON or dependencies failed:" + s)
                        } else {
                            if (n.constructor === cc.SceneAsset) {
                                var o = cc.loader._getReferenceKey(t);
                                n.scene.dependAssets = a.getDependsRecursively(o)
                            }
                            if (p(n)) {
                                var l = cc.loader._getReferenceKey(t);
                                r.removeItem(l)
                            }
                        }
                        e && e(i, n)
                    }))
                },
                getLibUrlNoExt: function(t, e) {
                    return t = l(t), (e ? f + "assets/" : _) + t.slice(0, 2) + "/" + t
                },
                _queryAssetInfoInEditor: function(t, e) {
                    0
                },
                _getAssetInfoInRuntime: function(t, e) {
                    e = e || {
                        url: null,
                        raw: !1
                    };
                    var i = d[t];
                    return i && !u.isChildClassOf(i.type, cc.Asset) ? (e.url = f + i.url, e.raw = !0) : (e.url = this.getLibUrlNoExt(t) + ".json", e.raw = !1), e
                },
                _uuidInSettings: function(t) {
                    return t in d
                },
                queryAssetInfo: function(t, e) {
                    var i = this._getAssetInfoInRuntime(t);
                    e(null, i.url, i.raw)
                },
                parseUuidInEditor: function(t) {},
                loadJson: function(t, e) {
                    var i = "" + ((new Date).getTime() + Math.random()),
                        n = {
                            uuid: i,
                            type: "uuid",
                            content: t,
                            skips: [r.assetLoader.id, r.downloader.id]
                        };
                    r.load(n, (function(t, n) {
                        if (t) t = new Error("[AssetLibrary] loading JSON or dependencies failed: " + t.message);
                        else {
                            if (n.constructor === cc.SceneAsset) {
                                var s = cc.loader._getReferenceKey(i);
                                n.scene.dependAssets = a.getDependsRecursively(s)
                            }
                            if (p(n)) {
                                var o = cc.loader._getReferenceKey(i);
                                r.removeItem(o)
                            }
                        }
                        n._uuid = "", e && e(t, n)
                    }))
                },
                getAssetByUuid: function(t) {
                    return y._uuidToAsset[t] || null
                },
                init: function(t) {
                    var e = t.libraryPath;
                    if (e = e.replace(/\\/g, "/"), _ = cc.path.stripSep(e) + "/", f = t.rawAssetsBase, t.subpackages) {
                        var i = new c(t.subpackages);
                        cc.loader.insertPipeAfter(cc.loader.assetLoader, i), cc.loader.subPackPipe = i
                    }
                    var n = t.md5AssetsMap;
                    if (n && n.import) {
                        var a = 0,
                            p = 0,
                            y = u.createMap(!0),
                            v = n.import;
                        for (a = 0; a < v.length; a += 2) y[p = l(v[a])] = v[a + 1];
                        var g = u.createMap(!0);
                        for (v = n["raw-assets"], a = 0; a < v.length; a += 2) g[p = l(v[a])] = v[a + 1];
                        var x = new h(y, g, _);
                        cc.loader.insertPipeAfter(cc.loader.assetLoader, x), cc.loader.md5Pipe = x
                    }
                    var b = r._assetTables;
                    for (var A in b) b[A].reset();
                    var C = t.rawAssets;
                    if (C)
                        for (var T in C) {
                            var S = C[T];
                            for (var p in S) {
                                var w = S[p],
                                    E = w[0],
                                    M = w[1],
                                    D = cc.js._getClassById(M);
                                if (D) {
                                    d[p] = new m(T + "/" + E, D);
                                    var B = cc.path.extname(E);
                                    B && (E = E.slice(0, -B.length));
                                    var I = 1 === w[2];
                                    b[T] || (b[T] = new s), b[T].add(E, p, D, !I)
                                } else cc.error("Cannot get", M)
                            }
                        }
                    t.packedAssets && o.initPacks(t.packedAssets), cc.url._init(t.mountPaths && t.mountPaths.assets || f + "assets")
                },
                _uuidToAsset: {}
            },
            v = {
                effect: {},
                material: {}
            },
            g = {};

        function x(t, e, i) {
            var n = t + "s",
                r = v[t] = {},
                s = "internal";
            cc.loader.loadResDir(n, e, s, (function() {}), (function(t, e) {
                if (t) cc.error(t);
                else
                    for (var n = 0; n < e.length; n++) {
                        var s = e[n];
                        cc.loader.getDependsRecursively(s).forEach((function(t) {
                            return g[t] = !0
                        })), r["" + s.name] = s
                    }
                i()
            }))
        }
        y._loadBuiltins = function(t) {
            if (cc.game.renderType === cc.game.RENDER_TYPE_CANVAS) return t && t();
            x("effect", cc.EffectAsset, (function() {
                x("material", cc.Material, t)
            }))
        }, y.getBuiltin = function(t, e) {
            return v[t][e]
        }, y.getBuiltins = function(t) {
            return t ? v[t] : v
        }, y.resetBuiltins = function() {
            v = {
                effect: {},
                material: {}
            }, g = {}
        }, y.getBuiltinDeps = function() {
            return g
        }, e.exports = cc.AssetLibrary = y
    }), {
        "../assets/CCAsset": 56,
        "../load-pipeline/CCLoader": 145,
        "../load-pipeline/asset-table": 147,
        "../load-pipeline/auto-release-utils": 149,
        "../load-pipeline/md5-pipe": 156,
        "../load-pipeline/pack-downloader": 157,
        "../load-pipeline/subpackage-pipe": 160,
        "../utils/decode-uuid": 294,
        "./js": 218,
        "./utils": 222
    }],
    198: [(function(t, e, i) {
        "use strict";
        var n = t("./js"),
            r = t("./CCEnum"),
            s = t("./utils"),
            o = (s.isPlainEmptyObj_DEV, s.cloneable_DEV, t("./attribute")),
            a = o.DELIMETER,
            l = t("./preprocess-class");
        t("./requiring-frame");
        var h = ["name", "extends", "mixins", "ctor", "__ctor__", "properties", "statics", "editor", "__ES6__"];

        function c(t, e) {
            t.indexOf(e) < 0 && t.push(e)
        }
        var u = {
            datas: null,
            push: function(t) {
                if (this.datas) this.datas.push(t);
                else {
                    this.datas = [t];
                    var e = this;
                    setTimeout((function() {
                        e.init()
                    }), 0)
                }
            },
            init: function() {
                var t = this.datas;
                if (t) {
                    for (var e = 0; e < t.length; ++e) {
                        var i = t[e],
                            r = i.cls,
                            s = i.props;
                        "function" == typeof s && (s = s());
                        var o = n.getClassName(r);
                        s ? M(r, o, s, r.$super, i.mixins) : cc.errorID(3633, o)
                    }
                    this.datas = null
                }
            }
        };

        function _(t, e) {
            c(t.__props__, e)
        }

        function f(t, e, i, n, r) {
            var s = n.default;
            o.setClassAttr(t, i, "default", s), _(t, i), I(t, n, e, i, !1)
        }

        function d(t, e, i, r, s) {
            var a = r.get,
                l = r.set,
                h = t.prototype,
                c = Object.getOwnPropertyDescriptor(h, i),
                u = !c;
            a && (I(t, r, e, i, !0), o.setClassAttr(t, i, "serializable", !1), s || n.get(h, i, a, u, u)), l && (s || n.set(h, i, l, u, u))
        }

        function p(t) {
            return "function" == typeof t ? t() : t
        }

        function m(t, e, i) {
            for (var r in e) t.hasOwnProperty(r) || i && !i(r) || Object.defineProperty(t, r, n.getPropertyDescriptor(e, r))
        }

        function y(t, e, i, r) {
            var s, a, l = r.__ctor__,
                h = r.ctor,
                c = r.__ES6__;
            c ? (s = [h], a = h) : (s = l ? [l] : S(e, i, r), a = T(s, e, t, r), n.value(a, "extend", (function(t) {
                return t.extends = this, D(t)
            }), !0)), n.value(a, "__ctors__", s.length > 0 ? s : null, !0);
            var u = a.prototype;
            if (e && (c || (n.extend(a, e), u = a.prototype), a.$super = e), i) {
                for (var _ = i.length - 1; _ >= 0; _--) {
                    var f = i[_];
                    m(u, f.prototype), m(a, f, (function(t) {
                        return f.hasOwnProperty(t) && !0
                    })), D._isCCClass(f) && m(o.getClassAttrs(a), o.getClassAttrs(f))
                }
                u.constructor = a
            }
            return c || (u.__initProps__ = C), n.setClassName(t, a), a
        }

        function v(t, e, i, r) {
            var s = cc.Component,
                o = cc._RF.peek();
            if (o && n.isChildClassOf(e, s)) {
                if (n.isChildClassOf(o.cls, s)) return cc.errorID(3615), null;
                0, t = t || o.script
            }
            var a = y(t, e, i, r);
            if (o)
                if (n.isChildClassOf(e, s)) {
                    var l = o.uuid;
                    l && n._setClassId(l, a), o.cls = a
                } else n.isChildClassOf(o.cls, s) || (o.cls = a);
            return a
        }

        function g(t) {
            for (var e = n.getClassName(t), i = t.constructor, r = "new " + e + "(", s = 0; s < i.__props__.length; s++) {
                var o = t[i.__props__[s]];
                0, r += o, s < i.__props__.length - 1 && (r += ",")
            }
            return r + ")"
        }

        function x(t) {
            return JSON.stringify(t).replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029")
        }

        function b(t, e) {
            for (var i = [], n = "", r = 0; r < e.length; r++) {
                var s = e[r],
                    o = s + a + "default";
                if (o in t) {
                    var l, h;
                    l = A.test(s) ? "this." + s + "=" : "this[" + x(s) + "]=";
                    var c = t[o];
                    if ("object" == typeof c && c) h = c instanceof cc.ValueType ? g(c) : Array.isArray(c) ? "[]" : "{}";
                    else if ("function" == typeof c) {
                        var u = i.length;
                        i.push(c), h = "F[" + u + "]()"
                    } else h = "string" == typeof c ? x(c) : c;
                    n += l = l + h + ";\n"
                }
            }
            return 0 === i.length ? Function(n) : Function("F", "return (function(){\n" + n + "})")(i)
        }
        var A = /^[A-Za-z_$][0-9A-Za-z_$]*$/;

        function C(t) {
            var e = o.getClassAttrs(t),
                i = t.__props__;
            null === i && (u.init(), i = t.__props__);
            var n = b(e, i);
            t.prototype.__initProps__ = n, n.call(this)
        }
        var T = function(t, e, i, n) {
            var r = "return function CCClass(){\n";
            e && E(e, n, i) && (r += "this._super=null;\n"), r += "this.__initProps__(CCClass);\n";
            var s = t.length;
            if (s > 0) {
                0;
                var o = "].apply(this,arguments);\n";
                if (1 === s) r += "CCClass.__ctors__[0" + o;
                else {
                    r += "var cs=CCClass.__ctors__;\n";
                    for (var a = 0; a < s; a++) r += "cs[" + a + o
                }
                0
            }
            return r += "}", Function(r)()
        };

        function S(t, e, i) {
            function n(t) {
                return D._isCCClass(t) ? t.__ctors__ || [] : [t]
            }
            for (var r = [], s = [t].concat(e), o = 0; o < s.length; o++) {
                var a = s[o];
                if (a)
                    for (var l = n(a), h = 0; h < l.length; h++) c(r, l[h])
            }
            var u = i.ctor;
            return u && r.push(u), r
        }
        var w = /xyz/.test((function() {
            xyz
        })) ? /\b\._super\b/ : /.*/;
        /xyz/.test((function() {
            xyz
        }));

        function E(t, e, i) {
            var r = !1;
            for (var s in e)
                if (!(h.indexOf(s) >= 0)) {
                    var o = e[s];
                    if ("function" == typeof o) {
                        var a = n.getPropertyDescriptor(t.prototype, s);
                        if (a) {
                            var l = a.value;
                            if ("function" == typeof l) {
                                w.test(o) && (r = !0, e[s] = (function(t, e) {
                                    return function() {
                                        var i = this._super;
                                        this._super = t;
                                        var n = e.apply(this, arguments);
                                        return this._super = i, n
                                    }
                                })(l, o));
                                continue
                            }
                        }
                        0
                    }
                }
            return r
        }

        function M(t, e, i, n, r, s) {
            if (t.__props__ = [], n && n.__props__ && (t.__props__ = n.__props__.slice()), r)
                for (var h = 0; h < r.length; ++h) {
                    var c = r[h];
                    c.__props__ && (t.__props__ = t.__props__.concat(c.__props__.filter((function(e) {
                        return t.__props__.indexOf(e) < 0
                    }))))
                }
            if (i)
                for (var u in l.preprocessAttrs(i, e, t, s), i) {
                    var _ = i[u];
                    "default" in _ ? f(t, e, u, _) : d(t, e, u, _, s)
                }
            var p = o.getClassAttrs(t);
            t.__values__ = t.__props__.filter((function(t) {
                return !1 !== p[t + a + "serializable"]
            }))
        }

        function D(t) {
            var e = (t = t || {}).name,
                i = t.extends,
                r = t.mixins,
                s = v(e, i, r, t);
            e || (e = cc.js.getClassName(s)), s._sealed = !0, i && (i._sealed = !1);
            var o = t.properties;
            "function" == typeof o || i && null === i.__props__ || r && r.some((function(t) {
                return null === t.__props__
            })) ? (u.push({
                cls: s,
                props: o,
                mixins: r
            }), s.__props__ = s.__values__ = null) : M(s, e, o, i, t.mixins, t.__ES6__);
            var a, c = t.statics;
            if (c)
                for (a in c) s[a] = c[a];
            for (var _ in t)
                if (!(h.indexOf(_) >= 0)) {
                    var f = t[_];
                    l.validateMethodWithProps(f, _, e, s, i) && n.value(s.prototype, _, f, !0, !0)
                }
            var d = t.editor;
            return d && n.isChildClassOf(i, cc.Component) && cc.Component._registerEditorProps(s, d), s
        }
        D._isCCClass = function(t) {
            return t && t.hasOwnProperty("__ctors__")
        }, D._fastDefine = function(t, e, i) {
            n.setClassName(t, e);
            for (var r = e.__props__ = e.__values__ = Object.keys(i), s = o.getClassAttrs(e), l = 0; l < r.length; l++) {
                var h = r[l];
                s[h + a + "visible"] = !1, s[h + a + "default"] = i[h]
            }
        }, D.Attr = o, D.attr = o.attr, D.getInheritanceChain = function(t) {
            for (var e = []; t = n.getSuper(t);) t !== Object && e.push(t);
            return e
        };
        var B = {
            Integer: "Number",
            Float: "Number",
            Boolean: "Boolean",
            String: "String"
        };

        function I(t, e, i, n, s) {
            var l = null,
                h = "";

            function c() {
                return h = n + a, l = o.getClassAttrs(t)
            }
            var u = e.type;
            if (u) {
                var _ = B[u];
                _ ? (l || c())[h + "type"] = u : "Object" === u || (u === o.ScriptUuid ? ((l || c())[h + "type"] = "Script", l[h + "ctor"] = cc.ScriptAsset) : "object" == typeof u ? r.isEnum(u) && ((l || c())[h + "type"] = "Enum", l[h + "enumList"] = r.getList(u)) : "function" == typeof u && ((l || c())[h + "type"] = "Object", l[h + "ctor"] = u))
            }

            function f(t, i) {
                if (t in e) {
                    var n = e[t];
                    typeof n === i && ((l || c())[h + t] = n)
                }
            }
            e.editorOnly && ((l || c())[h + "editorOnly"] = !0), e.url && ((l || c())[h + "saveUrlAsAsset"] = !0), !1 === e.serializable && ((l || c())[h + "serializable"] = !1), f("formerlySerializedAs", "string");
            var d = e.range;
            d && Array.isArray(d) && d.length >= 2 && ((l || c())[h + "min"] = d[0], l[h + "max"] = d[1], d.length > 2 && (l[h + "step"] = d[2])), f("min", "number"), f("max", "number"), f("step", "number")
        }
        cc.Class = D, e.exports = {
            isArray: function(t) {
                return t = p(t), Array.isArray(t)
            },
            fastDefine: D._fastDefine,
            getNewValueTypeCode: g,
            IDENTIFIER_RE: A,
            escapeForJS: x,
            getDefault: p
        }
    }), {
        "./CCEnum": 200,
        "./attribute": 210,
        "./js": 218,
        "./preprocess-class": 219,
        "./requiring-frame": 220,
        "./utils": 222
    }],
    199: [(function(t, e, i) {
        "use strict";
        t("./CCClass");
        var n = t("./preprocess-class"),
            r = t("./js"),
            s = "__ccclassCache__";

        function o(t) {
            return t
        }

        function a(t, e) {
            return t[e] || (t[e] = {})
        }

        function l(t) {
            return function(e) {
                return "function" == typeof e ? t(e) : function(i) {
                    return t(i, e)
                }
            }
        }

        function h(t, e, i) {
            return function(t) {
                return function(i) {
                    return e(i, t)
                }
            }
        }
        var c = h.bind(null, !1);

        function u(t) {
            return h.bind(null, !1)
        }
        var _ = u(),
            f = u();

        function d(t, e) {
            return a(t, s)
        }

        function p(t) {
            var e;
            try {
                e = t()
            } catch (e) {
                return t
            }
            return "object" != typeof e || null === e ? e : t
        }

        function m(t) {
            var e;
            try {
                e = new t
            } catch (t) {
                return {}
            }
            return e
        }

        function y(t, e, i, s, o, a) {
            var l;
            s && (l = n.getFullFormOfProperty(s));
            var h = e[i],
                c = r.mixin(h || {}, l || s || {});
            if (o && (o.get || o.set)) {
                o.get && (c.get = o.get), o.set && (c.set = o.set)
            } else {
                0;
                var u = void 0;
                if (o) o.initializer && (u = p(o.initializer), !0);
                else {
                    var _ = a.default || (a.default = m(t));
                    _.hasOwnProperty(i) && (u = _[i], !0)
                }
                0, c.default = u
            }
            e[i] = c
        }
        var v = l((function(t, e) {
            var i = r.getSuper(t);
            i === Object && (i = null);
            var n = {
                    name: e,
                    extends: i,
                    ctor: t,
                    __ES6__: !0
                },
                o = t[s];
            if (o) {
                var a = o.proto;
                a && r.mixin(n, a), t[s] = void 0
            }
            return cc.Class(n)
        }));

        function g(t, e, i) {
            return t((function(t, n) {
                var r = d(t);
                if (r) {
                    var s = void 0 !== i ? i : n;
                    a(a(r, "proto"), "editor")[e] = s
                }
            }), e)
        }

        function x(t) {
            return t(o)
        }
        var b = x(l),
            A = g(c, "requireComponent"),
            C = x(_),
            T = g(f, "executionOrder"),
            S = x(l),
            w = x(l),
            E = x(_),
            M = x(_),
            D = x(_);
        cc._decorator = e.exports = {
            ccclass: v,
            property: function(t, e, i) {
                var n = null;

                function r(t, e, i) {
                    var r = d(t.constructor);
                    if (r) {
                        var s = a(a(r, "proto"), "properties");
                        y(t.constructor, s, e, n, i, r)
                    }
                }
                if (void 0 === e) return n = t, r;
                r(t, e, i)
            },
            executeInEditMode: b,
            requireComponent: A,
            menu: C,
            executionOrder: T,
            disallowMultiple: S,
            playOnFocus: w,
            inspector: E,
            icon: M,
            help: D,
            mixins: function() {
                for (var t = [], e = 0; e < arguments.length; e++) t[e] = arguments[e];
                return function(e) {
                    var i = d(e);
                    i && (a(i, "proto").mixins = t)
                }
            }
        }
    }), {
        "./CCClass": 198,
        "./js": 218,
        "./preprocess-class": 219,
        "./utils": 222
    }],
    200: [(function(t, e, i) {
        "use strict";
        var n = t("./js");

        function r(t) {
            if ("__enums__" in t) return t;
            n.value(t, "__enums__", null, !0);
            for (var e = -1, i = Object.keys(t), r = 0; r < i.length; r++) {
                var s = i[r],
                    o = t[s];
                if (-1 === o) o = ++e, t[s] = o;
                else if ("number" == typeof o) e = o;
                else if ("string" == typeof o && Number.isInteger(parseFloat(s))) continue;
                var a = "" + o;
                s !== a && n.value(t, a, s)
            }
            return t
        }
        r.isEnum = function(t) {
            return t && t.hasOwnProperty("__enums__")
        }, r.getList = function(t) {
            if (t.__enums__) return t.__enums__;
            var e = t.__enums__ = [];
            for (var i in t) {
                var n = t[i];
                Number.isInteger(n) && e.push({
                    name: i,
                    value: n
                })
            }
            return e.sort((function(t, e) {
                return t.value - e.value
            })), e
        }, e.exports = cc.Enum = r
    }), {
        "./js": 218
    }],
    201: [(function(t, e, i) {
        "use strict";
        var n = t("../event-manager"),
            r = t("./CCInputManager"),
            s = void 0;
        cc.Acceleration = function(t, e, i, n) {
            this.x = t || 0, this.y = e || 0, this.z = i || 0, this.timestamp = n || 0
        }, r.setAccelerometerEnabled = function(t) {
            var e = this;
            if (e._accelEnabled !== t) {
                e._accelEnabled = t;
                var i = cc.director.getScheduler();
                i.enableForTarget(e), e._accelEnabled ? (e._registerAccelerometerEvent(), e._accelCurTime = 0, i.scheduleUpdate(e)) : (e._unregisterAccelerometerEvent(), e._accelCurTime = 0, i.unscheduleUpdate(e))
            }
        }, r.setAccelerometerInterval = function(t) {
            this._accelInterval !== t && (this._accelInterval = t)
        }, r._registerKeyboardEvent = function() {
            cc.game.canvas.addEventListener("keydown", (function(t) {
                n.dispatchEvent(new cc.Event.EventKeyboard(t.keyCode, !0)), t.stopPropagation(), t.preventDefault()
            }), !1), cc.game.canvas.addEventListener("keyup", (function(t) {
                n.dispatchEvent(new cc.Event.EventKeyboard(t.keyCode, !1)), t.stopPropagation(), t.preventDefault()
            }), !1)
        }, r._registerAccelerometerEvent = function() {
            var t = window,
                e = this;
            e._acceleration = new cc.Acceleration, e._accelDeviceEvent = t.DeviceMotionEvent || t.DeviceOrientationEvent, cc.sys.browserType === cc.sys.BROWSER_TYPE_MOBILE_QQ && (e._accelDeviceEvent = window.DeviceOrientationEvent);
            var i = e._accelDeviceEvent === t.DeviceMotionEvent ? "devicemotion" : "deviceorientation",
                n = navigator.userAgent;
            (/Android/.test(n) || /Adr/.test(n) && cc.sys.browserType === cc.BROWSER_TYPE_UC) && (e._minus = -1), s = e.didAccelerate.bind(e), t.addEventListener(i, s, !1)
        }, r._unregisterAccelerometerEvent = function() {
            var t = window,
                e = this._accelDeviceEvent === t.DeviceMotionEvent ? "devicemotion" : "deviceorientation";
            s && t.removeEventListener(e, s, !1)
        }, r.didAccelerate = function(t) {
            var e = this,
                i = window;
            if (e._accelEnabled) {
                var n = e._acceleration,
                    r = void 0,
                    s = void 0,
                    o = void 0;
                if (e._accelDeviceEvent === window.DeviceMotionEvent) {
                    var a = t.accelerationIncludingGravity;
                    r = e._accelMinus * a.x * .1, s = e._accelMinus * a.y * .1, o = .1 * a.z
                } else r = t.gamma / 90 * .981, s = -t.beta / 90 * .981, o = t.alpha / 90 * .981;
                if (cc.view._isRotated) {
                    var l = r;
                    r = -s, s = l
                }
                n.x = r, n.y = s, n.z = o, n.timestamp = t.timeStamp || Date.now();
                var h = n.x;
                90 === i.orientation ? (n.x = -n.y, n.y = h) : -90 === i.orientation ? (n.x = n.y, n.y = -h) : 180 === i.orientation && (n.x = -n.x, n.y = -n.y), cc.sys.os === cc.sys.OS_ANDROID && cc.sys.browserType !== cc.sys.BROWSER_TYPE_MOBILE_QQ && (n.x = -n.x, n.y = -n.y)
            }
        }
    }), {
        "../event-manager": 129,
        "./CCInputManager": 202
    }],
    202: [(function(t, e, i) {
        "use strict";
        var n = t("./CCMacro"),
            r = t("./CCSys"),
            s = t("../event-manager"),
            o = n.TOUCH_TIMEOUT,
            a = cc.v2(),
            l = {
                _mousePressed: !1,
                _isRegisterEvent: !1,
                _preTouchPoint: cc.v2(0, 0),
                _prevMousePoint: cc.v2(0, 0),
                _preTouchPool: [],
                _preTouchPoolPointer: 0,
                _touches: [],
                _touchesIntegerDict: {},
                _indexBitsUsed: 0,
                _maxTouches: 8,
                _accelEnabled: !1,
                _accelInterval: .2,
                _accelMinus: 1,
                _accelCurTime: 0,
                _acceleration: null,
                _accelDeviceEvent: null,
                _canvasBoundingRect: {
                    left: 0,
                    top: 0,
                    adjustedLeft: 0,
                    adjustedTop: 0,
                    width: 0,
                    height: 0
                },
                _getUnUsedIndex: function() {
                    for (var t = this._indexBitsUsed, e = cc.sys.now(), i = 0; i < this._maxTouches; i++) {
                        if (!(1 & t)) return this._indexBitsUsed |= 1 << i, i;
                        var n = this._touches[i];
                        if (e - n._lastModified > o) return this._removeUsedIndexBit(i), delete this._touchesIntegerDict[n.getID()], i;
                        t >>= 1
                    }
                    return -1
                },
                _removeUsedIndexBit: function(t) {
                    if (!(t < 0 || t >= this._maxTouches)) {
                        var e = 1 << t;
                        e = ~e, this._indexBitsUsed &= e
                    }
                },
                _glView: null,
                _updateCanvasBoundingRect: function() {
                    var t = cc.game.canvas,
                        e = this._canvasBoundingRect,
                        i = document.documentElement,
                        n = window.pageXOffset - i.clientLeft,
                        r = window.pageYOffset - i.clientTop;
                    if (t.getBoundingClientRect) {
                        var s = t.getBoundingClientRect();
                        e.left = s.left + n, e.top = s.top + r, e.width = s.width, e.height = s.height
                    } else t instanceof HTMLCanvasElement ? (e.left = n, e.top = r, e.width = t.width, e.height = t.height) : (e.left = n, e.top = r, e.width = parseInt(t.style.width), e.height = parseInt(t.style.height))
                },
                handleTouchesBegin: function(t) {
                    for (var e = void 0, i = void 0, n = void 0, o = [], a = this._touchesIntegerDict, l = r.now(), h = 0, c = t.length; h < c; h++)
                        if (null == a[n = (e = t[h]).getID()]) {
                            var u = this._getUnUsedIndex();
                            if (-1 === u) {
                                cc.logID(2300, u);
                                continue
                            }(i = this._touches[u] = new cc.Touch(e._point.x, e._point.y, e.getID()))._lastModified = l, i._setPrevPoint(e._prevPoint), a[n] = u, o.push(i)
                        }
                    if (o.length > 0) {
                        this._glView._convertTouchesWithScale(o);
                        var _ = new cc.Event.EventTouch(o);
                        _._eventCode = cc.Event.EventTouch.BEGAN, s.dispatchEvent(_)
                    }
                },
                handleTouchesMove: function(t) {
                    for (var e = void 0, i = void 0, n = void 0, o = [], a = this._touches, l = r.now(), h = 0, c = t.length; h < c; h++) n = (e = t[h]).getID(), null != (i = this._touchesIntegerDict[n]) && a[i] && (a[i]._setPoint(e._point), a[i]._setPrevPoint(e._prevPoint), a[i]._lastModified = l, o.push(a[i]));
                    if (o.length > 0) {
                        this._glView._convertTouchesWithScale(o);
                        var u = new cc.Event.EventTouch(o);
                        u._eventCode = cc.Event.EventTouch.MOVED, s.dispatchEvent(u)
                    }
                },
                handleTouchesEnd: function(t) {
                    var e = this.getSetOfTouchesEndOrCancel(t);
                    if (e.length > 0) {
                        this._glView._convertTouchesWithScale(e);
                        var i = new cc.Event.EventTouch(e);
                        i._eventCode = cc.Event.EventTouch.ENDED, s.dispatchEvent(i)
                    }
                    this._preTouchPool.length = 0
                },
                handleTouchesCancel: function(t) {
                    var e = this.getSetOfTouchesEndOrCancel(t);
                    if (e.length > 0) {
                        this._glView._convertTouchesWithScale(e);
                        var i = new cc.Event.EventTouch(e);
                        i._eventCode = cc.Event.EventTouch.CANCELLED, s.dispatchEvent(i)
                    }
                    this._preTouchPool.length = 0
                },
                getSetOfTouchesEndOrCancel: function(t) {
                    for (var e = void 0, i = void 0, n = void 0, r = [], s = this._touches, o = this._touchesIntegerDict, a = 0, l = t.length; a < l; a++) null != (i = o[n = (e = t[a]).getID()]) && s[i] && (s[i]._setPoint(e._point), s[i]._setPrevPoint(e._prevPoint), r.push(s[i]), this._removeUsedIndexBit(i), delete o[n]);
                    return r
                },
                getPreTouch: function(t) {
                    for (var e = null, i = this._preTouchPool, n = t.getID(), r = i.length - 1; r >= 0; r--)
                        if (i[r].getID() === n) {
                            e = i[r];
                            break
                        }
                    return e || (e = t), e
                },
                setPreTouch: function(t) {
                    for (var e = !1, i = this._preTouchPool, n = t.getID(), r = i.length - 1; r >= 0; r--)
                        if (i[r].getID() === n) {
                            i[r] = t, e = !0;
                            break
                        }
                    e || (i.length <= 50 ? i.push(t) : (i[this._preTouchPoolPointer] = t, this._preTouchPoolPointer = (this._preTouchPoolPointer + 1) % 50))
                },
                getTouchByXY: function(t, e, i) {
                    var n = this._preTouchPoint,
                        r = this._glView.convertToLocationInView(t, e, i),
                        s = new cc.Touch(r.x, r.y, 0);
                    return s._setPrevPoint(n.x, n.y), n.x = r.x, n.y = r.y, s
                },
                getMouseEvent: function(t, e, i) {
                    var n = this._prevMousePoint,
                        r = new cc.Event.EventMouse(i);
                    return r._setPrevCursor(n.x, n.y), n.x = t.x, n.y = t.y, this._glView._convertMouseToLocationInView(n, e), r.setLocation(n.x, n.y), r
                },
                getPointByEvent: function(t, e) {
                    return null != t.pageX ? {
                        x: t.pageX,
                        y: t.pageY
                    } : (e.left -= document.body.scrollLeft, e.top -= document.body.scrollTop, {
                        x: t.clientX,
                        y: t.clientY
                    })
                },
                getTouchesByEvent: function(t, e) {
                    for (var i = [], n = this._glView, s = void 0, o = void 0, l = void 0, h = this._preTouchPoint, c = t.changedTouches.length, u = 0; u < c; u++)
                        if (s = t.changedTouches[u]) {
                            var _ = void 0;
                            _ = r.BROWSER_TYPE_FIREFOX === r.browserType ? n.convertToLocationInView(s.pageX, s.pageY, e, a) : n.convertToLocationInView(s.clientX, s.clientY, e, a), null != s.identifier ? (o = new cc.Touch(_.x, _.y, s.identifier), l = this.getPreTouch(o).getLocation(), o._setPrevPoint(l.x, l.y), this.setPreTouch(o)) : (o = new cc.Touch(_.x, _.y))._setPrevPoint(h.x, h.y), h.x = _.x, h.y = _.y, i.push(o)
                        }
                    return i
                },
                registerSystemEvent: function(t) {
                    if (!this._isRegisterEvent) {
                        this._glView = cc.view;
                        var e = this,
                            i = this._canvasBoundingRect;
                        window.addEventListener("resize", this._updateCanvasBoundingRect.bind(this));
                        var n = r.isMobile,
                            o = "mouse" in r.capabilities,
                            a = "touches" in r.capabilities;
                        if (o) {
                            n || (window.addEventListener("mousedown", (function() {
                                e._mousePressed = !0
                            }), !1), window.addEventListener("mouseup", (function(t) {
                                if (e._mousePressed) {
                                    e._mousePressed = !1;
                                    var n = e.getPointByEvent(t, i);
                                    if (!cc.rect(i.left, i.top, i.width, i.height).contains(n)) {
                                        e.handleTouchesEnd([e.getTouchByXY(n.x, n.y, i)]);
                                        var r = e.getMouseEvent(n, i, cc.Event.EventMouse.UP);
                                        r.setButton(t.button), s.dispatchEvent(r)
                                    }
                                }
                            }), !1));
                            for (var l = cc.Event.EventMouse, h = [!n && ["mousedown", l.DOWN, function(i, n, r, s) {
                                        e._mousePressed = !0, e.handleTouchesBegin([e.getTouchByXY(r.x, r.y, s)]), t.focus()
                                    }], !n && ["mouseup", l.UP, function(t, i, n, r) {
                                        e._mousePressed = !1, e.handleTouchesEnd([e.getTouchByXY(n.x, n.y, r)])
                                    }], !n && ["mousemove", l.MOVE, function(t, i, n, r) {
                                        e.handleTouchesMove([e.getTouchByXY(n.x, n.y, r)]), e._mousePressed || i.setButton(null)
                                    }],
                                    ["mousewheel", l.SCROLL, function(t, e) {
                                        e.setScrollData(0, t.wheelDelta)
                                    }],
                                    ["DOMMouseScroll", l.SCROLL, function(t, e) {
                                        e.setScrollData(0, -120 * t.detail)
                                    }]
                                ], c = 0; c < h.length; ++c) {
                                var u = h[c];
                                u && (function() {
                                    var n = u[0],
                                        r = u[1],
                                        o = u[2];
                                    t.addEventListener(n, (function(t) {
                                        var n = e.getPointByEvent(t, i),
                                            a = e.getMouseEvent(n, i, r);
                                        a.setButton(t.button), o(t, a, n, i), s.dispatchEvent(a), t.stopPropagation(), t.preventDefault()
                                    }), !1)
                                })()
                            }
                        }
                        if (window.navigator.msPointerEnabled) {
                            var _ = {
                                    MSPointerDown: e.handleTouchesBegin,
                                    MSPointerMove: e.handleTouchesMove,
                                    MSPointerUp: e.handleTouchesEnd,
                                    MSPointerCancel: e.handleTouchesCancel
                                },
                                f = function(n) {
                                    var r = _[n];
                                    t.addEventListener(n, (function(t) {
                                        var n = document.documentElement;
                                        i.adjustedLeft = i.left - n.scrollLeft, i.adjustedTop = i.top - n.scrollTop, r.call(e, [e.getTouchByXY(t.clientX, t.clientY, i)]), t.stopPropagation()
                                    }), !1)
                                };
                            for (var d in _) f(d)
                        }
                        if (a) {
                            var p = {
                                    touchstart: function(i) {
                                        e.handleTouchesBegin(i), t.focus()
                                    },
                                    touchmove: function(t) {
                                        e.handleTouchesMove(t)
                                    },
                                    touchend: function(t) {
                                        e.handleTouchesEnd(t)
                                    },
                                    touchcancel: function(t) {
                                        e.handleTouchesCancel(t)
                                    }
                                },
                                m = function(n) {
                                    var r = p[n];
                                    t.addEventListener(n, (function(t) {
                                        if (t.changedTouches) {
                                            var n = document.body;
                                            i.adjustedLeft = i.left - (n.scrollLeft || 0), i.adjustedTop = i.top - (n.scrollTop || 0), r(e.getTouchesByEvent(t, i)), t.stopPropagation(), t.preventDefault()
                                        }
                                    }), !1)
                                };
                            for (var d in p) m(d)
                        }
                        this._registerKeyboardEvent(), this._isRegisterEvent = !0
                    }
                },
                _registerKeyboardEvent: function() {},
                _registerAccelerometerEvent: function() {},
                update: function(t) {
                    this._accelCurTime > this._accelInterval && (this._accelCurTime -= this._accelInterval, s.dispatchEvent(new cc.Event.EventAcceleration(this._acceleration))), this._accelCurTime += t
                }
            };
        e.exports = _cc.inputManager = l
    }), {
        "../event-manager": 129,
        "./CCMacro": 203,
        "./CCSys": 207
    }],
    203: [(function(t, e, i) {
        "use strict";
        cc.macro = {
            RAD: Math.PI / 180,
            DEG: 180 / Math.PI,
            REPEAT_FOREVER: Number.MAX_VALUE - 1,
            FLT_EPSILON: 1.192092896e-7,
            MIN_ZINDEX: -Math.pow(2, 15),
            MAX_ZINDEX: Math.pow(2, 15) - 1,
            ONE: 1,
            ZERO: 0,
            SRC_ALPHA: 770,
            SRC_ALPHA_SATURATE: 776,
            SRC_COLOR: 768,
            DST_ALPHA: 772,
            DST_COLOR: 774,
            ONE_MINUS_SRC_ALPHA: 771,
            ONE_MINUS_SRC_COLOR: 769,
            ONE_MINUS_DST_ALPHA: 773,
            ONE_MINUS_DST_COLOR: 775,
            ONE_MINUS_CONSTANT_ALPHA: 32772,
            ONE_MINUS_CONSTANT_COLOR: 32770,
            ORIENTATION_PORTRAIT: 1,
            ORIENTATION_LANDSCAPE: 2,
            ORIENTATION_AUTO: 3,
            DENSITYDPI_DEVICE: "device-dpi",
            DENSITYDPI_HIGH: "high-dpi",
            DENSITYDPI_MEDIUM: "medium-dpi",
            DENSITYDPI_LOW: "low-dpi",
            FIX_ARTIFACTS_BY_STRECHING_TEXEL_TMX: !0,
            DIRECTOR_STATS_POSITION: cc.v2(0, 0),
            ENABLE_STACKABLE_ACTIONS: !0,
            TOUCH_TIMEOUT: 5e3,
            BATCH_VERTEX_COUNT: 2e4,
            ENABLE_TILEDMAP_CULLING: !0,
            DOWNLOAD_MAX_CONCURRENT: 64,
            ENABLE_TRANSPARENT_CANVAS: !1,
            ENABLE_WEBGL_ANTIALIAS: !1,
            ENABLE_CULLING: !1,
            CLEANUP_IMAGE_CACHE: !1,
            SHOW_MESH_WIREFRAME: !1,
            ROTATE_ACTION_CCW: !1
        };
        cc.macro.SUPPORT_TEXTURE_FORMATS = [".pkm", ".pvr", ".webp", ".jpg", ".jpeg", ".bmp", ".png"], cc.macro.KEY = {
            none: 0,
            back: 6,
            menu: 18,
            backspace: 8,
            tab: 9,
            enter: 13,
            shift: 16,
            ctrl: 17,
            alt: 18,
            pause: 19,
            capslock: 20,
            escape: 27,
            space: 32,
            pageup: 33,
            pagedown: 34,
            end: 35,
            home: 36,
            left: 37,
            up: 38,
            right: 39,
            down: 40,
            select: 41,
            insert: 45,
            Delete: 46,
            0: 48,
            1: 49,
            2: 50,
            3: 51,
            4: 52,
            5: 53,
            6: 54,
            7: 55,
            8: 56,
            9: 57,
            a: 65,
            b: 66,
            c: 67,
            d: 68,
            e: 69,
            f: 70,
            g: 71,
            h: 72,
            i: 73,
            j: 74,
            k: 75,
            l: 76,
            m: 77,
            n: 78,
            o: 79,
            p: 80,
            q: 81,
            r: 82,
            s: 83,
            t: 84,
            u: 85,
            v: 86,
            w: 87,
            x: 88,
            y: 89,
            z: 90,
            num0: 96,
            num1: 97,
            num2: 98,
            num3: 99,
            num4: 100,
            num5: 101,
            num6: 102,
            num7: 103,
            num8: 104,
            num9: 105,
            "*": 106,
            "+": 107,
            "-": 109,
            numdel: 110,
            "/": 111,
            f1: 112,
            f2: 113,
            f3: 114,
            f4: 115,
            f5: 116,
            f6: 117,
            f7: 118,
            f8: 119,
            f9: 120,
            f10: 121,
            f11: 122,
            f12: 123,
            numlock: 144,
            scrolllock: 145,
            ";": 186,
            semicolon: 186,
            equal: 187,
            "=": 187,
            ",": 188,
            comma: 188,
            dash: 189,
            ".": 190,
            period: 190,
            forwardslash: 191,
            grave: 192,
            "[": 219,
            openbracket: 219,
            backslash: 220,
            "]": 221,
            closebracket: 221,
            quote: 222,
            dpadLeft: 1e3,
            dpadRight: 1001,
            dpadUp: 1003,
            dpadDown: 1004,
            dpadCenter: 1005
        }, cc.macro.ImageFormat = cc.Enum({
            JPG: 0,
            PNG: 1,
            TIFF: 2,
            WEBP: 3,
            PVR: 4,
            ETC: 5,
            S3TC: 6,
            ATITC: 7,
            TGA: 8,
            RAWDATA: 9,
            UNKNOWN: 10
        }), cc.macro.BlendFactor = cc.Enum({
            ONE: 1,
            ZERO: 0,
            SRC_ALPHA: 770,
            SRC_COLOR: 768,
            DST_ALPHA: 772,
            DST_COLOR: 774,
            ONE_MINUS_SRC_ALPHA: 771,
            ONE_MINUS_SRC_COLOR: 769,
            ONE_MINUS_DST_ALPHA: 773,
            ONE_MINUS_DST_COLOR: 775
        }), cc.macro.TextAlignment = cc.Enum({
            LEFT: 0,
            CENTER: 1,
            RIGHT: 2
        }), cc.macro.VerticalTextAlignment = cc.Enum({
            TOP: 0,
            CENTER: 1,
            BOTTOM: 2
        }), e.exports = cc.macro
    }), {}],
    204: [(function(t, e, i) {
        "use strict";
        var n = t("./js"),
            r = t("./CCClass"),
            s = 1;

        function o() {
            this._name = "", this._objFlags = 0
        }
        r.fastDefine("cc.Object", o, {
            _name: "",
            _objFlags: 0
        }), n.value(o, "Flags", {
            Destroyed: s,
            DontSave: 8,
            EditorOnly: 16,
            Dirty: 32,
            DontDestroy: 64,
            PersistentMask: -4192741,
            Destroying: 128,
            Deactivating: 256,
            LockedInEditor: 512,
            HideInHierarchy: 1024,
            IsPreloadStarted: 8192,
            IsOnLoadStarted: 32768,
            IsOnLoadCalled: 16384,
            IsOnEnableCalled: 2048,
            IsStartCalled: 65536,
            IsEditorOnEnableCalled: 4096,
            IsPositionLocked: 1 << 21,
            IsRotationLocked: 1 << 17,
            IsScaleLocked: 1 << 18,
            IsAnchorLocked: 1 << 19,
            IsSizeLocked: 1 << 20
        });
        var a = [];

        function l() {
            for (var t = a.length, e = 0; e < t; ++e) {
                var i = a[e];
                i._objFlags & s || i._destroyImmediate()
            }
            t === a.length ? a.length = 0 : a.splice(0, t)
        }
        n.value(o, "_deferredDestroy", l);
        var h = o.prototype;
        n.getset(h, "name", (function() {
            return this._name
        }), (function(t) {
            this._name = t
        }), !0), n.get(h, "isValid", (function() {
            return !(this._objFlags & s)
        }), !0);

        function c(t, e) {
            var i, n = t instanceof cc._BaseNode || t instanceof cc.Component,
                s = n ? "_id" : null,
                o = {};
            for (i in t)
                if (t.hasOwnProperty(i)) {
                    if (i === s) continue;
                    switch (typeof t[i]) {
                        case "string":
                            o[i] = "";
                            break;
                        case "object":
                        case "function":
                            o[i] = null
                    }
                }
            if (cc.Class._isCCClass(e))
                for (var a = cc.Class.Attr.getClassAttrs(e), l = e.__props__, h = 0; h < l.length; h++) {
                    var c = (i = l[h]) + cc.Class.Attr.DELIMETER + "default";
                    if (c in a) {
                        if (n && "_id" === i) continue;
                        switch (typeof a[c]) {
                            case "string":
                                o[i] = "";
                                break;
                            case "object":
                            case "function":
                                o[i] = null;
                                break;
                            case "undefined":
                                o[i] = void 0
                        }
                    }
                }
            var u = "";
            for (i in o) {
                var _;
                _ = r.IDENTIFIER_RE.test(i) ? "o." + i + "=" : "o[" + r.escapeForJS(i) + "]=";
                var f = o[i];
                "" === f && (f = '""'), u += _ + f + ";\n"
            }
            return Function("o", u)
        }
        h.destroy = function() {
            return this._objFlags & s ? (cc.warnID(5e3), !1) : !(4 & this._objFlags) && (this._objFlags |= 4, a.push(this), !0)
        }, h._destruct = function() {
            var t = this.constructor,
                e = t.__destruct__;
            e || (e = c(this, t), n.value(t, "__destruct__", e, !0)), e(this)
        }, h._onPreDestroy = null, h._destroyImmediate = function() {
            this._objFlags & s ? cc.errorID(5e3) : (this._onPreDestroy && this._onPreDestroy(), this._destruct(), this._objFlags |= s)
        }, h._deserialize = null, cc.isValid = function(t, e) {
            return "object" == typeof t ? !(!t || t._objFlags & (e ? 4 | s : s)) : void 0 !== t
        }, cc.Object = e.exports = o
    }), {
        "./CCClass": 198,
        "./js": 218
    }],
    205: [(function(t, e, i) {
        "use strict";
        var n = t("../platform/js");
        cc.SAXParser = function() {
            window.DOMParser ? (this._isSupportDOMParser = !0, this._parser = new DOMParser) : (this._isSupportDOMParser = !1, this._parser = null)
        }, cc.SAXParser.prototype = {
            constructor: cc.SAXParser,
            parse: function(t) {
                return this._parseXML(t)
            },
            _parseXML: function(t) {
                var e;
                return this._isSupportDOMParser ? e = this._parser.parseFromString(t, "text/xml") : ((e = new ActiveXObject("Microsoft.XMLDOM")).async = "false", e.loadXML(t)), e
            }
        }, cc.PlistParser = function() {
            cc.SAXParser.call(this)
        }, n.extend(cc.PlistParser, cc.SAXParser), n.mixin(cc.PlistParser.prototype, {
            parse: function(t) {
                var e = this._parseXML(t),
                    i = e.documentElement;
                if ("plist" !== i.tagName) return cc.warnID(5100), {};
                for (var n = null, r = 0, s = i.childNodes.length; r < s && 1 !== (n = i.childNodes[r]).nodeType; r++);
                return e = null, this._parseNode(n)
            },
            _parseNode: function(t) {
                var e = null,
                    i = t.tagName;
                if ("dict" === i) e = this._parseDict(t);
                else if ("array" === i) e = this._parseArray(t);
                else if ("string" === i)
                    if (1 === t.childNodes.length) e = t.firstChild.nodeValue;
                    else {
                        e = "";
                        for (var n = 0; n < t.childNodes.length; n++) e += t.childNodes[n].nodeValue
                    }
                else "false" === i ? e = !1 : "true" === i ? e = !0 : "real" === i ? e = parseFloat(t.firstChild.nodeValue) : "integer" === i && (e = parseInt(t.firstChild.nodeValue, 10));
                return e
            },
            _parseArray: function(t) {
                for (var e = [], i = 0, n = t.childNodes.length; i < n; i++) {
                    var r = t.childNodes[i];
                    1 === r.nodeType && e.push(this._parseNode(r))
                }
                return e
            },
            _parseDict: function(t) {
                for (var e = {}, i = null, n = 0, r = t.childNodes.length; n < r; n++) {
                    var s = t.childNodes[n];
                    1 === s.nodeType && ("key" === s.tagName ? i = s.firstChild.nodeValue : e[i] = this._parseNode(s))
                }
                return e
            }
        }), cc.saxParser = new cc.SAXParser, cc.plistParser = new cc.PlistParser, e.exports = {
            saxParser: cc.saxParser,
            plistParser: cc.plistParser
        }
    }), {
        "../platform/js": 218
    }],
    206: [(function(t, e, i) {
        "use strict";
        cc.screen = {
            _supportsFullScreen: !1,
            _onfullscreenchange: null,
            _onfullscreenerror: null,
            _preOnFullScreenChange: null,
            _preOnFullScreenError: null,
            _preOnTouch: null,
            _touchEvent: "",
            _fn: null,
            _fnMap: [
                ["requestFullscreen", "exitFullscreen", "fullscreenchange", "fullscreenEnabled", "fullscreenElement", "fullscreenerror"],
                ["requestFullScreen", "exitFullScreen", "fullScreenchange", "fullScreenEnabled", "fullScreenElement", "fullscreenerror"],
                ["webkitRequestFullScreen", "webkitCancelFullScreen", "webkitfullscreenchange", "webkitIsFullScreen", "webkitCurrentFullScreenElement", "webkitfullscreenerror"],
                ["mozRequestFullScreen", "mozCancelFullScreen", "mozfullscreenchange", "mozFullScreen", "mozFullScreenElement", "mozfullscreenerror"],
                ["msRequestFullscreen", "msExitFullscreen", "MSFullscreenChange", "msFullscreenEnabled", "msFullscreenElement", "msfullscreenerror"]
            ],
            init: function() {
                this._fn = {};
                var t, e, i, n, r = this._fnMap;
                for (t = 0, e = r.length; t < e; t++)
                    if ((i = r[t]) && void 0 !== document[i[1]]) {
                        for (t = 0, n = i.length; t < n; t++) this._fn[r[0][t]] = i[t];
                        break
                    }
                this._supportsFullScreen = void 0 !== this._fn.requestFullscreen, this._touchEvent = "ontouchend" in window ? "touchend" : "mousedown"
            },
            fullScreen: function() {
                return !!this._supportsFullScreen && !!(document[this._fn.fullscreenElement] || document[this._fn.webkitFullscreenElement] || document[this._fn.mozFullScreenElement])
            },
            requestFullScreen: function(t, e, i) {
                if (t && "video" === t.tagName.toLowerCase()) {
                    if (cc.sys.os === cc.sys.OS_IOS && cc.sys.isBrowser && t.readyState > 0) return void(t.webkitEnterFullscreen && t.webkitEnterFullscreen());
                    t.setAttribute("x5-video-player-fullscreen", "true")
                }
                if (this._supportsFullScreen) {
                    if (t = t || document.documentElement, e) {
                        var n = this._fn.fullscreenchange;
                        this._onfullscreenchange && document.removeEventListener(n, this._onfullscreenchange), this._onfullscreenchange = e, document.addEventListener(n, e, !1)
                    }
                    if (i) {
                        var r = this._fn.fullscreenerror;
                        this._onfullscreenerror && document.removeEventListener(r, this._onfullscreenerror), this._onfullscreenerror = i, document.addEventListener(r, i, {
                            once: !0
                        })
                    }
                    t[this._fn.requestFullscreen]()
                }
            },
            exitFullScreen: function(t) {
                if (t && "video" === t.tagName.toLowerCase()) {
                    if (cc.sys.os === cc.sys.OS_IOS && cc.sys.isBrowser) return void(t.webkitExitFullscreen && t.webkitExitFullscreen());
                    t.setAttribute("x5-video-player-fullscreen", "false")
                }
                return !this._supportsFullScreen || document[this._fn.exitFullscreen]()
            },
            autoFullScreen: function(t, e) {
                t = t || document.body, this._ensureFullScreen(t, e), this.requestFullScreen(t, e)
            },
            disableAutoFullScreen: function(t) {
                var e = cc.game.canvas || t,
                    i = this._touchEvent;
                this._preOnTouch && (e.removeEventListener(i, this._preOnTouch), this._preOnTouch = null)
            },
            _ensureFullScreen: function(t, e) {
                var i = this,
                    n = cc.game.canvas || t,
                    r = this._fn.fullscreenerror,
                    s = this._touchEvent;

                function o() {
                    i._preOnFullScreenError = null, i._preOnTouch && n.removeEventListener(s, i._preOnTouch), i._preOnTouch = function() {
                        i._preOnTouch = null, i.requestFullScreen(t, e)
                    }, n.addEventListener(s, i._preOnTouch, {
                        once: !0
                    })
                }
                this._preOnFullScreenError && t.removeEventListener(r, this._preOnFullScreenError), this._preOnFullScreenError = o, t.addEventListener(r, o, {
                    once: !0
                })
            }
        }, cc.screen.init()
    }), {}],
    207: [(function(t, e, i) {
        "use strict";
        window._CCSettings && _CCSettings.platform;
        var n = "undefined" == typeof window ? global : window;
        var r = cc && cc.sys ? cc.sys : (function() {
            cc.sys = {};
            var t = cc.sys;
            if (t.LANGUAGE_ENGLISH = "en", t.LANGUAGE_CHINESE = "zh", t.LANGUAGE_FRENCH = "fr", t.LANGUAGE_ITALIAN = "it", t.LANGUAGE_GERMAN = "de", t.LANGUAGE_SPANISH = "es", t.LANGUAGE_DUTCH = "du", t.LANGUAGE_RUSSIAN = "ru", t.LANGUAGE_KOREAN = "ko", t.LANGUAGE_JAPANESE = "ja", t.LANGUAGE_HUNGARIAN = "hu", t.LANGUAGE_PORTUGUESE = "pt", t.LANGUAGE_ARABIC = "ar", t.LANGUAGE_NORWEGIAN = "no", t.LANGUAGE_POLISH = "pl", t.LANGUAGE_TURKISH = "tr", t.LANGUAGE_UKRAINIAN = "uk", t.LANGUAGE_ROMANIAN = "ro", t.LANGUAGE_BULGARIAN = "bg", t.LANGUAGE_UNKNOWN = "unknown", t.OS_IOS = "iOS", t.OS_ANDROID = "Android", t.OS_WINDOWS = "Windows", t.OS_MARMALADE = "Marmalade", t.OS_LINUX = "Linux", t.OS_BADA = "Bada", t.OS_BLACKBERRY = "Blackberry", t.OS_OSX = "OS X", t.OS_WP8 = "WP8", t.OS_WINRT = "WINRT", t.OS_UNKNOWN = "Unknown", t.UNKNOWN = -1, t.WIN32 = 0, t.LINUX = 1, t.MACOS = 2, t.ANDROID = 3, t.IPHONE = 4, t.IPAD = 5, t.BLACKBERRY = 6, t.NACL = 7, t.EMSCRIPTEN = 8, t.TIZEN = 9, t.WINRT = 10, t.WP8 = 11, t.MOBILE_BROWSER = 100, t.DESKTOP_BROWSER = 101, t.EDITOR_PAGE = 102, t.EDITOR_CORE = 103, t.WECHAT_GAME = 104, t.QQ_PLAY = 105, t.FB_PLAYABLE_ADS = 106, t.BAIDU_GAME = 107, t.VIVO_GAME = 108, t.OPPO_GAME = 109, t.HUAWEI_GAME = 110, t.XIAOMI_GAME = 111, t.JKW_GAME = 112, t.ALIPAY_GAME = 113, t.WECHAT_GAME_SUB = 114, t.BAIDU_GAME_SUB = 115, t.BROWSER_TYPE_WECHAT = "wechat", t.BROWSER_TYPE_WECHAT_GAME = "wechatgame", t.BROWSER_TYPE_WECHAT_GAME_SUB = "wechatgamesub", t.BROWSER_TYPE_BAIDU_GAME = "baidugame", t.BROWSER_TYPE_BAIDU_GAME_SUB = "baidugamesub", t.BROWSER_TYPE_XIAOMI_GAME = "xiaomigame", t.BROWSER_TYPE_ALIPAY_GAME = "alipaygame", t.BROWSER_TYPE_QQ_PLAY = "qqplay", t.BROWSER_TYPE_ANDROID = "androidbrowser", t.BROWSER_TYPE_IE = "ie", t.BROWSER_TYPE_EDGE = "edge", t.BROWSER_TYPE_QQ = "qqbrowser", t.BROWSER_TYPE_MOBILE_QQ = "mqqbrowser", t.BROWSER_TYPE_UC = "ucbrowser", t.BROWSER_TYPE_UCBS = "ucbs", t.BROWSER_TYPE_360 = "360browser", t.BROWSER_TYPE_BAIDU_APP = "baiduboxapp", t.BROWSER_TYPE_BAIDU = "baidubrowser", t.BROWSER_TYPE_MAXTHON = "maxthon", t.BROWSER_TYPE_OPERA = "opera", t.BROWSER_TYPE_OUPENG = "oupeng", t.BROWSER_TYPE_MIUI = "miuibrowser", t.BROWSER_TYPE_FIREFOX = "firefox", t.BROWSER_TYPE_SAFARI = "safari", t.BROWSER_TYPE_CHROME = "chrome", t.BROWSER_TYPE_LIEBAO = "liebao", t.BROWSER_TYPE_QZONE = "qzone", t.BROWSER_TYPE_SOUGOU = "sogou", t.BROWSER_TYPE_UNKNOWN = "unknown", t.isNative = !1, t.isBrowser = "object" == typeof window && "object" == typeof document && !0, t.glExtension = function(t) {
                    return !!cc.renderer.device.ext(t)
                }, t.getMaxJointMatrixSize = function() {
                    if (!t._maxJointMatrixSize) {
                        var e = cc.game._renderContext,
                            i = Math.floor(e.getParameter(e.MAX_VERTEX_UNIFORM_VECTORS) / 4) - 10;
                        t._maxJointMatrixSize = i < 50 ? 0 : 50
                    }
                    return t._maxJointMatrixSize
                }, n.__globalAdapter && n.__globalAdapter.adaptSys) n.__globalAdapter.adaptSys(t);
            else {
                var e = window,
                    i = e.navigator,
                    r = document,
                    s = r.documentElement,
                    o = i.userAgent.toLowerCase();
                t.isMobile = /mobile|android|iphone|ipad/.test(o), "undefined" != typeof FbPlayableAd ? t.platform = t.FB_PLAYABLE_ADS : t.platform = t.isMobile ? t.MOBILE_BROWSER : t.DESKTOP_BROWSER;
                var a = i.language;
                a = a || i.browserLanguage, t.languageCode = a.toLowerCase(), a = a ? a.split("-")[0] : t.LANGUAGE_ENGLISH, t.language = a;
                var l = !1,
                    h = !1,
                    c = "",
                    u = 0,
                    _ = /android (\d+(?:\.\d+)*)/i.exec(o) || /android (\d+(?:\.\d+)*)/i.exec(i.platform);
                _ && (l = !0, c = _[1] || "", u = parseInt(c) || 0), (_ = /(iPad|iPhone|iPod).*OS ((\d+_?){2,3})/i.exec(o)) ? (h = !0, c = _[2] || "", u = parseInt(c) || 0) : (/(iPhone|iPad|iPod)/.exec(i.platform) || "MacIntel" === i.platform && i.maxTouchPoints && i.maxTouchPoints > 1) && (h = !0, c = "", u = 0);
                var f = t.OS_UNKNOWN; - 1 !== i.appVersion.indexOf("Win") ? f = t.OS_WINDOWS : h ? f = t.OS_IOS : -1 !== i.appVersion.indexOf("Mac") ? f = t.OS_OSX : -1 !== i.appVersion.indexOf("X11") && -1 === i.appVersion.indexOf("Linux") ? f = t.OS_UNIX : l ? f = t.OS_ANDROID : -1 === i.appVersion.indexOf("Linux") && -1 === o.indexOf("ubuntu") || (f = t.OS_LINUX), t.os = f, t.osVersion = c, t.osMainVersion = u, t.browserType = t.BROWSER_TYPE_UNKNOWN, (function() {
                    var e = /mqqbrowser|micromessenger|qq|sogou|qzone|liebao|maxthon|ucbs|360 aphone|360browser|baiduboxapp|baidubrowser|maxthon|mxbrowser|miuibrowser/i.exec(o) || /qqbrowser|ucbrowser|ubrowser|edge/i.exec(o) || /chrome|safari|firefox|trident|opera|opr\/|oupeng/i.exec(o),
                        i = e ? e[0].toLowerCase() : t.BROWSER_TYPE_UNKNOWN;
                    "safari" === i && l ? i = t.BROWSER_TYPE_ANDROID : "qq" === i && o.match(/android.*applewebkit/i) && (i = t.BROWSER_TYPE_ANDROID);
                    var n = {
                        micromessenger: t.BROWSER_TYPE_WECHAT,
                        trident: t.BROWSER_TYPE_IE,
                        edge: t.BROWSER_TYPE_EDGE,
                        "360 aphone": t.BROWSER_TYPE_360,
                        mxbrowser: t.BROWSER_TYPE_MAXTHON,
                        "opr/": t.BROWSER_TYPE_OPERA,
                        ubrowser: t.BROWSER_TYPE_UC
                    };
                    t.browserType = n[i] || i
                })(), t.browserVersion = "", (function() {
                    var e = o.match(/(mqqbrowser|micromessenger|qq|sogou|qzone|liebao|maxthon|uc|ucbs|360 aphone|360|baiduboxapp|baidu|maxthon|mxbrowser|miui(?:.hybrid)?)(mobile)?(browser)?\/?([\d.]+)/i);
                    e || (e = o.match(/(qqbrowser|chrome|safari|firefox|trident|opera|opr\/|oupeng)(mobile)?(browser)?\/?([\d.]+)/i)), t.browserVersion = e ? e[4] : ""
                })();
                var d = window.innerWidth || document.documentElement.clientWidth,
                    p = window.innerHeight || document.documentElement.clientHeight,
                    m = window.devicePixelRatio || 1;
                t.windowPixelResolution = {
                    width: m * d,
                    height: m * p
                }, t._checkWebGLRenderMode = function() {
                    if (cc.game.renderType !== cc.game.RENDER_TYPE_WEBGL) throw new Error("This feature supports WebGL render mode only.")
                };
                var y = document.createElement("canvas");
                try {
                    var v = t.localStorage = e.localStorage;
                    v.setItem("storage", ""), v.removeItem("storage"), v = null
                } catch (e) {
                    var g = function() {
                        cc.warnID(5200)
                    };
                    t.localStorage = {
                        getItem: g,
                        setItem: g,
                        removeItem: g,
                        clear: g
                    }
                }
                var x = y.toDataURL("image/webp").startsWith("data:image/webp"),
                    b = !!y.getContext("2d"),
                    A = !1;
                e.WebGLRenderingContext && (A = !0);
                var C, T = t.capabilities = {
                    canvas: b,
                    opengl: A,
                    webp: x
                };
                (void 0 !== s.ontouchstart || void 0 !== r.ontouchstart || i.msPointerEnabled) && (T.touches = !0), void 0 !== s.onmouseup && (T.mouse = !0), void 0 !== s.onkeyup && (T.keyboard = !0), (e.DeviceMotionEvent || e.DeviceOrientationEvent) && (T.accelerometer = !0), (function() {
                    t.browserVersion;
                    var e = !!(window.AudioContext || window.webkitAudioContext || window.mozAudioContext);
                    C = {
                        ONLY_ONE: !1,
                        WEB_AUDIO: e,
                        DELAY_CREATE_CTX: !1
                    }, t.os === t.OS_IOS && (C.USE_LOADER_EVENT = "loadedmetadata"), t.browserType === t.BROWSER_TYPE_FIREFOX && (C.DELAY_CREATE_CTX = !0, C.USE_LOADER_EVENT = "canplay"), t.os === t.OS_ANDROID && t.browserType === t.BROWSER_TYPE_UC && (C.ONE_SOURCE = !0)
                })();
                try {
                    C.WEB_AUDIO && (C.context = new(window.AudioContext || window.webkitAudioContext || window.mozAudioContext), C.DELAY_CREATE_CTX && setTimeout((function() {
                        C.context = new(window.AudioContext || window.webkitAudioContext || window.mozAudioContext)
                    }), 0))
                } catch (t) {
                    C.WEB_AUDIO = !1, cc.logID(5201)
                }
                var S = [];
                (function() {
                    var t = document.createElement("audio");
                    t.canPlayType && (t.canPlayType('audio/ogg; codecs="vorbis"') && S.push(".ogg"), t.canPlayType("audio/mpeg") && S.push(".mp3"), t.canPlayType('audio/wav; codecs="1"') && S.push(".wav"), t.canPlayType("audio/mp4") && S.push(".mp4"), t.canPlayType("audio/x-m4a") && S.push(".m4a"))
                })(), C.format = S, t.__audioSupport = C
            }
            return t.NetworkType = {
                NONE: 0,
                LAN: 1,
                WWAN: 2
            }, t.getNetworkType = function() {
                return t.NetworkType.LAN
            }, t.getBatteryLevel = function() {
                return 1
            }, t.garbageCollect = function() {}, t.restartVM = function() {}, t.getSafeAreaRect = function() {
                var t = cc.view.getVisibleSize();
                return cc.rect(0, 0, t.width, t.height)
            }, t.isObjectValid = function(t) {
                return !!t
            }, t.dump = function() {
                var t = "";
                t += "isMobile : " + this.isMobile + "\r\n", t += "language : " + this.language + "\r\n", t += "browserType : " + this.browserType + "\r\n", t += "browserVersion : " + this.browserVersion + "\r\n", t += "capabilities : " + JSON.stringify(this.capabilities) + "\r\n", t += "os : " + this.os + "\r\n", t += "osVersion : " + this.osVersion + "\r\n", t += "platform : " + this.platform + "\r\n", t += "Using " + (cc.game.renderType === cc.game.RENDER_TYPE_WEBGL ? "WEBGL" : "CANVAS") + " renderer.\r\n", cc.log(t)
            }, t.openURL = function(t) {
                window.open(t)
            }, t.now = function() {
                return Date.now ? Date.now() : +new Date
            }, t
        })();
        e.exports = r
    }), {}],
    208: [(function(t, e, i) {
        "use strict";
        var n = t("../event/event-target"),
            r = t("../platform/js"),
            s = t("../renderer");
        t("../platform/CCClass");
        var o = {
            init: function() {
                this.html = document.getElementsByTagName("html")[0]
            },
            availWidth: function(t) {
                return t && t !== this.html ? t.clientWidth : window.innerWidth
            },
            availHeight: function(t) {
                return t && t !== this.html ? t.clientHeight : window.innerHeight
            },
            meta: {
                width: "device-width"
            },
            adaptationType: cc.sys.browserType
        };
        switch (cc.sys.os === cc.sys.OS_IOS && (o.adaptationType = cc.sys.BROWSER_TYPE_SAFARI), o.adaptationType) {
            case cc.sys.BROWSER_TYPE_SAFARI:
                o.meta["minimal-ui"] = "true";
            case cc.sys.BROWSER_TYPE_SOUGOU:
            case cc.sys.BROWSER_TYPE_UC:
                o.availWidth = function(t) {
                    return t.clientWidth
                }, o.availHeight = function(t) {
                    return t.clientHeight
                }
        }
        var a = null,
            l = function() {
                n.call(this);
                var t = this,
                    e = cc.ContainerStrategy,
                    i = cc.ContentStrategy;
                o.init(this), t._frameSize = cc.size(0, 0), t._designResolutionSize = cc.size(0, 0), t._originalDesignResolutionSize = cc.size(0, 0), t._scaleX = 1, t._scaleY = 1, t._viewportRect = cc.rect(0, 0, 0, 0), t._visibleRect = cc.rect(0, 0, 0, 0), t._autoFullScreen = !1, t._devicePixelRatio = 1, t._maxPixelRatio = 2, t._retinaEnabled = !1, t._resizeCallback = null, t._resizing = !1, t._resizeWithBrowserSize = !1, t._orientationChanging = !0, t._isRotated = !1, t._orientation = cc.macro.ORIENTATION_AUTO, t._isAdjustViewport = !0, t._antiAliasEnabled = !1, t._resolutionPolicy = null, t._rpExactFit = new cc.ResolutionPolicy(e.EQUAL_TO_FRAME, i.EXACT_FIT), t._rpShowAll = new cc.ResolutionPolicy(e.EQUAL_TO_FRAME, i.SHOW_ALL), t._rpNoBorder = new cc.ResolutionPolicy(e.EQUAL_TO_FRAME, i.NO_BORDER), t._rpFixedHeight = new cc.ResolutionPolicy(e.EQUAL_TO_FRAME, i.FIXED_HEIGHT), t._rpFixedWidth = new cc.ResolutionPolicy(e.EQUAL_TO_FRAME, i.FIXED_WIDTH), cc.game.once(cc.game.EVENT_ENGINE_INITED, this.init, this)
            };
        cc.js.extend(l, n), cc.js.mixin(l.prototype, {
            init: function() {
                this._initFrameSize(), this.enableAntiAlias(!0);
                var t = cc.game.canvas.width,
                    e = cc.game.canvas.height;
                this._designResolutionSize.width = t, this._designResolutionSize.height = e, this._originalDesignResolutionSize.width = t, this._originalDesignResolutionSize.height = e, this._viewportRect.width = t, this._viewportRect.height = e, this._visibleRect.width = t, this._visibleRect.height = e, cc.winSize.width = this._visibleRect.width, cc.winSize.height = this._visibleRect.height, cc.visibleRect && cc.visibleRect.init(this._visibleRect)
            },
            _resizeEvent: function(t) {
                var e, i = (e = this.setDesignResolutionSize ? this : cc.view)._frameSize.width,
                    n = e._frameSize.height,
                    r = e._isRotated;
                if (cc.sys.isMobile) {
                    var s = cc.game.container.style,
                        o = s.margin;
                    s.margin = "0", s.display = "none", e._initFrameSize(), s.margin = o, s.display = "block"
                } else e._initFrameSize();
                if (!0 === t || e._isRotated !== r || e._frameSize.width !== i || e._frameSize.height !== n) {
                    var a = e._originalDesignResolutionSize.width,
                        l = e._originalDesignResolutionSize.height;
                    e._resizing = !0, a > 0 && e.setDesignResolutionSize(a, l, e._resolutionPolicy), e._resizing = !1, e.emit("canvas-resize"), e._resizeCallback && e._resizeCallback.call()
                }
            },
            _orientationChange: function() {
                cc.view._orientationChanging = !0, cc.view._resizeEvent()
            },
            resizeWithBrowserSize: function(t) {
                t ? this._resizeWithBrowserSize || (this._resizeWithBrowserSize = !0, window.addEventListener("resize", this._resizeEvent), window.addEventListener("orientationchange", this._orientationChange)) : this._resizeWithBrowserSize && (this._resizeWithBrowserSize = !1, window.removeEventListener("resize", this._resizeEvent), window.removeEventListener("orientationchange", this._orientationChange))
            },
            setResizeCallback: function(t) {
                "function" != typeof t && null != t || (this._resizeCallback = t)
            },
            setOrientation: function(t) {
                if ((t &= cc.macro.ORIENTATION_AUTO) && this._orientation !== t) {
                    this._orientation = t;
                    var e = this._originalDesignResolutionSize.width,
                        i = this._originalDesignResolutionSize.height;
                    this.setDesignResolutionSize(e, i, this._resolutionPolicy)
                }
            },
            _initFrameSize: function() {
                var t = this._frameSize,
                    e = o.availWidth(cc.game.frame),
                    i = o.availHeight(cc.game.frame),
                    n = e >= i;
                !cc.sys.isMobile || n && this._orientation & cc.macro.ORIENTATION_LANDSCAPE || !n && this._orientation & cc.macro.ORIENTATION_PORTRAIT ? (t.width = e, t.height = i, cc.game.container.style["-webkit-transform"] = "rotate(0deg)", cc.game.container.style.transform = "rotate(0deg)", this._isRotated = !1) : (t.width = i, t.height = e, cc.game.container.style["-webkit-transform"] = "rotate(90deg)", cc.game.container.style.transform = "rotate(90deg)", cc.game.container.style["-webkit-transform-origin"] = "0px 0px 0px", cc.game.container.style.transformOrigin = "0px 0px 0px", this._isRotated = !0), this._orientationChanging && setTimeout((function() {
                    cc.view._orientationChanging = !1
                }), 1e3)
            },
            _setViewportMeta: function(t, e) {
                var i = document.getElementById("cocosMetaElement");
                i && e && document.head.removeChild(i);
                var n, r, s, o = document.getElementsByName("viewport"),
                    a = o ? o[0] : null;
                for (r in n = a ? a.content : "", (i = i || document.createElement("meta")).id = "cocosMetaElement", i.name = "viewport", i.content = "", t) - 1 == n.indexOf(r) ? n += "," + r + "=" + t[r] : e && (s = new RegExp(r + "s*=s*[^,]+"), n.replace(s, r + "=" + t[r]));
                /^,/.test(n) && (n = n.substr(1)), i.content = n, a && (a.content = n), document.head.appendChild(i)
            },
            _adjustViewportMeta: function() {
                this._isAdjustViewport && (this._setViewportMeta(o.meta, !1), this._isAdjustViewport = !1)
            },
            adjustViewportMeta: function(t) {
                this._isAdjustViewport = t
            },
            enableRetina: function(t) {
                this._retinaEnabled = !!t
            },
            isRetinaEnabled: function() {
                return this._retinaEnabled
            },
            enableAntiAlias: function(t) {
                if (this._antiAliasEnabled !== t)
                    if (this._antiAliasEnabled = t, cc.game.renderType === cc.game.RENDER_TYPE_WEBGL) {
                        var e = cc.loader._cache;
                        for (var i in e) {
                            var n = e[i],
                                r = n && n.content instanceof cc.Texture2D ? n.content : null;
                            if (r) {
                                var s = cc.Texture2D.Filter;
                                t ? r.setFilters(s.LINEAR, s.LINEAR) : r.setFilters(s.NEAREST, s.NEAREST)
                            }
                        }
                    } else if (cc.game.renderType === cc.game.RENDER_TYPE_CANVAS) {
                    var o = cc.game.canvas.getContext("2d");
                    o.imageSmoothingEnabled = t, o.mozImageSmoothingEnabled = t
                }
            },
            isAntiAliasEnabled: function() {
                return this._antiAliasEnabled
            },
            enableAutoFullScreen: function(t) {
                t && t !== this._autoFullScreen && cc.sys.isMobile ? (this._autoFullScreen = !0, cc.screen.autoFullScreen(cc.game.frame)) : (this._autoFullScreen = !1, cc.screen.disableAutoFullScreen(cc.game.frame))
            },
            isAutoFullScreenEnabled: function() {
                return this._autoFullScreen
            },
            setCanvasSize: function(t, e) {
                var i = cc.game.canvas,
                    n = cc.game.container;
                i.width = t * this._devicePixelRatio, i.height = e * this._devicePixelRatio, i.style.width = t + "px", i.style.height = e + "px", n.style.width = t + "px", n.style.height = e + "px", this._resizeEvent()
            },
            getCanvasSize: function() {
                return cc.size(cc.game.canvas.width, cc.game.canvas.height)
            },
            getFrameSize: function() {
                return cc.size(this._frameSize.width, this._frameSize.height)
            },
            setFrameSize: function(t, e) {
                this._frameSize.width = t, this._frameSize.height = e, cc.game.frame.style.width = t + "px", cc.game.frame.style.height = e + "px", this._resizeEvent(!0)
            },
            getVisibleSize: function() {
                return cc.size(this._visibleRect.width, this._visibleRect.height)
            },
            getVisibleSizeInPixel: function() {
                return cc.size(this._visibleRect.width * this._scaleX, this._visibleRect.height * this._scaleY)
            },
            getVisibleOrigin: function() {
                return cc.v2(this._visibleRect.x, this._visibleRect.y)
            },
            getVisibleOriginInPixel: function() {
                return cc.v2(this._visibleRect.x * this._scaleX, this._visibleRect.y * this._scaleY)
            },
            getResolutionPolicy: function() {
                return this._resolutionPolicy
            },
            setResolutionPolicy: function(t) {
                var e = this;
                if (t instanceof cc.ResolutionPolicy) e._resolutionPolicy = t;
                else {
                    var i = cc.ResolutionPolicy;
                    t === i.EXACT_FIT && (e._resolutionPolicy = e._rpExactFit), t === i.SHOW_ALL && (e._resolutionPolicy = e._rpShowAll), t === i.NO_BORDER && (e._resolutionPolicy = e._rpNoBorder), t === i.FIXED_HEIGHT && (e._resolutionPolicy = e._rpFixedHeight), t === i.FIXED_WIDTH && (e._resolutionPolicy = e._rpFixedWidth)
                }
            },
            setDesignResolutionSize: function(t, e, i) {
                if (t > 0 || e > 0) {
                    this.setResolutionPolicy(i);
                    var n = this._resolutionPolicy;
                    if (n && n.preApply(this), cc.sys.isMobile && this._adjustViewportMeta(), this._orientationChanging = !0, this._resizing || this._initFrameSize(), n) {
                        this._originalDesignResolutionSize.width = this._designResolutionSize.width = t, this._originalDesignResolutionSize.height = this._designResolutionSize.height = e;
                        var r = n.apply(this, this._designResolutionSize);
                        if (r.scale && 2 === r.scale.length && (this._scaleX = r.scale[0], this._scaleY = r.scale[1]), r.viewport) {
                            var o = this._viewportRect,
                                a = this._visibleRect,
                                l = r.viewport;
                            o.x = l.x, o.y = l.y, o.width = l.width, o.height = l.height, a.x = 0, a.y = 0, a.width = l.width / this._scaleX, a.height = l.height / this._scaleY
                        }
                        n.postApply(this), cc.winSize.width = this._visibleRect.width, cc.winSize.height = this._visibleRect.height, cc.visibleRect && cc.visibleRect.init(this._visibleRect), s.updateCameraViewport(), _cc.inputManager._updateCanvasBoundingRect(), this.emit("design-resolution-changed")
                    } else cc.logID(2201)
                } else cc.logID(2200)
            },
            getDesignResolutionSize: function() {
                return cc.size(this._designResolutionSize.width, this._designResolutionSize.height)
            },
            setRealPixelResolution: function(t, e, i) {
                this._setViewportMeta({
                    width: t
                }, !0), document.documentElement.style.width = t + "px", document.body.style.width = t + "px", document.body.style.left = "0px", document.body.style.top = "0px", this.setDesignResolutionSize(t, e, i)
            },
            setViewportInPoints: function(t, e, i, n) {
                var r = this._scaleX,
                    s = this._scaleY;
                cc.game._renderContext.viewport(t * r + this._viewportRect.x, e * s + this._viewportRect.y, i * r, n * s)
            },
            setScissorInPoints: function(t, e, i, n) {
                var r = this._scaleX,
                    s = this._scaleY,
                    o = Math.ceil(t * r + this._viewportRect.x),
                    l = Math.ceil(e * s + this._viewportRect.y),
                    h = Math.ceil(i * r),
                    c = Math.ceil(n * s),
                    u = cc.game._renderContext;
                if (!a) {
                    var _ = u.getParameter(u.SCISSOR_BOX);
                    a = cc.rect(_[0], _[1], _[2], _[3])
                }
                a.x === o && a.y === l && a.width === h && a.height === c || (a.x = o, a.y = l, a.width = h, a.height = c, u.scissor(o, l, h, c))
            },
            isScissorEnabled: function() {
                return cc.game._renderContext.isEnabled(gl.SCISSOR_TEST)
            },
            getScissorRect: function() {
                if (!a) {
                    var t = gl.getParameter(gl.SCISSOR_BOX);
                    a = cc.rect(t[0], t[1], t[2], t[3])
                }
                var e = 1 / this._scaleX,
                    i = 1 / this._scaleY;
                return cc.rect((a.x - this._viewportRect.x) * e, (a.y - this._viewportRect.y) * i, a.width * e, a.height * i)
            },
            getViewportRect: function() {
                return this._viewportRect
            },
            getScaleX: function() {
                return this._scaleX
            },
            getScaleY: function() {
                return this._scaleY
            },
            getDevicePixelRatio: function() {
                return this._devicePixelRatio
            },
            convertToLocationInView: function(t, e, i, n) {
                var r = n || cc.v2(),
                    s = i.adjustedLeft ? i.adjustedLeft : i.left,
                    o = i.adjustedTop ? i.adjustedTop : i.top,
                    a = this._devicePixelRatio * (t - s),
                    l = this._devicePixelRatio * (o + i.height - e);
                return this._isRotated ? (r.x = cc.game.canvas.width - l, r.y = a) : (r.x = a, r.y = l), r
            },
            _convertMouseToLocationInView: function(t, e) {
                var i = this._viewportRect;
                t.x = (this._devicePixelRatio * (t.x - e.left) - i.x) / this._scaleX, t.y = (this._devicePixelRatio * (e.top + e.height - t.y) - i.y) / this._scaleY
            },
            _convertPointWithScale: function(t) {
                var e = this._viewportRect;
                t.x = (t.x - e.x) / this._scaleX, t.y = (t.y - e.y) / this._scaleY
            },
            _convertTouchesWithScale: function(t) {
                for (var e, i, n, r = this._viewportRect, s = this._scaleX, o = this._scaleY, a = 0; a < t.length; a++) i = (e = t[a])._point, n = e._prevPoint, i.x = (i.x - r.x) / s, i.y = (i.y - r.y) / o, n.x = (n.x - r.x) / s, n.y = (n.y - r.y) / o
            }
        }), cc.ContainerStrategy = cc.Class({
            name: "ContainerStrategy",
            preApply: function(t) {},
            apply: function(t, e) {},
            postApply: function(t) {},
            _setupContainer: function(t, e, i) {
                var n = cc.game.canvas;
                this._setupStyle(t, e, i);
                var r = t._devicePixelRatio = 1;
                t.isRetinaEnabled() && (r = t._devicePixelRatio = Math.min(t._maxPixelRatio, window.devicePixelRatio || 1)), n.width = e * r, n.height = i * r
            },
            _setupStyle: function(t, e, i) {
                var n = cc.game.canvas,
                    r = cc.game.container;
                cc.sys.os === cc.sys.OS_ANDROID && (document.body.style.width = (t._isRotated ? i : e) + "px", document.body.style.height = (t._isRotated ? e : i) + "px"), r.style.width = n.style.width = e + "px", r.style.height = n.style.height = i + "px"
            },
            _fixContainer: function() {
                document.body.insertBefore(cc.game.container, document.body.firstChild);
                var t = document.body.style;
                t.width = window.innerWidth + "px", t.height = window.innerHeight + "px", t.overflow = "hidden";
                var e = cc.game.container.style;
                e.position = "fixed", e.left = e.top = "0px", document.body.scrollTop = 0
            }
        }), cc.ContentStrategy = cc.Class({
            name: "ContentStrategy",
            ctor: function() {
                this._result = {
                    scale: [1, 1],
                    viewport: null
                }
            },
            _buildResult: function(t, e, i, n, r, s) {
                Math.abs(t - i) < 2 && (i = t), Math.abs(e - n) < 2 && (n = e);
                var o = cc.rect((t - i) / 2, (e - n) / 2, i, n);
                return cc.game.renderType, cc.game.RENDER_TYPE_CANVAS, this._result.scale = [r, s], this._result.viewport = o, this._result
            },
            preApply: function(t) {},
            apply: function(t, e) {
                return {
                    scale: [1, 1]
                }
            },
            postApply: function(t) {}
        }), (function() {
            var t = cc.Class({
                    name: "EqualToFrame",
                    extends: cc.ContainerStrategy,
                    apply: function(t) {
                        var e = t._frameSize.height,
                            i = cc.game.container.style;
                        this._setupContainer(t, t._frameSize.width, t._frameSize.height), t._isRotated ? i.margin = "0 0 0 " + e + "px" : i.margin = "0px", i.padding = "0px"
                    }
                }),
                e = cc.Class({
                    name: "ProportionalToFrame",
                    extends: cc.ContainerStrategy,
                    apply: function(t, e) {
                        var i, n, r = t._frameSize.width,
                            s = t._frameSize.height,
                            o = cc.game.container.style,
                            a = e.width,
                            l = e.height,
                            h = r / a,
                            c = s / l;
                        h < c ? (i = r, n = l * h) : (i = a * c, n = s);
                        var u = Math.round((r - i) / 2),
                            _ = Math.round((s - n) / 2);
                        i = r - 2 * u, n = s - 2 * _, this._setupContainer(t, i, n), t._isRotated ? o.margin = "0 0 0 " + s + "px" : o.margin = "0px", o.paddingLeft = u + "px", o.paddingRight = u + "px", o.paddingTop = _ + "px", o.paddingBottom = _ + "px"
                    }
                }),
                i = (cc.Class({
                    name: "EqualToWindow",
                    extends: t,
                    preApply: function(t) {
                        this._super(t), cc.game.frame = document.documentElement
                    },
                    apply: function(t) {
                        this._super(t), this._fixContainer()
                    }
                }), cc.Class({
                    name: "ProportionalToWindow",
                    extends: e,
                    preApply: function(t) {
                        this._super(t), cc.game.frame = document.documentElement
                    },
                    apply: function(t, e) {
                        this._super(t, e), this._fixContainer()
                    }
                }), cc.Class({
                    name: "OriginalContainer",
                    extends: cc.ContainerStrategy,
                    apply: function(t) {
                        this._setupContainer(t, cc.game.canvas.width, cc.game.canvas.height)
                    }
                })),
                n = ("undefined" == typeof window ? global : window).__globalAdapter;
            n && (n.adaptContainerStrategy && n.adaptContainerStrategy(cc.ContainerStrategy.prototype), n.adaptView && n.adaptView(l.prototype)), cc.ContainerStrategy.EQUAL_TO_FRAME = new t, cc.ContainerStrategy.PROPORTION_TO_FRAME = new e, cc.ContainerStrategy.ORIGINAL_CONTAINER = new i;
            var r = cc.Class({
                    name: "ExactFit",
                    extends: cc.ContentStrategy,
                    apply: function(t, e) {
                        var i = cc.game.canvas.width,
                            n = cc.game.canvas.height,
                            r = i / e.width,
                            s = n / e.height;
                        return this._buildResult(i, n, i, n, r, s)
                    }
                }),
                s = cc.Class({
                    name: "ShowAll",
                    extends: cc.ContentStrategy,
                    apply: function(t, e) {
                        var i, n, r = cc.game.canvas.width,
                            s = cc.game.canvas.height,
                            o = e.width,
                            a = e.height,
                            l = r / o,
                            h = s / a,
                            c = 0;
                        return l < h ? (i = r, n = a * (c = l)) : (i = o * (c = h), n = s), this._buildResult(r, s, i, n, c, c)
                    }
                }),
                o = cc.Class({
                    name: "NoBorder",
                    extends: cc.ContentStrategy,
                    apply: function(t, e) {
                        var i, n, r, s = cc.game.canvas.width,
                            o = cc.game.canvas.height,
                            a = e.width,
                            l = e.height,
                            h = s / a,
                            c = o / l;
                        return h < c ? (n = a * (i = c), r = o) : (n = s, r = l * (i = h)), this._buildResult(s, o, n, r, i, i)
                    }
                }),
                a = cc.Class({
                    name: "FixedHeight",
                    extends: cc.ContentStrategy,
                    apply: function(t, e) {
                        var i = cc.game.canvas.width,
                            n = cc.game.canvas.height,
                            r = n / e.height,
                            s = i,
                            o = n;
                        return this._buildResult(i, n, s, o, r, r)
                    }
                }),
                h = cc.Class({
                    name: "FixedWidth",
                    extends: cc.ContentStrategy,
                    apply: function(t, e) {
                        var i = cc.game.canvas.width,
                            n = cc.game.canvas.height,
                            r = i / e.width,
                            s = i,
                            o = n;
                        return this._buildResult(i, n, s, o, r, r)
                    }
                });
            cc.ContentStrategy.EXACT_FIT = new r, cc.ContentStrategy.SHOW_ALL = new s, cc.ContentStrategy.NO_BORDER = new o, cc.ContentStrategy.FIXED_HEIGHT = new a, cc.ContentStrategy.FIXED_WIDTH = new h
        })(), cc.ResolutionPolicy = cc.Class({
            name: "cc.ResolutionPolicy",
            ctor: function(t, e) {
                this._containerStrategy = null, this._contentStrategy = null, this.setContainerStrategy(t), this.setContentStrategy(e)
            },
            preApply: function(t) {
                this._containerStrategy.preApply(t), this._contentStrategy.preApply(t)
            },
            apply: function(t, e) {
                return this._containerStrategy.apply(t, e), this._contentStrategy.apply(t, e)
            },
            postApply: function(t) {
                this._containerStrategy.postApply(t), this._contentStrategy.postApply(t)
            },
            setContainerStrategy: function(t) {
                t instanceof cc.ContainerStrategy && (this._containerStrategy = t)
            },
            setContentStrategy: function(t) {
                t instanceof cc.ContentStrategy && (this._contentStrategy = t)
            }
        }), r.get(cc.ResolutionPolicy.prototype, "canvasSize", (function() {
            return cc.v2(cc.game.canvas.width, cc.game.canvas.height)
        })), cc.ResolutionPolicy.EXACT_FIT = 0, cc.ResolutionPolicy.NO_BORDER = 1, cc.ResolutionPolicy.SHOW_ALL = 2, cc.ResolutionPolicy.FIXED_HEIGHT = 3, cc.ResolutionPolicy.FIXED_WIDTH = 4, cc.ResolutionPolicy.UNKNOWN = 5, cc.view = new l, cc.winSize = cc.size(), e.exports = cc.view
    }), {
        "../event/event-target": 131,
        "../platform/CCClass": 198,
        "../platform/js": 218,
        "../renderer": 247
    }],
    209: [(function(t, e, i) {
        "use strict";
        cc.visibleRect = {
            topLeft: cc.v2(0, 0),
            topRight: cc.v2(0, 0),
            top: cc.v2(0, 0),
            bottomLeft: cc.v2(0, 0),
            bottomRight: cc.v2(0, 0),
            bottom: cc.v2(0, 0),
            center: cc.v2(0, 0),
            left: cc.v2(0, 0),
            right: cc.v2(0, 0),
            width: 0,
            height: 0,
            init: function(t) {
                var e = this.width = t.width,
                    i = this.height = t.height,
                    n = t.x,
                    r = t.y,
                    s = r + i,
                    o = n + e;
                this.topLeft.x = n, this.topLeft.y = s, this.topRight.x = o, this.topRight.y = s, this.top.x = n + e / 2, this.top.y = s, this.bottomLeft.x = n, this.bottomLeft.y = r, this.bottomRight.x = o, this.bottomRight.y = r, this.bottom.x = n + e / 2, this.bottom.y = r, this.center.x = n + e / 2, this.center.y = r + i / 2, this.left.x = n, this.left.y = r + i / 2, this.right.x = o, this.right.y = r + i / 2
            }
        }
    }), {}],
    210: [(function(t, e, i) {
        "use strict";
        var n = t("./js"),
            r = (t("./utils").isPlainEmptyObj_DEV, "$_$");

        function s(t, e) {
            var i = e ? Object.create(e) : {};
            return n.value(t, "__attrs__", i), i
        }

        function o(t) {
            if ("function" != typeof t) {
                return s(t, l(t.constructor))
            }
            for (var e, i = cc.Class.getInheritanceChain(t), n = i.length - 1; n >= 0; n--) {
                var r = i[n];
                r.hasOwnProperty("__attrs__") && r.__attrs__ || s(r, (e = i[n + 1]) && e.__attrs__)
            }
            return s(t, (e = i[0]) && e.__attrs__), t.__attrs__
        }

        function a(t, e, i) {
            var n = l(t),
                s = e + r,
                o = {};
            for (var a in n) a.startsWith(s) && (o[a.slice(s.length)] = n[a]);
            return o
        }

        function l(t) {
            return t.hasOwnProperty("__attrs__") && t.__attrs__ || o(t)
        }

        function h(t, e) {
            this.name = t, this.default = e
        }
        h.prototype.toString = function() {
            return this.name
        }, cc.Integer = new h("Integer", 0), cc.Float = new h("Float", 0), cc.Boolean = new h("Boolean", !1), cc.String = new h("String", ""), e.exports = {
            PrimitiveType: h,
            attr: a,
            getClassAttrs: l,
            setClassAttr: function(t, e, i, n) {
                l(t)[e + r + i] = n
            },
            DELIMETER: r,
            getTypeChecker_ET: !1,
            getObjTypeChecker_ET: !1,
            ScriptUuid: {}
        }
    }), {
        "./CCClass": 198,
        "./js": 218,
        "./utils": 222
    }],
    211: [(function(t, e, i) {
        "use strict";
        var n = t("./js"),
            r = n.array.fastRemoveAt;

        function s() {}

        function o() {
            this.callback = s, this.target = void 0, this.once = !1
        }
        o.prototype.set = function(t, e, i) {
            this.callback = t, this.target = e, this.once = !!i
        };
        var a = new n.Pool(function(t) {
            return t.callback = s, t.target = void 0, t.once = !1, !0
        }, 32);

        function l() {
            this.callbackInfos = [], this.isInvoking = !1, this.containCanceled = !1
        }
        a.get = function() {
            return this._get() || new o
        };
        var h = l.prototype;
        h.removeByCallback = function(t) {
            for (var e = 0; e < this.callbackInfos.length; ++e) {
                var i = this.callbackInfos[e];
                i && i.callback === t && (a.put(i), r(this.callbackInfos, e), --e)
            }
        }, h.removeByTarget = function(t) {
            for (var e = 0; e < this.callbackInfos.length; ++e) {
                var i = this.callbackInfos[e];
                i && i.target === t && (a.put(i), r(this.callbackInfos, e), --e)
            }
        }, h.cancel = function(t) {
            var e = this.callbackInfos[t];
            e && (a.put(e), this.callbackInfos[t] = null), this.containCanceled = !0
        }, h.cancelAll = function() {
            for (var t = 0; t < this.callbackInfos.length; t++) {
                var e = this.callbackInfos[t];
                e && (a.put(e), this.callbackInfos[t] = null)
            }
            this.containCanceled = !0
        }, h.purgeCanceled = function() {
            for (var t = this.callbackInfos.length - 1; t >= 0; --t) {
                this.callbackInfos[t] || r(this.callbackInfos, t)
            }
            this.containCanceled = !1
        }, h.clear = function() {
            this.cancelAll(), this.callbackInfos.length = 0, this.isInvoking = !1, this.containCanceled = !1
        };
        var c = new n.Pool(function(t) {
            return t.callback = s, t.target = void 0, t.once = !1, !0
        }, 16);

        function u() {
            this._callbackTable = n.createMap(!0)
        }
        c.get = function() {
            return this._get() || new l
        }, (h = u.prototype).on = function(t, e, i, n) {
            var r = this._callbackTable[t];
            r || (r = this._callbackTable[t] = c.get());
            var s = a.get();
            s.set(e, i, n), r.callbackInfos.push(s)
        }, h.hasEventListener = function(t, e, i) {
            var n = this._callbackTable[t];
            if (!n) return !1;
            var r = n.callbackInfos;
            if (!e) {
                if (n.isInvoking) {
                    for (var s = 0; s < r.length; ++s)
                        if (r[s]) return !0;
                    return !1
                }
                return r.length > 0
            }
            for (var o = 0; o < r.length; ++o) {
                var a = r[o];
                if (a && a.callback === e && a.target === i) return !0
            }
            return !1
        }, h.removeAll = function(t) {
            if ("string" == typeof t) {
                var e = this._callbackTable[t];
                e && (e.isInvoking ? e.cancelAll() : (e.clear(), c.put(e), delete this._callbackTable[t]))
            } else if (t)
                for (var i in this._callbackTable) {
                    var n = this._callbackTable[i];
                    if (n.isInvoking)
                        for (var r = n.callbackInfos, s = 0; s < r.length; ++s) {
                            var o = r[s];
                            o && o.target === t && n.cancel(s)
                        } else n.removeByTarget(t)
                }
        }, h.off = function(t, e, i) {
            var n = this._callbackTable[t];
            if (n)
                for (var s = n.callbackInfos, o = 0; o < s.length; ++o) {
                    var l = s[o];
                    if (l && l.callback === e && l.target === i) {
                        n.isInvoking ? n.cancel(o) : (r(s, o), a.put(l));
                        break
                    }
                }
        }, h.emit = function(t, e, i, n, r, s) {
            var o = this._callbackTable[t];
            if (o) {
                var a = !o.isInvoking;
                o.isInvoking = !0;
                for (var l = o.callbackInfos, h = 0, c = l.length; h < c; ++h) {
                    var u = l[h];
                    if (u) {
                        var _ = u.target,
                            f = u.callback;
                        u.once && this.off(t, f, _), _ ? f.call(_, e, i, n, r, s) : f(e, i, n, r, s)
                    }
                }
                a && (o.isInvoking = !1, o.containCanceled && o.purgeCanceled())
            }
        }, e.exports = u
    }), {
        "./js": 218
    }],
    212: [(function(t, e, i) {
        "use strict";

        function n(t, e) {
            for (var i = 0; i < e.length; i++) {
                var r = e[i];
                Array.isArray(r) ? n(t, r) : t.push(r)
            }
        }
        e.exports = {
            flattenCodeArray: function(t) {
                var e = [];
                return n(e, t), e.join("")
            }
        }
    }), {}],
    213: [(function(t, e, i) {
        "use strict";
        var n = t("./js"),
            r = t("./attribute"),
            s = t("./CCClass"),
            o = t("../utils/misc"),
            a = function() {
                this.uuidList = [], this.uuidObjList = [], this.uuidPropList = [], this._stillUseUrl = n.createMap(!0)
            };
        a.prototype.reset = function() {
            this.uuidList.length = 0, this.uuidObjList.length = 0, this.uuidPropList.length = 0, n.clear(this._stillUseUrl)
        }, a.prototype.push = function(t, e, i, n) {
            n && (this._stillUseUrl[this.uuidList.length] = !0), this.uuidList.push(i), this.uuidObjList.push(t), this.uuidPropList.push(e)
        }, (a.pool = new n.Pool(function(t) {
            t.reset()
        }, 10)).get = function() {
            return this._get() || new a
        };
        var l = (function() {
            function t(t, e, i, n, r) {
                this.result = t, this.customEnv = n, this.deserializedList = [], this.deserializedData = null, this._classFinder = i, this._idList = [], this._idObjList = [], this._idPropList = []
            }

            function e(t) {
                var e, i, n, r = t.deserializedList,
                    s = t._idPropList,
                    o = t._idList,
                    a = t._idObjList;
                t._classFinder && t._classFinder.onDereferenced;
                for (e = 0; e < o.length; e++) i = s[e], n = o[e], a[e][i] = r[n]
            }
            var i = t.prototype;

            function a(t, e, i, r, s, o) {
                if (e instanceof cc.ValueType) {
                    s || t.push("if(prop){");
                    var a = n.getClassName(e);
                    t.push("s._deserializeTypedObject(o" + i + ",prop," + a + ");"), s || t.push("}else o" + i + "=null;")
                } else t.push("if(prop){"), t.push("s._deserializeObjField(o,prop," + r + ",null," + !!o + ");"), t.push("}else o" + i + "=null;")
            }
            i.deserialize = function(t) {
                if (Array.isArray(t)) {
                    var i = t,
                        n = i.length;
                    this.deserializedList.length = n;
                    for (var r = 0; r < n; r++) {
                        if (i[r]) this.deserializedList[r] = this._deserializeObject(i[r], !1)
                    }
                    this.deserializedData = n > 0 ? this.deserializedList[0] : []
                } else this.deserializedList.length = 1, this.deserializedData = t ? this._deserializeObject(t, !1) : null, this.deserializedList[0] = this.deserializedData;
                return e(this), this.deserializedData
            }, i._deserializeObject = function(t, e, i, r, s) {
                var o, a = null,
                    l = null,
                    c = t.__type__;
                if ("TypedArray" === c) {
                    var u = t.array;
                    a = new window[t.ctor](u.length);
                    for (var _ = 0; _ < u.length; ++_) a[_] = u[_];
                    return a
                }
                if (c) {
                    if (!(l = this._classFinder(c, t, r, s))) return this._classFinder === n._getClassById && cc.deserialize.reportMissingClass(c), null;
                    if ((a = new l)._deserialize) return a._deserialize(t.content, this), a;
                    cc.Class._isCCClass(l) ? h(this, a, t, l, i) : this._deserializeTypedObject(a, t, l)
                } else if (Array.isArray(t)) {
                    a = new Array(t.length);
                    for (var f = 0; f < t.length; f++) "object" == typeof(o = t[f]) && o ? this._deserializeObjField(a, o, "" + f, null, e) : a[f] = o
                } else a = {}, this._deserializePrimitiveObject(a, t);
                return a
            }, i._deserializeObjField = function(t, e, i, n, r) {
                var s = e.__id__;
                if (void 0 === s) {
                    var o = e.__uuid__;
                    o ? this.result.push(t, i, o, r) : t[i] = this._deserializeObject(e, r)
                } else {
                    var a = this.deserializedList[s];
                    a ? t[i] = a : (this._idList.push(s), this._idObjList.push(t), this._idPropList.push(i))
                }
            }, i._deserializePrimitiveObject = function(t, e) {
                for (var i in e)
                    if (e.hasOwnProperty(i)) {
                        var n = e[i];
                        "object" != typeof n ? "__type__" !== i && (t[i] = n) : n ? this._deserializeObjField(t, n, i) : t[i] = null
                    }
            }, i._deserializeTypedObject = function(t, e, i) {
                if (i === cc.Vec2) return t.x = e.x || 0, void(t.y = e.y || 0);
                if (i === cc.Vec3) return t.x = e.x || 0, t.y = e.y || 0, void(t.z = e.z || 0);
                if (i !== cc.Color) {
                    if (i === cc.Size) return t.width = e.width || 0, void(t.height = e.height || 0);
                    for (var n = r.DELIMETER + "default", o = r.getClassAttrs(i), a = i.__props__ || Object.keys(t), l = 0; l < a.length; l++) {
                        var h = a[l],
                            c = e[h];
                        void 0 !== c && e.hasOwnProperty(h) || (c = s.getDefault(o[h + n])), "object" != typeof c ? t[h] = c : c ? this._deserializeObjField(t, c, h) : t[h] = null
                    }
                } else {
                    t.r = e.r || 0, t.g = e.g || 0, t.b = e.b || 0;
                    var u = e.a;
                    t.a = void 0 === u ? 255 : u
                }
            };
            var l = function(t, e) {
                for (var i = r.DELIMETER + "type", l = (r.DELIMETER, r.DELIMETER + "default"), h = r.DELIMETER + "saveUrlAsAsset", c = r.DELIMETER + "formerlySerializedAs", u = r.getClassAttrs(e), _ = e.__values__, f = ["var prop;"], d = o.BUILTIN_CLASSID_RE.test(n._getClassId(e)), p = 0; p < _.length; p++) {
                    var m, y, v = _[p];
                    0, s.IDENTIFIER_RE.test(v) ? (y = '"' + v + '"', m = "." + v) : m = "[" + (y = s.escapeForJS(v)) + "]";
                    var g = m;
                    if (u[v + c]) {
                        var x = u[v + c];
                        g = s.IDENTIFIER_RE.test(x) ? "." + x : "[" + s.escapeForJS(x) + "]"
                    }
                    f.push("prop=d" + g + ";"), f.push('if(typeof prop!=="undefined"){');
                    var b = u[v + h],
                        A = s.getDefault(u[v + l]);
                    if (d) {
                        var C, T = u[v + i];
                        if (void 0 === A && T) C = T instanceof r.PrimitiveType;
                        else {
                            var S = typeof A;
                            C = "string" === S && !b || "number" === S || "boolean" === S
                        }
                        C ? f.push("o" + m + "=prop;") : a(f, A, m, y, !0, b)
                    } else f.push('if(typeof prop!=="object"){o' + m + "=prop;}else{"), a(f, A, m, y, !1, b), f.push("}");
                    f.push("}")
                }(cc.js.isChildClassOf(e, cc._BaseNode) || cc.js.isChildClassOf(e, cc.Component)) && f.push("d._id&&(o._id=d._id);");
                return "_$erialized" === _[_.length - 1] && (f.push("o._$erialized=JSON.parse(JSON.stringify(d));"), f.push("s._deserializePrimitiveObject(o._$erialized,d);")), Function("s", "o", "d", "k", "t", f.join(""))
            };

            function h(t, e, i, r, s) {
                var o;
                r.hasOwnProperty("__deserialize__") ? o = r.__deserialize__ : (o = l(t, r), n.value(r, "__deserialize__", o, !0)), o(t, e, i, r, s)
            }
            return t.pool = new n.Pool(function(t) {
                t.result = null, t.customEnv = null, t.deserializedList.length = 0, t.deserializedData = null, t._classFinder = null, t._idList.length = 0, t._idObjList.length = 0, t._idPropList.length = 0
            }, 1), t.pool.get = function(e, i, n, r, s) {
                var o = this._get();
                return o ? (o.result = e, o.customEnv = r, o._classFinder = n, o) : new t(e, i, n, r, s)
            }, t
        })();
        cc.deserialize = function(t, e, i) {
            var r = (i = i || {}).classFinder || n._getClassById,
                s = i.createAssetRefs || cc.sys.platform === cc.sys.EDITOR_CORE,
                o = i.customEnv,
                h = i.ignoreEditorOnly;
            "string" == typeof t && (t = JSON.parse(t));
            var c = !e;
            e = e || a.pool.get();
            var u = l.pool.get(e, !1, r, o, h);
            cc.game._isCloning = !0;
            var _ = u.deserialize(t);
            return cc.game._isCloning = !1, l.pool.put(u), s && e.assignAssetsBy(Editor.serialize.asAsset), c && a.pool.put(e), _
        }, cc.deserialize.Details = a, cc.deserialize.reportMissingClass = function(t) {
            cc.warnID(5302, t)
        }
    }), {
        "../utils/misc": 300,
        "./CCClass": 198,
        "./attribute": 210,
        "./js": 218
    }],
    214: [(function(t, e, i) {
        "use strict";
        var n = ".";

        function r(t) {
            this.id = 0 | 998 * Math.random(), this.prefix = t ? t + n : ""
        }
        r.prototype.getNewId = function() {
            return this.prefix + ++this.id
        }, r.global = new r("global"), e.exports = r
    }), {}],
    215: [(function(t, e, i) {
        "use strict";
        t("./js"), t("./CCClass"), t("./CCClassDecorator"), t("./CCEnum"), t("./CCObject"), t("./callbacks-invoker"), t("./url"), t("./deserialize"), t("./instantiate"), t("./instantiate-jit"), t("./requiring-frame"), t("./CCSys"), t("./CCMacro"), t("./CCAssetLibrary"), t("./CCVisibleRect")
    }), {
        "./CCAssetLibrary": 197,
        "./CCClass": 198,
        "./CCClassDecorator": 199,
        "./CCEnum": 200,
        "./CCMacro": 203,
        "./CCObject": 204,
        "./CCSys": 207,
        "./CCVisibleRect": 209,
        "./callbacks-invoker": 211,
        "./deserialize": 213,
        "./instantiate": 217,
        "./instantiate-jit": 216,
        "./js": 218,
        "./requiring-frame": 220,
        "./url": 221
    }],
    216: [(function(t, e, i) {
        "use strict";
        var n = t("./CCObject"),
            r = n.Flags.Destroyed,
            s = n.Flags.PersistentMask,
            o = t("./attribute"),
            a = t("./js"),
            l = t("./CCClass"),
            h = t("./compiler"),
            c = o.DELIMETER + "default",
            u = l.IDENTIFIER_RE,
            _ = l.escapeForJS,
            f = "var ",
            d = "o",
            p = "t",
            m = {
                "cc.Node": "cc.Node",
                "cc.Sprite": "cc.Sprite",
                "cc.Label": "cc.Label",
                "cc.Button": "cc.Button",
                "cc.Widget": "cc.Widget",
                "cc.Animation": "cc.Animation",
                "cc.ClickEvent": !1,
                "cc.PrefabInfo": !1
            };
        try {
            !Float32Array.name && (Float32Array.name = "Float32Array"), !Float64Array.name && (Float64Array.name = "Float64Array"), !Int8Array.name && (Int8Array.name = "Int8Array"), !Int16Array.name && (Int16Array.name = "Int16Array"), !Int32Array.name && (Int32Array.name = "Int32Array"), !Uint8Array.name && (Uint8Array.name = "Uint8Array"), !Uint16Array.name && (Uint16Array.name = "Uint16Array"), !Uint32Array.name && (Uint32Array.name = "Uint32Array")
        } catch (t) {}

        function y(t) {
            if (t === Float32Array) return "Float32Array";
            if (t === Float64Array) return "Float64Array";
            if (t === Int8Array) return "Int8Array";
            if (t === Int16Array) return "Int16Array";
            if (t === Int32Array) return "Int32Array";
            if (t === Uint8Array) return "Uint8Array";
            if (t === Uint16Array) return "Uint16Array";
            if (t === Uint32Array) return "Uint32Array";
            throw new Error("Unknown TypedArray could not be instantiated: " + t)
        }

        function v(t, e) {
            this.varName = t, this.expression = e
        }

        function g(t, e) {
            return e instanceof v ? new v(e.varName, t + e.expression) : t + e
        }

        function x(t, e, i) {
            Array.isArray(i) ? (i[0] = g(e, i[0]), t.push(i)) : t.push(g(e, i) + ";")
        }

        function b(t) {
            this._exps = [], this._targetExp = t
        }

        function A(t, e) {
            if ("function" == typeof t) try {
                t = t()
            } catch (t) {
                return !1
            }
            if (t === e) return !0;
            if (t && e) {
                if (t instanceof cc.ValueType && t.equals(e)) return !0;
                if (Array.isArray(t) && Array.isArray(e) || t.constructor === Object && e.constructor === Object) try {
                    return Array.isArray(t) && Array.isArray(e) && 0 === t.length && 0 === e.length
                } catch (t) {}
            }
            return !1
        }

        function C(t) {
            return u.test(t) ? "." + t : "[" + _(t) + "]"
        }

        function T(t, e) {
            var i;
            this.parent = e, this.objsToClear_iN$t = [], this.codeArray = [], this.objs = [], this.funcs = [], this.funcModuleCache = a.createMap(), a.mixin(this.funcModuleCache, m), this.globalVariables = [], this.globalVariableId = 0, this.localVariableId = 0, this.codeArray.push(f + d + "," + p + ";", "if(R){", d + "=R;", "}else{", d + "=R=new " + this.getFuncModule(t.constructor, !0) + "();", "}"), a.value(t, "_iN$t", {
                globalVar: "R"
            }, !0), this.objsToClear_iN$t.push(t), this.enumerateObject(this.codeArray, t), this.globalVariables.length > 0 && (i = f + this.globalVariables.join(",") + ";");
            var n = h.flattenCodeArray(["return (function(R){", i || [], this.codeArray, "return o;", "})"]);
            this.result = Function("O", "F", n)(this.objs, this.funcs);
            for (var r = 0, s = this.objsToClear_iN$t.length; r < s; ++r) this.objsToClear_iN$t[r]._iN$t = null;
            this.objsToClear_iN$t.length = 0
        }
        v.prototype.toString = function() {
            return f + this.varName + "=" + this.expression + ";"
        }, b.prototype.append = function(t, e) {
            this._exps.push([t, e])
        }, b.prototype.writeCode = function(t) {
            var e;
            if (this._exps.length > 1) t.push(p + "=" + this._targetExp + ";"), e = p;
            else {
                if (1 !== this._exps.length) return;
                e = this._targetExp
            }
            for (var i = 0; i < this._exps.length; i++) {
                var n = this._exps[i];
                x(t, e + C(n[0]) + "=", n[1])
            }
        }, b.pool = new a.Pool(function(t) {
            t._exps.length = 0, t._targetExp = null
        }, 1), b.pool.get = function(t) {
            var e = this._get() || new b;
            return e._targetExp = t, e
        };
        var S = T.prototype;
        S.getFuncModule = function(t, e) {
            var i = a.getClassName(t);
            if (i) {
                var n = this.funcModuleCache[i];
                if (n) return n;
                if (void 0 === n) {
                    var r = -1 !== i.indexOf(".");
                    if (r) try {
                        if (r = t === Function("return " + i)()) return this.funcModuleCache[i] = i, i
                    } catch (t) {}
                }
            }
            var s = this.funcs.indexOf(t);
            s < 0 && (s = this.funcs.length, this.funcs.push(t));
            var o = "F[" + s + "]";
            return e && (o = "(" + o + ")"), this.funcModuleCache[i] = o, o
        }, S.getObjRef = function(t) {
            var e = this.objs.indexOf(t);
            return e < 0 && (e = this.objs.length, this.objs.push(t)), "O[" + e + "]"
        }, S.setValueType = function(t, e, i, n) {
            var r = b.pool.get(n),
                s = e.constructor.__props__;
            s || (s = Object.keys(e));
            for (var o = 0; o < s.length; o++) {
                var a = s[o],
                    l = i[a];
                if (e[a] !== l) {
                    var h = this.enumerateField(i, a, l);
                    r.append(a, h)
                }
            }
            r.writeCode(t), b.pool.put(r)
        }, S.enumerateCCClass = function(t, e, i) {
            for (var n = i.__values__, r = o.getClassAttrs(i), s = 0; s < n.length; s++) {
                var a = n[s],
                    h = e[a],
                    u = r[a + c];
                if (!A(u, h))
                    if ("object" == typeof h && h instanceof cc.ValueType && (u = l.getDefault(u)) && u.constructor === h.constructor) {
                        var _ = d + C(a);
                        this.setValueType(t, u, h, _)
                    } else this.setObjProp(t, e, a, h)
            }
        }, S.instantiateArray = function(t) {
            if (0 === t.length) return "[]";
            var e = "a" + ++this.localVariableId,
                i = [new v(e, "new Array(" + t.length + ")")];
            a.value(t, "_iN$t", {
                globalVar: "",
                source: i
            }, !0), this.objsToClear_iN$t.push(t);
            for (var n = 0; n < t.length; ++n) {
                x(i, e + "[" + n + "]=", this.enumerateField(t, n, t[n]))
            }
            return i
        }, S.instantiateTypedArray = function(t) {
            var e = t.constructor.name || y(t.constructor);
            if (0 === t.length) return "new " + e;
            var i = "a" + ++this.localVariableId,
                n = [new v(i, "new " + e + "(" + t.length + ")")];
            t._iN$t = {
                globalVar: "",
                source: n
            }, this.objsToClear_iN$t.push(t);
            for (var r = 0; r < t.length; ++r) {
                if (0 !== t[r]) x(n, i + "[" + r + "]=", t[r])
            }
            return n
        }, S.enumerateField = function(t, e, i) {
            if ("object" == typeof i && i) {
                var r = i._iN$t;
                if (r) {
                    var o = r.globalVar;
                    if (!o) {
                        o = r.globalVar = "v" + ++this.globalVariableId, this.globalVariables.push(o);
                        var a = r.source[0];
                        r.source[0] = g(o + "=", a)
                    }
                    return o
                }
                return ArrayBuffer.isView(i) ? this.instantiateTypedArray(i) : Array.isArray(i) ? this.instantiateArray(i) : this.instantiateObj(i)
            }
            return "function" == typeof i ? this.getFuncModule(i) : "string" == typeof i ? _(i) : ("_objFlags" === e && t instanceof n && (i &= s), i)
        }, S.setObjProp = function(t, e, i, n) {
            x(t, d + C(i) + "=", this.enumerateField(e, i, n))
        }, S.enumerateObject = function(t, e) {
            var i = e.constructor;
            if (cc.Class._isCCClass(i)) this.enumerateCCClass(t, e, i);
            else
                for (var n in e)
                    if (e.hasOwnProperty(n) && (95 !== n.charCodeAt(0) || 95 !== n.charCodeAt(1) || "__type__" === n)) {
                        var r = e[n];
                        "object" == typeof r && r && r === e._iN$t || this.setObjProp(t, e, n, r)
                    }
        }, S.instantiateObj = function(t) {
            if (t instanceof cc.ValueType) return l.getNewValueTypeCode(t);
            if (t instanceof cc.Asset) return this.getObjRef(t);
            if (t._objFlags & r) return null;
            var e, i = t.constructor;
            if (cc.Class._isCCClass(i)) {
                if (this.parent)
                    if (this.parent instanceof cc.Component) {
                        if (t instanceof cc._BaseNode || t instanceof cc.Component) return this.getObjRef(t)
                    } else if (this.parent instanceof cc._BaseNode)
                    if (t instanceof cc._BaseNode) {
                        if (!t.isChildOf(this.parent)) return this.getObjRef(t)
                    } else if (t instanceof cc.Component && !t.node.isChildOf(this.parent)) return this.getObjRef(t);
                e = new v(d, "new " + this.getFuncModule(i, !0) + "()")
            } else if (i === Object) e = new v(d, "{}");
            else {
                if (i) return this.getObjRef(t);
                e = new v(d, "Object.create(null)")
            }
            var n = [e];
            return a.value(t, "_iN$t", {
                globalVar: "",
                source: n
            }, !0), this.objsToClear_iN$t.push(t), this.enumerateObject(n, t), ["(function(){", n, "return o;})();"]
        }, e.exports = {
            compile: function(t) {
                return new T(t, t instanceof cc._BaseNode && t).result
            },
            equalsToDefault: A
        }
    }), {
        "./CCClass": 198,
        "./CCObject": 204,
        "./attribute": 210,
        "./compiler": 212,
        "./js": 218
    }],
    217: [(function(t, e, i) {
        "use strict";
        var n = t("./CCObject"),
            r = t("../value-types/value-type"),
            s = n.Flags.Destroyed,
            o = n.Flags.PersistentMask,
            a = t("./utils").isDomNode,
            l = t("./js");

        function h(t, e) {
            if (!e) {
                if ("object" != typeof t || Array.isArray(t)) return null;
                if (!t) return null;
                if (!cc.isValid(t)) return null;
                0
            }
            var i;
            if (t instanceof n) {
                if (t._instantiate) return cc.game._isCloning = !0, i = t._instantiate(), cc.game._isCloning = !1, i;
                if (t instanceof cc.Asset) return null
            }
            return cc.game._isCloning = !0, i = u(t), cc.game._isCloning = !1, i
        }
        var c = [];

        function u(t, e) {
            if (Array.isArray(t)) return null;
            if (a && a(t)) return null;
            var i;
            if (t._iN$t) i = t._iN$t;
            else if (t.constructor) {
                i = new(0, t.constructor)
            } else i = Object.create(null);
            f(t, i, e);
            for (var n = 0, r = c.length; n < r; ++n) c[n]._iN$t = null;
            return c.length = 0, i
        }

        function _(t, e, i, n) {
            for (var s = t.__values__, o = 0; o < s.length; o++) {
                var a = s[o],
                    l = e[a];
                if ("object" == typeof l && l) {
                    var h = i[a];
                    h instanceof r && h.constructor === l.constructor ? h.set(l) : i[a] = l._iN$t || d(l, n)
                } else i[a] = l
            }
        }

        function f(t, e, i) {
            l.value(t, "_iN$t", e, !0), c.push(t);
            var r = t.constructor;
            if (cc.Class._isCCClass(r)) _(r, t, e, i);
            else
                for (var s in t)
                    if (t.hasOwnProperty(s) && (95 !== s.charCodeAt(0) || 95 !== s.charCodeAt(1) || "__type__" === s)) {
                        var a = t[s];
                        if ("object" == typeof a && a) {
                            if (a === e) continue;
                            e[s] = a._iN$t || d(a, i)
                        } else e[s] = a
                    }
            t instanceof n && (e._objFlags &= o)
        }

        function d(t, e) {
            if (t instanceof r) return t.clone();
            if (t instanceof cc.Asset) return t;
            var i;
            if (ArrayBuffer.isView(t)) {
                var n = t.length;
                i = new t.constructor(n), t._iN$t = i, c.push(t);
                for (var o = 0; o < n; ++o) i[o] = t[o];
                return i
            }
            if (Array.isArray(t)) {
                var a = t.length;
                i = new Array(a), l.value(t, "_iN$t", i, !0), c.push(t);
                for (var h = 0; h < a; ++h) {
                    var u = t[h];
                    i[h] = "object" == typeof u && u ? u._iN$t || d(u, e) : u
                }
                return i
            }
            if (t._objFlags & s) return null;
            var _ = t.constructor;
            if (cc.Class._isCCClass(_)) {
                if (e)
                    if (e instanceof cc.Component) {
                        if (t instanceof cc._BaseNode || t instanceof cc.Component) return t
                    } else if (e instanceof cc._BaseNode)
                    if (t instanceof cc._BaseNode) {
                        if (!t.isChildOf(e)) return t
                    } else if (t instanceof cc.Component && !t.node.isChildOf(e)) return t;
                i = new _
            } else if (_ === Object) i = {};
            else {
                if (_) return t;
                i = Object.create(null)
            }
            return f(t, i, e), i
        }
        h._clone = u, cc.instantiate = h, e.exports = h
    }), {
        "../value-types/value-type": 320,
        "./CCObject": 204,
        "./js": 218,
        "./utils": 222
    }],
    218: [(function(t, e, i) {
        "use strict";
        var n = new(t("./id-generater"))("TmpCId.");

        function r(t, e) {
            for (; t;) {
                var i = Object.getOwnPropertyDescriptor(t, e);
                if (i) return i;
                t = Object.getPrototypeOf(t)
            }
            return null
        }

        function s(t, e, i) {
            var n = r(e, t);
            Object.defineProperty(i, t, n)
        }
        var o = {
                isNumber: function(t) {
                    return "number" == typeof t || t instanceof Number
                },
                isString: function(t) {
                    return "string" == typeof t || t instanceof String
                },
                addon: function(t) {
                    t = t || {};
                    for (var e = 1, i = arguments.length; e < i; e++) {
                        var n = arguments[e];
                        if (n) {
                            if ("object" != typeof n) {
                                cc.errorID(5402, n);
                                continue
                            }
                            for (var r in n) r in t || s(r, n, t)
                        }
                    }
                    return t
                },
                mixin: function(t) {
                    t = t || {};
                    for (var e = 1, i = arguments.length; e < i; e++) {
                        var n = arguments[e];
                        if (n) {
                            if ("object" != typeof n) {
                                cc.errorID(5403, n);
                                continue
                            }
                            for (var r in n) s(r, n, t)
                        }
                    }
                    return t
                },
                extend: function(t, e) {
                    for (var i in e) e.hasOwnProperty(i) && (t[i] = e[i]);
                    return t.prototype = Object.create(e.prototype, {
                        constructor: {
                            value: t,
                            writable: !0,
                            configurable: !0
                        }
                    }), t
                },
                getSuper: function(t) {
                    var e = t.prototype,
                        i = e && Object.getPrototypeOf(e);
                    return i && i.constructor
                },
                isChildClassOf: function(t, e) {
                    if (t && e) {
                        if ("function" != typeof t) return !1;
                        if ("function" != typeof e) return !1;
                        if (t === e) return !0;
                        for (;;) {
                            if (!(t = o.getSuper(t))) return !1;
                            if (t === e) return !0
                        }
                    }
                    return !1
                },
                clear: function(t) {
                    for (var e = Object.keys(t), i = 0; i < e.length; i++) delete t[e[i]]
                },
                isEmptyObject: function(t) {
                    for (var e in t) return !1;
                    return !0
                },
                getPropertyDescriptor: r
            },
            a = {
                value: void 0,
                enumerable: !1,
                writable: !1,
                configurable: !0
            };
        o.value = function(t, e, i, n, r) {
            a.value = i, a.writable = n, a.enumerable = r, Object.defineProperty(t, e, a), a.value = void 0
        };
        var l = {
            get: null,
            set: null,
            enumerable: !1
        };
        o.getset = function(t, e, i, n, r, s) {
            "function" != typeof n && (r = n, n = void 0), l.get = i, l.set = n, l.enumerable = r, l.configurable = s, Object.defineProperty(t, e, l), l.get = null, l.set = null
        };
        var h = {
            get: null,
            enumerable: !1,
            configurable: !1
        };
        o.get = function(t, e, i, n, r) {
            h.get = i, h.enumerable = n, h.configurable = r, Object.defineProperty(t, e, h), h.get = null
        };
        var c = {
            set: null,
            enumerable: !1,
            configurable: !1
        };
        o.set = function(t, e, i, n, r) {
            c.set = i, c.enumerable = n, c.configurable = r, Object.defineProperty(t, e, c), c.set = null
        }, o.getClassName = function(t) {
            if ("function" == typeof t) {
                var e = t.prototype;
                if (e && e.hasOwnProperty("__classname__") && e.__classname__) return e.__classname__;
                var i = "";
                if (t.name && (i = t.name), t.toString) {
                    var n, r = t.toString();
                    (n = "[" === r.charAt(0) ? r.match(/\[\w+\s*(\w+)\]/) : r.match(/function\s*(\w+)/)) && 2 === n.length && (i = n[1])
                }
                return "Object" !== i ? i : ""
            }
            return t && t.constructor ? o.getClassName(t.constructor) : ""
        }, (function() {
            var t = {},
                e = {};

            function i(t, e, i) {
                return o.getset(o, e, (function() {
                        return Object.assign({}, i)
                    }), (function(t) {
                        o.clear(i), Object.assign(i, t)
                    })),
                    function(e, n) {
                        if (n.prototype.hasOwnProperty(t) && delete i[n.prototype[t]], o.value(n.prototype, t, e), e) {
                            var r = i[e];
                            if (r && r !== n) {
                                var s = "A Class already exists with the same " + t + ' : "' + e + '".';
                                0, cc.error(s)
                            } else i[e] = n
                        }
                    }
            }
            o._setClassId = i("__cid__", "_registeredClassIds", t);
            var r = i("__classname__", "_registeredClassNames", e);
            o.setClassName = function(t, e) {
                if (r(t, e), !e.prototype.hasOwnProperty("__cid__")) {
                    var i = t || n.getNewId();
                    i && o._setClassId(i, e)
                }
            }, o.unregisterClass = function() {
                for (var i = 0; i < arguments.length; i++) {
                    var n = arguments[i].prototype,
                        r = n.__cid__;
                    r && delete t[r];
                    var s = n.__classname__;
                    s && delete e[s]
                }
            }, o._getClassById = function(e) {
                return t[e]
            }, o.getClassByName = function(t) {
                return e[t]
            }, o._getClassId = function(t, e) {
                if (e = void 0 === e || e, "function" == typeof t && t.prototype.hasOwnProperty("__cid__")) return t.prototype.__cid__;
                if (t && t.constructor) {
                    var i = t.constructor.prototype;
                    if (i && i.hasOwnProperty("__cid__")) return t.__cid__
                }
                return ""
            }
        })(), o.obsolete = function(t, e, i, n) {
            var r = /([^.]+)$/,
                s = r.exec(e)[0],
                a = r.exec(i)[0];

            function l() {
                return this[a]
            }
            n ? o.getset(t, s, l, (function(t) {
                this[a] = t
            })) : o.get(t, s, l)
        }, o.obsoletes = function(t, e, i, n) {
            for (var r in i) {
                var s = i[r];
                o.obsolete(t, e + "." + r, s, n)
            }
        };
        var u = /(%d)|(%s)/,
            _ = /%s/;

        function f(t, e) {
            t.splice(e, 1)
        }

        function d(t, e) {
            var i = t.indexOf(e);
            return i >= 0 && (f(t, i), !0)
        }
        o.formatStr = function() {
            var t = arguments.length;
            if (0 === t) return "";
            var e = arguments[0];
            if (1 === t) return "" + e;
            if ("string" == typeof e && u.test(e))
                for (var i = 1; i < t; ++i) {
                    var n = arguments[i],
                        r = "number" == typeof n ? u : _;
                    r.test(e) ? e = e.replace(r, n) : e += " " + n
                } else
                    for (var s = 1; s < t; ++s) e += " " + arguments[s];
            return e
        }, o.shiftArguments = function() {
            for (var t = arguments.length - 1, e = new Array(t), i = 0; i < t; ++i) e[i] = arguments[i + 1];
            return e
        }, o.createMap = function(t) {
            var e = Object.create(null);
            if (t) {
                e["."] = !0, e["/"] = !0, delete e["."], delete e["/"]
            }
            return e
        };
        var p = Array.prototype.indexOf;

        function m(t, e) {
            void 0 === e && (e = t, t = null), this.get = null, this.count = 0, this._pool = new Array(e), this._cleanup = t
        }
        o.array = {
            remove: d,
            fastRemove: function(t, e) {
                var i = t.indexOf(e);
                i >= 0 && (t[i] = t[t.length - 1], --t.length)
            },
            removeAt: f,
            fastRemoveAt: function(t, e) {
                var i = t.length;
                e < 0 || e >= i || (t[e] = t[i - 1], t.length = i - 1)
            },
            contains: function(t, e) {
                return t.indexOf(e) >= 0
            },
            verifyType: function(t, e) {
                if (t && t.length > 0)
                    for (var i = 0; i < t.length; i++)
                        if (!(t[i] instanceof e)) return cc.logID(1300), !1;
                return !0
            },
            removeArray: function(t, e) {
                for (var i = 0, n = e.length; i < n; i++) d(t, e[i])
            },
            appendObjectsAt: function(t, e, i) {
                return t.splice.apply(t, [i, 0].concat(e)), t
            },
            copy: function(t) {
                var e, i = t.length,
                    n = new Array(i);
                for (e = 0; e < i; e += 1) n[e] = t[e];
                return n
            },
            indexOf: p,
            MutableForwardIterator: t("../utils/mutable-forward-iterator")
        }, m.prototype._get = function() {
            if (this.count > 0) {
                --this.count;
                var t = this._pool[this.count];
                return this._pool[this.count] = null, t
            }
            return null
        }, m.prototype.put = function(t) {
            var e = this._pool;
            if (this.count < e.length) {
                if (this._cleanup && !1 === this._cleanup(t)) return;
                e[this.count] = t, ++this.count
            }
        }, m.prototype.resize = function(t) {
            t >= 0 && (this._pool.length = t, this.count > t && (this.count = t))
        }, o.Pool = m, cc.js = o, e.exports = o
    }), {
        "../utils/mutable-forward-iterator": 301,
        "./id-generater": 214
    }],
    219: [(function(t, e, i) {
        "use strict";
        var n = t("./js"),
            r = t("./attribute"),
            s = {
                url: {
                    canUsedInGet: !0
                },
                default: {},
                serializable: {},
                editorOnly: {},
                formerlySerializedAs: {}
            };

        function o(t, e, i, n) {
            if (!t.get && !t.set)
                if (t.hasOwnProperty("default")) {
                    var r = "_N$" + e;
                    t.get = function() {
                        return this[r]
                    }, t.set = function(t) {
                        var e = this[r];
                        this[r] = t, i.call(this, e)
                    };
                    var o = {};
                    for (var a in n[r] = o, s) {
                        var l = s[a];
                        t.hasOwnProperty(a) && (o[a] = t[a], l.canUsedInGet || delete t[a])
                    }
                } else 0
        }

        function a(t, e, i, n) {
            Array.isArray(n) && n.length > 0 && (n = n[0]), t.type = n
        }

        function l(t, e, i, n) {
            if (Array.isArray(e)) {
                if (!(e.length > 0)) return cc.errorID(5508, i, n);
                if (cc.RawAsset.isRawAssetType(e[0])) return t.url = e[0], void delete t.type;
                t.type = e = e[0]
            }
            "function" == typeof e && (e === String ? t.type = cc.String : e === Boolean ? t.type = cc.Boolean : e === Number && (t.type = cc.Float))
        }
        i.getFullFormOfProperty = function(t, e, i) {
            if (t && t.constructor === Object) return null;
            if (Array.isArray(t) && t.length > 0) {
                t[0];
                return {
                    default: [],
                    type: t,
                    _short: !0
                }
            }
            if ("function" == typeof t) {
                var s = t;
                return cc.RawAsset.isRawAssetType(s) || cc.RawAsset.wasRawAssetType(s) ? {
                    default: "",
                    url: s,
                    _short: !0
                } : {
                    default: n.isChildClassOf(s, cc.ValueType) ? new s : null,
                    type: s,
                    _short: !0
                }
            }
            return t instanceof r.PrimitiveType ? {
                default: t.default,
                _short: !0
            } : {
                default: t,
                _short: !0
            }
        }, i.preprocessAttrs = function(t, e, n, r) {
            for (var s in t) {
                var h = t[s],
                    c = i.getFullFormOfProperty(h, s, e);
                if (c && (h = t[s] = c), h) {
                    var u = h.notify;
                    u && o(h, s, u, t), "type" in h && l(h, h.type, e, s), "url" in h && a(h, 0, 0, h.url), "type" in h && h.type
                }
            }
        }, i.validateMethodWithProps = function(t, e, i, n, r) {
            return "function" == typeof t || null === t
        }
    }), {
        "./CCClass": 198,
        "./attribute": 210,
        "./js": 218
    }],
    220: [(function(t, e, i) {
        "use strict";
        var n = [];
        cc._RF = {
            push: function(t, e, i) {
                void 0 === i && (i = e, e = ""), n.push({
                    uuid: e,
                    script: i,
                    module: t,
                    exports: t.exports,
                    beh: null
                })
            },
            pop: function() {
                var t = n.pop(),
                    e = t.module,
                    i = e.exports;
                if (i === t.exports) {
                    for (var r in i) return;
                    e.exports = i = t.cls
                }
            },
            peek: function() {
                return n[n.length - 1]
            }
        }
    }), {}],
    221: [(function(t, e, i) {
        "use strict";
        cc.url = {
            _rawAssets: "",
            normalize: function(t) {
                return t && (46 === t.charCodeAt(0) && 47 === t.charCodeAt(1) ? t = t.slice(2) : 47 === t.charCodeAt(0) && (t = t.slice(1))), t
            },
            raw: function(t) {
                if ((t = this.normalize(t)).startsWith("resources/")) {
                    var e = cc.loader._getResUuid(t.slice(10), cc.Asset, null, !0);
                    if (e) return cc.AssetLibrary.getLibUrlNoExt(e, !0) + cc.path.extname(t)
                } else cc.errorID(7002, t);
                return this._rawAssets + t
            },
            _init: function(t) {
                this._rawAssets = cc.path.stripSep(t) + "/"
            }
        }, e.exports = cc.url
    }), {}],
    222: [(function(t, e, i) {
        "use strict";
        t("./js");
        e.exports = {
            contains: function(t, e) {
                if ("function" == typeof t.contains) return t.contains(e);
                if ("function" == typeof t.compareDocumentPosition) return !!(16 & t.compareDocumentPosition(e));
                var i = e.parentNode;
                if (i)
                    do {
                        if (i === t) return !0;
                        i = i.parentNode
                    } while (null !== i);
                return !1
            },
            isDomNode: "object" == typeof window && ("function" == typeof Node ? function(t) {
                return t instanceof Node
            } : function(t) {
                return t && "object" == typeof t && "number" == typeof t.nodeType && "string" == typeof t.nodeName
            }),
            callInNextTick: function(t, e, i) {
                t && setTimeout((function() {
                    t(e, i)
                }), 0)
            }
        }
    }), {
        "./js": 218
    }],
    223: [(function(t, e, i) {
        "use strict";
        t("./platform/js"), t("./value-types"), t("./utils"), t("./platform/CCInputManager"), t("./platform/CCInputExtension"), t("./event"), t("./platform/CCSys"), t("./platform/CCMacro"), t("./load-pipeline"), t("./CCDirector"), t("./renderer"), t("./platform/CCView"), t("./platform/CCScreen"), t("./CCScheduler"), t("./event-manager")
    }), {
        "./CCDirector": 50,
        "./CCScheduler": 55,
        "./event": 133,
        "./event-manager": 129,
        "./load-pipeline": 153,
        "./platform/CCInputExtension": 201,
        "./platform/CCInputManager": 202,
        "./platform/CCMacro": 203,
        "./platform/CCScreen": 206,
        "./platform/CCSys": 207,
        "./platform/CCView": 208,
        "./platform/js": 218,
        "./renderer": 247,
        "./utils": 298,
        "./value-types": 315
    }],
    224: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.default = void 0;
        var n = (function() {
                function t(t, e) {
                    for (var i = 0; i < e.length; i++) {
                        var n = e[i];
                        n.enumerable = n.enumerable || !1, n.configurable = !0, "value" in n && (n.writable = !0), Object.defineProperty(t, n.key, n)
                    }
                }
                return function(e, i, n) {
                    return i && t(e.prototype, i), n && t(e, n), e
                }
            })(),
            r = a(t("./assembler")),
            s = a(t("./utils/dynamic-atlas/manager")),
            o = a(t("./webgl/render-data"));

        function a(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }

        function l(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }

        function h(t, e) {
            if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
            return !e || "object" != typeof e && "function" != typeof e ? t : e
        }

        function c(t, e) {
            if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e);
            t.prototype = Object.create(e && e.prototype, {
                constructor: {
                    value: t,
                    enumerable: !1,
                    writable: !0,
                    configurable: !0
                }
            }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e)
        }
        var u = (function(t) {
            function e() {
                l(this, e);
                var i = h(this, t.call(this));
                return i._renderData = new o.default, i._renderData.init(i), i.initData(), i.initLocal(), i
            }
            return c(e, t), e.prototype.initData = function() {
                this._renderData.createQuadData(0, this.verticesFloats, this.indicesCount)
            }, e.prototype.initLocal = function() {
                this._local = [], this._local.length = 4
            }, e.prototype.updateColor = function(t, e) {
                var i = this._renderData.uintVDatas[0];
                if (i) {
                    e = e || t.node.color._val;
                    for (var n = this.floatsPerVert, r = this.colorOffset, s = i.length; r < s; r += n) i[r] = e
                }
            }, e.prototype.getBuffer = function() {
                return cc.renderer._handle._meshBuffer
            }, e.prototype.updateWorldVerts = function(t) {
                var e = this._local,
                    i = this._renderData.vDatas[0],
                    n = t.node._worldMatrix.m,
                    r = n[0],
                    s = n[1],
                    o = n[4],
                    a = n[5],
                    l = n[12],
                    h = n[13],
                    c = e[0],
                    u = e[2],
                    _ = e[1],
                    f = e[3];
                if (1 === r && 0 === s && 0 === o && 1 === a) i[0] = c + l, i[1] = _ + h, i[5] = u + l, i[6] = _ + h, i[10] = c + l, i[11] = f + h, i[15] = u + l, i[16] = f + h;
                else {
                    var d = r * c,
                        p = r * u,
                        m = s * c,
                        y = s * u,
                        v = o * _,
                        g = o * f,
                        x = a * _,
                        b = a * f;
                    i[0] = d + v + l, i[1] = m + x + h, i[5] = p + v + l, i[6] = y + x + h, i[10] = d + g + l, i[11] = m + b + h, i[15] = p + g + l, i[16] = y + b + h
                }
            }, e.prototype.fillBuffers = function(t, e) {
                e.worldMatDirty && this.updateWorldVerts(t);
                var i = this._renderData,
                    n = i.vDatas[0],
                    r = i.iDatas[0],
                    s = this.getBuffer(e),
                    o = s.request(this.verticesCount, this.indicesCount),
                    a = o.byteOffset >> 2,
                    l = s._vData;
                n.length + a > l.length ? l.set(n.subarray(0, l.length - a), a) : l.set(n, a);
                for (var h = s._iData, c = o.indiceOffset, u = o.vertexOffset, _ = 0, f = r.length; _ < f; _++) h[c++] = u + r[_]
            }, e.prototype.packToDynamicAtlas = function(t, e) {
                if (e) {
                    if (!e._original && s.default && e._texture.packable) {
                        var i = s.default.insertSpriteFrame(e);
                        i && e._setDynamicAtlasFrame(i)
                    }
                    var n = t.sharedMaterials[0];
                    if (!n) return;
                    n.getProperty("texture") !== e._texture && (t._vertsDirty = !0, t._activateMaterial(!0))
                }
            }, n(e, [{
                key: "verticesFloats",
                get: function() {
                    return this.verticesCount * this.floatsPerVert
                }
            }]), e
        })(r.default);
        i.default = u, cc.js.addon(u.prototype, {
            floatsPerVert: 5,
            verticesCount: 4,
            indicesCount: 6,
            uvOffset: 2,
            colorOffset: 4
        }), cc.Assembler2D = u, e.exports = i.default
    }), {
        "./assembler": 227,
        "./utils/dynamic-atlas/manager": 250,
        "./webgl/render-data": 286
    }],
    225: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0;
        for (var n = t("./webgl/vertex-format"), r = cc.vmath.vec3, s = [], o = 0; o < 4; o++) s.push(r.create());
        var a = {
            floatsPerVert: 6,
            uvOffset: 3,
            colorOffset: 5,
            getBuffer: function(t) {
                return t._meshBuffer3D
            },
            getVfmt: function() {
                return n.vfmt3D
            },
            updateWorldVerts: function(t) {
                var e = t.node._worldMatrix,
                    i = this._local,
                    n = this._renderData.vDatas[0];
                r.set(s[0], i[0], i[1], 0), r.set(s[1], i[2], i[1], 0), r.set(s[2], i[0], i[3], 0), r.set(s[3], i[2], i[3], 0);
                for (var o = this.floatsPerVert, a = 0; a < 4; a++) {
                    var l = s[a];
                    r.transformMat4(l, l, e);
                    var h = o * a;
                    n[h] = l.x, n[h + 1] = l.y, n[h + 2] = l.z
                }
            }
        };
        cc.Assembler3D = a, i.default = a, e.exports = i.default
    }), {
        "./webgl/vertex-format": 288
    }],
    226: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0;
        var n = (function(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        })(t("../utils/pool"));

        function r(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }

        function s(t, e) {
            if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
            return !e || "object" != typeof e && "function" != typeof e ? t : e
        }

        function o(t, e) {
            if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e);
            t.prototype = Object.create(e && e.prototype, {
                constructor: {
                    value: t,
                    enumerable: !1,
                    writable: !0,
                    configurable: !0
                }
            }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e)
        }
        var a = 0;

        function l(t) {
            return Object.getOwnPropertyDescriptor(t, "__assemblerId__") || (t.__assemblerId__ = ++a), t.__assemblerId__
        }
        var h = new(function(t) {
            function e() {
                var i, n;
                r(this, e);
                for (var o = arguments.length, a = Array(o), l = 0; l < o; l++) a[l] = arguments[l];
                return i = n = s(this, t.call.apply(t, [this].concat(a))), n._pool = {}, s(n, i)
            }
            return o(e, t), e.prototype.put = function(t) {
                if (t && this.enabled) {
                    var e = l(t.constructor),
                        i = this._pool;
                    i[e] || (i[e] = []), this.count > this.maxSize || (this._clean(t), i[e].push(t), this.count++)
                }
            }, e.prototype.get = function(t) {
                var e = void 0;
                if (this.enabled) {
                    var i = this._pool,
                        n = l(t);
                    e = i[n] && i[n].pop()
                }
                return e ? this.count-- : e = new t, e
            }, e.prototype.clear = function() {
                this._pool = {}, this.count = 0
            }, e.prototype._clean = function(t) {
                t._renderComp = null
            }, e
        }(n.default));
        n.default.register("assembler", h), i.default = h, e.exports = i.default
    }), {
        "../utils/pool": 302
    }],
    227: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.default = void 0;
        var n = t("./webgl/vertex-format"),
            r = (function(t) {
                return t && t.__esModule ? t : {
                    default: t
                }
            })(t("./assembler-pool"));

        function s(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }
        var o = (function() {
            function t() {
                s(this, t), this._extendNative && this._extendNative()
            }
            return t.prototype.init = function(t) {
                this._renderComp = t
            }, t.prototype.updateRenderData = function(t) {}, t.prototype.fillBuffers = function(t, e) {}, t.prototype.getVfmt = function() {
                return n.vfmtPosUvColor
            }, t
        })();
        i.default = o, o.register = function(t, e) {
            t.__assembler__ = e
        }, o.init = function(t) {
            for (var e = t.constructor, i = e.__assembler__; !i;) {
                if (!(e = e.$super)) return void cc.warn("Can not find assembler for render component : [" + cc.js.getClassName(t) + "]");
                i = e.__assembler__
            }
            if (i.getConstructor && (i = i.getConstructor(t)), !t._assembler || t._assembler.constructor !== i) {
                var n = r.default.get(i);
                n.init(t), t._assembler = n
            }
        }, cc.Assembler = o, e.exports = i.default
    }), {
        "./assembler-pool": 226,
        "./webgl/vertex-format": 288
    }],
    228: [(function(t, e, i) {
        "use strict";
        var n = function(t) {
            var e;
            try {
                e = t.getContext("2d")
            } catch (t) {
                return void console.error(t)
            }
            this._canvas = t, this._ctx = e, this._caps = {}, this._stats = {
                drawcalls: 0
            }, this._vx = this._vy = this._vw = this._vh = 0, this._sx = this._sy = this._sw = this._sh = 0
        };
        n.prototype._restoreTexture = function(t) {}, n.prototype.setViewport = function(t, e, i, n) {
            this._vx === t && this._vy === e && this._vw === i && this._vh === n || (this._vx = t, this._vy = e, this._vw = i, this._vh = n)
        }, n.prototype.setScissor = function(t, e, i, n) {
            this._sx === t && this._sy === e && this._sw === i && this._sh === n || (this._sx = t, this._sy = e, this._sw = i, this._sh = n)
        }, n.prototype.clear = function(t) {
            var e = this._ctx;
            e.clearRect(this._vx, this._vy, this._vw, this._vh), !t || 0 === t[0] && 0 === t[1] && 0 === t[2] || (e.fillStyle = "rgb(" + t[0] + "," + t[1] + "," + t[2] + ")", e.globalAlpha = t[3], e.fillRect(this._vx, this._vy, this._vw, this._vh))
        }, n.prototype.resetDrawCalls = function() {
            this._stats.drawcalls = 0
        }, n.prototype.getDrawCalls = function() {
            return this._stats.drawcalls
        }, e.exports = n
    }), {}],
    229: [(function(t, e, i) {
        "use strict";
        var n = function(t, e) {
            this._device = t, this._width = 4, this._height = 4, this._image = null, e && (void 0 !== e.width && (this._width = e.width), void 0 !== e.height && (this._height = e.height), this.updateImage(e))
        };
        n.prototype.update = function(t) {
            this.updateImage(t)
        }, n.prototype.updateImage = function(t) {
            if (t.images && t.images[0]) {
                var e = t.images[0];
                e && e !== this._image && (this._image = e)
            }
        }, n.prototype.destroy = function() {
            this._image = null
        }, e.exports = n
    }), {}],
    230: [(function(t, e, i) {
        "use strict";
        var n = function() {};
        n.prototype = {
            constructor: n,
            clear: function() {},
            render: function() {}
        }, e.exports = n
    }), {}],
    231: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, t("./render-flow"), t("./renderers");
        var n = s(t("./forward-renderer")),
            r = s(t("./render-component-handle"));

        function s(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }
        i.default = {
            ForwardRenderer: n.default,
            RenderComponentHandle: r.default
        }, e.exports = i.default
    }), {
        "./forward-renderer": 230,
        "./render-component-handle": 232,
        "./render-flow": 233,
        "./renderers": 236
    }],
    232: [(function(t, e, i) {
        "use strict";
        var n = t("./renderers/utils"),
            r = function(t, e) {
                this._device = t, this._camera = e, this.parentOpacity = 1, this.parentOpacityDirty = 0, this.worldMatDirty = 0, this.walking = !1
            };
        r.prototype = {
            constructor: r,
            reset: function() {
                var t = this._device._ctx,
                    e = this._device._canvas,
                    i = cc.Camera.main ? cc.Camera.main.backgroundColor : cc.color(),
                    r = "rgba(" + i.r + ", " + i.g + ", " + i.b + ", " + i.a / 255 + ")";
                t.fillStyle = r, t.setTransform(1, 0, 0, 1, 0, 0), t.clearRect(0, 0, e.width, e.height), t.fillRect(0, 0, e.width, e.height), this._device._stats.drawcalls = 0, n.context.reset()
            },
            terminate: function() {}
        }, e.exports = r
    }), {
        "./renderers/utils": 246
    }],
    233: [(function(t, e, i) {
        "use strict";
        var n = (function(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        })(t("../render-flow"));
        n.default.prototype._draw = function(t, e) {
            var i = n.default.getBachther(),
                r = i._device._ctx,
                s = i._camera;
            r.setTransform(s.a, s.b, s.c, s.d, s.tx, s.ty), r.scale(1, -1);
            var o = t._renderComponent;
            o._assembler[e](r, o), this._next._func(t)
        }, n.default.prototype._render = function(t) {
            this._draw(t, "draw")
        }, n.default.prototype._postRender = function(t) {
            this._draw(t, "postDraw")
        }
    }), {
        "../render-flow": 248
    }],
    234: [(function(t, e, i) {
        "use strict";
        var n = t("../../../../graphics/helper"),
            r = t("../../../../graphics/types"),
            s = t("../../../../platform/js"),
            o = r.LineJoin,
            a = r.LineCap;

        function l() {
            this.cmds = [], this.style = {
                strokeStyle: "black",
                fillStyle: "white",
                lineCap: "butt",
                lineJoin: "miter",
                miterLimit: 10
            }
        }
        var h = l.prototype;
        s.mixin(h, {
            moveTo: function(t, e) {
                this.cmds.push(["moveTo", [t, e]])
            },
            lineTo: function(t, e) {
                this.cmds.push(["lineTo", [t, e]])
            },
            bezierCurveTo: function(t, e, i, n, r, s) {
                this.cmds.push(["bezierCurveTo", [t, e, i, n, r, s]])
            },
            quadraticCurveTo: function(t, e, i, n) {
                this.cmds.push(["quadraticCurveTo", [t, e, i, n]])
            },
            arc: function(t, e, i, r, s, o) {
                n.arc(this, t, e, i, r, s, o)
            },
            ellipse: function(t, e, i, r) {
                n.ellipse(this, t, e, i, r)
            },
            circle: function(t, e, i) {
                n.ellipse(this, t, e, i, i)
            },
            rect: function(t, e, i, n) {
                this.moveTo(t, e), this.lineTo(t, e + n), this.lineTo(t + i, e + n), this.lineTo(t + i, e), this.close()
            },
            roundRect: function(t, e, i, r, s) {
                n.roundRect(this, t, e, i, r, s)
            },
            clear: function(t, e) {
                this.cmds.length = 0
            },
            close: function() {
                this.cmds.push(["closePath", []])
            },
            stroke: function() {
                this.cmds.push(["stroke", []])
            },
            fill: function() {
                this.cmds.push(["fill", []])
            }
        }), s.set(h, "strokeColor", (function(t) {
            var e = "rgba(" + (0 | t.r) + "," + (0 | t.g) + "," + (0 | t.b) + "," + t.a / 255 + ")";
            this.cmds.push(["strokeStyle", e]), this.style.strokeStyle = e
        })), s.set(h, "fillColor", (function(t) {
            var e = "rgba(" + (0 | t.r) + "," + (0 | t.g) + "," + (0 | t.b) + "," + t.a / 255 + ")";
            this.cmds.push(["fillStyle", e]), this.style.fillStyle = e
        })), s.set(h, "lineWidth", (function(t) {
            this.cmds.push(["lineWidth", t]), this.style.lineWidth = t
        })), s.set(h, "lineCap", (function(t) {
            var e = "butt";
            t === a.BUTT ? e = "butt" : t === a.ROUND ? e = "round" : t === a.SQUARE && (e = "square"), this.cmds.push(["lineCap", e]), this.style.lineCap = e
        })), s.set(h, "lineJoin", (function(t) {
            var e = "bevel";
            t === o.BEVEL ? e = "bevel" : t === o.ROUND ? e = "round" : t === o.MITER && (e = "miter"), this.cmds.push(["lineJoin", e]), this.style.lineJoin = e
        })), s.set(h, "miterLimit", (function(t) {
            this.cmds.push(["miterLimit", t]), this.style.miterLimit = t
        })), cc.Graphics._Impl = l, e.exports = l
    }), {
        "../../../../graphics/helper": 141,
        "../../../../graphics/types": 143,
        "../../../../platform/js": 218
    }],
    235: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.default = void 0;
        var n = s(t("../../../assembler")),
            r = (s(t("./impl")), s(t("../../../../graphics/graphics")));

        function s(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }

        function o(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }
        var a = (function() {
            function t() {
                o(this, t)
            }
            return t.prototype.init = function() {}, t.prototype.draw = function(t, e) {
                var i = e.node,
                    n = i._worldMatrix.m,
                    r = n[0],
                    s = n[1],
                    o = n[4],
                    a = n[5],
                    l = n[12],
                    h = n[13];
                t.transform(r, s, o, a, l, h), t.save(), t.globalAlpha = i.opacity / 255;
                var c = e._impl.style;
                t.strokeStyle = c.strokeStyle, t.fillStyle = c.fillStyle, t.lineWidth = c.lineWidth, t.lineJoin = c.lineJoin, t.miterLimit = c.miterLimit;
                for (var u = !0, _ = e._impl.cmds, f = 0, d = _.length; f < d; f++) {
                    var p = _[f],
                        m = p[0],
                        y = p[1];
                    "moveTo" === m && u ? (t.beginPath(), u = !1) : "fill" !== m && "stroke" !== m && "fillRect" !== m || (u = !0), "function" == typeof t[m] ? t[m].apply(t, y) : t[m] = y
                }
                return t.restore(), 1
            }, t.prototype.stroke = function(t) {
                t._impl.stroke()
            }, t.prototype.fill = function(t) {
                t._impl.fill()
            }, t.prototype.clear = function() {}, t
        })();
        i.default = a, n.default.register(r.default, a), e.exports = i.default
    }), {
        "../../../../graphics/graphics": 140,
        "../../../assembler": 227,
        "./impl": 234
    }],
    236: [(function(t, e, i) {
        "use strict";
        t("../../../components/CCSprite"), t("../../../components/CCLabel"), t("../../../components/CCMask"), t("../../../graphics/graphics"), t("./sprite"), t("./label"), t("./graphics"), t("./mask")
    }), {
        "../../../components/CCLabel": 97,
        "../../../components/CCMask": 101,
        "../../../components/CCSprite": 111,
        "../../../graphics/graphics": 140,
        "./graphics": 235,
        "./label": 238,
        "./mask": 240,
        "./sprite": 242
    }],
    237: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.default = void 0;
        var n = o(t("../../../utils/label/bmfont")),
            r = o(t("../render-data")),
            s = o(t("../utils"));

        function o(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }

        function a(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }

        function l(t, e) {
            if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
            return !e || "object" != typeof e && "function" != typeof e ? t : e
        }

        function h(t, e) {
            if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e);
            t.prototype = Object.create(e && e.prototype, {
                constructor: {
                    value: t,
                    enumerable: !1,
                    writable: !0,
                    configurable: !0
                }
            }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e)
        }
        var c = (function(t) {
            function e() {
                return a(this, e), l(this, t.apply(this, arguments))
            }
            return h(e, t), e.prototype.init = function() {
                this._renderData = new r.default
            }, e.prototype.updateColor = function() {}, e.prototype.appendQuad = function(t, e, i, n, r, s, o) {
                var a = this._renderData,
                    l = a.dataLength;
                a.dataLength += 2;
                var h = a.vertices,
                    c = i.width,
                    u = i.height,
                    _ = void 0,
                    f = void 0,
                    d = void 0,
                    p = void 0;
                n ? (_ = i.x, d = i.x + u, f = i.y, p = i.y + c, h[l].u = _, h[l].v = p, h[l + 1].u = _, h[l + 1].v = f) : (_ = i.x, d = i.x + c, f = i.y, p = i.y + u, h[l].u = _, h[l].v = f, h[l + 1].u = d, h[l + 1].v = p), h[l].x = r, h[l].y = s - u * o, h[l + 1].x = r + c * o, h[l + 1].y = s
            }, e.prototype.draw = function(t, e) {
                var i = e.node,
                    n = i._worldMatrix.m,
                    r = n[0],
                    o = n[1],
                    a = n[4],
                    l = n[5],
                    h = n[12],
                    c = n[13];
                t.transform(r, o, a, l, h, c), t.scale(1, -1), s.default.context.setGlobalAlpha(t, i.opacity / 255);
                for (var u = e._frame._texture, _ = this._renderData.vertices, f = s.default.getColorizedImage(u, i._color), d = 0, p = _.length; d < p; d += 2) {
                    var m = _[d].x,
                        y = _[d].y,
                        v = _[d + 1].x - m,
                        g = _[d + 1].y - y;
                    y = -y - g;
                    var x = _[d].u,
                        b = _[d].v,
                        A = _[d + 1].u - x,
                        C = _[d + 1].v - b;
                    t.drawImage(f, x, b, A, C, m, y, v, g)
                }
                return 1
            }, e
        })(n.default);
        i.default = c, e.exports = i.default
    }), {
        "../../../utils/label/bmfont": 251,
        "../render-data": 241,
        "../utils": 246
    }],
    238: [(function(t, e, i) {
        "use strict";
        var n = a(t("../../../assembler")),
            r = a(t("../../../../components/CCLabel")),
            s = a(t("./ttf")),
            o = a(t("./bmfont"));

        function a(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }
        var l = {
            pool: [],
            get: function() {
                var t = this.pool.pop();
                if (!t) {
                    var e = document.createElement("canvas");
                    t = {
                        canvas: e,
                        context: e.getContext("2d")
                    }
                }
                return t
            },
            put: function(t) {
                this.pool.length >= 32 || this.pool.push(t)
            }
        };
        r.default._canvasPool = l, n.default.register(r.default, {
            getConstructor: function(t) {
                var e = s.default;
                return t.font instanceof cc.BitmapFont ? e = o.default : t.cacheMode === r.default.CacheMode.CHAR && cc.warn("sorry, canvas mode does not support CHAR mode currently!"), e
            },
            TTF: s.default,
            Bmfont: o.default
        })
    }), {
        "../../../../components/CCLabel": 97,
        "../../../assembler": 227,
        "./bmfont": 237,
        "./ttf": 239
    }],
    239: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.default = void 0;
        var n = o(t("../../../utils/label/ttf")),
            r = o(t("../render-data")),
            s = o(t("../utils"));

        function o(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }

        function a(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }

        function l(t, e) {
            if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
            return !e || "object" != typeof e && "function" != typeof e ? t : e
        }

        function h(t, e) {
            if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e);
            t.prototype = Object.create(e && e.prototype, {
                constructor: {
                    value: t,
                    enumerable: !1,
                    writable: !0,
                    configurable: !0
                }
            }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e)
        }
        var c = (function(t) {
            function e() {
                return a(this, e), l(this, t.apply(this, arguments))
            }
            return h(e, t), e.prototype.init = function() {
                this._renderData = new r.default, this._renderData.dataLength = 2
            }, e.prototype.updateColor = function() {}, e.prototype.updateVerts = function(t) {
                var e = this._renderData,
                    i = t.node,
                    n = i.width,
                    r = i.height,
                    s = i.anchorX * n,
                    o = i.anchorY * r,
                    a = e.vertices;
                a[0].x = -s, a[0].y = -o, a[1].x = n - s, a[1].y = r - o
            }, e.prototype._updateTexture = function(t) {
                n.default.prototype._updateTexture.call(this, t);
                var e = t._frame._texture;
                s.default.dropColorizedImage(e, t.node.color)
            }, e.prototype.draw = function(t, e) {
                var i = e.node,
                    n = i._worldMatrix.m,
                    r = n[0],
                    o = n[1],
                    a = n[4],
                    l = n[5],
                    h = n[12],
                    c = n[13];
                t.transform(r, o, a, l, h, c), t.scale(1, -1), s.default.context.setGlobalAlpha(t, i.opacity / 255);
                var u = e._frame._texture,
                    _ = this._renderData.vertices,
                    f = u.getHtmlElementObj(),
                    d = _[0].x,
                    p = _[0].y,
                    m = _[1].x - d,
                    y = _[1].y - p;
                return p = -p - y, t.drawImage(f, d, p, m, y), 1
            }, e
        })(n.default);
        i.default = c, e.exports = i.default
    }), {
        "../../../utils/label/ttf": 254,
        "../render-data": 241,
        "../utils": 246
    }],
    240: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.default = void 0;
        var n = (function(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        })(t("../../assembler"));

        function r(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }

        function s(t, e) {
            if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
            return !e || "object" != typeof e && "function" != typeof e ? t : e
        }

        function o(t, e) {
            if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e);
            t.prototype = Object.create(e && e.prototype, {
                constructor: {
                    value: t,
                    enumerable: !1,
                    writable: !0,
                    configurable: !0
                }
            }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e)
        }
        var a = t("../../../components/CCMask"),
            l = (t("./graphics"), (function(t) {
                function e() {
                    return r(this, e), s(this, t.apply(this, arguments))
                }
                return o(e, t), e.prototype.draw = function(t, e) {
                    t.save(), e._graphics._assembler.draw(t, e._graphics), t.clip()
                }, e.prototype.postDraw = function(t, e) {
                    t.restore()
                }, e
            })(n.default));
        i.default = l, n.default.register(a, l), e.exports = i.default
    }), {
        "../../../components/CCMask": 101,
        "../../assembler": 227,
        "./graphics": 235
    }],
    241: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0;
        var n = (function() {
            function t(t, e) {
                for (var i = 0; i < e.length; i++) {
                    var n = e[i];
                    n.enumerable = n.enumerable || !1, n.configurable = !0, "value" in n && (n.writable = !0), Object.defineProperty(t, n.key, n)
                }
            }
            return function(e, i, n) {
                return i && t(e.prototype, i), n && t(e, n), e
            }
        })();

        function r(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }
        var s = (function() {
            function t() {
                r(this, t), this.vertices = []
            }
            return n(t, [{
                key: "dataLength",
                get: function() {
                    return this.vertices.length
                },
                set: function(t) {
                    var e = this.vertices.length;
                    this.vertices.length = t;
                    for (var i = e; i < t; i++) this.vertices[i] = {
                        x: 0,
                        y: 0,
                        u: 0,
                        v: 0
                    }
                }
            }]), t
        })();
        i.default = s, e.exports = i.default
    }), {}],
    242: [(function(t, e, i) {
        "use strict";
        var n = l(t("../../../assembler")),
            r = t("../../../../components/CCSprite"),
            s = l(t("./simple")),
            o = l(t("./sliced")),
            a = l(t("./tiled"));

        function l(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }
        var h = {
            getConstructor: function(t) {
                var e = s.default;
                switch (t.type) {
                    case r.Type.SLICED:
                        e = o.default;
                        break;
                    case r.Type.TILED:
                        e = a.default
                }
                return e
            },
            Simple: s.default,
            Sliced: o.default,
            Tiled: a.default
        };
        n.default.register(cc.Sprite, h)
    }), {
        "../../../../components/CCSprite": 111,
        "../../../assembler": 227,
        "./simple": 243,
        "./sliced": 244,
        "./tiled": 245
    }],
    243: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.default = void 0;
        var n = s(t("../../../assembler")),
            r = s(t("../render-data"));

        function s(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }

        function o(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }

        function a(t, e) {
            if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
            return !e || "object" != typeof e && "function" != typeof e ? t : e
        }

        function l(t, e) {
            if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e);
            t.prototype = Object.create(e && e.prototype, {
                constructor: {
                    value: t,
                    enumerable: !1,
                    writable: !0,
                    configurable: !0
                }
            }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e)
        }
        var h = t("../utils"),
            c = (function(t) {
                function e() {
                    return o(this, e), a(this, t.apply(this, arguments))
                }
                return l(e, t), e.prototype.init = function() {
                    this._renderData = new r.default, this._renderData.dataLength = 2
                }, e.prototype.updateRenderData = function(t) {
                    t._vertsDirty && (this.updateUVs(t), this.updateVerts(t), t._vertsDirty = !1)
                }, e.prototype.updateUVs = function(t) {
                    var e = t.spriteFrame,
                        i = this._renderData.vertices,
                        n = e._rect;
                    if (e._rotated) {
                        var r = n.x,
                            s = n.width,
                            o = n.y,
                            a = n.height;
                        i[0].u = r, i[0].v = o, i[1].u = a, i[1].v = s
                    } else {
                        var l = n.x,
                            h = n.width,
                            c = n.y,
                            u = n.height;
                        i[0].u = l, i[0].v = c, i[1].u = h, i[1].v = u
                    }
                }, e.prototype.updateVerts = function(t) {
                    var e = this._renderData,
                        i = t.node,
                        n = e.vertices,
                        r = t.spriteFrame,
                        s = i.width,
                        o = i.height,
                        a = i.anchorX * s,
                        l = i.anchorY * o,
                        h = void 0,
                        c = void 0,
                        u = void 0,
                        _ = void 0;
                    if (t.trim) h = -a, c = -l, u = s, _ = o;
                    else {
                        var f = r._originalSize.width,
                            d = r._originalSize.height,
                            p = r._rect.width,
                            m = r._rect.height,
                            y = r._offset,
                            v = s / f,
                            g = o / d;
                        h = (y.x + (f - p) / 2) * v - a, c = (y.y + (d - m) / 2) * g - l, u = s, _ = o
                    }
                    r._rotated ? (n[0].y = h, n[0].x = c, n[1].y = u, n[1].x = _) : (n[0].x = h, n[0].y = c, n[1].x = u, n[1].y = _), e.vertDirty = !1
                }, e.prototype.draw = function(t, e) {
                    var i = e.node,
                        n = e._spriteFrame,
                        r = i._worldMatrix.m,
                        s = r[0],
                        o = r[1],
                        a = r[4],
                        l = r[5],
                        c = r[12],
                        u = r[13];
                    t.transform(s, o, a, l, c, u), t.scale(1, -1), n._rotated && t.rotate(-Math.PI / 2), h.context.setGlobalAlpha(t, i.opacity / 255);
                    var _ = n._texture,
                        f = this._renderData.vertices,
                        d = h.getColorizedImage(_, i._color),
                        p = f[0].x,
                        m = f[0].y,
                        y = f[1].x,
                        v = f[1].y;
                    m = -m - v;
                    var g = f[0].u,
                        x = f[0].v,
                        b = f[1].u,
                        A = f[1].v;
                    return t.drawImage(d, g, x, b, A, p, m, y, v), 1
                }, e
            })(n.default);
        i.default = c, e.exports = i.default
    }), {
        "../../../assembler": 227,
        "../render-data": 241,
        "../utils": 246
    }],
    244: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.default = void 0;
        s(t("../../../assembler"));
        var n = s(t("../render-data")),
            r = s(t("./simple"));

        function s(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }

        function o(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }

        function a(t, e) {
            if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
            return !e || "object" != typeof e && "function" != typeof e ? t : e
        }

        function l(t, e) {
            if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e);
            t.prototype = Object.create(e && e.prototype, {
                constructor: {
                    value: t,
                    enumerable: !1,
                    writable: !0,
                    configurable: !0
                }
            }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e)
        }
        var h = t("../utils"),
            c = (function(t) {
                function e() {
                    return o(this, e), a(this, t.apply(this, arguments))
                }
                return l(e, t), e.prototype.init = function() {
                    this._renderData = new n.default, this._renderData.dataLength = 4
                }, e.prototype.updateUVs = function(t) {
                    var e = t.spriteFrame,
                        i = this._renderData,
                        n = e._rect,
                        r = e.insetLeft,
                        s = e.insetRight,
                        o = n.width - r - s,
                        a = e.insetTop,
                        l = e.insetBottom,
                        h = n.height - a - l,
                        c = i.vertices;
                    e._rotated ? (c[0].u = n.x, c[1].u = l + n.x, c[2].u = l + h + n.x, c[3].u = n.x + n.height, c[3].v = n.y, c[2].v = r + n.y, c[1].v = r + o + n.y, c[0].v = n.y + n.width) : (c[0].u = n.x, c[1].u = r + n.x, c[2].u = r + o + n.x, c[3].u = n.x + n.width, c[3].v = n.y, c[2].v = a + n.y, c[1].v = a + h + n.y, c[0].v = n.y + n.height)
                }, e.prototype.updateVerts = function(t) {
                    var e = this._renderData.vertices,
                        i = t.node,
                        n = i.width,
                        r = i.height,
                        s = i.anchorX * n,
                        o = i.anchorY * r,
                        a = t.spriteFrame,
                        l = a.insetLeft,
                        h = a.insetRight,
                        c = a.insetTop,
                        u = a.insetBottom,
                        _ = n - l - h,
                        f = r - c - u,
                        d = n / (l + h),
                        p = r / (c + u);
                    d = isNaN(d) || d > 1 ? 1 : d, p = isNaN(p) || p > 1 ? 1 : p, _ = _ < 0 ? 0 : _, f = f < 0 ? 0 : f, a._rotated ? (e[0].y = -s, e[0].x = -o, e[1].y = h * d - s, e[1].x = u * p - o, e[2].y = e[1].y + _, e[2].x = e[1].x + f, e[3].y = n - s, e[3].x = r - o) : (e[0].x = -s, e[0].y = -o, e[1].x = l * d - s, e[1].y = u * p - o, e[2].x = e[1].x + _, e[2].y = e[1].y + f, e[3].x = n - s, e[3].y = r - o), t._vertsDirty = !1
                }, e.prototype.draw = function(t, e) {
                    var i = e.node,
                        n = e._spriteFrame,
                        r = i._worldMatrix.m,
                        s = r[0],
                        o = r[1],
                        a = r[4],
                        l = r[5],
                        c = r[12],
                        u = r[13];
                    t.transform(s, o, a, l, c, u), t.scale(1, -1), n._rotated && t.rotate(-Math.PI / 2), h.context.setGlobalAlpha(t, i.opacity / 255);
                    for (var _ = n._texture, f = this._renderData.vertices, d = h.getColorizedImage(_, i._color), p = 0, m = void 0, y = void 0, v = void 0, g = void 0, x = void 0, b = void 0, A = void 0, C = void 0, T = void 0, S = void 0, w = void 0, E = void 0, M = 0; M < 3; ++M) {
                        g = f[M], v = f[M + 1];
                        for (var D = 0; D < 3; ++D) m = f[D], y = f[D + 1], x = m.x, b = g.y, A = y.x - x, b = -b - (C = v.y - b), T = m.u, S = v.v, w = y.u - T, E = g.v - S, w > 0 && E > 0 && A > 0 && C > 0 && (t.drawImage(d, T, S, w, E, x, b, A, C), p++)
                    }
                    return p
                }, e
            })(r.default);
        i.default = c, e.exports = i.default
    }), {
        "../../../assembler": 227,
        "../render-data": 241,
        "../utils": 246,
        "./simple": 243
    }],
    245: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.default = void 0;
        var n = (function(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        })(t("../../../assembler"));

        function r(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }

        function s(t, e) {
            if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
            return !e || "object" != typeof e && "function" != typeof e ? t : e
        }

        function o(t, e) {
            if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e);
            t.prototype = Object.create(e && e.prototype, {
                constructor: {
                    value: t,
                    enumerable: !1,
                    writable: !0,
                    configurable: !0
                }
            }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e)
        }
        var a = t("../utils"),
            l = (function(t) {
                function e() {
                    return r(this, e), s(this, t.apply(this, arguments))
                }
                return o(e, t), e.prototype.draw = function(t, e) {
                    var i = e.node,
                        n = i._worldMatrix.m,
                        r = n[0],
                        s = n[1],
                        o = n[4],
                        l = n[5],
                        h = n[12],
                        c = n[13];
                    t.transform(r, s, o, l, h, c), t.scale(1, -1), a.context.setGlobalAlpha(t, i.opacity / 255);
                    var u = e.spriteFrame,
                        _ = u._rect,
                        f = u._texture,
                        d = _.x,
                        p = _.y,
                        m = u._rotated ? _.height : _.width,
                        y = u._rotated ? _.width : _.height,
                        v = a.getFrameCache(f, i._color, d, p, m, y),
                        g = i.width,
                        x = i.height,
                        b = -i.anchorX * g,
                        A = -i.anchorY * x;
                    return A = -A - x, t.translate(b, A), t.fillStyle = t.createPattern(v, "repeat"), t.fillRect(0, 0, g, x), 1
                }, e
            })(n.default);
        i.default = l, e.exports = i.default
    }), {
        "../../../assembler": 227,
        "../utils": 246
    }],
    246: [(function(t, e, i) {
        "use strict";

        function n(t, e, i, n, r, s, o) {
            var a = e._image,
                l = t.getContext("2d");
            return t.width = s, t.height = o, l.globalCompositeOperation = "source-over", l.fillStyle = "rgb(" + i.r + "," + i.g + "," + i.b + ")", l.fillRect(0, 0, s, o), l.globalCompositeOperation = "multiply", l.drawImage(a, n, r, s, o, 0, 0, s, o), l.globalCompositeOperation = "destination-atop", l.drawImage(a, n, r, s, o, 0, 0, s, o), t
        }
        var r = {
            canvasMap: {},
            canvasUsed: {},
            canvasPool: [],
            checking: !1,
            check: function() {
                var t = !1;
                for (var e in this.canvasUsed)
                    if (t = !0, this.canvasUsed[e]) this.canvasUsed[e] = !1;
                    else {
                        var i = this.canvasMap[e];
                        i.width = 0, i.height = 0, this.canvasPool.length < 32 && this.canvasPool.push(i), delete this.canvasMap[e], delete this.canvasUsed[e]
                    }
                t || (cc.director.off(cc.Director.EVENT_AFTER_DRAW, this.check, this), this.checking = !1)
            },
            startCheck: function() {
                cc.director.on(cc.Director.EVENT_AFTER_DRAW, this.check, this), this.checking = !0
            },
            getCanvas: function(t) {
                return this.canvasUsed[t] = !0, this.canvasMap[t]
            },
            cacheCanvas: function(t, e) {
                this.canvasMap[e] = t, this.canvasUsed[e] = !0, this.checking || this.startCheck()
            },
            dropImage: function(t) {
                this.canvasMap[t] && delete this.canvasMap[t]
            }
        };
        e.exports = {
            getColorizedImage: function(t, e) {
                if (!t) return null;
                if (0 === t.width || 0 === t.height) return t._image;
                var i = 16777215 & e._val;
                if (16777215 === i) return t._image;
                var s = t.url + i,
                    o = r.getCanvas(s);
                return o || (n(o = r.canvasPool.pop() || document.createElement("canvas"), t, e, 0, 0, t.width, t.height), r.cacheCanvas(o, s)), o
            },
            getFrameCache: function(t, e, i, s, o, a) {
                if (!t || !t.url || i < 0 || s < 0 || o <= 0 || a <= 0) return null;
                var l = t.url,
                    h = !1,
                    c = 16777215 & e._val;
                if (16777215 !== c && (l += c, h = !0), (0 !== i || 0 !== s && o !== t.width && a !== t.height) && (l += "_" + i + "_" + s + "_" + o + "_" + a, h = !0), !h) return t._image;
                var u = r.getCanvas(l);
                return u || (n(u = r.canvasPool.pop() || document.createElement("canvas"), t, e, i, s, o, a), r.cacheCanvas(u, l)), u
            },
            dropColorizedImage: function(t, e) {
                var i = t.url + (16777215 & e._val);
                r.dropImage(i)
            }
        };
        var s = -1,
            o = {
                setGlobalAlpha: function(t, e) {
                    s !== e && (s = e, t.globalAlpha = s)
                },
                reset: function() {
                    s = -1
                }
            };
        e.exports.context = o
    }), {}],
    247: [(function(t, e, i) {
        "use strict";
        var n = a(t("../../renderer/config")),
            r = a(t("../../renderer/gfx")),
            s = a(t("../../renderer/core/input-assembler")),
            o = a(t("../../renderer/core/pass"));

        function a(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }

        function l(t) {
            return {
                defaultTexture: new r.default.Texture2D(t, {
                    images: [],
                    width: 128,
                    height: 128,
                    wrapS: r.default.WRAP_REPEAT,
                    wrapT: r.default.WRAP_REPEAT,
                    format: r.default.TEXTURE_FMT_RGB8,
                    mipmap: !1
                }),
                programTemplates: [],
                programChunks: {}
            }
        }
        cc.renderer = e.exports = {
            Texture2D: null,
            InputAssembler: s.default,
            Pass: o.default,
            renderEngine: null,
            canvas: null,
            device: null,
            scene: null,
            drawCalls: 0,
            _handle: null,
            _cameraNode: null,
            _camera: null,
            _forward: null,
            _flow: null,
            initWebGL: function(e, i) {
                t("./webgl/assemblers");
                var s = t("./webgl/model-batcher");
                this.Texture2D = r.default.Texture2D, this.canvas = e, this._flow = cc.RenderFlow;
                var o = t("../../renderer/scene/scene"),
                    a = t("../../renderer/renderers/forward-renderer");
                this.device = new r.default.Device(e, i), this.scene = new o;
                var h = l(this.device);
                this._forward = new a(this.device, h), this._handle = new s(this.device, this.scene), this._flow.init(this._handle, this._forward), n.default.addStage("shadowcast"), n.default.addStage("opaque"), n.default.addStage("transparent")
            },
            initCanvas: function(e) {
                var i = t("./canvas"),
                    n = t("./canvas/Texture2D"),
                    r = t("./canvas/Device");
                this.Device = r, this.Texture2D = n, this.canvas = e, this.device = new r(e), this._camera = {
                    a: 1,
                    b: 0,
                    c: 0,
                    d: 1,
                    tx: 0,
                    ty: 0
                }, this._handle = new i.RenderComponentHandle(this.device, this._camera), this._forward = new i.ForwardRenderer, this._flow = cc.RenderFlow, this._flow.init(this._handle, this._forward)
            },
            updateCameraViewport: function() {
                if (cc.director) {
                    var t = cc.director.getScene();
                    t && t.setScale(1, 1, 1)
                }
                if (cc.game.renderType === cc.game.RENDER_TYPE_CANVAS) {
                    var e = cc.view.getViewportRect();
                    this.device.setViewport(e.x, e.y, e.width, e.height), this._camera.a = cc.view.getScaleX(), this._camera.d = cc.view.getScaleY(), this._camera.tx = e.x, this._camera.ty = e.y + e.height
                }
            },
            render: function(t, e) {
                this.device.resetDrawCalls(), t && (this._flow.render(t, e), this.drawCalls = this.device.getDrawCalls())
            },
            clear: function() {
                this._handle.reset(), this._forward.clear()
            }
        }
    }), {
        "../../renderer/config": 347,
        "../../renderer/core/input-assembler": 350,
        "../../renderer/core/pass": 351,
        "../../renderer/gfx": 360,
        "../../renderer/renderers/forward-renderer": 379,
        "../../renderer/scene/scene": 383,
        "./canvas": 231,
        "./canvas/Device": 228,
        "./canvas/Texture2D": 229,
        "./webgl/assemblers": 259,
        "./webgl/model-batcher": 284
    }],
    248: [(function(t, e, i) {
        "use strict";
        var n = 0,
            r = 1 << n++,
            s = 1 << n++,
            o = 1 << n++,
            a = 1 << n++,
            l = o | a,
            h = 1 << n++,
            c = 1 << n++,
            u = 1 << n++,
            _ = c | u,
            f = 1 << n++,
            d = 1 << n++,
            p = 1 << n++,
            m = 1 << n++,
            y = void 0,
            v = void 0,
            g = 0;

        function x() {
            this._func = w, this._next = null
        }
        var b = x.prototype;
        b._doNothing = function() {}, b._localTransform = function(t) {
            t._updateLocalMatrix(), t._renderFlag &= ~o, this._next._func(t)
        }, b._worldTransform = function(t) {
            y.worldMatDirty++;
            var e = t._matrix,
                i = t._trs,
                n = e.m;
            n[12] = i[0], n[13] = i[1], n[14] = i[2], t._mulMat(t._worldMatrix, t._parent._worldMatrix, e), t._renderFlag &= ~a, this._next._func(t), y.worldMatDirty--
        }, b._opacity = function(t) {
            y.parentOpacityDirty++, t._renderFlag &= ~c, this._next._func(t), y.parentOpacityDirty--
        }, b._color = function(t) {
            var e = t._renderComponent;
            e && e._updateColor(), t._renderFlag &= ~u, this._next._func(t)
        }, b._updateRenderData = function(t) {
            var e = t._renderComponent;
            e._assembler.updateRenderData(e), t._renderFlag &= ~h, this._next._func(t)
        }, b._render = function(t) {
            var e = t._renderComponent;
            e._checkBacth(y, t._cullingMask), e._assembler.fillBuffers(e, y), this._next._func(t)
        }, b._children = function(t) {
            for (var e = g, i = y, n = i.parentOpacity, r = i.parentOpacity *= t._opacity / 255, s = (i.worldMatDirty ? a : 0) | (i.parentOpacityDirty ? _ : 0), o = t._children, l = 0, h = o.length; l < h; l++) {
                var c = o[l];
                if (c._renderFlag |= s, c._activeInHierarchy && 0 !== c._opacity) {
                    g = c._cullingMask = 0 === c.groupIndex ? e : 1 << c.groupIndex;
                    var u = c._color._val;
                    c._color._fastSetA(c._opacity * r), C[c._renderFlag]._func(c), c._color._val = u
                }
            }
            i.parentOpacity = n, this._next._func(t)
        }, b._postRender = function(t) {
            var e = t._renderComponent;
            e._checkBacth(y, t._cullingMask), e._assembler.postFillBuffers(e, y), this._next._func(t)
        };
        var A = new x;
        A._func = A._doNothing, A._next = A;
        var C = {};

        function T(t, e) {
            var i = new x;
            switch (i._next = e || A, t) {
                case r:
                case s:
                    i._func = i._doNothing;
                    break;
                case o:
                    i._func = i._localTransform;
                    break;
                case a:
                    i._func = i._worldTransform;
                    break;
                case c:
                    i._func = i._opacity;
                    break;
                case u:
                    i._func = i._color;
                    break;
                case h:
                    i._func = i._updateRenderData;
                    break;
                case f:
                    i._func = i._render;
                    break;
                case d:
                    i._func = i._children;
                    break;
                case p:
                    i._func = i._postRender
            }
            return i
        }

        function S(t) {
            for (var e = null, i = m; i > 0;) i & t && (e = T(i, e)), i >>= 1;
            return e
        }

        function w(t) {
            var e = t._renderFlag;
            (C[e] = S(e))._func(t)
        }
        x.flows = C, x.createFlow = T, x.visitRootNode = function(t) {
            g = 1 << t.groupIndex, t._renderFlag & a ? (y.worldMatDirty++, t._calculWorldMatrix(), t._renderFlag &= ~a, C[t._renderFlag]._func(t), y.worldMatDirty--) : C[t._renderFlag]._func(t)
        }, x.render = function(t, e) {
            y.reset(), y.walking = !0, x.visitRootNode(t), y.terminate(), y.walking = !1, v.render(y._renderScene, e)
        }, x.init = function(t, e) {
            y = t, v = e, C[0] = A;
            for (var i = 1; i < m; i++) C[i] = new x
        }, x.getBachther = function() {
            return y
        }, x.FLAG_DONOTHING = r, x.FLAG_BREAK_FLOW = s, x.FLAG_LOCAL_TRANSFORM = o, x.FLAG_WORLD_TRANSFORM = a, x.FLAG_TRANSFORM = l, x.FLAG_OPACITY = c, x.FLAG_COLOR = u, x.FLAG_OPACITY_COLOR = _, x.FLAG_UPDATE_RENDER_DATA = h, x.FLAG_RENDER = f, x.FLAG_CHILDREN = d, x.FLAG_POST_RENDER = p, x.FLAG_FINAL = m, e.exports = cc.RenderFlow = x
    }), {}],
    249: [(function(t, e, i) {
        "use strict";
        var n = t("../../../assets/CCRenderTexture"),
            r = 2;

        function s(t, e) {
            var i = new n;
            i.initWithSize(t, e), i.update(), this._texture = i, this._x = r, this._y = r, this._nexty = r, this._width = t, this._height = e, this._innerTextureInfos = {}, this._innerSpriteFrames = []
        }
        s.DEFAULT_HASH = (new n)._getHash(), cc.js.mixin(s.prototype, {
            insertSpriteFrame: function(t) {
                var e = t._rect,
                    i = t._texture,
                    n = this._innerTextureInfos[i._id],
                    s = e.x,
                    o = e.y;
                if (n) s += n.x, o += n.y;
                else {
                    var a = i.width,
                        l = i.height;
                    if (this._x + a + r > this._width && (this._x = r, this._y = this._nexty), this._y + l + r > this._nexty && (this._nexty = this._y + l + r), this._nexty > this._height) return null;
                    cc.dynamicAtlasManager.textureBleeding && (this._texture.drawTextureAt(i, this._x - 1, this._y), this._texture.drawTextureAt(i, this._x + 1, this._y), this._texture.drawTextureAt(i, this._x, this._y - 1), this._texture.drawTextureAt(i, this._x, this._y + 1)), this._texture.drawTextureAt(i, this._x, this._y), this._innerTextureInfos[i._id] = {
                        x: this._x,
                        y: this._y,
                        texture: i
                    }, s += this._x, o += this._y, this._x += a + r, this._dirty = !0
                }
                var h = {
                    x: s,
                    y: o,
                    texture: this._texture
                };
                return this._innerSpriteFrames.push(t), h
            },
            update: function() {
                this._dirty && (this._texture.update(), this._dirty = !1)
            },
            deleteInnerTexture: function(t) {
                t && delete this._innerTextureInfos[t._id]
            },
            reset: function() {
                this._x = r, this._y = r, this._nexty = r;
                for (var t = this._innerSpriteFrames, e = 0, i = t.length; e < i; e++) {
                    var n = t[e];
                    n.isValid && n._resetDynamicAtlasFrame()
                }
                this._innerSpriteFrames.length = 0, this._innerTextureInfos = {}
            },
            destroy: function() {
                this.reset(), this._texture.destroy()
            }
        }), e.exports = s
    }), {
        "../../../assets/CCRenderTexture": 66
    }],
    250: [(function(t, e, i) {
        "use strict";
        var n = t("./atlas"),
            r = [],
            s = -1,
            o = 5,
            a = 2048,
            l = 8,
            h = 512,
            c = !0;

        function u() {
            var t = r[++s];
            return t || (t = new n(a, a), r.push(t)), t
        }

        function _() {
            d.reset()
        }
        var f = !1,
            d = {
                Atlas: n,
                get enabled() {
                    return f
                },
                set enabled(t) {
                    f !== t && (t ? (this.reset(), cc.director.on(cc.Director.EVENT_BEFORE_SCENE_LAUNCH, _)) : cc.director.off(cc.Director.EVENT_BEFORE_SCENE_LAUNCH, _), f = t)
                },
                get maxAtlasCount() {
                    return o
                },
                set maxAtlasCount(t) {
                    o = t
                },
                get textureBleeding() {
                    return c
                },
                set textureBleeding(t) {
                    c = t
                },
                get textureSize() {
                    return a
                },
                set textureSize(t) {
                    a = t
                },
                get maxFrameSize() {
                    return h
                },
                set maxFrameSize(t) {
                    h = t
                },
                get minFrameSize() {
                    return l
                },
                set minFrameSize(t) {
                    l = t
                },
                insertSpriteFrame: function(t) {
                    if (!f || s === o || !t || t._original) return null;
                    if (!t._texture.packable) return null;
                    var e = r[s];
                    e || (e = u());
                    var i = e.insertSpriteFrame(t);
                    return i || s === o ? i : (e = u()).insertSpriteFrame(t)
                },
                reset: function() {
                    for (var t = 0, e = r.length; t < e; t++) r[t].destroy();
                    r.length = 0, s = -1
                },
                deleteAtlasTexture: function(t) {
                    if (t._original) {
                        var e = t._original._texture;
                        if (e)
                            for (var i = 0, n = r.length; i < n; i++) r[i].deleteInnerTexture(e)
                    }
                },
                showDebug: !1,
                update: function() {
                    if (this.enabled)
                        for (var t = 0; t <= s; t++) r[t].update()
                }
            };
        e.exports = cc.dynamicAtlasManager = d
    }), {
        "./atlas": 249
    }],
    251: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.default = void 0;
        var n = (function(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        })(t("../../assembler-2d"));

        function r(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }

        function s(t, e) {
            if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
            return !e || "object" != typeof e && "function" != typeof e ? t : e
        }

        function o(t, e) {
            if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e);
            t.prototype = Object.create(e && e.prototype, {
                constructor: {
                    value: t,
                    enumerable: !1,
                    writable: !0,
                    configurable: !0
                }
            }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e)
        }
        var a = t("../../../utils/text-utils"),
            l = t("../../../platform/CCMacro"),
            h = t("../../../components/CCLabel").Overflow,
            c = t("../utils").shareLabelInfo,
            u = function() {
                this.char = "", this.valid = !0, this.x = 0, this.y = 0, this.line = 0, this.hash = ""
            },
            _ = cc.rect(),
            f = null,
            d = [],
            p = [],
            m = [],
            y = [],
            v = null,
            g = 0,
            x = 0,
            b = 0,
            A = 0,
            C = 0,
            T = 1,
            S = null,
            w = cc.size(),
            E = "",
            M = 0,
            D = 0,
            B = 0,
            I = 0,
            P = 0,
            R = 0,
            O = 0,
            L = !1,
            F = 0,
            N = 0,
            V = 0,
            k = (function(t) {
                function e() {
                    return r(this, e), s(this, t.apply(this, arguments))
                }
                return o(e, t), e.prototype.updateRenderData = function(t) {
                    t._vertsDirty && f !== t && (f = t, this._reserveQuads(t, t.string.toString().length), this._updateFontFamily(t), this._updateProperties(t), this._updateLabelInfo(t), this._updateContent(), this.updateWorldVerts(t), f._actualFontSize = M, f.node.setContentSize(w), f._vertsDirty = !1, f = null, this._resetProperties())
                }, e.prototype._updateFontScale = function() {
                    T = M / D
                }, e.prototype._updateFontFamily = function(t) {
                    var e = t.font;
                    S = e.spriteFrame, v = e._fntConfig, c.fontAtlas = e._fontDefDictionary
                }, e.prototype._updateLabelInfo = function() {
                    c.hash = "", c.margin = 0
                }, e.prototype._updateProperties = function(t) {
                    E = t.string.toString(), M = t.fontSize, D = v ? v.fontSize : t.fontSize, B = t.horizontalAlign, I = t.verticalAlign, P = t.spacingX, O = t.overflow, R = t._lineHeight, w.width = t.node.width, w.height = t.node.height, O === h.NONE ? (L = !1, w.width += 2 * c.margin, w.height += 2 * c.margin) : O === h.RESIZE_HEIGHT ? (L = !0, w.height += 2 * c.margin) : L = t.enableWrapText, c.lineHeight = R, c.fontSize = M, this._setupBMFontOverflowMetrics()
                }, e.prototype._resetProperties = function() {
                    v = null, S = null, c.hash = "", c.margin = 0
                }, e.prototype._updateContent = function() {
                    this._updateFontScale(), this._computeHorizontalKerningForText(), this._alignText()
                }, e.prototype._computeHorizontalKerningForText = function() {
                    for (var t = E, e = t.length, i = v.kerningDict, n = d, r = -1, s = 0; s < e; ++s) {
                        var o = t.charCodeAt(s),
                            a = i[r << 16 | 65535 & o] || 0;
                        n[s] = s < e - 1 ? a : 0, r = o
                    }
                }, e.prototype._multilineTextWrap = function(t) {
                    for (var e = E.length, i = 0, n = 0, r = 0, s = 0, o = 0, l = 0, h = 0, u = null, _ = cc.v2(0, 0), f = 0; f < e;) {
                        var p = E.charAt(f);
                        if ("\n" !== p) {
                            for (var y = t(E, f, e), b = l, S = h, M = o, D = n, B = !1, I = 0; I < y; ++I) {
                                var O = f + I;
                                if ("\r" !== (p = E.charAt(O)))
                                    if (u = c.fontAtlas.getLetterDefinitionForChar(p, c)) {
                                        var k = D + u.offsetX * T - c.margin;
                                        if (L && V > 0 && n > 0 && k + u.w * T > V && !a.isUnicodeSpace(p)) {
                                            m.push(o), o = 0, i++, n = 0, r -= R * T + 0, B = !0;
                                            break
                                        }
                                        _.x = k, _.y = r - u.offsetY * T + c.margin, this._recordLetterInfo(_, p, O, i), O + 1 < d.length && O < e - 1 && (D += d[O + 1]), D += u.xAdvance * T + P - 2 * c.margin, M = _.x + u.w * T - c.margin, b < _.y && (b = _.y), S > _.y - u.h * T && (S = _.y - u.h * T)
                                    } else this._recordPlaceholderInfo(O, p), console.log("Can't find letter definition in texture atlas " + v.atlasName + " for letter:" + p);
                                else this._recordPlaceholderInfo(O, p)
                            }
                            B || (n = D, o = M, l < b && (l = b), h > S && (h = S), s < o && (s = o), f += y)
                        } else m.push(o), o = 0, i++, n = 0, r -= R * T + 0, this._recordPlaceholderInfo(f, p), f++
                    }
                    return m.push(o), x = (g = i + 1) * R * T, g > 1 && (x += 0 * (g - 1)), w.width = F, w.height = N, F <= 0 && (w.width = parseFloat(s.toFixed(2)) + 2 * c.margin), N <= 0 && (w.height = parseFloat(x.toFixed(2)) + 2 * c.margin), A = w.height, C = 0, l > 0 && (A = w.height + l), h < -x && (C = x + h), !0
                }, e.prototype._getFirstCharLen = function() {
                    return 1
                }, e.prototype._getFirstWordLen = function(t, e, i) {
                    var n = t.charAt(e);
                    if (a.isUnicodeCJK(n) || "\n" === n || a.isUnicodeSpace(n)) return 1;
                    var r = 1,
                        s = c.fontAtlas.getLetterDefinitionForChar(n, c);
                    if (!s) return r;
                    for (var o = s.xAdvance * T + P, l = e + 1; l < i && (n = t.charAt(l), s = c.fontAtlas.getLetterDefinitionForChar(n, c)); ++l) {
                        if (o + s.offsetX * T + s.w * T > V && !a.isUnicodeSpace(n) && V > 0) return r;
                        if (o += s.xAdvance * T + P, "\n" === n || a.isUnicodeSpace(n) || a.isUnicodeCJK(n)) break;
                        r++
                    }
                    return r
                }, e.prototype._multilineTextWrapByWord = function() {
                    return this._multilineTextWrap(this._getFirstWordLen)
                }, e.prototype._multilineTextWrapByChar = function() {
                    return this._multilineTextWrap(this._getFirstCharLen)
                }, e.prototype._recordPlaceholderInfo = function(t, e) {
                    if (t >= p.length) {
                        var i = new u;
                        p.push(i)
                    }
                    p[t].char = e, p[t].hash = e.charCodeAt(0) + c.hash, p[t].valid = !1
                }, e.prototype._recordLetterInfo = function(t, e, i, n) {
                    if (i >= p.length) {
                        var r = new u;
                        p.push(r)
                    }
                    var s = e.charCodeAt(0) + c.hash;
                    p[i].line = n, p[i].char = e, p[i].hash = s, p[i].valid = c.fontAtlas.getLetter(s).valid, p[i].x = t.x, p[i].y = t.y
                }, e.prototype._alignText = function() {
                    x = 0, m.length = 0, this._multilineTextWrapByWord(), this._computeAlignmentOffset(), O === h.SHRINK && M > 0 && this._isVerticalClamp() && this._shrinkLabelToContentSize(this._isVerticalClamp), this._updateQuads() || O === h.SHRINK && this._shrinkLabelToContentSize(this._isHorizontalClamp)
                }, e.prototype._scaleFontSizeDown = function(t) {
                    var e = !0;
                    t || (t = .1, e = !1), M = t, e && this._updateContent()
                }, e.prototype._shrinkLabelToContentSize = function(t) {
                    for (var e = M, i = 0, n = !0; t();) {
                        var r = e - ++i;
                        if (n = !1, r <= 0) break;
                        T = r / D, this._multilineTextWrapByWord(), this._computeAlignmentOffset()
                    }
                    n || e - i >= 0 && this._scaleFontSizeDown(e - i)
                }, e.prototype._isVerticalClamp = function() {
                    return x > w.height
                }, e.prototype._isHorizontalClamp = function() {
                    for (var t = !1, e = 0, i = E.length; e < i; ++e) {
                        var n = p[e];
                        if (n.valid) {
                            var r = c.fontAtlas.getLetter(n.hash),
                                s = n.x + r.w * T,
                                o = n.line;
                            if (F > 0)
                                if (L) {
                                    if (m[o] > w.width && (s > w.width || s < 0)) {
                                        t = !0;
                                        break
                                    }
                                } else if (s > w.width) {
                                t = !0;
                                break
                            }
                        }
                    }
                    return t
                }, e.prototype._isHorizontalClamped = function(t, e) {
                    var i = m[e],
                        n = t > w.width || t < 0;
                    return L ? i > w.width && n : n
                }, e.prototype._updateQuads = function() {
                    var t = c.fontAtlas.getTexture(),
                        e = f.node;
                    this.verticesCount = this.indicesCount = 0, this._renderData && (this._renderData.dataLength = 0);
                    for (var i = w, n = e._anchorPoint.x * i.width, r = e._anchorPoint.y * i.height, s = !0, o = 0, a = E.length; o < a; ++o) {
                        var l = p[o];
                        if (l.valid) {
                            var u = c.fontAtlas.getLetter(l.hash);
                            _.height = u.h, _.width = u.w, _.x = u.u, _.y = u.v;
                            var d = l.y + b;
                            if (N > 0) {
                                if (d > A) {
                                    var m = d - A;
                                    _.y += m, _.height -= m, d -= m
                                }
                                d - u.h * T < C && O === h.CLAMP && (_.height = d < C ? 0 : d - C)
                            }
                            var v = l.line,
                                g = l.x + u.w / 2 * T + y[v];
                            if (F > 0 && this._isHorizontalClamped(g, v))
                                if (O === h.CLAMP) _.width = 0;
                                else if (O === h.SHRINK) {
                                if (w.width > u.w) {
                                    s = !1;
                                    break
                                }
                                _.width = 0
                            }
                            if (_.height > 0 && _.width > 0) {
                                var x = this._determineRect(_),
                                    S = l.x + y[l.line];
                                this.appendQuad(f, t, _, x, S - n, d - r, T)
                            }
                        }
                    }
                    return this._quadsUpdated(f), s
                }, e.prototype._determineRect = function(t) {
                    var e = S.isRotated(),
                        i = S._originalSize,
                        n = S._rect,
                        r = S._offset,
                        s = r.x + (i.width - n.width) / 2,
                        o = r.y - (i.height - n.height) / 2;
                    if (e) {
                        var a = t.x;
                        t.x = n.x + n.height - t.y - t.height - o, t.y = a + n.y - s, t.y < 0 && (t.height = t.height + o)
                    } else t.x += n.x - s, t.y += n.y + o;
                    return e
                }, e.prototype._computeAlignmentOffset = function() {
                    switch (y.length = 0, B) {
                        case l.TextAlignment.LEFT:
                            for (var t = 0; t < g; ++t) y.push(0);
                            break;
                        case l.TextAlignment.CENTER:
                            for (var e = 0, i = m.length; e < i; e++) y.push((w.width - m[e]) / 2);
                            break;
                        case l.TextAlignment.RIGHT:
                            for (var n = 0, r = m.length; n < r; n++) y.push(w.width - m[n])
                    }
                    if (b = w.height, I !== l.VerticalTextAlignment.TOP) {
                        var s = w.height - x + (R - D) * T;
                        I === l.VerticalTextAlignment.BOTTOM ? b -= s : b -= s / 2
                    }
                }, e.prototype._setupBMFontOverflowMetrics = function() {
                    var t = w.width,
                        e = w.height;
                    O === h.RESIZE_HEIGHT && (e = 0), O === h.NONE && (t = 0, e = 0), F = t, N = e, V = t
                }, e.prototype.updateWorldVerts = function() {}, e.prototype.appendQuad = function(t, e, i, n, r, s, o) {}, e.prototype._quadsUpdated = function(t) {}, e.prototype._reserveQuads = function() {}, e
            })(n.default);
        i.default = k, e.exports = i.default
    }), {
        "../../../components/CCLabel": 97,
        "../../../platform/CCMacro": 203,
        "../../../utils/text-utils": 307,
        "../../assembler-2d": 224,
        "../utils": 255
    }],
    252: [(function(t, e, i) {
        "use strict";

        function n() {
            this._rect = null, this.uv = [], this._texture = null, this._original = null
        }
        n.prototype = {
            constructor: n,
            getRect: function() {
                return cc.rect(this._rect)
            },
            setRect: function(t) {
                this._rect = t, this._texture && this._calculateUV()
            },
            _setDynamicAtlasFrame: function(t) {
                t && (this._original = {
                    _texture: this._texture,
                    _x: this._rect.x,
                    _y: this._rect.y
                }, this._texture = t.texture, this._rect.x = t.x, this._rect.y = t.y, this._calculateUV())
            },
            _resetDynamicAtlasFrame: function() {
                this._original && (this._rect.x = this._original._x, this._rect.y = this._original._y, this._texture = this._original._texture, this._original = null, this._calculateUV())
            },
            _refreshTexture: function(t) {
                this._texture = t, this._rect = cc.rect(0, 0, t.width, t.height), this._calculateUV()
            },
            _calculateUV: function() {
                var t = this._rect,
                    e = this._texture,
                    i = this.uv,
                    n = e.width,
                    r = e.height,
                    s = 0 === n ? 0 : t.x / n,
                    o = 0 === n ? 0 : (t.x + t.width) / n,
                    a = 0 === r ? 0 : (t.y + t.height) / r,
                    l = 0 === r ? 0 : t.y / r;
                i[0] = s, i[1] = a, i[2] = o, i[3] = a, i[4] = s, i[5] = l, i[6] = o, i[7] = l
            }
        }, e.exports = n
    }), {}],
    253: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.default = void 0;
        var n = (function(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        })(t("../../webgl/assemblers/label/2d/bmfont"));

        function r(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }

        function s(t, e) {
            if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
            return !e || "object" != typeof e && "function" != typeof e ? t : e
        }

        function o(t, e) {
            if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e);
            t.prototype = Object.create(e && e.prototype, {
                constructor: {
                    value: t,
                    enumerable: !1,
                    writable: !0,
                    configurable: !0
                }
            }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e)
        }
        var a = t("../../../components/CCLabel"),
            l = t("../../../components/CCLabelOutline"),
            h = t("../../../utils/text-utils"),
            c = t("../../../components/CCComponent"),
            u = t("../../../assets/CCRenderTexture"),
            _ = cc.js.isChildClassOf(l, c),
            f = t("../utils").getFontFamily,
            d = t("../utils").shareLabelInfo,
            p = cc.BitmapFont.FontLetterDefinition,
            m = cc.BitmapFont.FontAtlas,
            y = cc.Color.WHITE,
            v = 2,
            g = (1 / 255).toFixed(3);

        function x(t, e) {
            this._texture = null, this._labelInfo = e, this._char = t, this._hash = null, this._data = null, this._canvas = null, this._context = null, this._width = 0, this._height = 0, this._offsetY = 0, this._hash = t.charCodeAt(0) + e.hash
        }

        function b(t, e) {
            var i = new u;
            i.initWithSize(t, e), i.update(), this._fontDefDictionary = new m(i), this._x = v, this._y = v, this._nexty = v, this._width = t, this._height = e, cc.director.on(cc.Director.EVENT_BEFORE_SCENE_LAUNCH, this.beforeSceneLoad, this)
        }

        function A(t) {
            var e = t.color.toHEX("#rrggbb"),
                i = "";
            return t.isOutlined && (i = i + t.margin + t.out.toHEX("#rrggbb")), "" + t.fontSize + t.fontFamily + e + i
        }
        x.prototype = {
            constructor: x,
            updateRenderData: function() {
                this._updateProperties(), this._updateTexture()
            },
            _updateProperties: function() {
                this._texture = new cc.Texture2D, this._data = a._canvasPool.get(), this._canvas = this._data.canvas, this._context = this._data.context, this._context.font = this._labelInfo.fontDesc;
                var t = h.safeMeasureText(this._context, this._char);
                this._width = parseFloat(t.toFixed(2)) + 2 * this._labelInfo.margin, this._height = (1 + h.BASELINE_RATIO) * this._labelInfo.fontSize + 2 * this._labelInfo.margin, this._offsetY = -this._labelInfo.fontSize * h.BASELINE_RATIO / 2, this._canvas.width !== this._width && (this._canvas.width = this._width), this._canvas.height !== this._height && (this._canvas.height = this._height), this._texture.initWithElement(this._canvas)
            },
            _updateTexture: function() {
                var t = this._context,
                    e = this._labelInfo,
                    i = this._canvas.width,
                    n = this._canvas.height,
                    r = i / 2,
                    s = n / 2 + this._labelInfo.fontSize * h.MIDDLE_RATIO,
                    o = e.color;
                if (t.textAlign = "center", t.textBaseline = "alphabetic", t.clearRect(0, 0, i, n), t.fillStyle = "rgba(" + o.r + ", " + o.g + ", " + o.b + ", " + g + ")", t.fillRect(0, 0, i, n), t.font = e.fontDesc, t.lineJoin = "round", t.fillStyle = "rgba(" + o.r + ", " + o.g + ", " + o.b + ", 1)", e.isOutlined) {
                    var a = e.out || y;
                    t.strokeStyle = "rgba(" + a.r + ", " + a.g + ", " + a.b + ", " + a.a / 255 + ")", t.lineWidth = 2 * e.margin, t.strokeText(this._char, r, s)
                }
                t.fillText(this._char, r, s), this._texture.handleLoadedTexture()
            },
            destroy: function() {
                this._texture.destroy(), this._texture = null, a._canvasPool.put(this._data)
            }
        }, cc.js.mixin(b.prototype, {
            insertLetterTexture: function(t) {
                var e = t._texture,
                    i = e.width,
                    n = e.height;
                if (this._x + i + v > this._width && (this._x = v, this._y = this._nexty), this._y + n > this._nexty && (this._nexty = this._y + n + v), this._nexty > this._height) return null;
                this._fontDefDictionary._texture.drawTextureAt(e, this._x, this._y), this._dirty = !0;
                var r = new p;
                return r.u = this._x, r.v = this._y, r.texture = this._fontDefDictionary._texture, r.valid = !0, r.w = t._width, r.h = t._height, r.xAdvance = t._width, r.offsetY = t._offsetY, this._x += i + v, this._fontDefDictionary.addLetterDefinitions(t._hash, r), r
            },
            update: function() {
                this._dirty && (this._fontDefDictionary._texture.update(), this._dirty = !1)
            },
            reset: function() {
                this._x = v, this._y = v, this._nexty = v;
                for (var t = this._fontDefDictionary._letterDefinitions, e = 0, i = t.length; e < i; e++) {
                    var n = t[e];
                    n.isValid && n.destroy()
                }
                this._fontDefDictionary.clear()
            },
            destroy: function() {
                this.reset(), this._fontDefDictionary._texture.destroy(), this._fontDefDictionary._texture = null
            },
            beforeSceneLoad: function() {
                this.clearAllCache()
            },
            clearAllCache: function() {
                this.destroy();
                var t = new u;
                t.initWithSize(this._width, this._height), t.update(), this._fontDefDictionary._texture = t
            },
            getLetter: function(t) {
                return this._fontDefDictionary._letterDefinitions[t]
            },
            getTexture: function() {
                return this._fontDefDictionary.getTexture()
            },
            getLetterDefinitionForChar: function(t, e) {
                var i = t.charCodeAt(0) + e.hash,
                    n = this._fontDefDictionary._letterDefinitions[i];
                if (!n) {
                    var r = new x(t, e);
                    r.updateRenderData(), n = this.insertLetterTexture(r), r.destroy()
                }
                return n
            }
        });
        var C = null,
            T = (function(t) {
                function e() {
                    return r(this, e), s(this, t.apply(this, arguments))
                }
                return o(e, t), e.prototype._getAssemblerData = function() {
                    return C || (C = new b(2048, 2048), cc.Label._shareAtlas = C), C.getTexture()
                }, e.prototype._updateFontFamily = function(t) {
                    d.fontAtlas = C, d.fontFamily = f(t);
                    var e = _ && t.getComponent(l);
                    e && e.enabled ? (d.isOutlined = !0, d.margin = e.width, d.out = e.color.clone(), d.out.a = e.color.a * t.node.color.a / 255) : (d.isOutlined = !1, d.margin = 0)
                }, e.prototype._updateLabelInfo = function(t) {
                    d.fontDesc = this._getFontDesc(), d.color = t.node.color, d.hash = A(d)
                }, e.prototype._getFontDesc = function() {
                    var t = d.fontSize.toString() + "px ";
                    return t += d.fontFamily
                }, e.prototype._computeHorizontalKerningForText = function() {}, e.prototype._determineRect = function(t) {
                    return !1
                }, e
            })(n.default);
        i.default = T, e.exports = i.default
    }), {
        "../../../assets/CCRenderTexture": 66,
        "../../../components/CCComponent": 95,
        "../../../components/CCLabel": 97,
        "../../../components/CCLabelOutline": 98,
        "../../../utils/text-utils": 307,
        "../../webgl/assemblers/label/2d/bmfont": 260,
        "../utils": 255
    }],
    254: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.default = void 0;
        var n = (function(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        })(t("../../assembler-2d"));

        function r(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }

        function s(t, e) {
            if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
            return !e || "object" != typeof e && "function" != typeof e ? t : e
        }

        function o(t, e) {
            if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e);
            t.prototype = Object.create(e && e.prototype, {
                constructor: {
                    value: t,
                    enumerable: !1,
                    writable: !0,
                    configurable: !0
                }
            }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e)
        }
        var a = t("../../../utils/text-utils"),
            l = t("../../../platform/CCMacro"),
            h = t("../../../components/CCLabel"),
            c = t("../../../components/CCLabelOutline"),
            u = t("../../../components/CCLabelShadow"),
            _ = h.Overflow,
            f = t("../utils").deleteFromDynamicAtlas,
            d = t("../utils").getFontFamily,
            p = (1 / 255).toFixed(3),
            m = null,
            y = null,
            v = null,
            g = "",
            x = "",
            b = 0,
            A = 0,
            C = [],
            T = cc.Size.ZERO,
            S = 0,
            w = 0,
            E = 0,
            M = null,
            D = "",
            B = _.NONE,
            I = !1,
            P = null,
            R = cc.Color.WHITE,
            O = null,
            L = cc.Color.BLACK,
            F = cc.rect(),
            N = cc.Size.ZERO,
            V = cc.Size.ZERO,
            k = !1,
            G = !1,
            U = !1,
            z = 0,
            j = cc.Vec2.ZERO,
            W = 0,
            H = void 0,
            X = (function(t) {
                function e() {
                    return r(this, e), s(this, t.apply(this, arguments))
                }
                return o(e, t), e.prototype._getAssemblerData = function() {
                    return (H = h._canvasPool.get()).canvas.width = H.canvas.height = 1, H
                }, e.prototype._resetAssemblerData = function(t) {
                    t && h._canvasPool.put(t)
                }, e.prototype.updateRenderData = function(e) {
                    t.prototype.updateRenderData.call(this, e), e._vertsDirty && (this._updateFontFamily(e), this._updateProperties(e), this._calculateLabelFont(), this._calculateSplitedStrings(), this._updateLabelDimensions(), this._calculateTextBaseline(), this._updateTexture(e), this._calDynamicAtlas(e), e._actualFontSize = b, e.node.setContentSize(V), this.updateVerts(e), e._vertsDirty = !1, m = null, y = null, v = null)
                }, e.prototype.updateVerts = function() {}, e.prototype._updatePaddingRect = function() {
                    var t = 0,
                        e = 0,
                        i = 0,
                        n = 0,
                        r = 0;
                    if (N.width = N.height = 0, P && (t = e = i = n = r = P.width, N.width = N.height = 2 * r), O) {
                        var s = O.blur + r;
                        i = Math.max(i, -O._offset.x + s), n = Math.max(n, O._offset.x + s), t = Math.max(t, O._offset.y + s), e = Math.max(e, -O._offset.y + s)
                    }
                    if (G) {
                        var o = A * Math.tan(.20943951);
                        n += o, N.width += o
                    }
                    F.x = i, F.y = t, F.width = i + n, F.height = t + e
                }, e.prototype._updateFontFamily = function(t) {
                    D = d(t)
                }, e.prototype._updateProperties = function(t) {
                    var e = t._assemblerData;
                    m = e.context, y = e.canvas, v = t._frame._original ? t._frame._original._texture : t._frame._texture, x = t.string.toString(), b = t._fontSize, z = (A = b) / 8, B = t.overflow, T.width = t.node.width, T.height = t.node.height, V = t.node.getContentSize(), S = t._lineHeight, w = t.horizontalAlign, E = t.verticalAlign, M = t.node.color, k = t._isBold, G = t._isItalic, U = t._isUnderline, I = B !== _.NONE && (B === _.RESIZE_HEIGHT || t.enableWrapText), (P = (P = c && t.getComponent(c)) && P.enabled && P.width > 0 ? P : null) && R.set(P.color), (O = (O = u && t.getComponent(u)) && O.enabled ? O : null) && (L.set(O.color), L.a = L.a * t.node.color.a / 255), this._updatePaddingRect()
                }, e.prototype._calculateFillTextStartPosition = function() {
                    var t = 0;
                    w === l.TextAlignment.RIGHT ? t = T.width - F.width : w === l.TextAlignment.CENTER && (t = (T.width - F.width) / 2);
                    var e = this._getLineHeight() * (C.length - 1),
                        i = b * (1 - a.BASELINE_RATIO / 2);
                    if (E !== l.VerticalTextAlignment.TOP) {
                        var n = e + F.height + b - T.height;
                        E === l.VerticalTextAlignment.BOTTOM ? i -= n : i -= n / 2
                    }
                    return cc.v2(t + F.x, i + F.y)
                }, e.prototype._setupOutline = function() {
                    m.strokeStyle = "rgba(" + R.r + ", " + R.g + ", " + R.b + ", " + R.a / 255 + ")", m.lineWidth = 2 * P.width
                }, e.prototype._setupShadow = function() {
                    m.shadowColor = "rgba(" + L.r + ", " + L.g + ", " + L.b + ", " + L.a / 255 + ")", m.shadowBlur = O.blur, m.shadowOffsetX = O.offset.x, m.shadowOffsetY = -O.offset.y
                }, e.prototype._drawUnderline = function(t) {
                    P && (this._setupOutline(), m.strokeRect(j.x, j.y, t, z)), m.lineWidth = z, m.fillStyle = "rgba(" + M.r + ", " + M.g + ", " + M.b + ", " + M.a / 255 + ")", m.fillRect(j.x, j.y, t, z)
                }, e.prototype._updateTexture = function() {
                    m.clearRect(0, 0, y.width, y.height);
                    var t = P ? R : M;
                    m.fillStyle = "rgba(" + t.r + ", " + t.g + ", " + t.b + ", " + p + ")", m.fillRect(0, 0, y.width, y.height), m.font = g;
                    var e = this._calculateFillTextStartPosition(),
                        i = this._getLineHeight();
                    m.lineJoin = "round", m.fillStyle = "rgba(" + M.r + ", " + M.g + ", " + M.b + ", 1)";
                    var n = C.length > 1,
                        r = this._measureText(m),
                        s = 0,
                        o = 0;
                    O && this._setupShadow(), P && P.width > 0 && this._setupOutline();
                    for (var a = 0; a < C.length; ++a) s = e.x, o = e.y + a * i, O && n && (P && P.width > 0 && m.strokeText(C[a], s, o), m.fillText(C[a], s, o)), U && (W = r(C[a]), w === l.TextAlignment.RIGHT ? j.x = e.x - W : w === l.TextAlignment.CENTER ? j.x = e.x - W / 2 : j.x = e.x, j.y = o, this._drawUnderline(W));
                    O && n && (m.shadowColor = "transparent");
                    for (var h = 0; h < C.length; ++h) s = e.x, o = e.y + h * i, P && P.width > 0 && m.strokeText(C[h], s, o), m.fillText(C[h], s, o);
                    O && (m.shadowColor = "transparent"), v.handleLoadedTexture()
                }, e.prototype._calDynamicAtlas = function(t) {
                    if (t.cacheMode === h.CacheMode.BITMAP) {
                        var e = t._frame;
                        f(t, e), e._original || e.setRect(cc.rect(0, 0, y.width, y.height)), this.packToDynamicAtlas(t, e)
                    }
                }, e.prototype._updateLabelDimensions = function() {
                    var t = x.split("\n");
                    if (B === _.RESIZE_HEIGHT) {
                        var e = (C.length + a.BASELINE_RATIO) * this._getLineHeight();
                        T.height = e + F.height, V.height = e + N.height
                    } else if (B === _.NONE) {
                        C = t;
                        for (var i = 0, n = 0, r = 0; r < t.length; ++r) {
                            var s = a.safeMeasureText(m, t[r]);
                            i = i > s ? i : s
                        }
                        n = (C.length + a.BASELINE_RATIO) * this._getLineHeight();
                        var o = parseFloat(i.toFixed(2)),
                            l = parseFloat(n.toFixed(2));
                        T.width = o + F.width, T.height = l + F.height, V.width = o + N.width, V.height = l + N.height
                    }
                    T.width = Math.min(T.width, 2048), T.height = Math.min(T.height, 2048), y.width !== T.width && (y.width = T.width), y.height !== T.height && (y.height = T.height)
                }, e.prototype._calculateTextBaseline = function() {
                    var t = void 0;
                    t = w === l.TextAlignment.RIGHT ? "right" : w === l.TextAlignment.CENTER ? "center" : "left", m.textAlign = t, m.textBaseline = "alphabetic"
                }, e.prototype._calculateSplitedStrings = function() {
                    var t = x.split("\n");
                    if (I) {
                        C = [];
                        for (var e = V.width, i = 0; i < t.length; ++i) {
                            var n = a.safeMeasureText(m, t[i]),
                                r = a.fragmentText(t[i], n, e, this._measureText(m));
                            C = C.concat(r)
                        }
                    } else C = t
                }, e.prototype._getFontDesc = function() {
                    var t = b.toString() + "px ";
                    return t += D, k && (t = "bold " + t), G && (t = "italic " + t), t
                }, e.prototype._getLineHeight = function() {
                    var t = S;
                    return 0 | (t = 0 === t ? b : t * b / A)
                }, e.prototype._calculateParagraphLength = function(t, e) {
                    for (var i = [], n = 0; n < t.length; ++n) {
                        var r = a.safeMeasureText(e, t[n]);
                        i.push(r)
                    }
                    return i
                }, e.prototype._measureText = function(t) {
                    return function(e) {
                        return a.safeMeasureText(t, e)
                    }
                }, e.prototype._calculateLabelFont = function() {
                    if (g = this._getFontDesc(), m.font = g, B === _.SHRINK) {
                        var t = x.split("\n"),
                            e = this._calculateParagraphLength(t, m),
                            i = 0,
                            n = 0,
                            r = 0;
                        if (I) {
                            var s = V.width,
                                o = V.height;
                            if (s < 0 || o < 0) return g = this._getFontDesc(), void(m.font = g);
                            n = o + 1, r = s + 1;
                            for (var l = b + 1, h = "", c = !0, u = 0 | l; n > o || r > s;) {
                                if (c ? l = u / 2 | 0 : u = l = u - 1, l <= 0) {
                                    cc.logID(4003);
                                    break
                                }
                                for (b = l, g = this._getFontDesc(), m.font = g, n = 0, i = 0; i < t.length; ++i) {
                                    var f = 0,
                                        d = a.safeMeasureText(m, t[i]);
                                    for (h = a.fragmentText(t[i], d, s, this._measureText(m)); f < h.length;) r = a.safeMeasureText(m, h[f]), n += this._getLineHeight(), ++f
                                }
                                c && (n > o ? u = 0 | l : (c = !1, n = o + 1))
                            }
                        } else {
                            for (n = t.length * this._getLineHeight(), i = 0; i < t.length; ++i) r < e[i] && (r = e[i]);
                            var p = (T.width - F.width) / r,
                                y = T.height / n;
                            b = A * Math.min(1, p, y) | 0, g = this._getFontDesc(), m.font = g
                        }
                    }
                }, e
            })(n.default);
        i.default = X, e.exports = i.default
    }), {
        "../../../components/CCLabel": 97,
        "../../../components/CCLabelOutline": 98,
        "../../../components/CCLabelShadow": 99,
        "../../../platform/CCMacro": 203,
        "../../../utils/text-utils": 307,
        "../../assembler-2d": 224,
        "../utils": 255
    }],
    255: [(function(t, e, i) {
        "use strict";
        var n = t("./dynamic-atlas/manager"),
            r = cc.Color.WHITE,
            s = {
                fontAtlas: null,
                fontSize: 0,
                lineHeight: 0,
                hAlign: 0,
                vAlign: 0,
                hash: "",
                fontFamily: "",
                fontDesc: "Arial",
                color: r,
                isOutlined: !1,
                out: r,
                margin: 0
            };
        e.exports = {
            deleteFromDynamicAtlas: function(t, e) {
                e && e._original && n && (n.deleteAtlasTexture(e), e._resetDynamicAtlasFrame())
            },
            getFontFamily: function(t) {
                return t.useSystemFont ? t.fontFamily || "Arial" : t.font ? t.font._nativeAsset ? t.font._nativeAsset : (cc.loader.load(t.font.nativeUrl, (function(e, i) {
                    t.font._nativeAsset = i, t._lazyUpdateRenderData()
                })), "Arial") : "Arial"
            },
            shareLabelInfo: s
        }
    }), {
        "./dynamic-atlas/manager": 250
    }],
    256: [(function(t, e, i) {
        "use strict";

        function n(t, e, i) {
            i = i || 2;
            var n, s, a, l, h, c, _, f = e && e.length,
                d = f ? e[0] * i : t.length,
                p = r(t, 0, d, i, !0),
                m = [];
            if (!p) return m;
            if (f && (p = u(t, e, p, i)), t.length > 80 * i) {
                n = a = t[0], s = l = t[1];
                for (var y = i; y < d; y += i) h = t[y], c = t[y + 1], h < n && (n = h), c < s && (s = c), h > a && (a = h), c > l && (l = c);
                _ = Math.max(a - n, l - s)
            }
            return o(p, m, i, n, s, _), m
        }

        function r(t, e, i, n, r) {
            var s, o;
            if (r === I(t, e, i, n) > 0)
                for (s = e; s < i; s += n) o = M(s, t[s], t[s + 1], o);
            else
                for (s = i - n; s >= e; s -= n) o = M(s, t[s], t[s + 1], o);
            return o && A(o, o.next) && (D(o), o = o.next), o
        }

        function s(t, e) {
            if (!t) return t;
            e || (e = t);
            var i, n = t;
            do {
                if (i = !1, n.steiner || !A(n, n.next) && 0 !== b(n.prev, n, n.next)) n = n.next;
                else {
                    if (D(n), (n = e = n.prev) === n.next) return null;
                    i = !0
                }
            } while (i || n !== e);
            return e
        }

        function o(t, e, i, n, r, u, _) {
            if (t) {
                !_ && u && p(t, n, r, u);
                for (var f, d, m = t; t.prev !== t.next;)
                    if (f = t.prev, d = t.next, u ? l(t, n, r, u) : a(t)) e.push(f.i / i), e.push(t.i / i), e.push(d.i / i), D(t), t = d.next, m = d.next;
                    else if ((t = d) === m) {
                    _ ? 1 === _ ? o(t = h(t, e, i), e, i, n, r, u, 2) : 2 === _ && c(t, e, i, n, r, u) : o(s(t), e, i, n, r, u, 1);
                    break
                }
            }
        }

        function a(t) {
            var e = t.prev,
                i = t,
                n = t.next;
            if (b(e, i, n) >= 0) return !1;
            for (var r = t.next.next; r !== t.prev;) {
                if (g(e.x, e.y, i.x, i.y, n.x, n.y, r.x, r.y) && b(r.prev, r, r.next) >= 0) return !1;
                r = r.next
            }
            return !0
        }

        function l(t, e, i, n) {
            var r = t.prev,
                s = t,
                o = t.next;
            if (b(r, s, o) >= 0) return !1;
            for (var a = r.x < s.x ? r.x < o.x ? r.x : o.x : s.x < o.x ? s.x : o.x, l = r.y < s.y ? r.y < o.y ? r.y : o.y : s.y < o.y ? s.y : o.y, h = r.x > s.x ? r.x > o.x ? r.x : o.x : s.x > o.x ? s.x : o.x, c = r.y > s.y ? r.y > o.y ? r.y : o.y : s.y > o.y ? s.y : o.y, u = y(a, l, e, i, n), _ = y(h, c, e, i, n), f = t.nextZ; f && f.z <= _;) {
                if (f !== t.prev && f !== t.next && g(r.x, r.y, s.x, s.y, o.x, o.y, f.x, f.y) && b(f.prev, f, f.next) >= 0) return !1;
                f = f.nextZ
            }
            for (f = t.prevZ; f && f.z >= u;) {
                if (f !== t.prev && f !== t.next && g(r.x, r.y, s.x, s.y, o.x, o.y, f.x, f.y) && b(f.prev, f, f.next) >= 0) return !1;
                f = f.prevZ
            }
            return !0
        }

        function h(t, e, i) {
            var n = t;
            do {
                var r = n.prev,
                    s = n.next.next;
                !A(r, s) && C(r, n, n.next, s) && S(r, s) && S(s, r) && (e.push(r.i / i), e.push(n.i / i), e.push(s.i / i), D(n), D(n.next), n = t = s), n = n.next
            } while (n !== t);
            return n
        }

        function c(t, e, i, n, r, a) {
            var l = t;
            do {
                for (var h = l.next.next; h !== l.prev;) {
                    if (l.i !== h.i && x(l, h)) {
                        var c = E(l, h);
                        return l = s(l, l.next), c = s(c, c.next), o(l, e, i, n, r, a), void o(c, e, i, n, r, a)
                    }
                    h = h.next
                }
                l = l.next
            } while (l !== t)
        }

        function u(t, e, i, n) {
            var o, a, l, h = [];
            for (o = 0, a = e.length; o < a; o++)(l = r(t, e[o] * n, o < a - 1 ? e[o + 1] * n : t.length, n, !1)) === l.next && (l.steiner = !0), h.push(v(l));
            for (h.sort(_), o = 0; o < h.length; o++) f(h[o], i), i = s(i, i.next);
            return i
        }

        function _(t, e) {
            return t.x - e.x
        }

        function f(t, e) {
            if (e = d(t, e)) {
                var i = E(e, t);
                s(i, i.next)
            }
        }

        function d(t, e) {
            var i, n = e,
                r = t.x,
                s = t.y,
                o = -1 / 0;
            do {
                if (s <= n.y && s >= n.next.y) {
                    var a = n.x + (s - n.y) * (n.next.x - n.x) / (n.next.y - n.y);
                    if (a <= r && a > o) {
                        if (o = a, a === r) {
                            if (s === n.y) return n;
                            if (s === n.next.y) return n.next
                        }
                        i = n.x < n.next.x ? n : n.next
                    }
                }
                n = n.next
            } while (n !== e);
            if (!i) return null;
            if (r === o) return i.prev;
            var l, h = i,
                c = i.x,
                u = i.y,
                _ = 1 / 0;
            for (n = i.next; n !== h;) r >= n.x && n.x >= c && g(s < u ? r : o, s, c, u, s < u ? o : r, s, n.x, n.y) && ((l = Math.abs(s - n.y) / (r - n.x)) < _ || l === _ && n.x > i.x) && S(n, t) && (i = n, _ = l), n = n.next;
            return i
        }

        function p(t, e, i, n) {
            var r = t;
            do {
                null === r.z && (r.z = y(r.x, r.y, e, i, n)), r.prevZ = r.prev, r.nextZ = r.next, r = r.next
            } while (r !== t);
            r.prevZ.nextZ = null, r.prevZ = null, m(r)
        }

        function m(t) {
            var e, i, n, r, s, o, a, l, h = 1;
            do {
                for (i = t, t = null, s = null, o = 0; i;) {
                    for (o++, n = i, a = 0, e = 0; e < h && (a++, n = n.nextZ); e++);
                    for (l = h; a > 0 || l > 0 && n;) 0 === a ? (r = n, n = n.nextZ, l--) : 0 !== l && n ? i.z <= n.z ? (r = i, i = i.nextZ, a--) : (r = n, n = n.nextZ, l--) : (r = i, i = i.nextZ, a--), s ? s.nextZ = r : t = r, r.prevZ = s, s = r;
                    i = n
                }
                s.nextZ = null, h *= 2
            } while (o > 1);
            return t
        }

        function y(t, e, i, n, r) {
            return (t = 1431655765 & ((t = 858993459 & ((t = 252645135 & ((t = 16711935 & ((t = 32767 * (t - i) / r) | t << 8)) | t << 4)) | t << 2)) | t << 1)) | (e = 1431655765 & ((e = 858993459 & ((e = 252645135 & ((e = 16711935 & ((e = 32767 * (e - n) / r) | e << 8)) | e << 4)) | e << 2)) | e << 1)) << 1
        }

        function v(t) {
            var e = t,
                i = t;
            do {
                e.x < i.x && (i = e), e = e.next
            } while (e !== t);
            return i
        }

        function g(t, e, i, n, r, s, o, a) {
            return (r - o) * (e - a) - (t - o) * (s - a) >= 0 && (t - o) * (n - a) - (i - o) * (e - a) >= 0 && (i - o) * (s - a) - (r - o) * (n - a) >= 0
        }

        function x(t, e) {
            return t.next.i !== e.i && t.prev.i !== e.i && !T(t, e) && S(t, e) && S(e, t) && w(t, e)
        }

        function b(t, e, i) {
            return (e.y - t.y) * (i.x - e.x) - (e.x - t.x) * (i.y - e.y)
        }

        function A(t, e) {
            return t.x === e.x && t.y === e.y
        }

        function C(t, e, i, n) {
            return !!(A(t, e) && A(i, n) || A(t, n) && A(i, e)) || b(t, e, i) > 0 != b(t, e, n) > 0 && b(i, n, t) > 0 != b(i, n, e) > 0
        }

        function T(t, e) {
            var i = t;
            do {
                if (i.i !== t.i && i.next.i !== t.i && i.i !== e.i && i.next.i !== e.i && C(i, i.next, t, e)) return !0;
                i = i.next
            } while (i !== t);
            return !1
        }

        function S(t, e) {
            return b(t.prev, t, t.next) < 0 ? b(t, e, t.next) >= 0 && b(t, t.prev, e) >= 0 : b(t, e, t.prev) < 0 || b(t, t.next, e) < 0
        }

        function w(t, e) {
            var i = t,
                n = !1,
                r = (t.x + e.x) / 2,
                s = (t.y + e.y) / 2;
            do {
                i.y > s != i.next.y > s && r < (i.next.x - i.x) * (s - i.y) / (i.next.y - i.y) + i.x && (n = !n), i = i.next
            } while (i !== t);
            return n
        }

        function E(t, e) {
            var i = new B(t.i, t.x, t.y),
                n = new B(e.i, e.x, e.y),
                r = t.next,
                s = e.prev;
            return t.next = e, e.prev = t, i.next = r, r.prev = i, n.next = i, i.prev = n, s.next = n, n.prev = s, n
        }

        function M(t, e, i, n) {
            var r = new B(t, e, i);
            return n ? (r.next = n.next, r.prev = n, n.next.prev = r, n.next = r) : (r.prev = r, r.next = r), r
        }

        function D(t) {
            t.next.prev = t.prev, t.prev.next = t.next, t.prevZ && (t.prevZ.nextZ = t.nextZ), t.nextZ && (t.nextZ.prevZ = t.prevZ)
        }

        function B(t, e, i) {
            this.i = t, this.x = e, this.y = i, this.prev = null, this.next = null, this.z = null, this.prevZ = null, this.nextZ = null, this.steiner = !1
        }

        function I(t, e, i, n) {
            for (var r = 0, s = e, o = i - n; s < i; s += n) r += (t[o] - t[s]) * (t[s + 1] + t[o + 1]), o = s;
            return r
        }
        cc.Graphics.earcut = e.exports = n, n.deviation = function(t, e, i, n) {
            var r = e && e.length,
                s = r ? e[0] * i : t.length,
                o = Math.abs(I(t, 0, s, i));
            if (r)
                for (var a = 0, l = e.length; a < l; a++) {
                    var h = e[a] * i,
                        c = a < l - 1 ? e[a + 1] * i : t.length;
                    o -= Math.abs(I(t, h, c, i))
                }
            var u = 0;
            for (a = 0; a < n.length; a += 3) {
                var _ = n[a] * i,
                    f = n[a + 1] * i,
                    d = n[a + 2] * i;
                u += Math.abs((t[_] - t[d]) * (t[f + 1] - t[_ + 1]) - (t[_] - t[f]) * (t[d + 1] - t[_ + 1]))
            }
            return 0 === o && 0 === u ? 0 : Math.abs((u - o) / o)
        }, n.flatten = function(t) {
            for (var e = t[0][0].length, i = {
                    vertices: [],
                    holes: [],
                    dimensions: e
                }, n = 0, r = 0; r < t.length; r++) {
                for (var s = 0; s < t[r].length; s++)
                    for (var o = 0; o < e; o++) i.vertices.push(t[r][s][o]);
                r > 0 && (n += t[r - 1].length, i.holes.push(n))
            }
            return i
        }
    }), {}],
    257: [(function(t, e, i) {
        "use strict";
        var n = t("../../../../graphics/helper"),
            r = t("../../../../graphics/types").PointFlags,
            s = cc.Graphics.Point = cc.Class({
                name: "cc.GraphicsPoint",
                extends: cc.Vec2,
                ctor: function(t, e) {
                    this.reset()
                },
                reset: function() {
                    this.dx = 0, this.dy = 0, this.dmx = 0, this.dmy = 0, this.flags = 0, this.len = 0
                }
            });

        function o() {
            this.reset()
        }

        function a(t) {
            this._tessTol = .25, this._distTol = .01, this._updatePathOffset = !1, this._paths = null, this._pathLength = 0, this._pathOffset = 0, this._points = null, this._pointsOffset = 0, this._commandx = 0, this._commandy = 0, this._paths = [], this._points = []
        }
        cc.js.mixin(o.prototype, {
            reset: function() {
                this.closed = !1, this.nbevel = 0, this.complex = !0, this.points ? this.points.length = 0 : this.points = []
            }
        }), cc.js.mixin(a.prototype, {
            moveTo: function(t, e) {
                this._updatePathOffset && (this._pathOffset = this._pathLength, this._updatePathOffset = !1), this._addPath(), this._addPoint(t, e, r.PT_CORNER), this._commandx = t, this._commandy = e
            },
            lineTo: function(t, e) {
                this._addPoint(t, e, r.PT_CORNER), this._commandx = t, this._commandy = e
            },
            bezierCurveTo: function(t, e, i, s, o, a) {
                var l = this._curPath,
                    h = l.points[l.points.length - 1];
                h.x !== t || h.y !== e || i !== o || s !== a ? (n.tesselateBezier(this, h.x, h.y, t, e, i, s, o, a, 0, r.PT_CORNER), this._commandx = o, this._commandy = a) : this.lineTo(o, a)
            },
            quadraticCurveTo: function(t, e, i, n) {
                var r = this._commandx,
                    s = this._commandy;
                this.bezierCurveTo(r + 2 / 3 * (t - r), s + 2 / 3 * (e - s), i + 2 / 3 * (t - i), n + 2 / 3 * (e - n), i, n)
            },
            arc: function(t, e, i, r, s, o) {
                n.arc(this, t, e, i, r, s, o)
            },
            ellipse: function(t, e, i, r) {
                n.ellipse(this, t, e, i, r), this._curPath.complex = !1
            },
            circle: function(t, e, i) {
                n.ellipse(this, t, e, i, i), this._curPath.complex = !1
            },
            rect: function(t, e, i, n) {
                this.moveTo(t, e), this.lineTo(t, e + n), this.lineTo(t + i, e + n), this.lineTo(t + i, e), this.close(), this._curPath.complex = !1
            },
            roundRect: function(t, e, i, r, s) {
                n.roundRect(this, t, e, i, r, s), this._curPath.complex = !1
            },
            clear: function(t) {
                this._pathLength = 0, this._pathOffset = 0, this._pointsOffset = 0, this._curPath = null, t && (this._paths.length = 0, this._points.length = 0)
            },
            close: function() {
                this._curPath.closed = !0
            },
            _addPath: function() {
                var t = this._pathLength,
                    e = this._paths[t];
                return e ? e.reset() : (e = new o, this._paths.push(e)), this._pathLength++, this._curPath = e, e
            },
            _addPoint: function(t, e, i) {
                var n = this._curPath;
                if (n) {
                    var r, o = this._points,
                        a = n.points;
                    (r = o[this._pointsOffset++]) ? (r.x = t, r.y = e) : (r = new s(t, e), o.push(r)), r.flags = i, a.push(r)
                }
            }
        }), cc.Graphics._Impl = a, e.exports = a
    }), {
        "../../../../graphics/helper": 141,
        "../../../../graphics/types": 143
    }],
    258: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.default = void 0;
        var n = s(t("../../../assembler")),
            r = s(t("../../../../../renderer/core/input-assembler"));

        function s(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }

        function o(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }

        function a(t, e) {
            if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
            return !e || "object" != typeof e && "function" != typeof e ? t : e
        }

        function l(t, e) {
            if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e);
            t.prototype = Object.create(e && e.prototype, {
                constructor: {
                    value: t,
                    enumerable: !1,
                    writable: !0,
                    configurable: !0
                }
            }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e)
        }
        var h = t("../../mesh-buffer"),
            c = t("../../vertex-format").vfmtPosColor,
            u = t("../../../index"),
            _ = t("../../../../graphics/graphics"),
            f = t("../../../../graphics/types").PointFlags,
            d = _.LineJoin,
            p = _.LineCap,
            m = t("./earcut"),
            y = (t("./impl"), Math.PI),
            v = Math.min,
            g = Math.max,
            x = Math.ceil,
            b = Math.acos,
            A = Math.cos,
            C = Math.sin,
            T = Math.atan2;

        function S(t, e, i) {
            var n = 2 * b(t / (t + i));
            return g(2, x(e / n))
        }

        function w(t, e, i) {
            return t < e ? e : t > i ? i : t
        }
        var E = (function(t) {
            function e(i) {
                o(this, e);
                var n = a(this, t.call(this, i));
                return n._buffer = null, n._buffers = [], n._bufferOffset = 0, n
            }
            return l(e, t), e.prototype.getVfmt = function() {
                return c
            }, e.prototype.requestBuffer = function() {
                var t = {
                        indiceStart: 0,
                        vertexStart: 0
                    },
                    e = new h(u._handle, c);
                t.meshbuffer = e;
                var i = new r.default(e._vb, e._ib);
                return t.ia = i, this._buffers.push(t), t
            }, e.prototype.getBuffers = function() {
                return 0 === this._buffers.length && this.requestBuffer(), this._buffers
            }, e.prototype.clear = function(t) {
                this._bufferOffset = 0;
                var e = this._buffers;
                if (t) {
                    for (var i = 0, n = e.length; i < n; i++) {
                        var r = e[i];
                        r.meshbuffer.destroy(), r.meshbuffer = null
                    }
                    e.length = 0
                } else
                    for (var s = 0, o = e.length; s < o; s++) {
                        var a = e[s];
                        a.indiceStart = 0, a.vertexStart = 0, a.meshbuffer.reset()
                    }
            }, e.prototype.fillBuffers = function(t, e) {
                e._flush(), e.node = t.node, e.material = t.sharedMaterials[0];
                for (var i = this.getBuffers(), n = 0, r = i.length; n < r; n++) {
                    var s = i[n],
                        o = s.meshbuffer;
                    s.ia._count = s.indiceStart, e._flushIA(s.ia), o.uploadData()
                }
            }, e.prototype.genBuffer = function(t, e) {
                var i = this.getBuffers(),
                    n = i[this._bufferOffset],
                    r = n.meshbuffer,
                    s = n.vertexStart + e;
                return (s > 65535 || 3 * s > 131070) && (++this._bufferOffset, s = e, this._bufferOffset < i.length ? n = i[this._bufferOffset] : (n = this.requestBuffer(t), i[this._bufferOffset] = n), r = n.meshbuffer), s > r.vertexOffset && r.requestStatic(e, 3 * e), this._buffer = n, n
            }, e.prototype.stroke = function(t) {
                this._curColor = t._strokeColor._val, this._flattenPaths(t._impl), this._expandStroke(t), t._impl._updatePathOffset = !0
            }, e.prototype.fill = function(t) {
                this._curColor = t._fillColor._val, this._expandFill(t), t._impl._updatePathOffset = !0
            }, e.prototype._expandStroke = function(t) {
                var e = .5 * t.lineWidth,
                    i = t.lineCap,
                    n = t.lineJoin,
                    r = t.miterLimit,
                    s = t._impl,
                    o = S(e, y, s._tessTol);
                this._calculateJoins(s, e, n, r);
                for (var a = s._paths, l = 0, h = s._pathOffset, c = s._pathLength; h < c; h++) {
                    var u = a[h],
                        _ = u.points.length;
                    n === d.ROUND ? l += 2 * (_ + u.nbevel * (o + 2) + 1) : l += 2 * (_ + 5 * u.nbevel + 1), u.closed || (i === p.ROUND ? l += 2 * (2 * o + 2) : l += 12)
                }
                for (var m = this.genBuffer(t, l), v = m.meshbuffer, g = v._vData, x = v._iData, b = s._pathOffset, A = s._pathLength; b < A; b++) {
                    var C, T = a[b],
                        w = T.points,
                        E = w.length,
                        M = m.vertexStart,
                        D = void 0,
                        B = void 0,
                        I = void 0,
                        P = void 0;
                    if ((C = T.closed) ? (D = w[E - 1], B = w[0], I = 0, P = E) : (D = w[0], B = w[1], I = 1, P = E - 1), !C) {
                        var R = B.sub(D);
                        R.normalizeSelf();
                        var O = R.x,
                            L = R.y;
                        i === p.BUTT ? this._buttCapStart(D, O, L, e, 0) : i === p.SQUARE ? this._buttCapStart(D, O, L, e, e) : i === p.ROUND && this._roundCapStart(D, O, L, e, o)
                    }
                    for (var F = I; F < P; ++F) n === d.ROUND ? this._roundJoin(D, B, e, e, o) : 0 != (B.flags & (f.PT_BEVEL | f.PT_INNERBEVEL)) ? this._bevelJoin(D, B, e, e) : (this._vset(B.x + B.dmx * e, B.y + B.dmy * e), this._vset(B.x - B.dmx * e, B.y - B.dmy * e)), D = B, B = w[F + 1];
                    if (C) {
                        var N = 3 * M;
                        this._vset(g[N], g[N + 1]), this._vset(g[N + 3], g[N + 4])
                    } else {
                        var V = B.sub(D);
                        V.normalizeSelf();
                        var k = V.x,
                            G = V.y;
                        i === p.BUTT ? this._buttCapEnd(B, k, G, e, 0) : i === p.SQUARE ? this._buttCapEnd(B, k, G, e, e) : i === p.ROUND && this._roundCapEnd(B, k, G, e, o)
                    }
                    for (var U = m.indiceStart, z = M + 2, j = m.vertexStart; z < j; z++) x[U++] = z - 2, x[U++] = z - 1, x[U++] = z;
                    m.indiceStart = U
                }
            }, e.prototype._expandFill = function(t) {
                for (var e = t._impl, i = e._paths, n = 0, r = e._pathOffset, s = e._pathLength; r < s; r++) {
                    n += i[r].points.length
                }
                for (var o = this.genBuffer(t, n), a = o.meshbuffer, l = a._vData, h = a._iData, c = e._pathOffset, u = e._pathLength; c < u; c++) {
                    var _ = i[c],
                        f = _.points,
                        d = f.length;
                    if (0 !== d) {
                        for (var p = o.vertexStart, y = 0; y < d; ++y) this._vset(f[y].x, f[y].y);
                        var v = o.indiceStart;
                        if (_.complex) {
                            for (var g = [], x = p, b = o.vertexStart; x < b; x++) {
                                var A = 3 * x;
                                g.push(l[A]), g.push(l[A + 1])
                            }
                            var C = m(g, null, 2);
                            if (!C || 0 === C.length) continue;
                            for (var T = 0, S = C.length; T < S; T++) h[v++] = C[T] + p
                        } else
                            for (var w = p, E = p + 2, M = o.vertexStart; E < M; E++) h[v++] = w, h[v++] = E - 1, h[v++] = E;
                        o.indiceStart = v
                    }
                }
            }, e.prototype._calculateJoins = function(t, e, i, n) {
                var r = 0;
                e > 0 && (r = 1 / e);
                for (var s = t._paths, o = t._pathOffset, a = t._pathLength; o < a; o++) {
                    var l = s[o],
                        h = l.points,
                        c = h.length,
                        u = h[c - 1],
                        _ = h[0];
                    l.nbevel = 0;
                    for (var p = 0; p < c; p++) {
                        var m, y, x = u.dy,
                            b = -u.dx,
                            A = _.dy,
                            C = -_.dx;
                        if (_.dmx = .5 * (x + A), _.dmy = .5 * (b + C), (m = _.dmx * _.dmx + _.dmy * _.dmy) > 1e-6) {
                            var T = 1 / m;
                            T > 600 && (T = 600), _.dmx *= T, _.dmy *= T
                        }
                        _.dx * u.dy - u.dx * _.dy > 0 && (0, _.flags |= f.PT_LEFT), m * (y = g(11, v(u.len, _.len) * r)) * y < 1 && (_.flags |= f.PT_INNERBEVEL), _.flags & f.PT_CORNER && (m * n * n < 1 || i === d.BEVEL || i === d.ROUND) && (_.flags |= f.PT_BEVEL), 0 != (_.flags & (f.PT_BEVEL | f.PT_INNERBEVEL)) && l.nbevel++, u = _, _ = h[p + 1]
                    }
                }
            }, e.prototype._flattenPaths = function(t) {
                for (var e = t._paths, i = t._pathOffset, n = t._pathLength; i < n; i++) {
                    var r = e[i],
                        s = r.points,
                        o = s[s.length - 1],
                        a = s[0];
                    o.equals(a) && (r.closed = !0, s.pop(), o = s[s.length - 1]);
                    for (var l = 0, h = s.length; l < h; l++) {
                        var c = a.sub(o);
                        o.len = c.mag(), (c.x || c.y) && c.normalizeSelf(), o.dx = c.x, o.dy = c.y, o = a, a = s[l + 1]
                    }
                }
            }, e.prototype._chooseBevel = function(t, e, i, n) {
                var r = i.x,
                    s = i.y,
                    o = void 0,
                    a = void 0,
                    l = void 0,
                    h = void 0;
                return 0 !== t ? (o = r + e.dy * n, a = s - e.dx * n, l = r + i.dy * n, h = s - i.dx * n) : (o = l = r + i.dmx * n, a = h = s + i.dmy * n), [o, a, l, h]
            }, e.prototype._buttCapStart = function(t, e, i, n, r) {
                var s = t.x - e * r,
                    o = t.y - i * r,
                    a = i,
                    l = -e;
                this._vset(s + a * n, o + l * n), this._vset(s - a * n, o - l * n)
            }, e.prototype._buttCapEnd = function(t, e, i, n, r) {
                var s = t.x + e * r,
                    o = t.y + i * r,
                    a = i,
                    l = -e;
                this._vset(s + a * n, o + l * n), this._vset(s - a * n, o - l * n)
            }, e.prototype._roundCapStart = function(t, e, i, n, r) {
                for (var s = t.x, o = t.y, a = i, l = -e, h = 0; h < r; h++) {
                    var c = h / (r - 1) * y,
                        u = A(c) * n,
                        _ = C(c) * n;
                    this._vset(s - a * u - e * _, o - l * u - i * _), this._vset(s, o)
                }
                this._vset(s + a * n, o + l * n), this._vset(s - a * n, o - l * n)
            }, e.prototype._roundCapEnd = function(t, e, i, n, r) {
                var s = t.x,
                    o = t.y,
                    a = i,
                    l = -e;
                this._vset(s + a * n, o + l * n), this._vset(s - a * n, o - l * n);
                for (var h = 0; h < r; h++) {
                    var c = h / (r - 1) * y,
                        u = A(c) * n,
                        _ = C(c) * n;
                    this._vset(s, o), this._vset(s - a * u + e * _, o - l * u + i * _)
                }
            }, e.prototype._roundJoin = function(t, e, i, n, r) {
                var s = t.dy,
                    o = -t.dx,
                    a = e.dy,
                    l = -e.dx,
                    h = e.x,
                    c = e.y;
                if (0 != (e.flags & f.PT_LEFT)) {
                    var u = this._chooseBevel(e.flags & f.PT_INNERBEVEL, t, e, i),
                        _ = u[0],
                        d = u[1],
                        p = u[2],
                        m = u[3],
                        v = T(-o, -s),
                        g = T(-l, -a);
                    g > v && (g -= 2 * y), this._vset(_, d), this._vset(h - s * n, e.y - o * n);
                    for (var b = w(x((v - g) / y) * r, 2, r), S = 0; S < b; S++) {
                        var E = v + S / (b - 1) * (g - v),
                            M = h + A(E) * n,
                            D = c + C(E) * n;
                        this._vset(h, c), this._vset(M, D)
                    }
                    this._vset(p, m), this._vset(h - a * n, c - l * n)
                } else {
                    var B = this._chooseBevel(e.flags & f.PT_INNERBEVEL, t, e, -n),
                        I = B[0],
                        P = B[1],
                        R = B[2],
                        O = B[3],
                        L = T(o, s),
                        F = T(l, a);
                    F < L && (F += 2 * y), this._vset(h + s * n, c + o * n), this._vset(I, P);
                    for (var N = w(x((F - L) / y) * r, 2, r), V = 0; V < N; V++) {
                        var k = L + V / (N - 1) * (F - L),
                            G = h + A(k) * i,
                            U = c + C(k) * i;
                        this._vset(G, U), this._vset(h, c)
                    }
                    this._vset(h + a * n, c + l * n), this._vset(R, O)
                }
            }, e.prototype._bevelJoin = function(t, e, i, n) {
                var r = void 0,
                    s = void 0,
                    o = void 0,
                    a = void 0,
                    l = void 0,
                    h = void 0,
                    c = void 0,
                    u = void 0,
                    _ = t.dy,
                    d = -t.dx,
                    p = e.dy,
                    m = -e.dx;
                if (e.flags & f.PT_LEFT) {
                    var y = this._chooseBevel(e.flags & f.PT_INNERBEVEL, t, e, i);
                    l = y[0], h = y[1], c = y[2], u = y[3], this._vset(l, h), this._vset(e.x - _ * n, e.y - d * n), this._vset(c, u), this._vset(e.x - p * n, e.y - m * n)
                } else {
                    var v = this._chooseBevel(e.flags & f.PT_INNERBEVEL, t, e, -n);
                    r = v[0], s = v[1], o = v[2], a = v[3], this._vset(e.x + _ * i, e.y + d * i), this._vset(r, s), this._vset(e.x + p * i, e.y + m * i), this._vset(o, a)
                }
            }, e.prototype._vset = function(t, e) {
                var i = this._buffer,
                    n = i.meshbuffer,
                    r = 3 * i.vertexStart,
                    s = n._vData,
                    o = n._uintVData;
                s[r] = t, s[r + 1] = e, o[r + 2] = this._curColor, i.vertexStart++, n._dirty = !0
            }, e
        })(n.default);
        i.default = E, n.default.register(cc.Graphics, E), e.exports = i.default
    }), {
        "../../../../../renderer/core/input-assembler": 350,
        "../../../../graphics/graphics": 140,
        "../../../../graphics/types": 143,
        "../../../assembler": 227,
        "../../../index": 247,
        "../../mesh-buffer": 283,
        "../../vertex-format": 288,
        "./earcut": 256,
        "./impl": 257
    }],
    259: [(function(t, e, i) {
        "use strict";
        cc.assemblers = {}, t("./sprite"), t("./mask-assembler"), t("./graphics"), t("./label"), t("./motion-streak")
    }), {
        "./graphics": 258,
        "./label": 266,
        "./mask-assembler": 267,
        "./motion-streak": 268,
        "./sprite": 281
    }],
    260: [(function(t, e, i) {
        "use strict";

        function n(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }

        function r(t, e) {
            if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
            return !e || "object" != typeof e && "function" != typeof e ? t : e
        }

        function s(t, e) {
            if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e);
            t.prototype = Object.create(e && e.prototype, {
                constructor: {
                    value: t,
                    enumerable: !1,
                    writable: !0,
                    configurable: !0
                }
            }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e)
        }
        i.__esModule = !0, i.default = void 0;
        var o = 0,
            a = (function(t) {
                function e() {
                    return n(this, e), r(this, t.apply(this, arguments))
                }
                return s(e, t), e.prototype.initData = function() {
                    this._renderData.createFlexData(0, 4, 6, this.getVfmt())
                }, e.prototype._reserveQuads = function(t, e) {
                    var i = 4 * e,
                        n = 6 * e,
                        r = this._renderData._flexBuffer;
                    r.reserve(i, n), r.used(i, n);
                    for (var s = this._renderData.iDatas[0], a = 0, l = 0, h = n; a < h; a += 6, l += 4) s[a] = l, s[a + 1] = l + 1, s[a + 2] = l + 2, s[a + 3] = l + 1, s[a + 4] = l + 3, s[a + 5] = l + 2;
                    o = 0
                }, e.prototype._quadsUpdated = function(t) {
                    o = 0, this._renderData._flexBuffer.used(this.verticesCount, this.indicesCount)
                }, e.prototype._getColor = function(t) {
                    return t.node._color._val
                }, e.prototype.appendQuad = function(t, e, i, n, r, s, a) {
                    var l = this._renderData,
                        h = l.vDatas[0],
                        c = l.uintVDatas[0];
                    this.verticesCount += 4, this.indicesCount = this.verticesCount / 2 * 3;
                    var u = e.width,
                        _ = e.height,
                        f = i.width,
                        d = i.height,
                        p = this._getColor(t),
                        m = void 0,
                        y = void 0,
                        v = void 0,
                        g = void 0,
                        x = this.floatsPerVert,
                        b = o + this.uvOffset;
                    n ? (m = i.x / u, v = (i.x + d) / u, y = (i.y + f) / _, g = i.y / _, h[b] = m, h[b + 1] = g, h[b += x] = m, h[b + 1] = y, h[b += x] = v, h[b + 1] = g, h[b += x] = v, h[b + 1] = y) : (m = i.x / u, v = (i.x + f) / u, y = (i.y + d) / _, g = i.y / _, h[b] = m, h[b + 1] = y, h[b += x] = v, h[b + 1] = y, h[b += x] = m, h[b + 1] = g, h[b += x] = v, h[b + 1] = g), m = r, v = r + f * a, y = s - d * a, g = s, this.appendVerts(t, o, m, v, y, g);
                    for (var A = o + this.colorOffset, C = 0; C < 4; C++) c[A] = p, A += x;
                    o += 4 * this.floatsPerVert
                }, e.prototype.appendVerts = function(t, e, i, n, r, s) {
                    var o = this._local,
                        a = this.floatsPerVert;
                    o[e] = i, o[e + 1] = r, o[e += a] = n, o[e + 1] = r, o[e += a] = i, o[e + 1] = s, o[e += a] = n, o[e + 1] = s
                }, e.prototype.updateWorldVerts = function(t) {
                    for (var e = t.node._worldMatrix.m, i = e[0], n = e[1], r = e[4], s = e[5], o = e[12], a = e[13], l = this._local, h = this._renderData.vDatas[0], c = this.floatsPerVert, u = 0; u < l.length; u += c) {
                        var _ = l[u],
                            f = l[u + 1];
                        h[u] = _ * i + f * r + o, h[u + 1] = _ * n + f * s + a
                    }
                }, e
            })(function(t) {
                return t && t.__esModule ? t : {
                    default: t
                }
            }(t("../../../../utils/label/bmfont")).default);
        i.default = a, e.exports = i.default
    }), {
        "../../../../utils/label/bmfont": 251
    }],
    261: [(function(t, e, i) {
        "use strict";

        function n(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }

        function r(t, e) {
            if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
            return !e || "object" != typeof e && "function" != typeof e ? t : e
        }

        function s(t, e) {
            if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e);
            t.prototype = Object.create(e && e.prototype, {
                constructor: {
                    value: t,
                    enumerable: !1,
                    writable: !0,
                    configurable: !0
                }
            }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e)
        }
        i.__esModule = !0;
        t("../../../../../platform/js"), t("./bmfont");
        var o = t("../../../../utils/label/letter-font"),
            a = cc.color(255, 255, 255, 255),
            l = (function(t) {
                function e() {
                    return n(this, e), r(this, t.apply(this, arguments))
                }
                return s(e, t), e.prototype.createData = function(t) {
                    return t.requestRenderData()
                }, e.prototype._getColor = function(t) {
                    return a._fastSetA(t.node._color.a), a._val
                }, e.prototype.updateColor = function(e) {
                    var i = this._getColor(e);
                    t.prototype.updateColor.call(this, e, i)
                }, e
            })(o);
        i.default = l, e.exports = i.default
    }), {
        "../../../../../platform/js": 218,
        "../../../../utils/label/letter-font": 253,
        "./bmfont": 260
    }],
    262: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.default = void 0;
        var n = (function(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        })(t("../../../../utils/label/ttf"));

        function r(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }

        function s(t, e) {
            if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
            return !e || "object" != typeof e && "function" != typeof e ? t : e
        }

        function o(t, e) {
            if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e);
            t.prototype = Object.create(e && e.prototype, {
                constructor: {
                    value: t,
                    enumerable: !1,
                    writable: !0,
                    configurable: !0
                }
            }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e)
        }
        var a = t("../../../../../components/CCLabelShadow"),
            l = cc.color(255, 255, 255, 255),
            h = (function(t) {
                function e() {
                    return r(this, e), s(this, t.apply(this, arguments))
                }
                return o(e, t), e.prototype.updateUVs = function(t) {
                    for (var e = this._renderData.vDatas[0], i = t._frame.uv, n = this.uvOffset, r = this.floatsPerVert, s = 0; s < 4; s++) {
                        var o = 2 * s,
                            a = r * s + n;
                        e[a] = i[o], e[a + 1] = i[o + 1]
                    }
                }, e.prototype.updateColor = function(e) {
                    l._fastSetA(e.node._color.a);
                    var i = l._val;
                    t.prototype.updateColor.call(this, e, i)
                }, e.prototype.updateVerts = function(t) {
                    var e = t.node,
                        i = t._ttfTexture.width,
                        n = t._ttfTexture.height,
                        r = e.anchorX * e.width,
                        s = e.anchorY * e.height,
                        o = a && t.getComponent(a);
                    if (o && o._enabled) {
                        var l = (i - e.width) / 2,
                            h = (n - e.height) / 2,
                            c = o.offset; - c.x > l ? r += i - e.width : l > c.x && (r += l - c.x), -c.y > h ? s += n - e.height : h > c.y && (s += h - c.y)
                    }
                    var u = this._local;
                    u[0] = -r, u[1] = -s, u[2] = i - r, u[3] = n - s, this.updateUVs(t), this.updateWorldVerts(t)
                }, e
            })(n.default);
        i.default = h, e.exports = i.default
    }), {
        "../../../../../components/CCLabelShadow": 99,
        "../../../../utils/label/ttf": 254
    }],
    263: [(function(t, e, i) {
        "use strict";

        function n(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }

        function r(t, e) {
            if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
            return !e || "object" != typeof e && "function" != typeof e ? t : e
        }

        function s(t, e) {
            if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e);
            t.prototype = Object.create(e && e.prototype, {
                constructor: {
                    value: t,
                    enumerable: !1,
                    writable: !0,
                    configurable: !0
                }
            }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e)
        }
        i.__esModule = !0;
        var o = t("../../../../assembler-3d"),
            a = t("../2d/bmfont"),
            l = cc.vmath.vec3,
            h = l.create(),
            c = l.create(),
            u = (function(t) {
                function e() {
                    return n(this, e), r(this, t.apply(this, arguments))
                }
                return s(e, t), e
            })(a);
        i.default = u, cc.js.mixin(u.prototype, o, {
            updateWorldVerts: function(t) {
                for (var e = t.node._worldMatrix, i = this._local, n = this._renderData.vDatas[0], r = this.floatsPerVert, s = 0; s < n.length; s += r) l.set(h, i[s], i[s + 1], 0), l.transformMat4(c, h, e), n[s] = c.x, n[s + 1] = c.y, n[s + 2] = c.z
            }
        }), e.exports = i.default
    }), {
        "../../../../assembler-3d": 225,
        "../2d/bmfont": 260
    }],
    264: [(function(t, e, i) {
        "use strict";

        function n(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }

        function r(t, e) {
            if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
            return !e || "object" != typeof e && "function" != typeof e ? t : e
        }

        function s(t, e) {
            if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e);
            t.prototype = Object.create(e && e.prototype, {
                constructor: {
                    value: t,
                    enumerable: !1,
                    writable: !0,
                    configurable: !0
                }
            }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e)
        }
        i.__esModule = !0;
        var o = t("../../../../assembler-3d"),
            a = (function(t) {
                function e() {
                    return n(this, e), r(this, t.apply(this, arguments))
                }
                return s(e, t), e
            })(t("../2d/letter"));
        i.default = a, cc.js.mixin(a.prototype, o), e.exports = i.default
    }), {
        "../../../../assembler-3d": 225,
        "../2d/letter": 261
    }],
    265: [(function(t, e, i) {
        "use strict";

        function n(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }

        function r(t, e) {
            if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
            return !e || "object" != typeof e && "function" != typeof e ? t : e
        }

        function s(t, e) {
            if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e);
            t.prototype = Object.create(e && e.prototype, {
                constructor: {
                    value: t,
                    enumerable: !1,
                    writable: !0,
                    configurable: !0
                }
            }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e)
        }
        i.__esModule = !0;
        var o = t("../../../../assembler-3d"),
            a = (function(t) {
                function e() {
                    return n(this, e), r(this, t.apply(this, arguments))
                }
                return s(e, t), e
            })(t("../2d/ttf"));
        i.default = a, cc.js.mixin(a.prototype, o), e.exports = i.default
    }), {
        "../../../../assembler-3d": 225,
        "../2d/ttf": 262
    }],
    266: [(function(t, e, i) {
        "use strict";
        var n = u(t("../../../assembler")),
            r = u(t("../../../../components/CCLabel")),
            s = u(t("./2d/ttf")),
            o = u(t("./2d/bmfont")),
            a = u(t("./2d/letter")),
            l = u(t("./3d/ttf")),
            h = u(t("./3d/bmfont")),
            c = u(t("./3d/letter"));

        function u(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }
        r.default._canvasPool = {
            pool: [],
            get: function() {
                var t = this.pool.pop();
                if (!t) {
                    var e = document.createElement("canvas");
                    t = {
                        canvas: e,
                        context: e.getContext("2d")
                    }
                }
                return t
            },
            put: function(t) {
                this.pool.length >= 32 || this.pool.push(t)
            }
        }, n.default.register(cc.Label, {
            getConstructor: function(t) {
                var e = t.node.is3DNode,
                    i = e ? l.default : s.default;
                return t.font instanceof cc.BitmapFont ? i = e ? h.default : o.default : t.cacheMode === r.default.CacheMode.CHAR && (cc.sys.browserType === cc.sys.BROWSER_TYPE_WECHAT_GAME_SUB ? cc.warn("sorry, subdomain does not support CHAR mode currently!") : i = e ? c.default : a.default), i
            },
            TTF: s.default,
            Bmfont: o.default,
            Letter: a.default,
            TTF3D: l.default,
            Bmfont3D: h.default,
            Letter3D: c.default
        })
    }), {
        "../../../../components/CCLabel": 97,
        "../../../assembler": 227,
        "./2d/bmfont": 260,
        "./2d/letter": 261,
        "./2d/ttf": 262,
        "./3d/bmfont": 263,
        "./3d/letter": 264,
        "./3d/ttf": 265
    }],
    267: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.MaskAssembler = void 0;
        var n = (function(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        })(t("../../assembler"));

        function r(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }

        function s(t, e) {
            if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
            return !e || "object" != typeof e && "function" != typeof e ? t : e
        }

        function o(t, e) {
            if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e);
            t.prototype = Object.create(e && e.prototype, {
                constructor: {
                    value: t,
                    enumerable: !1,
                    writable: !0,
                    configurable: !0
                }
            }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e)
        }
        var a = t("../../../components/CCMask"),
            l = t("../../render-flow"),
            h = t("./sprite/2d/simple"),
            c = t("./graphics"),
            u = t("../../../../renderer/gfx"),
            _ = t("../vertex-format").vfmtPos,
            f = 8,
            d = [];

        function p() {
            return 1 << d.length - 1
        }

        function m() {
            for (var t = 0, e = 0; e < d.length; ++e) t += 1 << e;
            return t
        }

        function y(t, e, i, n, r, s) {
            var o = t.effect,
                a = u.STENCIL_OP_KEEP,
                l = u.STENCIL_OP_KEEP;
            o.setStencil(u.STENCIL_ENABLE, e, n, r, i, a, l, s)
        }

        function v(t) {
            d.length + 1 > f && cc.errorID(9e3, f), d.push(t)
        }

        function g(t, e) {
            0 === d.length && cc.errorID(9001), d.pop(), 0 === d.length ? e._flushMaterial(t._exitMaterial) : A(e)
        }

        function x(t, e) {
            var i = u.DS_FUNC_NEVER,
                n = p(),
                r = n,
                s = n,
                o = t.inverted ? u.STENCIL_OP_REPLACE : u.STENCIL_OP_ZERO;
            y(t._clearMaterial, i, o, n, r, s);
            var a = e.getBuffer("mesh", _),
                l = a.request(4, 6),
                h = l.indiceOffset,
                c = l.byteOffset >> 2,
                f = l.vertexOffset,
                d = a._vData,
                m = a._iData;
            d[c++] = -1, d[c++] = -1, d[c++] = -1, d[c++] = 1, d[c++] = 1, d[c++] = 1, d[c++] = 1, d[c++] = -1, m[h++] = f, m[h++] = f + 3, m[h++] = f + 1, m[h++] = f + 1, m[h++] = f + 3, m[h++] = f + 2, e.node = e._dummyNode, e.material = t._clearMaterial, e._flush()
        }

        function b(t, e) {
            var i = u.DS_FUNC_NEVER,
                n = p(),
                r = n,
                s = n,
                o = t.inverted ? u.STENCIL_OP_ZERO : u.STENCIL_OP_REPLACE;
            y(t.sharedMaterials[0], i, o, n, r, s), e.material = t.sharedMaterials[0], t._type === a.Type.IMAGE_STENCIL ? (e.node = e._dummyNode, h.prototype.fillBuffers.call(t._assembler, t, e), e._flush()) : (e.node = t.node, c.prototype.fillBuffers.call(t._graphics._assembler, t._graphics, e))
        }

        function A(t) {
            var e = u.DS_FUNC_EQUAL,
                i = u.STENCIL_OP_KEEP,
                n = m(),
                r = n,
                s = p(),
                o = d[d.length - 1];
            y(o._enableMaterial, e, i, n, r, s), t._flushMaterial(o._enableMaterial)
        }
        var C = i.MaskAssembler = (function(t) {
            function e() {
                return r(this, e), s(this, t.apply(this, arguments))
            }
            return o(e, t), e.prototype.updateRenderData = function(t) {
                t._type === a.Type.IMAGE_STENCIL ? t.spriteFrame ? h.prototype.updateRenderData.call(this, t) : t.setMaterial(0, null) : (t._graphics.setMaterial(0, t.sharedMaterials[0]), c.prototype.updateRenderData.call(t._graphics._assembler, t._graphics, t._graphics))
            }, e.prototype.fillBuffers = function(t, e) {
                (t._type !== a.Type.IMAGE_STENCIL || t.spriteFrame) && (v(t), x(t, e), b(t, e), A(e)), t.node._renderFlag |= l.FLAG_UPDATE_RENDER_DATA
            }, e.prototype.postFillBuffers = function(t, e) {
                (t._type !== a.Type.IMAGE_STENCIL || t.spriteFrame) && g(t, e), t.node._renderFlag |= l.FLAG_UPDATE_RENDER_DATA
            }, e
        })(h);
        n.default.register(a, C)
    }), {
        "../../../../renderer/gfx": 360,
        "../../../components/CCMask": 101,
        "../../assembler": 227,
        "../../render-flow": 248,
        "../vertex-format": 288,
        "./graphics": 258,
        "./sprite/2d/simple": 272
    }],
    268: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.default = void 0;
        var n = (function(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        })(t("../../assembler-2d"));

        function r(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }

        function s(t, e) {
            if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
            return !e || "object" != typeof e && "function" != typeof e ? t : e
        }

        function o(t, e) {
            if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e);
            t.prototype = Object.create(e && e.prototype, {
                constructor: {
                    value: t,
                    enumerable: !1,
                    writable: !0,
                    configurable: !0
                }
            }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e)
        }
        var a = t("../../../components/CCMotionStreak"),
            l = t("../../render-flow");

        function h(t, e) {
            this.point = t || cc.v2(), this.dir = e || cc.v2(), this.distance = 0, this.time = 0
        }
        h.prototype.setPoint = function(t, e) {
            this.point.x = t, this.point.y = e
        }, h.prototype.setDir = function(t, e) {
            this.dir.x = t, this.dir.y = e
        };
        cc.v2(), cc.v2();
        var c = cc.v2(),
            u = cc.v2();

        function _(t, e) {
            return t.x = -e.y, t.y = e.x, t
        }
        var f = (function(t) {
            function e() {
                return r(this, e), s(this, t.apply(this, arguments))
            }
            return o(e, t), e.prototype.initData = function() {
                this._renderData.createFlexData(0, 16, 42)
            }, e.prototype.update = function(t, e) {
                var i = t._stroke / 2,
                    n = t.node._worldMatrix.m,
                    r = n[12],
                    s = n[13],
                    o = t._points,
                    a = void 0;
                if (o.length > 1) {
                    var l = o[0].point.x - r,
                        f = o[0].point.y - s;
                    l * l + f * f < t.minSeg && (a = o[0])
                }
                a || (a = new h, o.splice(0, 0, a)), a.setPoint(r, s), a.time = t._fadeTime + e;
                var d, p = 0;
                if (!(o.length < 2)) {
                    var m = t._color,
                        y = m.r,
                        v = m.g,
                        g = m.b,
                        x = m.a,
                        b = o[1];
                    b.distance = a.point.sub(b.point, u).mag(), u.normalizeSelf(), b.setDir(u.x, u.y), a.setDir(u.x, u.y);
                    var A = this._renderData._flexBuffer;
                    A.reserve(2 * o.length, 6 * (o.length - 1));
                    for (var C = A.vData, T = A.uintVData, S = t._fadeTime, w = !1, E = o.length - 1; E >= 0; E--) {
                        var M = o[E],
                            D = M.point,
                            B = M.dir;
                        if (M.time -= e, M.time < 0) o.splice(E, 1);
                        else {
                            var I = M.time / S,
                                P = o[E - 1];
                            if (!w) {
                                if (!P) {
                                    o.splice(E, 1);
                                    continue
                                }
                                D.x = P.point.x - B.x * I, D.y = P.point.y - B.y * I
                            }
                            w = !0, _(c, B);
                            var R = (I * x << 24 >>> 0) + (g << 16) + (v << 8) + y,
                                O = 5 * p;
                            C[O] = D.x + c.x * i, C[O + 1] = D.y + c.y * i, C[O + 2] = 1, C[O + 3] = I, T[O + 4] = R, C[O += 5] = D.x - c.x * i, C[O + 1] = D.y - c.y * i, C[O + 2] = 0, C[O + 3] = I, T[O + 4] = R, p += 2
                        }
                    }
                    d = p <= 2 ? 0 : 3 * (p - 2), A.used(p, d)
                }
            }, e.prototype.fillBuffers = function(t, e) {
                var i = this._renderData._flexBuffer,
                    n = i.vData,
                    r = i.usedVertices,
                    s = i.usedIndices,
                    o = i.usedVerticesFloats,
                    a = e._meshBuffer,
                    h = a.request(r, s),
                    c = h.byteOffset >> 2,
                    u = a._vData;
                n.length + c > u.length ? u.set(n.subarray(0, o), c) : u.set(n, c);
                for (var _ = a._iData, f = h.indiceOffset, d = h.vertexOffset, p = 0, m = r; p < m; p += 2) {
                    var y = d + p;
                    _[f++] = y, _[f++] = y + 2, _[f++] = y + 1, _[f++] = y + 1, _[f++] = y + 2, _[f++] = y + 3
                }
                t.node._renderFlag |= l.FLAG_UPDATE_RENDER_DATA
            }, e
        })(n.default);
        i.default = f, f.register(a, f), e.exports = i.default
    }), {
        "../../../components/CCMotionStreak": 102,
        "../../assembler-2d": 224,
        "../../render-flow": 248
    }],
    269: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.default = void 0;
        var n = (function(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        })(t("../../../../assembler-2d"));

        function r(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }

        function s(t, e) {
            if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
            return !e || "object" != typeof e && "function" != typeof e ? t : e
        }

        function o(t, e) {
            if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e);
            t.prototype = Object.create(e && e.prototype, {
                constructor: {
                    value: t,
                    enumerable: !1,
                    writable: !0,
                    configurable: !0
                }
            }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e)
        }
        var a = t("../../../../../components/CCSprite").FillType,
            l = (function(t) {
                function e() {
                    return r(this, e), s(this, t.apply(this, arguments))
                }
                return o(e, t), e.prototype.updateRenderData = function(t) {
                    var e = t._spriteFrame;
                    if (e && (this.packToDynamicAtlas(t, e), t._vertsDirty)) {
                        var i = t._fillStart,
                            n = t._fillRange;
                        n < 0 && (i += n, n = -n), n = i + n, i = (i = i > 1 ? 1 : i) < 0 ? 0 : i, n = (n = n > 1 ? 1 : n) < 0 ? 0 : n;
                        var r = i + (n = (n -= i) < 0 ? 0 : n);
                        r = r > 1 ? 1 : r, this.updateUVs(t, i, r), this.updateVerts(t, i, r), t._vertsDirty = !1
                    }
                }, e.prototype.updateUVs = function(t, e, i) {
                    var n = t._spriteFrame,
                        r = n._texture.width,
                        s = n._texture.height,
                        o = n._rect,
                        l = void 0,
                        h = void 0,
                        c = void 0,
                        u = void 0,
                        _ = void 0,
                        f = void 0,
                        d = void 0,
                        p = void 0,
                        m = void 0,
                        y = void 0;
                    n._rotated ? (l = o.x / r, h = (o.y + o.width) / s, c = _ = l, d = m = (o.x + o.height) / r, f = y = h, u = p = o.y / s) : (l = o.x / r, h = (o.y + o.height) / s, c = d = l, _ = m = (o.x + o.width) / r, u = f = h, p = y = o.y / s);
                    var v = this._renderData.vDatas[0],
                        g = this.uvOffset,
                        x = this.floatsPerVert;
                    switch (t._fillType) {
                        case a.HORIZONTAL:
                            v[g] = c + (_ - c) * e, v[g + 1] = u + (f - u) * e, v[g + x] = c + (_ - c) * i, v[g + x + 1] = u + (f - u) * i, v[g + 2 * x] = d + (m - d) * e, v[g + 2 * x + 1] = p + (y - p) * e, v[g + 3 * x] = d + (m - d) * i, v[g + 3 * x + 1] = p + (y - p) * i;
                            break;
                        case a.VERTICAL:
                            v[g] = c + (d - c) * e, v[g + 1] = u + (p - u) * e, v[g + x] = _ + (m - _) * e, v[g + x + 1] = f + (y - f) * e, v[g + 2 * x] = c + (d - c) * i, v[g + 2 * x + 1] = u + (p - u) * i, v[g + 3 * x] = _ + (m - _) * i, v[g + 3 * x + 1] = f + (y - f) * i;
                            break;
                        default:
                            cc.errorID(2626)
                    }
                }, e.prototype.updateVerts = function(t, e, i) {
                    var n = t.node,
                        r = n.width,
                        s = n.height,
                        o = n.anchorX * r,
                        l = n.anchorY * s,
                        h = -o,
                        c = -l,
                        u = r - o,
                        _ = s - l,
                        f = void 0;
                    switch (t._fillType) {
                        case a.HORIZONTAL:
                            f = h + (u - h) * i, h = h + (u - h) * e, u = f;
                            break;
                        case a.VERTICAL:
                            f = c + (_ - c) * i, c = c + (_ - c) * e, _ = f;
                            break;
                        default:
                            cc.errorID(2626)
                    }
                    var d = this._local;
                    d[0] = h, d[1] = c, d[2] = u, d[3] = _, this.updateWorldVerts(t)
                }, e
            })(n.default);
        i.default = l, e.exports = i.default
    }), {
        "../../../../../components/CCSprite": 111,
        "../../../../assembler-2d": 224
    }],
    270: [(function(t, e, i) {
        "use strict";

        function n(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }

        function r(t, e) {
            if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
            return !e || "object" != typeof e && "function" != typeof e ? t : e
        }

        function s(t, e) {
            if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e);
            t.prototype = Object.create(e && e.prototype, {
                constructor: {
                    value: t,
                    enumerable: !1,
                    writable: !0,
                    configurable: !0
                }
            }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e)
        }
        i.__esModule = !0, i.default = void 0;
        var o = (function(t) {
            function e() {
                return n(this, e), r(this, t.apply(this, arguments))
            }
            return s(e, t), e.prototype.initData = function(t) {
                this._renderData.createFlexData(0, 4, 6, this.getVfmt())
            }, e.prototype.updateRenderData = function(t) {
                this.packToDynamicAtlas(t, t._spriteFrame);
                var e = t.spriteFrame;
                if (e) {
                    var i = e.vertices;
                    if (i) {
                        this.verticesCount = i.x.length, this.indicesCount = i.triangles.length;
                        var n = this._renderData._flexBuffer;
                        n.reserve(this.verticesCount, this.indicesCount) && (this.updateColor(t), t._vertsDirty = !0), n.used(this.verticesCount, this.indicesCount), this.updateIndices(i.triangles), t._vertsDirty && (this.updateUVs(t), this.updateVerts(t), this.updateWorldVerts(t), t._vertsDirty = !1)
                    }
                }
            }, e.prototype.updateIndices = function(t) {
                this._renderData.iDatas[0].set(t)
            }, e.prototype.updateUVs = function(t) {
                for (var e = t.spriteFrame.vertices, i = e.nu, n = e.nv, r = this.uvOffset, s = this.floatsPerVert, o = this._renderData.vDatas[0], a = 0; a < i.length; a++) {
                    var l = s * a + r;
                    o[l] = i[a], o[l + 1] = n[a]
                }
            }, e.prototype.updateVerts = function(t) {
                var e = t.node,
                    i = Math.abs(e.width),
                    n = Math.abs(e.height),
                    r = e.anchorX * i,
                    s = e.anchorY * n,
                    o = t.spriteFrame,
                    a = o.vertices,
                    l = a.x,
                    h = a.y,
                    c = o._originalSize.width,
                    u = o._originalSize.height,
                    _ = o._rect.width,
                    f = o._rect.height,
                    d = o._offset.x + (c - _) / 2,
                    p = o._offset.y + (u - f) / 2,
                    m = i / (t.trim ? _ : c),
                    y = n / (t.trim ? f : u),
                    v = this._local;
                if (t.trim)
                    for (var g = 0, x = l.length; g < x; g++) {
                        var b = 2 * g;
                        v[b] = (l[g] - d) * m - r, v[b + 1] = (u - h[g] - p) * y - s
                    } else
                        for (var A = 0, C = l.length; A < C; A++) {
                            var T = 2 * A;
                            v[T] = l[A] * m - r, v[T + 1] = (u - h[A]) * y - s
                        }
            }, e.prototype.updateWorldVerts = function(t) {
                for (var e = t.node._worldMatrix.m, i = e[0], n = e[1], r = e[4], s = e[5], o = e[12], a = e[13], l = this._local, h = this._renderData.vDatas[0], c = this.floatsPerVert, u = 0, _ = this.verticesCount; u < _; u++) {
                    var f = l[2 * u],
                        d = l[2 * u + 1];
                    h[c * u] = f * i + d * r + o, h[c * u + 1] = f * n + d * s + a
                }
            }, e
        })(function(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }(t("../../../../assembler-2d")).default);
        i.default = o, e.exports = i.default
    }), {
        "../../../../assembler-2d": 224
    }],
    271: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.default = void 0;
        var n = (function(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        })(t("../../../../assembler-2d"));

        function r(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }

        function s(t, e) {
            if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
            return !e || "object" != typeof e && "function" != typeof e ? t : e
        }

        function o(t, e) {
            if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e);
            t.prototype = Object.create(e && e.prototype, {
                constructor: {
                    value: t,
                    enumerable: !1,
                    writable: !0,
                    configurable: !0
                }
            }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e)
        }
        var a = 2 * Math.PI,
            l = [cc.v2(0, 0), cc.v2(0, 0), cc.v2(0, 0), cc.v2(0, 0)],
            h = [0, 0, 0, 0],
            c = [0, 0, 0, 0, 0, 0, 0, 0],
            u = [cc.v2(0, 0), cc.v2(0, 0), cc.v2(0, 0), cc.v2(0, 0)],
            _ = [cc.v2(0, 0), cc.v2(0, 0), cc.v2(0, 0), cc.v2(0, 0)],
            f = cc.v2(0, 0),
            d = [];

        function p(t, e, i, n, r, s, o) {
            var a = Math.sin(s),
                l = Math.cos(s),
                h = void 0,
                c = void 0;
            if (0 !== Math.cos(s)) {
                if (h = a / l, (t - r.x) * l > 0) {
                    var u = r.y + h * (t - r.x);
                    o[0].x = t, o[0].y = u
                }
                if ((e - r.x) * l > 0) {
                    var _ = r.y + h * (e - r.x);
                    o[2].x = e, o[2].y = _
                }
            }
            if (0 !== Math.sin(s)) {
                if (c = l / a, (n - r.y) * a > 0) {
                    var f = r.x + c * (n - r.y);
                    o[3].x = f, o[3].y = n
                }
                if ((i - r.y) * a > 0) {
                    var d = r.x + c * (i - r.y);
                    o[1].x = d, o[1].y = i
                }
            }
        }

        function m(t) {
            var e = t.node,
                i = e.width,
                n = e.height,
                r = e.anchorX * i,
                s = e.anchorY * n,
                o = -r,
                a = -s,
                c = i - r,
                u = n - s,
                _ = h;
            _[0] = o, _[1] = a, _[2] = c, _[3] = u;
            var p = t._fillCenter,
                m = f.x = Math.min(Math.max(0, p.x), 1) * (c - o) + o,
                y = f.y = Math.min(Math.max(0, p.y), 1) * (u - a) + a;
            l[0].x = l[3].x = o, l[1].x = l[2].x = c, l[0].y = l[1].y = a, l[2].y = l[3].y = u, d.length = 0, m !== _[0] && (d[0] = [3, 0]), m !== _[2] && (d[2] = [1, 2]), y !== _[1] && (d[1] = [0, 1]), y !== _[3] && (d[3] = [2, 3])
        }

        function y(t) {
            var e = t._texture.width,
                i = t._texture.height,
                n = t._rect,
                r = void 0,
                s = void 0,
                o = void 0,
                a = void 0,
                l = c;
            t._rotated ? (r = n.x / e, s = (n.x + n.height) / e, o = n.y / i, a = (n.y + n.width) / i, l[0] = l[2] = r, l[4] = l[6] = s, l[3] = l[7] = a, l[1] = l[5] = o) : (r = n.x / e, s = (n.x + n.width) / e, o = n.y / i, a = (n.y + n.height) / i, l[0] = l[4] = r, l[2] = l[6] = s, l[1] = l[3] = a, l[5] = l[7] = o)
        }

        function v(t, e) {
            var i, n;
            if (i = e.x - t.x, n = e.y - t.y, 0 !== i || 0 !== n) {
                if (0 === i) return n > 0 ? .5 * Math.PI : 1.5 * Math.PI;
                var r = Math.atan(n / i);
                return i < 0 && (r += Math.PI), r
            }
        }
        var g = (function(t) {
            function e() {
                return r(this, e), s(this, t.apply(this, arguments))
            }
            return o(e, t), e.prototype.initData = function(t) {
                this._renderData.createFlexData(0, 4, 6, this.getVfmt()), this.updateIndices()
            }, e.prototype.updateRenderData = function(e) {
                t.prototype.updateRenderData.call(this, e);
                var i = e.spriteFrame;
                if (i && (this.packToDynamicAtlas(e, i), e._vertsDirty)) {
                    var n = e._fillStart,
                        r = e._fillRange;
                    for (r < 0 && (n += r, r = -r); n >= 1;) n -= 1;
                    for (; n < 0;) n += 1;
                    n *= a, r *= a, m(e), y(i), p(h[0], h[2], h[1], h[3], f, n, u), p(h[0], h[2], h[1], h[3], f, n + r, _), this.updateVerts(e, n, r), e._vertsDirty = !1
                }
            }, e.prototype.updateVerts = function(t, e, i) {
                for (var n = e + i, r = this._local, s = 0, o = 3 * this.floatsPerVert, h = 0; h < 4; ++h) {
                    var c = d[h];
                    if (c)
                        if (i >= a) r.length = s + o, this._generateTriangle(r, s, f, l[c[0]], l[c[1]]), s += o;
                        else {
                            var p = v(f, l[c[0]]),
                                m = v(f, l[c[1]]);
                            m < p && (m += a), p -= a, m -= a;
                            for (var y = 0; y < 3; ++y) p >= n || (p >= e ? (r.length = s + o, m >= n ? this._generateTriangle(r, s, f, l[c[0]], _[h]) : this._generateTriangle(r, s, f, l[c[0]], l[c[1]]), s += o) : m <= e || (m <= n ? (r.length = s + o, this._generateTriangle(r, s, f, u[h], l[c[1]]), s += o) : (r.length = s + o, this._generateTriangle(r, s, f, u[h], _[h]), s += o))), p += a, m += a
                        }
                }
                this.allocWorldVerts(t), this.updateWorldVerts(t)
            }, e.prototype.allocWorldVerts = function(t) {
                var e = t.node._color._val,
                    i = this._renderData,
                    n = this.floatsPerVert,
                    r = this._local,
                    s = r.length / n;
                this.verticesCount = this.indicesCount = s;
                var o = i._flexBuffer;
                o.reserve(s, s) && this.updateIndices(), o.used(this.verticesCount, this.indicesCount);
                for (var a = i.vDatas[0], l = i.uintVDatas[0], h = this.uvOffset, c = 0; c < r.length; c += n) {
                    var u = c + h;
                    a[u] = r[u], a[u + 1] = r[u + 1], l[u + 2] = e
                }
            }, e.prototype.updateIndices = function() {
                for (var t = this._renderData.iDatas[0], e = 0; e < t.length; e++) t[e] = e
            }, e.prototype.updateWorldVerts = function(t) {
                for (var e = t.node._worldMatrix.m, i = e[0], n = e[1], r = e[4], s = e[5], o = e[12], a = e[13], l = this._local, h = this._renderData.vDatas[0], c = this.floatsPerVert, u = 0; u < l.length; u += c) {
                    var _ = l[u],
                        f = l[u + 1];
                    h[u] = _ * i + f * r + o, h[u + 1] = _ * n + f * s + a
                }
            }, e.prototype._generateTriangle = function(t, e, i, n, r) {
                var s = h,
                    o = s[0],
                    a = s[1],
                    l = s[2],
                    c = s[3],
                    u = this.floatsPerVert;
                t[e] = i.x, t[e + 1] = i.y, t[e + u] = n.x, t[e + u + 1] = n.y, t[e + 2 * u] = r.x, t[e + 2 * u + 1] = r.y;
                var _ = this.uvOffset,
                    f = void 0,
                    d = void 0;
                f = (i.x - o) / (l - o), d = (i.y - a) / (c - a), this._generateUV(f, d, t, e + _), f = (n.x - o) / (l - o), d = (n.y - a) / (c - a), this._generateUV(f, d, t, e + u + _), f = (r.x - o) / (l - o), d = (r.y - a) / (c - a), this._generateUV(f, d, t, e + 2 * u + _)
            }, e.prototype._generateUV = function(t, e, i, n) {
                var r = c,
                    s = r[0] + (r[2] - r[0]) * t,
                    o = r[4] + (r[6] - r[4]) * t,
                    a = r[1] + (r[3] - r[1]) * t,
                    l = r[5] + (r[7] - r[5]) * t;
                i[n] = s + (o - s) * e, i[n + 1] = a + (l - a) * e
            }, e
        })(n.default);
        i.default = g, e.exports = i.default
    }), {
        "../../../../assembler-2d": 224
    }],
    272: [(function(t, e, i) {
        "use strict";

        function n(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }

        function r(t, e) {
            if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
            return !e || "object" != typeof e && "function" != typeof e ? t : e
        }

        function s(t, e) {
            if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e);
            t.prototype = Object.create(e && e.prototype, {
                constructor: {
                    value: t,
                    enumerable: !1,
                    writable: !0,
                    configurable: !0
                }
            }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e)
        }
        i.__esModule = !0, i.default = void 0;
        var o = (function(t) {
            function e() {
                return n(this, e), r(this, t.apply(this, arguments))
            }
            return s(e, t), e.prototype.updateRenderData = function(t) {
                var e = t._spriteFrame;
                e && (this.packToDynamicAtlas(t, e), t._vertsDirty && (this.updateUVs(t), this.updateVerts(t), t._vertsDirty = !1))
            }, e.prototype.updateUVs = function(t) {
                for (var e = t._spriteFrame.uv, i = this.uvOffset, n = this.floatsPerVert, r = this._renderData.vDatas[0], s = 0; s < 4; s++) {
                    var o = 2 * s,
                        a = n * s + i;
                    r[a] = e[o], r[a + 1] = e[o + 1]
                }
            }, e.prototype.updateVerts = function(t) {
                var e = t.node,
                    i = e.width,
                    n = e.height,
                    r = e.anchorX * i,
                    s = e.anchorY * n,
                    o = void 0,
                    a = void 0,
                    l = void 0,
                    h = void 0;
                if (t.trim) o = -r, a = -s, l = i - r, h = n - s;
                else {
                    var c = t.spriteFrame,
                        u = c._originalSize.width,
                        _ = c._originalSize.height,
                        f = c._rect.width,
                        d = c._rect.height,
                        p = c._offset,
                        m = i / u,
                        y = n / _,
                        v = p.x + (u - f) / 2,
                        g = p.x - (u - f) / 2;
                    o = v * m - r, a = (p.y + (_ - d) / 2) * y - s, l = i + g * m - r, h = n + (p.y - (_ - d) / 2) * y - s
                }
                var x = this._local;
                x[0] = o, x[1] = a, x[2] = l, x[3] = h, this.updateWorldVerts(t)
            }, e
        })(function(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }(t("../../../../assembler-2d")).default);
        i.default = o, e.exports = i.default
    }), {
        "../../../../assembler-2d": 224
    }],
    273: [(function(t, e, i) {
        "use strict";

        function n(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }

        function r(t, e) {
            if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
            return !e || "object" != typeof e && "function" != typeof e ? t : e
        }

        function s(t, e) {
            if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e);
            t.prototype = Object.create(e && e.prototype, {
                constructor: {
                    value: t,
                    enumerable: !1,
                    writable: !0,
                    configurable: !0
                }
            }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e)
        }
        i.__esModule = !0, i.default = void 0;
        var o = (function(t) {
            function e() {
                return n(this, e), r(this, t.apply(this, arguments))
            }
            return s(e, t), e.prototype.initData = function(t) {
                if (!(this._renderData.meshCount > 0)) {
                    this._renderData.createData(0, this.verticesFloats, this.indicesCount);
                    for (var e = this._renderData.iDatas[0], i = 0, n = 0; n < 3; ++n)
                        for (var r = 0; r < 3; ++r) {
                            var s = 4 * n + r;
                            e[i++] = s, e[i++] = s + 1, e[i++] = s + 4, e[i++] = s + 1, e[i++] = s + 5, e[i++] = s + 4
                        }
                }
            }, e.prototype.initLocal = function() {
                this._local = [], this._local.length = 8
            }, e.prototype.updateRenderData = function(t) {
                var e = t._spriteFrame;
                e && (this.packToDynamicAtlas(t, e), t._vertsDirty && (this.updateUVs(t), this.updateVerts(t), t._vertsDirty = !1))
            }, e.prototype.updateVerts = function(t) {
                var e = t.node,
                    i = e.width,
                    n = e.height,
                    r = e.anchorX * i,
                    s = e.anchorY * n,
                    o = t.spriteFrame,
                    a = o.insetLeft,
                    l = o.insetRight,
                    h = o.insetTop,
                    c = o.insetBottom,
                    u = i - a - l,
                    _ = n - h - c,
                    f = i / (a + l),
                    d = n / (h + c);
                f = isNaN(f) || f > 1 ? 1 : f, d = isNaN(d) || d > 1 ? 1 : d, u = u < 0 ? 0 : u, _ = _ < 0 ? 0 : _;
                var p = this._local;
                p[0] = -r, p[1] = -s, p[2] = a * f - r, p[3] = c * d - s, p[4] = p[2] + u, p[5] = p[3] + _, p[6] = i - r, p[7] = n - s, this.updateWorldVerts(t)
            }, e.prototype.updateUVs = function(t) {
                for (var e = this._renderData.vDatas[0], i = t.spriteFrame.uvSliced, n = this.uvOffset, r = this.floatsPerVert, s = 0; s < 4; ++s)
                    for (var o = 0; o < 4; ++o) {
                        var a = 4 * s + o,
                            l = i[a],
                            h = a * r;
                        e[h + n] = l.u, e[h + n + 1] = l.v
                    }
            }, e.prototype.updateWorldVerts = function(t) {
                for (var e = t.node._worldMatrix.m, i = e[0], n = e[1], r = e[4], s = e[5], o = e[12], a = e[13], l = this._local, h = this._renderData.vDatas[0], c = this.floatsPerVert, u = 0; u < 4; ++u)
                    for (var _ = l[2 * u + 1], f = 0; f < 4; ++f) {
                        var d = l[2 * f],
                            p = (4 * u + f) * c;
                        h[p] = d * i + _ * r + o, h[p + 1] = d * n + _ * s + a
                    }
            }, e
        })(function(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }(t("../../../../assembler-2d")).default);
        i.default = o, Object.assign(o.prototype, {
            verticesCount: 16,
            indicesCount: 54
        }), e.exports = i.default
    }), {
        "../../../../assembler-2d": 224
    }],
    274: [(function(t, e, i) {
        "use strict";

        function n(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }

        function r(t, e) {
            if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
            return !e || "object" != typeof e && "function" != typeof e ? t : e
        }

        function s(t, e) {
            if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e);
            t.prototype = Object.create(e && e.prototype, {
                constructor: {
                    value: t,
                    enumerable: !1,
                    writable: !0,
                    configurable: !0
                }
            }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e)
        }
        i.__esModule = !0, i.default = void 0;
        var o = (function(t) {
            function e() {
                return n(this, e), r(this, t.apply(this, arguments))
            }
            return s(e, t), e.prototype.initData = function(t) {
                this.verticesCount = 0, this.contentWidth = 0, this.contentHeight = 0, this.rectWidth = 0, this.rectHeight = 0, this.hRepeat = 0, this.vRepeat = 0, this.row = 0, this.col = 0, this._renderData.createFlexData(0, 4, 6, this.getVfmt()), this._updateIndices()
            }, e.prototype.initLocal = function() {
                this._local = {
                    x: [],
                    y: []
                }
            }, e.prototype._updateIndices = function() {
                for (var t = this._renderData.iDatas[0], e = 0, i = 0, n = t.length; e < n; e += 6, i += 4) t[e] = i, t[e + 1] = i + 1, t[e + 2] = i + 2, t[e + 3] = i + 1, t[e + 4] = i + 3, t[e + 5] = i + 2
            }, e.prototype.updateRenderData = function(t) {
                var e = t._spriteFrame;
                if (e) {
                    this.packToDynamicAtlas(t, e);
                    var i = t.node,
                        n = this.contentWidth = Math.abs(i.width),
                        r = this.contentHeight = Math.abs(i.height),
                        s = e._rect,
                        o = this.rectWidth = s.width,
                        a = this.rectHeight = s.height,
                        l = this.hRepeat = n / o,
                        h = this.vRepeat = r / a,
                        c = (this.row = Math.ceil(h)) * (this.col = Math.ceil(l));
                    this.verticesCount = 4 * c, this.indicesCount = 6 * c;
                    var u = this._renderData._flexBuffer;
                    u.reserve(this.verticesCount, this.indicesCount) && (this._updateIndices(), this.updateColor(t)), u.used(this.verticesCount, this.indicesCount), t._vertsDirty && (this.updateUVs(t), this.updateVerts(t), t._vertsDirty = !1)
                }
            }, e.prototype.updateVerts = function(t) {
                var e = t.node,
                    i = e.anchorX * e.width,
                    n = e.anchorY * e.height,
                    r = this.row,
                    s = this.col,
                    o = this.rectWidth,
                    a = this.rectHeight,
                    l = this.contentWidth,
                    h = this.contentHeight,
                    c = this._local,
                    u = c.x,
                    _ = c.y;
                u.length = _.length = 0;
                for (var f = 0; f <= s; ++f) u[f] = Math.min(o * f, l) - i;
                for (var d = 0; d <= r; ++d) _[d] = Math.min(a * d, h) - n;
                this.updateWorldVerts(t)
            }, e.prototype.updateWorldVerts = function(t) {
                for (var e = this._renderData, i = this._local, n = i.x, r = i.y, s = e.vDatas[0], o = this.row, a = this.col, l = t.node._worldMatrix.m, h = l[0], c = l[1], u = l[4], _ = l[5], f = l[12], d = l[13], p = void 0, m = void 0, y = void 0, v = void 0, g = this.floatsPerVert, x = 0, b = 0, A = o; b < A; ++b) {
                    y = r[b], v = r[b + 1];
                    for (var C = 0, T = a; C < T; ++C) p = n[C], m = n[C + 1], s[x] = p * h + y * u + f, s[x + 1] = p * c + y * _ + d, s[x += g] = m * h + y * u + f, s[x + 1] = m * c + y * _ + d, s[x += g] = p * h + v * u + f, s[x + 1] = p * c + v * _ + d, s[x += g] = m * h + v * u + f, s[x + 1] = m * c + v * _ + d, x += g
                }
            }, e.prototype.updateUVs = function(t) {
                var e = this._renderData.vDatas[0];
                if (e)
                    for (var i = this.row, n = this.col, r = this.hRepeat, s = this.vRepeat, o = t.spriteFrame.uv, a = t.spriteFrame._rotated, l = this.floatsPerVert, h = this.uvOffset, c = 0, u = i; c < u; ++c)
                        for (var _ = Math.min(1, s - c), f = 0, d = n; f < d; ++f) {
                            var p = Math.min(1, r - f);
                            a ? (e[h] = o[0], e[h + 1] = o[1], e[h += l] = o[0], e[h + 1] = o[1] + (o[7] - o[1]) * p, e[h += l] = o[0] + (o[6] - o[0]) * _, e[h + 1] = o[1], e[h += l] = e[h - l], e[h + 1] = e[h + 1 - 2 * l], h += l) : (e[h] = o[0], e[h + 1] = o[1], e[h += l] = o[0] + (o[6] - o[0]) * p, e[h + 1] = o[1], e[h += l] = o[0], e[h + 1] = o[1] + (o[7] - o[1]) * _, e[h += l] = e[h - 2 * l], e[h + 1] = e[h + 1 - l], h += l)
                        }
            }, e
        })(function(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }(t("../../../../assembler-2d")).default);
        i.default = o, e.exports = i.default
    }), {
        "../../../../assembler-2d": 224
    }],
    275: [(function(t, e, i) {
        "use strict";

        function n(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }

        function r(t, e) {
            if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
            return !e || "object" != typeof e && "function" != typeof e ? t : e
        }

        function s(t, e) {
            if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e);
            t.prototype = Object.create(e && e.prototype, {
                constructor: {
                    value: t,
                    enumerable: !1,
                    writable: !0,
                    configurable: !0
                }
            }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e)
        }
        i.__esModule = !0;
        var o = t("../../../../assembler-3d"),
            a = (function(t) {
                function e() {
                    return n(this, e), r(this, t.apply(this, arguments))
                }
                return s(e, t), e
            })(t("../2d/bar-filled"));
        i.default = a, cc.js.mixin(a.prototype, o), e.exports = i.default
    }), {
        "../../../../assembler-3d": 225,
        "../2d/bar-filled": 269
    }],
    276: [(function(t, e, i) {
        "use strict";

        function n(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }

        function r(t, e) {
            if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
            return !e || "object" != typeof e && "function" != typeof e ? t : e
        }

        function s(t, e) {
            if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e);
            t.prototype = Object.create(e && e.prototype, {
                constructor: {
                    value: t,
                    enumerable: !1,
                    writable: !0,
                    configurable: !0
                }
            }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e)
        }
        i.__esModule = !0;
        var o = t("../../../../assembler-3d"),
            a = t("../2d/mesh"),
            l = cc.vmath.vec3,
            h = cc.v3(),
            c = (function(t) {
                function e() {
                    return n(this, e), r(this, t.apply(this, arguments))
                }
                return s(e, t), e
            })(a);
        i.default = c, cc.js.mixin(c.prototype, o, {
            updateWorldVerts: function(t) {
                for (var e = t.node._worldMatrix, i = this._local, n = this._renderData.vDatas[0], r = this.floatsPerVert, s = 0, o = i.length / 2; s < o; s++) {
                    l.set(h, i[2 * s], i[2 * s + 1], 0), l.transformMat4(h, h, e);
                    var a = r * s;
                    n[a] = h.x, n[a + 1] = h.y, n[a + 2] = h.z
                }
            }
        }), e.exports = i.default
    }), {
        "../../../../assembler-3d": 225,
        "../2d/mesh": 270
    }],
    277: [(function(t, e, i) {
        "use strict";

        function n(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }

        function r(t, e) {
            if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
            return !e || "object" != typeof e && "function" != typeof e ? t : e
        }

        function s(t, e) {
            if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e);
            t.prototype = Object.create(e && e.prototype, {
                constructor: {
                    value: t,
                    enumerable: !1,
                    writable: !0,
                    configurable: !0
                }
            }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e)
        }
        i.__esModule = !0;
        var o = t("../../../../assembler-3d"),
            a = t("../2d/radial-filled"),
            l = cc.vmath.vec3,
            h = l.create(),
            c = l.create(),
            u = (function(t) {
                function e() {
                    return n(this, e), r(this, t.apply(this, arguments))
                }
                return s(e, t), e
            })(a);
        i.default = u, cc.js.mixin(u.prototype, o, {
            updateWorldVerts: function(t) {
                for (var e = t.node._worldMatrix, i = this._local, n = this._renderData.vDatas[0], r = this.floatsPerVert, s = 0; s < n.length; s += r) l.set(h, i[s], i[s + 1], 0), l.transformMat4(c, h, e), n[s] = c.x, n[s + 1] = c.y, n[s + 2] = c.z
            }
        }), e.exports = i.default
    }), {
        "../../../../assembler-3d": 225,
        "../2d/radial-filled": 271
    }],
    278: [(function(t, e, i) {
        "use strict";

        function n(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }

        function r(t, e) {
            if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
            return !e || "object" != typeof e && "function" != typeof e ? t : e
        }

        function s(t, e) {
            if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e);
            t.prototype = Object.create(e && e.prototype, {
                constructor: {
                    value: t,
                    enumerable: !1,
                    writable: !0,
                    configurable: !0
                }
            }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e)
        }
        i.__esModule = !0;
        var o = t("../../../../assembler-3d"),
            a = (function(t) {
                function e() {
                    return n(this, e), r(this, t.apply(this, arguments))
                }
                return s(e, t), e
            })(t("../2d/simple"));
        i.default = a, cc.js.mixin(a.prototype, o), e.exports = i.default
    }), {
        "../../../../assembler-3d": 225,
        "../2d/simple": 272
    }],
    279: [(function(t, e, i) {
        "use strict";

        function n(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }

        function r(t, e) {
            if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
            return !e || "object" != typeof e && "function" != typeof e ? t : e
        }

        function s(t, e) {
            if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e);
            t.prototype = Object.create(e && e.prototype, {
                constructor: {
                    value: t,
                    enumerable: !1,
                    writable: !0,
                    configurable: !0
                }
            }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e)
        }
        i.__esModule = !0;
        var o = t("../../../../assembler-3d"),
            a = t("../2d/sliced"),
            l = cc.vmath.vec3,
            h = l.create(),
            c = l.create(),
            u = (function(t) {
                function e() {
                    return n(this, e), r(this, t.apply(this, arguments))
                }
                return s(e, t), e
            })(a);
        i.default = u, cc.js.mixin(u.prototype, o, {
            updateWorldVerts: function(t) {
                for (var e = t.node._worldMatrix, i = this._local, n = this._renderData.vDatas[0], r = this.floatsPerVert, s = 0; s < 4; ++s)
                    for (var o = i[2 * s + 1], a = 0; a < 4; ++a) {
                        var u = i[2 * a];
                        l.set(h, u, o, 0), l.transformMat4(c, h, e);
                        var _ = (4 * s + a) * r;
                        n[_] = c.x, n[_ + 1] = c.y, n[_ + 2] = c.z
                    }
            }
        }), e.exports = i.default
    }), {
        "../../../../assembler-3d": 225,
        "../2d/sliced": 273
    }],
    280: [(function(t, e, i) {
        "use strict";

        function n(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }

        function r(t, e) {
            if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
            return !e || "object" != typeof e && "function" != typeof e ? t : e
        }

        function s(t, e) {
            if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e);
            t.prototype = Object.create(e && e.prototype, {
                constructor: {
                    value: t,
                    enumerable: !1,
                    writable: !0,
                    configurable: !0
                }
            }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e)
        }
        i.__esModule = !0;
        for (var o = t("../../../../assembler-3d"), a = t("../2d/tiled"), l = cc.vmath.vec3, h = [], c = 0; c < 4; c++) h.push(l.create());
        var u = (function(t) {
            function e() {
                return n(this, e), r(this, t.apply(this, arguments))
            }
            return s(e, t), e
        })(a);
        i.default = u, cc.js.mixin(u.prototype, o, {
            updateWorldVerts: function(t) {
                for (var e = this._local, i = e.x, n = e.y, r = this._renderData.vDatas[0], s = this.row, o = this.col, a = t.node._worldMatrix, c = void 0, u = void 0, _ = void 0, f = void 0, d = 0, p = 0, m = s; p < m; ++p) {
                    _ = n[p], f = n[p + 1];
                    for (var y = 0, v = o; y < v; ++y) {
                        c = i[y], u = i[y + 1], l.set(h[0], c, _, 0), l.set(h[1], u, _, 0), l.set(h[2], c, f, 0), l.set(h[3], u, f, 0);
                        for (var g = 0; g < 4; g++) {
                            var x = h[g];
                            l.transformMat4(x, x, a);
                            var b = 6 * g;
                            r[d + b] = x.x, r[d + b + 1] = x.y, r[d + b + 2] = x.z
                        }
                        d += 24
                    }
                }
            }
        }), e.exports = i.default
    }), {
        "../../../../assembler-3d": 225,
        "../2d/tiled": 274
    }],
    281: [(function(t, e, i) {
        "use strict";
        var n = y(t("../../../assembler")),
            r = t("../../../../components/CCSprite"),
            s = y(t("./2d/simple")),
            o = y(t("./2d/sliced")),
            a = y(t("./2d/tiled")),
            l = y(t("./2d/radial-filled")),
            h = y(t("./2d/bar-filled")),
            c = y(t("./2d/mesh")),
            u = y(t("./3d/simple")),
            _ = y(t("./3d/sliced")),
            f = y(t("./3d/tiled")),
            d = y(t("./3d/radial-filled")),
            p = y(t("./3d/bar-filled")),
            m = y(t("./3d/mesh"));

        function y(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }
        var v = {
            getConstructor: function(t) {
                var e = t.node.is3DNode,
                    i = e ? u.default : s.default;
                switch (t.type) {
                    case r.Type.SLICED:
                        i = e ? _.default : o.default;
                        break;
                    case r.Type.TILED:
                        i = e ? f.default : a.default;
                        break;
                    case r.Type.FILLED:
                        i = t._fillType === r.FillType.RADIAL ? e ? d.default : l.default : e ? p.default : h.default;
                        break;
                    case r.Type.MESH:
                        i = e ? m.default : c.default
                }
                return i
            },
            Simple: s.default,
            Sliced: o.default,
            Tiled: a.default,
            RadialFilled: l.default,
            BarFilled: h.default,
            Mesh: c.default,
            Simple3D: u.default,
            Sliced3D: _.default,
            Tiled3D: f.default,
            RadialFilled3D: d.default,
            BarFilled3D: p.default,
            Mesh3D: m.default
        };
        n.default.register(cc.Sprite, v)
    }), {
        "../../../../components/CCSprite": 111,
        "../../../assembler": 227,
        "./2d/bar-filled": 269,
        "./2d/mesh": 270,
        "./2d/radial-filled": 271,
        "./2d/simple": 272,
        "./2d/sliced": 273,
        "./2d/tiled": 274,
        "./3d/bar-filled": 275,
        "./3d/mesh": 276,
        "./3d/radial-filled": 277,
        "./3d/simple": 278,
        "./3d/sliced": 279,
        "./3d/tiled": 280
    }],
    282: [(function(t, e, i) {
        "use strict";

        function n(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }
        i.__esModule = !0;
        var r = (function() {
            function t(e, i, r, s, o) {
                n(this, t), this._handler = e, this._index = i, this._vfmt = o, this._verticesBytes = o._bytes, this._initVerticesCount = r, this._initIndicesCount = s, this.reset()
            }
            return t.prototype._reallocVData = function(t, e) {
                this.vData = new Float32Array(t), this.uintVData = new Uint32Array(this.vData.buffer), e && this.vData.set(e), this._handler.updateMesh(this._index, this.vData, this.iData)
            }, t.prototype._reallocIData = function(t, e) {
                this.iData = new Uint16Array(t), e && this.iData.set(e), this._handler.updateMesh(this._index, this.vData, this.iData)
            }, t.prototype.reserve = function(t, e) {
                var i = t * this._verticesBytes >> 2,
                    n = this.vData.length,
                    r = !1;
                if (i > n) {
                    for (; n < i;) n *= 2;
                    this._reallocVData(n, this.vData), r = !0
                }
                var s = this.iData.length;
                if (e > s) {
                    for (; s < e;) s *= 2;
                    this._reallocIData(e, this.iData), r = !0
                }
                return r
            }, t.prototype.used = function(t, e) {
                this.usedVertices = t, this.usedIndices = e, this.usedVerticesFloats = t * this._verticesBytes >> 2, this._handler.updateMeshRange(t, e)
            }, t.prototype.reset = function() {
                var t = this._initVerticesCount * this._verticesBytes >> 2;
                this._reallocVData(t), this._reallocIData(this._initIndicesCount), this.usedVertices = 0, this.usedVerticesFloats = 0, this.usedIndices = 0
            }, t
        })();
        i.default = r, cc.FlexBuffer = r, e.exports = i.default
    }), {}],
    283: [(function(t, e, i) {
        "use strict";
        var n = (function(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        })(t("../../../renderer/gfx"));
        var r = cc.Class({
            name: "cc.MeshBuffer",
            ctor: function(t, e) {
                this.init(t, e)
            },
            init: function(t, e) {
                this.byteOffset = 0, this.indiceOffset = 0, this.vertexOffset = 0, this.indiceStart = 0, this._dirty = !1, this._vertexFormat = e, this._vertexBytes = this._vertexFormat._bytes, this._arrOffset = 0, this._vbArr = [], this._vb = new n.default.VertexBuffer(t._device, e, n.default.USAGE_DYNAMIC, new ArrayBuffer, 0), this._vbArr[0] = this._vb, this._ibArr = [], this._ib = new n.default.IndexBuffer(t._device, n.default.INDEX_FMT_UINT16, n.default.USAGE_STATIC, new ArrayBuffer, 0), this._ibArr[0] = this._ib, this._vData = null, this._uintVData = null, this._iData = null, this._batcher = t, this._initVDataCount = 256 * e._bytes, this._initIDataCount = 1536, this._offsetInfo = {
                    byteOffset: 0,
                    vertexOffset: 0,
                    indiceOffset: 0
                }, this._reallocBuffer()
            },
            uploadData: function() {
                if (0 !== this.byteOffset && this._dirty) {
                    var t = new Float32Array(this._vData.buffer, 0, this.byteOffset >> 2),
                        e = new Uint16Array(this._iData.buffer, 0, this.indiceOffset);
                    this._vb.update(0, t), this._ib.update(0, e), this._dirty = !1
                }
            },
            switchBuffer: function() {
                var t = ++this._arrOffset;
                this.byteOffset = 0, this.vertexOffset = 0, this.indiceOffset = 0, this.indiceStart = 0, t < this._vbArr.length ? (this._vb = this._vbArr[t], this._ib = this._ibArr[t]) : (this._vb = new n.default.VertexBuffer(this._batcher._device, this._vertexFormat, n.default.USAGE_DYNAMIC, new ArrayBuffer, 0), this._vbArr[t] = this._vb, this._ib = new n.default.IndexBuffer(this._batcher._device, n.default.INDEX_FMT_UINT16, n.default.USAGE_STATIC, new ArrayBuffer, 0), this._ibArr[t] = this._ib)
            },
            checkAndSwitchBuffer: function(t) {
                this.vertexOffset + t > 65535 && (this.uploadData(), this._batcher._flush(), this.switchBuffer())
            },
            requestStatic: function(t, e) {
                this.checkAndSwitchBuffer(t);
                var i = this.byteOffset + t * this._vertexBytes,
                    n = this.indiceOffset + e,
                    r = this._vData.byteLength,
                    s = this._iData.length;
                if (i > r || n > s) {
                    for (; r < i || s < n;) this._initVDataCount *= 2, this._initIDataCount *= 2, r = 4 * this._initVDataCount, s = this._initIDataCount;
                    this._reallocBuffer()
                }
                this._updateOffset(t, e, i)
            },
            _updateOffset: function(t, e, i) {
                var n = this._offsetInfo;
                n.vertexOffset = this.vertexOffset, this.vertexOffset += t, n.indiceOffset = this.indiceOffset, this.indiceOffset += e, n.byteOffset = this.byteOffset, this.byteOffset = i, this._dirty = !0
            },
            request: function(t, e) {
                return this._batcher._buffer !== this && (this._batcher._flush(), this._batcher._buffer = this), this.requestStatic(t, e), this._offsetInfo
            },
            _reallocBuffer: function() {
                this._reallocVData(!0), this._reallocIData(!0)
            },
            _reallocVData: function(t) {
                var e = void 0;
                this._vData && (e = new Uint8Array(this._vData.buffer)), this._vData = new Float32Array(this._initVDataCount), this._uintVData = new Uint32Array(this._vData.buffer);
                var i = new Uint8Array(this._uintVData.buffer);
                if (e && t)
                    for (var n = 0, r = e.length; n < r; n++) i[n] = e[n]
            },
            _reallocIData: function(t) {
                var e = this._iData;
                if (this._iData = new Uint16Array(this._initIDataCount), e && t)
                    for (var i = this._iData, n = 0, r = e.length; n < r; n++) i[n] = e[n]
            },
            reset: function() {
                this._arrOffset = 0, this._vb = this._vbArr[0], this._ib = this._ibArr[0], this.byteOffset = 0, this.indiceOffset = 0, this.vertexOffset = 0, this.indiceStart = 0, this._dirty = !1
            },
            destroy: function() {
                this.reset();
                for (var t = 0; t < this._vbArr.length; t++) {
                    this._vbArr[t].destroy()
                }
                this._vbArr = null;
                for (var e = 0; e < this._ibArr.length; e++) {
                    this._ibArr[e].destroy()
                }
                this._ibArr = null, this._ib = null, this._vb = null
            },
            forwardIndiceStartToOffset: function() {
                this.indiceStart = this.indiceOffset
            }
        });
        cc.MeshBuffer = e.exports = r
    }), {
        "../../../renderer/gfx": 360
    }],
    284: [(function(t, e, i) {
        "use strict";
        var n = o(t("../../../renderer/core/input-assembler")),
            r = o(t("../../../renderer/memop/recycle-pool")),
            s = o(t("../../../renderer/scene/model"));

        function o(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }
        var a = t("./vertex-format"),
            l = a.vfmtPosUvColor,
            h = a.vfmt3D,
            c = t("./quad-buffer"),
            u = t("./mesh-buffer"),
            _ = t("./spine-buffer"),
            f = t("../../assets/material/CCMaterial"),
            d = (new(t("../../platform/id-generater"))("VertextFormat"), {}),
            p = new f,
            m = new n.default;
        m._count = 0;
        var y = function(t, e) {
            this._renderScene = e, this._device = t, this.walking = !1, this.material = p, this.cullingMask = 1, this._iaPool = new r.default(function() {
                return new n.default
            }, 16), this._modelPool = new r.default(function() {
                return new s.default
            }, 16), this._quadBuffer = this.getBuffer("quad", l), this._meshBuffer = this.getBuffer("mesh", l), this._quadBuffer3D = this.getBuffer("quad", h), this._meshBuffer3D = this.getBuffer("mesh", h), this._buffer = this._meshBuffer, this._batchedModels = [], this._dummyNode = new cc.Node, this._sortKey = 0, this.node = this._dummyNode, this.parentOpacity = 1, this.parentOpacityDirty = 0, this.worldMatDirty = 0, this.customProperties = null
        };
        y.prototype = {
            constructor: y,
            reset: function() {
                this._iaPool.reset();
                for (var t = this._renderScene, e = this._batchedModels, i = 0; i < e.length; ++i) e[i].setInputAssembler(null), e[i].setEffect(null), t.removeModel(e[i]);
                for (var n in this._modelPool.reset(), e.length = 0, this._sortKey = 0, d) d[n].reset();
                this._buffer = this._meshBuffer, this.node = this._dummyNode, this.material = p, this.cullingMask = 1, this.parentOpacity = 1, this.parentOpacityDirty = 0, this.worldMatDirty = 0, this.customProperties = null
            },
            _flushMaterial: function(t) {
                if (t) {
                    this.material = t;
                    var e = t.effect;
                    if (e) {
                        var i = this._modelPool.add();
                        this._batchedModels.push(i), i.sortKey = this._sortKey++, i._cullingMask = this.cullingMask, i.setNode(this.node), i.setEffect(e, null), i.setInputAssembler(m), this._renderScene.addModel(i)
                    }
                }
            },
            _flush: function() {
                var t = this.material,
                    e = this._buffer,
                    i = e.indiceOffset - e.indiceStart;
                if (this.walking && t && !(i <= 0)) {
                    var n = t.effect;
                    if (n) {
                        var r = this._iaPool.add();
                        r._vertexBuffer = e._vb, r._indexBuffer = e._ib, r._start = e.indiceStart, r._count = i;
                        var s = this._modelPool.add();
                        this._batchedModels.push(s), s.sortKey = this._sortKey++, s._cullingMask = this.cullingMask, s.setNode(this.node), s.setEffect(n, this.customProperties), s.setInputAssembler(r), this._renderScene.addModel(s), e.forwardIndiceStartToOffset()
                    }
                }
            },
            _flushIA: function(t) {
                if (t) {
                    var e = this.material.effect;
                    if (e) {
                        var i = this._modelPool.add();
                        this._batchedModels.push(i), i.sortKey = this._sortKey++, i._cullingMask = this.cullingMask, i.setNode(this.node), i.setEffect(e, this.customProperties), i.setInputAssembler(t), this._renderScene.addModel(i)
                    }
                }
            },
            terminate: function() {
                for (var t in cc.dynamicAtlasManager && cc.dynamicAtlasManager.enabled && cc.dynamicAtlasManager.update(), this._flush(), d) d[t].uploadData();
                this.walking = !1
            },
            getBuffer: function(t, e) {
                var i = t + e.getHash(),
                    n = d[i];
                if (!n) {
                    if ("mesh" === t) n = new u(this, e);
                    else if ("quad" === t) n = new c(this, e);
                    else {
                        if ("spine" !== t) return cc.error("Not support buffer type [" + t + "]"), null;
                        n = new _(this, e)
                    }
                    d[i] = n
                }
                return n
            }
        }, e.exports = y
    }), {
        "../../../renderer/core/input-assembler": 350,
        "../../../renderer/memop/recycle-pool": 375,
        "../../../renderer/scene/model": 382,
        "../../assets/material/CCMaterial": 75,
        "../../platform/id-generater": 214,
        "./mesh-buffer": 283,
        "./quad-buffer": 285,
        "./spine-buffer": 287,
        "./vertex-format": 288
    }],
    285: [(function(t, e, i) {
        "use strict";
        var n = t("./mesh-buffer"),
            r = cc.Class({
                name: "cc.QuadBuffer",
                extends: n,
                _fillQuadBuffer: function() {
                    for (var t = this._initIDataCount / 6, e = this._iData, i = 0, n = 0; i < t; i++) {
                        var r = 4 * i;
                        e[n++] = r, e[n++] = r + 1, e[n++] = r + 2, e[n++] = r + 1, e[n++] = r + 3, e[n++] = r + 2
                    }
                    var s = new Uint16Array(this._iData.buffer, 0, 6 * t);
                    this._ib.update(0, s)
                },
                uploadData: function() {
                    if (0 !== this.byteOffset && this._dirty) {
                        var t = new Float32Array(this._vData.buffer, 0, this.byteOffset >> 2);
                        this._vb.update(0, t), this._dirty = !1
                    }
                },
                switchBuffer: function() {
                    this._super();
                    var t = new Uint16Array(this._iData.buffer, 0, this._initIDataCount);
                    this._ib.update(0, t)
                },
                _reallocBuffer: function() {
                    this._reallocVData(!0), this._reallocIData(), this._fillQuadBuffer()
                }
            });
        cc.QuadBuffer = e.exports = r
    }), {
        "./mesh-buffer": 283
    }],
    286: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.default = s;
        var n = (function(t) {
                return t && t.__esModule ? t : {
                    default: t
                }
            })(t("./flex-buffer")),
            r = t("./vertex-format");

        function s() {
            this.vDatas = [], this.uintVDatas = [], this.iDatas = [], this.meshCount = 0, this._infos = null, this._flexBuffer = null
        }
        cc.js.mixin(s.prototype, {
            init: function(t) {},
            clear: function() {
                this.vDatas.length = 0, this.iDatas.length = 0, this.uintVDatas.length = 0, this.meshCount = 0, this._infos = null, this._flexBuffer && this._flexBuffer.reset()
            },
            updateMesh: function(t, e, i) {
                this.vDatas[t] = e, this.uintVDatas[t] = new Uint32Array(e.buffer, 0, e.length), this.iDatas[t] = i, this.meshCount = this.vDatas.length
            },
            updateMeshRange: function(t, e) {},
            createData: function(t, e, i) {
                var n = new Float32Array(e),
                    r = new Uint16Array(i);
                this.updateMesh(t, n, r)
            },
            createQuadData: function(t, e, i) {
                this.createData(t, e, i), this.initQuadIndices(this.iDatas[t])
            },
            createFlexData: function(t, e, i, s) {
                s = s || r.vfmtPosUvColor, this._flexBuffer = new n.default(this, t, e, i, s)
            },
            initQuadIndices: function(t) {
                for (var e = t.length / 6, i = 0, n = 0; i < e; i++) {
                    var r = 4 * i;
                    t[n++] = r, t[n++] = r + 1, t[n++] = r + 2, t[n++] = r + 1, t[n++] = r + 3, t[n++] = r + 2
                }
            }
        }), cc.RenderData = s, e.exports = i.default
    }), {
        "./flex-buffer": 282,
        "./vertex-format": 288
    }],
    287: [(function(t, e, i) {
        "use strict";
        var n = cc.Class({
            name: "cc.SpineBuffer",
            extends: t("./mesh-buffer"),
            requestStatic: function(t, e) {
                this.checkAndSwitchBuffer(t);
                var i = this.byteOffset + t * this._vertexBytes,
                    n = this.indiceOffset + e,
                    r = this._vData.byteLength,
                    s = this._iData.length;
                if (i > r || n > s) {
                    for (; r < i || s < n;) this._initVDataCount *= 2, this._initIDataCount *= 2, r = 4 * this._initVDataCount, s = this._initIDataCount;
                    this._reallocBuffer()
                }
                var o = this._offsetInfo;
                o.vertexOffset = this.vertexOffset, o.indiceOffset = this.indiceOffset, o.byteOffset = this.byteOffset
            },
            adjust: function(t, e) {
                this.vertexOffset += t, this.indiceOffset += e, this.byteOffset = this.byteOffset + t * this._vertexBytes, this._dirty = !0
            }
        });
        cc.SpineBuffer = e.exports = n
    }), {
        "./mesh-buffer": 283
    }],
    288: [(function(t, e, i) {
        "use strict";
        var n = (function(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        })(t("../../../renderer/gfx"));
        var r = new n.default.VertexFormat([{
            name: n.default.ATTR_POSITION,
            type: n.default.ATTR_TYPE_FLOAT32,
            num: 3
        }, {
            name: n.default.ATTR_UV0,
            type: n.default.ATTR_TYPE_FLOAT32,
            num: 2
        }, {
            name: n.default.ATTR_COLOR,
            type: n.default.ATTR_TYPE_UINT8,
            num: 4,
            normalize: !0
        }]);
        r.name = "vfmt3D", n.default.VertexFormat.XYZ_UV_Color = r;
        var s = new n.default.VertexFormat([{
            name: n.default.ATTR_POSITION,
            type: n.default.ATTR_TYPE_FLOAT32,
            num: 2
        }, {
            name: n.default.ATTR_UV0,
            type: n.default.ATTR_TYPE_FLOAT32,
            num: 2
        }, {
            name: n.default.ATTR_COLOR,
            type: n.default.ATTR_TYPE_UINT8,
            num: 4,
            normalize: !0
        }]);
        s.name = "vfmtPosUvColor", n.default.VertexFormat.XY_UV_Color = s;
        var o = new n.default.VertexFormat([{
            name: n.default.ATTR_POSITION,
            type: n.default.ATTR_TYPE_FLOAT32,
            num: 2
        }, {
            name: n.default.ATTR_UV0,
            type: n.default.ATTR_TYPE_FLOAT32,
            num: 2
        }, {
            name: n.default.ATTR_COLOR,
            type: n.default.ATTR_TYPE_UINT8,
            num: 4,
            normalize: !0
        }, {
            name: n.default.ATTR_COLOR0,
            type: n.default.ATTR_TYPE_UINT8,
            num: 4,
            normalize: !0
        }]);
        o.name = "vfmtPosUvTwoColor", n.default.VertexFormat.XY_UV_Two_Color = o;
        var a = new n.default.VertexFormat([{
            name: n.default.ATTR_POSITION,
            type: n.default.ATTR_TYPE_FLOAT32,
            num: 2
        }, {
            name: n.default.ATTR_UV0,
            type: n.default.ATTR_TYPE_FLOAT32,
            num: 2
        }]);
        a.name = "vfmtPosUv", n.default.VertexFormat.XY_UV = a;
        var l = new n.default.VertexFormat([{
            name: n.default.ATTR_POSITION,
            type: n.default.ATTR_TYPE_FLOAT32,
            num: 2
        }, {
            name: n.default.ATTR_COLOR,
            type: n.default.ATTR_TYPE_UINT8,
            num: 4,
            normalize: !0
        }]);
        l.name = "vfmtPosColor", n.default.VertexFormat.XY_Color = l;
        var h = new n.default.VertexFormat([{
            name: n.default.ATTR_POSITION,
            type: n.default.ATTR_TYPE_FLOAT32,
            num: 2
        }]);
        h.name = "vfmtPos", n.default.VertexFormat.XY = h, e.exports = {
            vfmt3D: r,
            vfmtPosUvColor: s,
            vfmtPosUvTwoColor: o,
            vfmtPosUv: a,
            vfmtPosColor: l,
            vfmtPos: h
        }
    }), {
        "../../../renderer/gfx": 360
    }],
    289: [(function(t, e, i) {
        "use strict";
        t("../platform/CCSys");
        var n = /(\.[^\.\/\?\\]*)(\?.*)?$/,
            r = /((.*)(\/|\\|\\\\))?(.*?\..*$)?/,
            s = /[^\.\/]+\/\.\.\//;
        cc.path = {
            join: function() {
                for (var t = arguments.length, e = "", i = 0; i < t; i++) e = (e + ("" === e ? "" : "/") + arguments[i]).replace(/(\/|\\\\)$/, "");
                return e
            },
            extname: function(t) {
                var e = n.exec(t);
                return e ? e[1] : ""
            },
            mainFileName: function(t) {
                if (t) {
                    var e = t.lastIndexOf(".");
                    if (-1 !== e) return t.substring(0, e)
                }
                return t
            },
            basename: function(t, e) {
                var i = t.indexOf("?");
                i > 0 && (t = t.substring(0, i));
                var n = /(\/|\\)([^\/\\]+)$/g.exec(t.replace(/(\/|\\)$/, ""));
                if (!n) return null;
                var r = n[2];
                return e && t.substring(t.length - e.length).toLowerCase() === e.toLowerCase() ? r.substring(0, r.length - e.length) : r
            },
            dirname: function(t) {
                var e = r.exec(t);
                return e ? e[2] : ""
            },
            changeExtname: function(t, e) {
                e = e || "";
                var i = t.indexOf("?"),
                    n = "";
                return i > 0 && (n = t.substring(i), t = t.substring(0, i)), (i = t.lastIndexOf(".")) < 0 ? t + e + n : t.substring(0, i) + e + n
            },
            changeBasename: function(t, e, i) {
                if (0 === e.indexOf(".")) return this.changeExtname(t, e);
                var n = t.indexOf("?"),
                    r = "",
                    s = i ? this.extname(t) : "";
                return n > 0 && (r = t.substring(n), t = t.substring(0, n)), n = (n = t.lastIndexOf("/")) <= 0 ? 0 : n + 1, t.substring(0, n) + e + s + r
            },
            _normalize: function(t) {
                var e = t = String(t);
                do {
                    e = t, t = t.replace(s, "")
                } while (e.length !== t.length);
                return t
            },
            sep: cc.sys.os === cc.sys.OS_WINDOWS ? "\\" : "/",
            stripSep: function(t) {
                return t.replace(/[\/\\]$/, "")
            }
        }, e.exports = cc.path
    }), {
        "../platform/CCSys": 207
    }],
    290: [(function(t, e, i) {
        "use strict";
        var n = function(t, e, i, n, r, s) {
            this.a = t, this.b = e, this.c = i, this.d = n, this.tx = r, this.ty = s
        };
        n.create = function(t, e, i, n, r, s) {
            return {
                a: t,
                b: e,
                c: i,
                d: n,
                tx: r,
                ty: s
            }
        }, n.identity = function() {
            return {
                a: 1,
                b: 0,
                c: 0,
                d: 1,
                tx: 0,
                ty: 0
            }
        }, n.clone = function(t) {
            return {
                a: t.a,
                b: t.b,
                c: t.c,
                d: t.d,
                tx: t.tx,
                ty: t.ty
            }
        }, n.concat = function(t, e, i) {
            var n = e.a,
                r = e.b,
                s = e.c,
                o = e.d,
                a = e.tx,
                l = e.ty;
            return t.a = n * i.a + r * i.c, t.b = n * i.b + r * i.d, t.c = s * i.a + o * i.c, t.d = s * i.b + o * i.d, t.tx = a * i.a + l * i.c + i.tx, t.ty = a * i.b + l * i.d + i.ty, t
        }, n.invert = function(t, e) {
            var i = e.a,
                n = e.b,
                r = e.c,
                s = e.d,
                o = 1 / (i * s - n * r),
                a = e.tx,
                l = e.ty;
            return t.a = o * s, t.b = -o * n, t.c = -o * r, t.d = o * i, t.tx = o * (r * l - s * a), t.ty = o * (n * a - i * l), t
        }, n.fromMat4 = function(t, e) {
            var i = e.m;
            return t.a = i[0], t.b = i[1], t.c = i[4], t.d = i[5], t.tx = i[12], t.ty = i[13], t
        }, n.transformVec2 = function(t, e, i, n) {
            var r, s;
            return void 0 === n ? (n = i, r = e.x, s = e.y) : (r = e, s = i), t.x = n.a * r + n.c * s + n.tx, t.y = n.b * r + n.d * s + n.ty, t
        }, n.transformSize = function(t, e, i) {
            return t.width = i.a * e.width + i.c * e.height, t.height = i.b * e.width + i.d * e.height, t
        }, n.transformRect = function(t, e, i) {
            var n = e.x,
                r = e.y,
                s = n + e.width,
                o = r + e.height,
                a = i.a * n + i.c * r + i.tx,
                l = i.b * n + i.d * r + i.ty,
                h = i.a * s + i.c * r + i.tx,
                c = i.b * s + i.d * r + i.ty,
                u = i.a * n + i.c * o + i.tx,
                _ = i.b * n + i.d * o + i.ty,
                f = i.a * s + i.c * o + i.tx,
                d = i.b * s + i.d * o + i.ty,
                p = Math.min(a, h, u, f),
                m = Math.max(a, h, u, f),
                y = Math.min(l, c, _, d),
                v = Math.max(l, c, _, d);
            return t.x = p, t.y = y, t.width = m - p, t.height = v - y, t
        }, n.transformObb = function(t, e, i, n, r, s) {
            var o = r.x,
                a = r.y,
                l = r.width,
                h = r.height,
                c = s.a * o + s.c * a + s.tx,
                u = s.b * o + s.d * a + s.ty,
                _ = s.a * l,
                f = s.b * l,
                d = s.c * h,
                p = s.d * h;
            e.x = c, e.y = u, i.x = _ + c, i.y = f + u, t.x = d + c, t.y = p + u, n.x = _ + d + c, n.y = f + p + u
        }, cc.AffineTransform = e.exports = n
    }), {}],
    291: [(function(t, e, i) {
        "use strict";
        var n = t("../platform/CCObject").Flags,
            r = t("./misc"),
            s = t("../platform/js"),
            o = t("../platform/id-generater"),
            a = t("../event-manager"),
            l = t("../renderer/render-flow"),
            h = n.Destroying,
            c = n.DontDestroy,
            u = n.Deactivating,
            _ = new o("Node");

        function f(t) {
            return t ? "string" == typeof t ? s.getClassByName(t) : t : (cc.errorID(3804), null)
        }

        function d(t, e) {
            if (e._sealed)
                for (var i = 0; i < t._components.length; ++i) {
                    var n = t._components[i];
                    if (n.constructor === e) return n
                } else
                    for (var r = 0; r < t._components.length; ++r) {
                        var s = t._components[r];
                        if (s instanceof e) return s
                    }
            return null
        }

        function p(t, e, i) {
            if (e._sealed)
                for (var n = 0; n < t._components.length; ++n) {
                    var r = t._components[n];
                    r.constructor === e && i.push(r)
                } else
                    for (var s = 0; s < t._components.length; ++s) {
                        var o = t._components[s];
                        o instanceof e && i.push(o)
                    }
        }

        function m(t, e) {
            for (var i = 0; i < t.length; ++i) {
                var n = t[i],
                    r = d(n, e);
                if (r) return r;
                if (n._children.length > 0 && (r = m(n._children, e))) return r
            }
            return null
        }

        function y(t, e, i) {
            for (var n = 0; n < t.length; ++n) {
                var r = t[n];
                p(r, e, i), r._children.length > 0 && y(r._children, e, i)
            }
        }
        var v = cc.Class({
            name: "cc._BaseNode",
            extends: cc.Object,
            properties: {
                _parent: null,
                _children: [],
                _active: !0,
                _components: [],
                _prefab: null,
                _persistNode: {
                    get: function() {
                        return (this._objFlags & c) > 0
                    },
                    set: function(t) {
                        t ? this._objFlags |= c : this._objFlags &= ~c
                    }
                },
                name: {
                    get: function() {
                        return this._name
                    },
                    set: function(t) {
                        this._name = t
                    }
                },
                uuid: {
                    get: function() {
                        return this._id
                    }
                },
                children: {
                    get: function() {
                        return this._children
                    }
                },
                childrenCount: {
                    get: function() {
                        return this._children.length
                    }
                },
                active: {
                    get: function() {
                        return this._active
                    },
                    set: function(t) {
                        if (t = !!t, this._active !== t) {
                            this._active = t;
                            var e = this._parent;
                            if (e) e._activeInHierarchy && cc.director._nodeActivator.activateNode(this, t)
                        }
                    }
                },
                activeInHierarchy: {
                    get: function() {
                        return this._activeInHierarchy
                    }
                }
            },
            ctor: function(t) {
                this._name = void 0 !== t ? t : "New Node", this._activeInHierarchy = !1, this._id = _.getNewId(), cc.director._scheduler && cc.director._scheduler.enableForTarget(this), this.__eventTargets = []
            },
            getParent: function() {
                return this._parent
            },
            setParent: function(t) {
                if (this._parent !== t) {
                    0;
                    var e = this._parent;
                    if (this._parent = t || null, this._onSetParent(t), t && (a._setDirtyForNode(this), t._children.push(this), t.emit && t.emit("child-added", this), t._renderFlag |= l.FLAG_CHILDREN), e) {
                        if (!(e._objFlags & h)) {
                            var i = e._children.indexOf(this);
                            0, e._children.splice(i, 1), e.emit && e.emit("child-removed", this), this._onHierarchyChanged(e), 0 === e._children.length && (e._renderFlag &= ~l.FLAG_CHILDREN)
                        }
                    } else t && this._onHierarchyChanged(null)
                }
            },
            attr: function(t) {
                s.mixin(this, t)
            },
            getChildByUuid: function(t) {
                if (!t) return cc.log("Invalid uuid"), null;
                for (var e = this._children, i = 0, n = e.length; i < n; i++)
                    if (e[i]._id === t) return e[i];
                return null
            },
            getChildByName: function(t) {
                if (!t) return cc.log("Invalid name"), null;
                for (var e = this._children, i = 0, n = e.length; i < n; i++)
                    if (e[i]._name === t) return e[i];
                return null
            },
            addChild: function(t) {
                cc.assertID(t, 1606), cc.assertID(null === t._parent, 1605), t.setParent(this)
            },
            insertChild: function(t, e) {
                t.parent = this, t.setSiblingIndex(e)
            },
            getSiblingIndex: function() {
                return this._parent ? this._parent._children.indexOf(this) : 0
            },
            setSiblingIndex: function(t) {
                if (this._parent)
                    if (this._parent._objFlags & u) cc.errorID(3821);
                    else {
                        var e = this._parent._children;
                        t = -1 !== t ? t : e.length - 1;
                        var i = e.indexOf(this);
                        t !== i && (e.splice(i, 1), t < e.length ? e.splice(t, 0, this) : e.push(this), this._onSiblingIndexChanged && this._onSiblingIndexChanged(t))
                    }
            },
            walk: function(t, e) {
                var i, n, r, s, o = cc._BaseNode,
                    a = 1,
                    l = o._stacks[o._stackId];
                l || (l = [], o._stacks.push(l)), o._stackId++, l.length = 0, l[0] = this;
                var h = null;
                for (s = !1; a;)
                    if (n = l[--a])
                        if (!s && t ? t(n) : s && e && e(n), l[a] = null, s) {
                            if (s = !1, i)
                                if (i[++r]) l[a] = i[r], a++;
                                else if (h && (l[a] = h, a++, s = !0, h._parent ? (r = (i = h._parent._children).indexOf(h), h = h._parent) : (h = null, i = null), r < 0)) break
                        } else n._children.length > 0 ? (h = n, i = n._children, r = 0, l[a] = i[r], a++) : (l[a] = n, a++, s = !0);
                l.length = 0, o._stackId--
            },
            cleanup: function() {},
            removeFromParent: function(t) {
                this._parent && (void 0 === t && (t = !0), this._parent.removeChild(this, t))
            },
            removeChild: function(t, e) {
                this._children.indexOf(t) > -1 && ((e || void 0 === e) && t.cleanup(), t.parent = null)
            },
            removeAllChildren: function(t) {
                var e = this._children;
                void 0 === t && (t = !0);
                for (var i = e.length - 1; i >= 0; i--) {
                    var n = e[i];
                    n && (t && n.cleanup(), n.parent = null)
                }
                this._children.length = 0
            },
            isChildOf: function(t) {
                var e = this;
                do {
                    if (e === t) return !0;
                    e = e._parent
                } while (e);
                return !1
            },
            getComponent: function(t) {
                var e = f(t);
                return e ? d(this, e) : null
            },
            getComponents: function(t) {
                var e = f(t),
                    i = [];
                return e && p(this, e, i), i
            },
            getComponentInChildren: function(t) {
                var e = f(t);
                return e ? m(this._children, e) : null
            },
            getComponentsInChildren: function(t) {
                var e = f(t),
                    i = [];
                return e && (p(this, e, i), y(this._children, e, i)), i
            },
            _checkMultipleComp: !1,
            addComponent: function(t) {
                var e;
                if ("string" == typeof t) {
                    if (!(e = s.getClassByName(t))) return cc.errorID(3807, t), cc._RFpeek() && cc.errorID(3808, t), null
                } else {
                    if (!t) return cc.errorID(3804), null;
                    e = t
                }
                if ("function" != typeof e) return cc.errorID(3809), null;
                if (!s.isChildClassOf(e, cc.Component)) return cc.errorID(3810), null;
                var i = e._requireComponent;
                if (i && !this.getComponent(i) && !this.addComponent(i)) return null;
                var n = new e;
                return n.node = this, this._components.push(n), this._activeInHierarchy && cc.director._nodeActivator.activateComp(n), n
            },
            _addComponentAt: !1,
            removeComponent: function(t) {
                t ? (t instanceof cc.Component || (t = this.getComponent(t)), t && t.destroy()) : cc.errorID(3813)
            },
            _getDependComponent: !1,
            _removeComponent: function(t) {
                if (t) {
                    if (!(this._objFlags & h)) {
                        var e = this._components.indexOf(t); - 1 !== e ? this._components.splice(e, 1) : t.node !== this && cc.errorID(3815)
                    }
                } else cc.errorID(3814)
            },
            destroy: function() {
                cc.Object.prototype.destroy.call(this) && (this.active = !1)
            },
            destroyAllChildren: function() {
                for (var t = this._children, e = 0; e < t.length; ++e) t[e].destroy()
            },
            _onSetParent: function(t) {},
            _onPostActivated: function() {},
            _onBatchRestored: function() {},
            _onBatchCreated: function() {},
            _onHierarchyChanged: function(t) {
                var e = this._parent;
                !this._persistNode || e instanceof cc.Scene || cc.game.removePersistRootNode(this);
                var i = this._active && !(!e || !e._activeInHierarchy);
                this._activeInHierarchy !== i && cc.director._nodeActivator.activateNode(this, i)
            },
            _instantiate: function(t) {
                t || (t = cc.instantiate._clone(this, this));
                var e = this._prefab;
                e && this === e.root && e.sync;
                return t._parent = null, t._onBatchRestored(), t
            },
            _registerIfAttached: !1,
            _onPreDestroy: function() {
                var t, e;
                this._objFlags |= h;
                var i = this._parent,
                    n = i && i._objFlags & h;
                var r = this._children;
                for (t = 0, e = r.length; t < e; ++t) r[t]._destroyImmediate();
                for (t = 0, e = this._components.length; t < e; ++t) {
                    this._components[t]._destroyImmediate()
                }
                var s = this.__eventTargets;
                for (t = 0, e = s.length; t < e; ++t) {
                    var o = s[t];
                    o && o.targetOff(this)
                }
                if (s.length = 0, this._persistNode && cc.game.removePersistRootNode(this), !n && i) {
                    var a = i._children.indexOf(this);
                    i._children.splice(a, 1), i.emit && i.emit("child-removed", this)
                }
                return n
            },
            onRestore: !1
        });
        v.idGenerater = _, v._stacks = [
            []
        ], v._stackId = 0, v.prototype._onPreDestroyBase = v.prototype._onPreDestroy, v.prototype._onHierarchyChangedBase = v.prototype._onHierarchyChanged;
        r.propertyDefine(v, ["parent", "name", "children", "childrenCount"], {}), cc._BaseNode = e.exports = v
    }), {
        "../event-manager": 129,
        "../platform/CCObject": 204,
        "../platform/id-generater": 214,
        "../platform/js": 218,
        "../renderer/render-flow": 248,
        "./misc": 300
    }],
    292: [(function(t, e, i) {
        "use strict";
        var n = 1e-6;
        e.exports = {
            binarySearchEpsilon: function(t, e) {
                for (var i = 0, r = t.length - 1, s = r >>> 1; i <= r; s = i + r >>> 1) {
                    var o = t[s];
                    if (o > e + n) r = s - 1;
                    else {
                        if (!(o < e - n)) return s;
                        i = s + 1
                    }
                }
                return ~i
            }
        }
    }), {}],
    293: [(function(t, e, i) {
        "use strict";
        var n = t("../components/CCRenderComponent"),
            r = t("../platform/CCMacro").BlendFactor,
            s = t("../../renderer/gfx"),
            o = cc.Class({
                properties: {
                    _srcBlendFactor: r.SRC_ALPHA,
                    _dstBlendFactor: r.ONE_MINUS_SRC_ALPHA,
                    srcBlendFactor: {
                        get: function() {
                            return this._srcBlendFactor
                        },
                        set: function(t) {
                            this._srcBlendFactor !== t && (this._srcBlendFactor = t, this._updateBlendFunc())
                        },
                        animatable: !1,
                        type: r,
                        tooltip: !1,
                        visible: !0
                    },
                    dstBlendFactor: {
                        get: function() {
                            return this._dstBlendFactor
                        },
                        set: function(t) {
                            this._dstBlendFactor !== t && (this._dstBlendFactor = t, this._updateBlendFunc())
                        },
                        animatable: !1,
                        type: r,
                        tooltip: !1,
                        visible: !0
                    }
                },
                setMaterial: function(t, e) {
                    this._materials[t] !== e && (n.prototype.setMaterial.call(this, t, e), e && this._updateMaterialBlendFunc(e))
                },
                _updateBlendFunc: function() {
                    for (var t = this._materials, e = 0; e < t.length; e++) {
                        var i = t[e];
                        this._updateMaterialBlendFunc(i)
                    }
                },
                _updateMaterialBlendFunc: function(t) {
                    t.effect.setBlend(!0, s.BLEND_FUNC_ADD, this._srcBlendFactor, this._dstBlendFactor, s.BLEND_FUNC_ADD, this._srcBlendFactor, this._dstBlendFactor), t.setDirty(!0)
                }
            });
        e.exports = cc.BlendFunc = o
    }), {
        "../../renderer/gfx": 360,
        "../components/CCRenderComponent": 106,
        "../platform/CCMacro": 203
    }],
    294: [(function(t, e, i) {
        "use strict";
        var n = t("./misc").BASE64_VALUES,
            r = "0123456789abcdef".split(""),
            s = ["", "", "", ""],
            o = s.concat(s, "-", s, "-", s, "-", s, "-", s, s, s),
            a = o.map((function(t, e) {
                return "-" === t ? NaN : e
            })).filter(isFinite);
        e.exports = function(t) {
            if (22 !== t.length) return t;
            o[0] = t[0], o[1] = t[1];
            for (var e = 2, i = 2; e < 22; e += 2) {
                var s = n[t.charCodeAt(e)],
                    l = n[t.charCodeAt(e + 1)];
                o[a[i++]] = r[s >> 2], o[a[i++]] = r[(3 & s) << 2 | l >> 4], o[a[i++]] = r[15 & l]
            }
            return o.join("")
        }
    }), {
        "./misc": 300
    }],
    295: [(function(t, e, i) {
        "use strict";
        cc.find = e.exports = function(t, e) {
            if (null == t) return cc.errorID(5600), null;
            if (e) 0;
            else {
                var i = cc.director.getScene();
                if (!i) return null;
                e = i
            }
            for (var n = e, r = "/" !== t[0] ? 0 : 1, s = t.split("/"), o = r; o < s.length; o++) {
                var a = s[o],
                    l = n._children;
                n = null;
                for (var h = 0, c = l.length; h < c; ++h) {
                    var u = l[h];
                    if (u.name === a) {
                        n = u;
                        break
                    }
                }
                if (!n) return null
            }
            return n
        }
    }), {}],
    296: [(function(t, e, i) {
        "use strict";
        var n = t("../assets/material/CCMaterial"),
            r = cc.Class({
                properties: {
                    _normalMaterial: null,
                    normalMaterial: {
                        get: function() {
                            return this._normalMaterial
                        },
                        set: function(t) {
                            this._normalMaterial = t, this._updateDisabledState && this._updateDisabledState()
                        },
                        type: n,
                        tooltip: !1,
                        animatable: !1
                    },
                    _grayMaterial: null,
                    grayMaterial: {
                        get: function() {
                            return this._grayMaterial
                        },
                        set: function(t) {
                            this._grayMaterial = t, this._updateDisabledState && this._updateDisabledState()
                        },
                        type: n,
                        tooltip: !1,
                        animatable: !1
                    }
                },
                _switchGrayMaterial: function(t, e) {
                    if (cc.game.renderType !== cc.game.RENDER_TYPE_CANVAS) {
                        var i = void 0;
                        t ? ((i = this._grayMaterial) || (i = n.getBuiltinMaterial("2d-gray-sprite")), i = this._grayMaterial = n.getInstantiatedMaterial(i, e)) : ((i = this._normalMaterial) || (i = n.getBuiltinMaterial("2d-sprite", e)), i = this._normalMaterial = n.getInstantiatedMaterial(i, e)), e.setMaterial(0, i)
                    }
                }
            });
        e.exports = r
    }), {
        "../assets/material/CCMaterial": 75
    }],
    297: [(function(t, e, i) {
        "use strict";
        var n = /^(click)(\s)*=|(param)(\s)*=/,
            r = /(\s)*src(\s)*=|(\s)*height(\s)*=|(\s)*width(\s)*=|(\s)*click(\s)*=|(\s)*param(\s)*=/,
            s = function() {
                this._parsedObject = {}, this._specialSymbolArray = [], this._specialSymbolArray.push([/&lt;/g, "<"]), this._specialSymbolArray.push([/&gt;/g, ">"]), this._specialSymbolArray.push([/&amp;/g, "&"]), this._specialSymbolArray.push([/&quot;/g, '"']), this._specialSymbolArray.push([/&apos;/g, "'"])
            };
        s.prototype = {
            constructor: s,
            parse: function(t) {
                this._resultObjectArray = [], this._stack = [];
                for (var e = 0, i = t.length; e < i;) {
                    var n = t.indexOf("<", e);
                    if (n < 0) this._stack.pop(), this._processResult(t.substring(e)), e = i;
                    else {
                        this._processResult(t.substring(e, n));
                        var r = t.indexOf(">", e); - 1 === r ? r = n : "/" === t.charAt(n + 1) ? this._stack.pop() : this._addToStack(t.substring(n + 1, r)), e = r + 1
                    }
                }
                return this._resultObjectArray
            },
            _attributeToObject: function(t) {
                var e, i, n, s, o = {},
                    a = (t = t.trim()).match(/^(color|size)(\s)*=/);
                if (a) {
                    if (e = a[0], "" === (t = t.substring(e.length).trim())) return o;
                    switch (i = t.indexOf(" "), e[0]) {
                        case "c":
                            o.color = i > -1 ? t.substring(0, i).trim() : t;
                            break;
                        case "s":
                            o.size = parseInt(t)
                    }
                    return i > -1 && (s = t.substring(i + 1).trim(), n = this._processEventHandler(s), o.event = n), o
                }
                if ((a = t.match(/^(br(\s)*\/)/)) && a[0].length > 0 && (e = a[0].trim()).startsWith("br") && "/" === e[e.length - 1]) return o.isNewLine = !0, this._resultObjectArray.push({
                    text: "",
                    style: {
                        newline: !0
                    }
                }), o;
                if ((a = t.match(/^(img(\s)*src(\s)*=[^>]+\/)/)) && a[0].length > 0 && (e = a[0].trim()).startsWith("img") && "/" === e[e.length - 1]) {
                    var l;
                    a = t.match(r);
                    for (var h = !1; a;) e = (t = t.substring(t.indexOf(a[0]))).substr(0, a[0].length), u = (i = (l = t.substring(e.length).trim()).indexOf(" ")) > -1 ? l.substr(0, i) : l, e = (e = e.replace(/[^a-zA-Z]/g, "").trim()).toLocaleLowerCase(), t = l.substring(i).trim(), "src" === e ? (o.isImage = !0, u.endsWith("/") && (u = u.substring(0, u.length - 1)), 0 === u.indexOf("'") ? (h = !0, u = u.substring(1, u.length - 1)) : 0 === u.indexOf('"') && (h = !0, u = u.substring(1, u.length - 1)), o.src = u) : "height" === e ? o.imageHeight = parseInt(u) : "width" === e ? o.imageWidth = parseInt(u) : "click" === e && (o.event = this._processEventHandler(e + "=" + u)), o.event && "param" === e && (o.event.param = u.replace(/^\"|\"$/g, "")), a = t.match(r);
                    return h && o.isImage && this._resultObjectArray.push({
                        text: "",
                        style: o
                    }), {}
                }
                if (a = t.match(/^(outline(\s)*[^>]*)/)) {
                    var c = {
                        color: "#ffffff",
                        width: 1
                    };
                    if (t = a[0].substring("outline".length).trim()) {
                        var u, _ = /(\s)*color(\s)*=|(\s)*width(\s)*=|(\s)*click(\s)*=|(\s)*param(\s)*=/;
                        for (a = t.match(_); a;) e = (t = t.substring(t.indexOf(a[0]))).substr(0, a[0].length), u = (i = (l = t.substring(e.length).trim()).indexOf(" ")) > -1 ? l.substr(0, i) : l, e = (e = e.replace(/[^a-zA-Z]/g, "").trim()).toLocaleLowerCase(), t = l.substring(i).trim(), "click" === e ? o.event = this._processEventHandler(e + "=" + u) : "color" === e ? c.color = u : "width" === e && (c.width = parseInt(u)), o.event && "param" === e && (o.event.param = u.replace(/^\"|\"$/g, "")), a = t.match(_)
                    }
                    o.outline = c
                }
                if ((a = t.match(/^(on|u|b|i)(\s)*/)) && a[0].length > 0) {
                    switch (e = a[0], t = t.substring(e.length).trim(), e[0]) {
                        case "u":
                            o.underline = !0;
                            break;
                        case "i":
                            o.italic = !0;
                            break;
                        case "b":
                            o.bold = !0
                    }
                    if ("" === t) return o;
                    n = this._processEventHandler(t), o.event = n
                }
                return o
            },
            _processEventHandler: function(t) {
                for (var e = 0, i = {}, r = t.match(n), s = !1; r;) {
                    var o = r[0],
                        a = "";
                    if (s = !1, '"' === (t = t.substring(o.length).trim()).charAt(0))(e = t.indexOf('"', 1)) > -1 && (a = t.substring(1, e).trim(), s = !0), e++;
                    else if ("'" === t.charAt(0))(e = t.indexOf("'", 1)) > -1 && (a = t.substring(1, e).trim(), s = !0), e++;
                    else {
                        var l = t.match(/(\S)+/);
                        e = (a = l ? l[0] : "").length
                    }
                    s && (i[o = o.substring(0, o.length - 1).trim()] = a), r = (t = t.substring(e).trim()).match(n)
                }
                return i
            },
            _addToStack: function(t) {
                var e = this._attributeToObject(t);
                if (0 === this._stack.length) this._stack.push(e);
                else {
                    if (e.isNewLine || e.isImage) return;
                    var i = this._stack[this._stack.length - 1];
                    for (var n in i) e[n] || (e[n] = i[n]);
                    this._stack.push(e)
                }
            },
            _processResult: function(t) {
                "" !== t && (t = this._escapeSpecialSymbol(t), this._stack.length > 0 ? this._resultObjectArray.push({
                    text: t,
                    style: this._stack[this._stack.length - 1]
                }) : this._resultObjectArray.push({
                    text: t
                }))
            },
            _escapeSpecialSymbol: function(t) {
                for (var e = 0; e < this._specialSymbolArray.length; ++e) {
                    var i = this._specialSymbolArray[e][0],
                        n = this._specialSymbolArray[e][1];
                    t = t.replace(i, n)
                }
                return t
            }
        }, e.exports = s
    }), {}],
    298: [(function(t, e, i) {
        "use strict";
        t("./CCPath"), t("./profiler/CCProfiler"), t("./find"), t("./mutable-forward-iterator")
    }), {
        "./CCPath": 289,
        "./find": 295,
        "./mutable-forward-iterator": 301,
        "./profiler/CCProfiler": 304
    }],
    299: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.postLoadMesh = function(t, e) {
            if (t.loaded || !t.nativeUrl) return void(e && e());
            cc.loader.load(t.nativeUrl, (function(i, n) {
                n && (t._nativeAsset = n), e && e(i)
            }))
        }
    }), {}],
    300: [(function(t, e, i) {
        "use strict";
        for (var n = t("../platform/js"), r = {
                propertyDefine: function(t, e, i) {
                    function r(t, e, i, r) {
                        var s = Object.getOwnPropertyDescriptor(t, e);
                        if (s) s.get && (t[i] = s.get), s.set && r && (t[r] = s.set);
                        else {
                            var o = t[i];
                            n.getset(t, e, o, t[r])
                        }
                    }
                    for (var s, o = t.prototype, a = 0; a < e.length; a++) {
                        var l = (s = e[a])[0].toUpperCase() + s.slice(1);
                        r(o, s, "get" + l, "set" + l)
                    }
                    for (s in i) {
                        var h = i[s];
                        r(o, s, h[0], h[1])
                    }
                },
                NextPOT: function(t) {
                    return t -= 1, t |= t >> 1, t |= t >> 2, t |= t >> 4, t |= t >> 8, (t |= t >> 16) + 1
                },
                BUILTIN_CLASSID_RE: /^(?:cc|dragonBones|sp|ccsg)\..+/
            }, s = new Array(123), o = 0; o < 123; ++o) s[o] = 64;
        for (var a = 0; a < 64; ++a) s["ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charCodeAt(a)] = a;
        r.BASE64_VALUES = s, r.pushToMap = function(t, e, i, n) {
            var r = t[e];
            r ? Array.isArray(r) ? n ? (r.push(r[0]), r[0] = i) : r.push(i) : t[e] = n ? [i, r] : [r, i] : t[e] = i
        }, r.clampf = function(t, e, i) {
            if (e > i) {
                var n = e;
                e = i, i = n
            }
            return t < e ? e : t < i ? t : i
        }, r.clamp01 = function(t) {
            return t < 0 ? 0 : t < 1 ? t : 1
        }, r.lerp = function(t, e, i) {
            return t + (e - t) * i
        }, r.degreesToRadians = function(t) {
            return t * cc.macro.RAD
        }, r.radiansToDegrees = function(t) {
            return t * cc.macro.DEG
        }, cc.misc = e.exports = r
    }), {
        "../platform/js": 218
    }],
    301: [(function(t, e, i) {
        "use strict";

        function n(t) {
            this.i = 0, this.array = t
        }
        var r = n.prototype;
        r.remove = function(t) {
            var e = this.array.indexOf(t);
            e >= 0 && this.removeAt(e)
        }, r.removeAt = function(t) {
            this.array.splice(t, 1), t <= this.i && --this.i
        }, r.fastRemove = function(t) {
            var e = this.array.indexOf(t);
            e >= 0 && this.fastRemoveAt(e)
        }, r.fastRemoveAt = function(t) {
            var e = this.array;
            e[t] = e[e.length - 1], --e.length, t <= this.i && --this.i
        }, r.push = function(t) {
            this.array.push(t)
        }, e.exports = n
    }), {}],
    302: [(function(t, e, i) {
        "use strict";

        function n(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }
        i.__esModule = !0;
        var r = (function() {
            function t() {
                n(this, t), this.enabled = !1, this.count = 0, this.maxSize = 1024
            }
            return t.prototype.get = function() {}, t.prototype.put = function() {}, t.prototype.clear = function() {}, t
        })();
        i.default = r, cc.pool = {}, r.register = function(t, e) {
            cc.pool[t] = e
        }, e.exports = i.default
    }), {}],
    303: [(function(t, e, i) {
        "use strict";
        t("../vmath");
        cc._PrefabInfo = cc.Class({
            name: "cc.PrefabInfo",
            properties: {
                root: null,
                asset: null,
                fileId: "",
                sync: !1,
                _synced: {
                    default: !1,
                    serializable: !1
                }
            }
        }), e.exports = {
            syncWithPrefab: function(t) {
                var e = t._prefab;
                if (e._synced = !0, !e.asset) return cc.errorID(3701, t.name), void(t._prefab = null);
                var i = t._objFlags,
                    n = t._parent,
                    r = t._id,
                    s = t._name,
                    o = t._active,
                    a = t._eulerAngles.x,
                    l = t._eulerAngles.y,
                    h = t._eulerAngles.z,
                    c = t._localZOrder,
                    u = t._globalZOrder,
                    _ = t._trs,
                    f = _[0],
                    d = _[1],
                    p = _[2];
                cc.game._isCloning = !0, e.asset._doInstantiate(t), cc.game._isCloning = !1, t._objFlags = i, t._parent = n, t._id = r, t._prefab = e, t._name = s, t._active = o, t._localZOrder = c, t._globalZOrder = u, (_ = t._trs)[0] = f, _[1] = d, _[2] = p, t._eulerAngles.x = a, t._eulerAngles.y = l, t._eulerAngles.z = h
            }
        }
    }), {
        "../vmath": 326
    }],
    304: [(function(t, e, i) {
        "use strict";
        var n = t("../../platform/CCMacro"),
            r = t("./perf-counter"),
            s = !1,
            o = 15,
            a = null,
            l = null,
            h = null;

        function c() {
            if (!a) {
                a = {
                    frame: {
                        desc: "Frame time (ms)",
                        min: 0,
                        max: 50,
                        average: 500
                    },
                    fps: {
                        desc: "Framerate (FPS)",
                        below: 30,
                        average: 500
                    },
                    draws: {
                        desc: "Draw call"
                    },
                    logic: {
                        desc: "Game Logic (ms)",
                        min: 0,
                        max: 50,
                        average: 500,
                        color: "#080"
                    },
                    render: {
                        desc: "Renderer (ms)",
                        min: 0,
                        max: 50,
                        average: 500,
                        color: "#f90"
                    },
                    mode: {
                        desc: cc.game.renderType === cc.game.RENDER_TYPE_WEBGL ? "WebGL" : "Canvas",
                        min: 1
                    }
                };
                var t = performance.now();
                for (var e in a) a[e]._counter = new r(e, a[e], t)
            }
        }

        function u() {
            if (!l || !l.isValid) {
                (l = new cc.Node("PROFILER-NODE")).x = l.y = 10, l.groupIndex = cc.Node.BuiltinGroupIndex.DEBUG, cc.Camera._setupDebugCamera(), l.zIndex = n.MAX_ZINDEX, cc.game.addPersistRootNode(l);
                var t = new cc.Node("LEFT-PANEL");
                t.anchorX = t.anchorY = 0;
                var e = t.addComponent(cc.Label);
                e.fontSize = o, e.lineHeight = o, t.parent = l;
                var i = new cc.Node("RIGHT-PANEL");
                i.anchorX = 1, i.anchorY = 0, i.x = 200;
                var r = i.addComponent(cc.Label);
                r.horizontalAlign = cc.Label.HorizontalAlign.RIGHT, r.fontSize = o, r.lineHeight = o, i.parent = l, cc.sys.browserType !== cc.sys.BROWSER_TYPE_BAIDU_GAME_SUB && cc.sys.browserType !== cc.sys.BROWSER_TYPE_WECHAT_GAME_SUB && (e.cacheMode = cc.Label.CacheMode.CHAR, r.cacheMode = cc.Label.CacheMode.CHAR), h = {
                    left: e,
                    right: r
                }
            }
        }

        function _() {
            u();
            var t = cc.director._lastUpdate;
            a.frame._counter.start(t), a.logic._counter.start(t)
        }

        function f() {
            var t = performance.now();
            cc.director.isPaused() ? a.frame._counter.start(t) : a.logic._counter.end(t), a.render._counter.start(t)
        }

        function d() {
            var t = performance.now();
            a.render._counter.end(t), a.draws._counter.value = cc.renderer.drawCalls, a.frame._counter.end(t), a.fps._counter.frame(t);
            var e = "",
                i = "";
            for (var n in a) {
                var r = a[n];
                r._counter.sample(t), e += r.desc + "\n", i += r._counter.human() + "\n"
            }
            h && (h.left.string = e, h.right.string = i)
        }
        cc.profiler = e.exports = {
            isShowingStats: function() {
                return s
            },
            hideStats: function() {
                s && (l && (l.active = !1), cc.director.off(cc.Director.EVENT_BEFORE_UPDATE, _), cc.director.off(cc.Director.EVENT_AFTER_UPDATE, f), cc.director.off(cc.Director.EVENT_AFTER_DRAW, d), s = !1)
            },
            showStats: function() {
                s || (c(), l && (l.active = !0), cc.director.on(cc.Director.EVENT_BEFORE_UPDATE, _), cc.director.on(cc.Director.EVENT_AFTER_UPDATE, f), cc.director.on(cc.Director.EVENT_AFTER_DRAW, d), s = !0)
            }
        }
    }), {
        "../../platform/CCMacro": 203,
        "./perf-counter": 306
    }],
    305: [(function(t, e, i) {
        "use strict";
        var n = cc.Class({
            name: "cc.Counter",
            ctor: function(t, e, i) {
                this._id = t, this._opts = e || {}, this._value = 0, this._total = 0, this._averageValue = 0, this._accumValue = 0, this._accumSamples = 0, this._accumStart = i
            },
            properties: {
                value: {
                    get: function() {
                        return this._value
                    },
                    set: function(t) {
                        this._value = t
                    }
                }
            },
            _average: function(t, e) {
                if (this._opts.average) {
                    this._accumValue += t, ++this._accumSamples;
                    var i = e;
                    i - this._accumStart >= this._opts.average && (this._averageValue = this._accumValue / this._accumSamples, this._accumValue = 0, this._accumStart = i, this._accumSamples = 0)
                }
            },
            sample: function(t) {
                this._average(this._value, t)
            },
            human: function() {
                var t = this._opts.average ? this._averageValue : this._value;
                return Math.round(100 * t) / 100
            },
            alarm: function() {
                return this._opts.below && this._value < this._opts.below || this._opts.over && this._value > this._opts.over
            }
        });
        e.exports = n
    }), {}],
    306: [(function(t, e, i) {
        "use strict";
        var n = t("./counter"),
            r = cc.Class({
                name: "cc.PerfCounter",
                extends: n,
                ctor: function(t, e, i) {
                    this._time = i
                },
                start: function(t) {
                    this._time = t
                },
                end: function(t) {
                    this._value = t - this._time, this._average(this._value)
                },
                tick: function() {
                    this.end(), this.start()
                },
                frame: function(t) {
                    var e = t,
                        i = e - this._time;
                    this._total++, i > (this._opts.average || 1e3) && (this._value = 1e3 * this._total / i, this._total = 0, this._time = e, this._average(this._value))
                }
            });
        e.exports = r
    }), {
        "./counter": 305
    }],
    307: [(function(t, e, i) {
        "use strict";
        var n = .26;
        var r = {
            BASELINE_RATIO: n,
            MIDDLE_RATIO: (n + 1) / 2 - n,
            label_wordRex: /([a-zA-Z0-9\xc4\xd6\xdc\xe4\xf6\xfc\xdf\xe9\xe8\xe7\xe0\xf9\xea\xe2\xee\xf4\xfb\u0430-\u044f\u0410-\u042f\u0401\u0451]+|\S)/,
            label_symbolRex: /^[!,.:;'}\]%\?>\u3001\u2018\u201c\u300b\uff1f\u3002\uff0c\uff01]/,
            label_lastWordRex: /([a-zA-Z0-9\xc4\xd6\xdc\xe4\xf6\xfc\xdf\xe9\xe8\xe7\xe0\xf9\xea\xe2\xee\xf4\xfb\u0430\xed\xec\xcd\xcc\xef\xc1\xc0\xe1\xe0\xc9\xc8\xd2\xd3\xf2\xf3\u0150\u0151\xd9\xda\u0170\xfa\u0171\xf1\xd1\xe6\xc6\u0153\u0152\xc3\xc2\xe3\xd4\xf5\u011b\u0161\u010d\u0159\u017e\xfd\xe1\xed\xe9\xf3\xfa\u016f\u0165\u010f\u0148\u011a\u0160\u010c\u0158\u017d\xc1\xcd\xc9\xd3\xda\u0164\u017c\u017a\u015b\xf3\u0144\u0142\u0119\u0107\u0105\u017b\u0179\u015a\xd3\u0143\u0141\u0118\u0106\u0104-\u044f\u0410-\u042f\u0401\u0451]+|\S)$/,
            label_lastEnglish: /[a-zA-Z0-9\xc4\xd6\xdc\xe4\xf6\xfc\xdf\xe9\xe8\xe7\xe0\xf9\xea\xe2\xee\xf4\xfb\u0430\xed\xec\xcd\xcc\xef\xc1\xc0\xe1\xe0\xc9\xc8\xd2\xd3\xf2\xf3\u0150\u0151\xd9\xda\u0170\xfa\u0171\xf1\xd1\xe6\xc6\u0153\u0152\xc3\xc2\xe3\xd4\xf5\u011b\u0161\u010d\u0159\u017e\xfd\xe1\xed\xe9\xf3\xfa\u016f\u0165\u010f\u0148\u011a\u0160\u010c\u0158\u017d\xc1\xcd\xc9\xd3\xda\u0164\u017c\u017a\u015b\xf3\u0144\u0142\u0119\u0107\u0105\u017b\u0179\u015a\xd3\u0143\u0141\u0118\u0106\u0104-\u044f\u0410-\u042f\u0401\u0451]+$/,
            label_firstEnglish: /^[a-zA-Z0-9\xc4\xd6\xdc\xe4\xf6\xfc\xdf\xe9\xe8\xe7\xe0\xf9\xea\xe2\xee\xf4\xfb\u0430\xed\xec\xcd\xcc\xef\xc1\xc0\xe1\xe0\xc9\xc8\xd2\xd3\xf2\xf3\u0150\u0151\xd9\xda\u0170\xfa\u0171\xf1\xd1\xe6\xc6\u0153\u0152\xc3\xc2\xe3\xd4\xf5\u011b\u0161\u010d\u0159\u017e\xfd\xe1\xed\xe9\xf3\xfa\u016f\u0165\u010f\u0148\u011a\u0160\u010c\u0158\u017d\xc1\xcd\xc9\xd3\xda\u0164\u017c\u017a\u015b\xf3\u0144\u0142\u0119\u0107\u0105\u017b\u0179\u015a\xd3\u0143\u0141\u0118\u0106\u0104-\u044f\u0410-\u042f\u0401\u0451]/,
            label_firstEmoji: /^[\uD83C\uDF00-\uDFFF\uDC00-\uDE4F]/,
            label_lastEmoji: /([\uDF00-\uDFFF\uDC00-\uDE4F]+|\S)$/,
            label_wrapinspection: !0,
            __CHINESE_REG: /^[\u4E00-\u9FFF\u3400-\u4DFF]+$/,
            __JAPANESE_REG: /[\u3000-\u303F]|[\u3040-\u309F]|[\u30A0-\u30FF]|[\uFF00-\uFFEF]|[\u4E00-\u9FAF]|[\u2605-\u2606]|[\u2190-\u2195]|\u203B/g,
            __KOREAN_REG: /^[\u1100-\u11FF]|[\u3130-\u318F]|[\uA960-\uA97F]|[\uAC00-\uD7AF]|[\uD7B0-\uD7FF]+$/,
            isUnicodeCJK: function(t) {
                return this.__CHINESE_REG.test(t) || this.__JAPANESE_REG.test(t) || this.__KOREAN_REG.test(t)
            },
            isUnicodeSpace: function(t) {
                return (t = t.charCodeAt(0)) >= 9 && t <= 13 || 32 === t || 133 === t || 160 === t || 5760 === t || t >= 8192 && t <= 8202 || 8232 === t || 8233 === t || 8239 === t || 8287 === t || 12288 === t
            },
            safeMeasureText: function(t, e) {
                var i = t.measureText(e);
                return i && i.width || 0
            },
            fragmentText: function(t, e, i, n) {
                var r = [];
                if (0 === t.length || i < 0) return r.push(""), r;
                for (var s = t; e > i && s.length > 1;) {
                    for (var o = s.length * (i / e) | 0, a = s.substring(o), l = e - n(a), h = a, c = 0, u = 0; l > i && u++ < 10;) o *= i / l, o |= 0, l = e - n(a = s.substring(o));
                    for (u = 0; l <= i && u++ < 10;) {
                        if (a) {
                            var _ = this.label_wordRex.exec(a);
                            c = _ ? _[0].length : 1, h = a
                        }
                        o += c, l = e - n(a = s.substring(o))
                    }
                    0 === (o -= c) && (o = 1, h = h.substring(1));
                    var f, d = s.substring(0, 0 + o);
                    this.label_wrapinspection && this.label_symbolRex.test(h || a) && (0 === (o -= (f = this.label_lastWordRex.exec(d)) ? f[0].length : 0) && (o = 1), h = s.substring(o), d = s.substring(0, 0 + o)), this.label_firstEmoji.test(h) && (f = this.label_lastEmoji.exec(d)) && d !== f[0] && (o -= f[0].length, h = s.substring(o), d = s.substring(0, 0 + o)), this.label_firstEnglish.test(h) && (f = this.label_lastEnglish.exec(d)) && d !== f[0] && (o -= f[0].length, h = s.substring(o), d = s.substring(0, 0 + o)), 0 === r.length ? r.push(d) : (d = d.trimLeft()).length > 0 && r.push(d), e = n(s = h || a)
                }
                return 0 === r.length ? r.push(s) : (s = s.trimLeft()).length > 0 && r.push(s), r
            }
        };
        cc.textUtils = e.exports = r
    }), {}],
    308: [(function(t, e, i) {
        "use strict";
        var n = t("../assets/CCTexture2D"),
            r = {
                loadImage: function(t, e, i) {
                    cc.assertID(t, 3103);
                    var r = cc.loader.getRes(t);
                    return r ? r.loaded ? (e && e.call(i, null, r), r) : (r.once("load", (function() {
                        e && e.call(i, null, r)
                    }), i), r) : ((r = new n).url = t, cc.loader.load({
                        url: t,
                        texture: r
                    }, (function(t, n) {
                        if (t) return e && e.call(i, t || new Error("Unknown error"));
                        n.handleLoadedTexture(), e && e.call(i, null, n)
                    })), r)
                },
                cacheImage: function(t, e) {
                    if (t && e) {
                        var i = new n;
                        i.initWithElement(e);
                        var r = {
                            id: t,
                            url: t,
                            error: null,
                            content: i,
                            complete: !1
                        };
                        return cc.loader.flowOut(r), i
                    }
                },
                postLoadTexture: function(t, e) {
                    t.loaded ? e && e() : t.url ? cc.loader.load({
                        url: t.url,
                        skips: ["Loader"]
                    }, (function(i, n) {
                        n && (t.loaded || (t._nativeAsset = n)), e && e(i)
                    })) : e && e()
                }
            };
        cc.textureUtil = e.exports = r
    }), {
        "../assets/CCTexture2D": 73
    }],
    309: [(function(t, e, i) {
        "use strict";
        var n = t("./node-unit"),
            r = t("./node-mem-pool");
        e.exports = {
            NodeMemPool: new r(n)
        }
    }), {
        "./node-mem-pool": 311,
        "./node-unit": 312
    }],
    310: [(function(t, e, i) {
        "use strict";
        var n = function(t) {
                this._unitClass = t, this._pool = [], this._findOrder = []
            },
            r = n.prototype;
        r._initNative = function() {
            this._nativeMemPool = new renderer.MemPool
        }, r._buildUnit = function(t) {
            var e = new this._unitClass(t, this);
            return e
        }, r._destroyUnit = function(t) {
            this._pool[t] = null;
            for (var e = 0, i = this._findOrder.length; e < i; e++) {
                var n = this._findOrder[e];
                if (n && n.unitID == t) {
                    this._findOrder.splice(e, 1);
                    break
                }
            }
        }, r._findUnitID = function() {
            for (var t = 0, e = this._pool; e[t];) t++;
            return t
        }, r.pop = function() {
            for (var t = null, e = 0, i = this._findOrder, n = this._pool, r = i.length; e < r; e++) {
                var s = i[e];
                if (s && s.hasSpace()) {
                    t = s;
                    break
                }
            }
            if (!t) {
                var o = this._findUnitID();
                t = this._buildUnit(o), n[o] = t, i.push(t), e = i.length - 1
            }
            var a = i[0];
            return a !== t && (i[0] = t, i[e] = a), t.pop()
        }, r.push = function(t) {
            var e = this._pool[t.unitID];
            return e.push(t.index), this._findOrder.length > 1 && e.isAllFree() && this._destroyUnit(t.unitID), e
        }, e.exports = n
    }), {}],
    311: [(function(t, e, i) {
        "use strict";
        var n = t("./mem-pool"),
            r = function(t) {
                n.call(this, t)
            };
        (function() {
            var t = function() {};
            t.prototype = n.prototype, r.prototype = new t
        })();
        var s = r.prototype;
        s._initNative = function() {
            this._nativeMemPool = new renderer.NodeMemPool
        }, s._destroyUnit = function(t) {
            n.prototype._destroyUnit.call(this, t)
        }, e.exports = r
    }), {
        "./mem-pool": 310
    }],
    312: [(function(t, e, i) {
        "use strict";
        var n = t("../../vmath/utils"),
            r = (Uint32Array, 10 * n.FLOAT_BYTES),
            s = 16 * n.FLOAT_BYTES,
            o = 16 * n.FLOAT_BYTES,
            a = (Uint32Array, Uint32Array, Int32Array, Uint8Array, Uint8Array, Uint32Array, n.FLOAT_BYTES, t("./unit-base")),
            l = function(t, e) {
                a.call(this, t, e);
                var i = this._contentNum;
                this.trsList = new n.FLOAT_ARRAY_TYPE(10 * i), this.localMatList = new n.FLOAT_ARRAY_TYPE(16 * i), this.worldMatList = new n.FLOAT_ARRAY_TYPE(16 * i);
                for (var l = 0; l < i; l++) {
                    var h = this._spacesData[l];
                    h.trs = new n.FLOAT_ARRAY_TYPE(this.trsList.buffer, l * r, 10), h.localMat = new n.FLOAT_ARRAY_TYPE(this.localMatList.buffer, l * s, 16), h.worldMat = new n.FLOAT_ARRAY_TYPE(this.worldMatList.buffer, l * o, 16)
                }
            };
        (function() {
            var t = function() {};
            t.prototype = a.prototype, l.prototype = new t
        })(), e.exports = l
    }), {
        "../../vmath/utils": 333,
        "./unit-base": 313
    }],
    313: [(function(t, e, i) {
        "use strict";
        var n = function(t, e, i) {
                i = i || 128, this.unitID = t, this._memPool = e, this._data = new Uint16Array(2), this._data[0] = 0, this._data[1] = 0, this._contentNum = i, this._signData = new Uint16Array(2 * this._contentNum), this._spacesData = [];
                for (var n = 0; n < i; n++) {
                    var r = 2 * n;
                    this._signData[r + 0] = n + 1, this._signData[r + 1] = 0, this._spacesData[n] = {
                        index: n,
                        unitID: t
                    }
                }
                this._signData[2 * (i - 1)] = 65535
            },
            r = n.prototype;
        r.hasSpace = function() {
            return 65535 !== this._data[0]
        }, r.isAllFree = function() {
            return 0 == this._data[1]
        }, r.pop = function() {
            var t = this._data[0];
            if (65535 === t) return null;
            var e = t,
                i = 2 * e,
                n = this._spacesData[e];
            return this._signData[i + 1] = 1, this._data[0] = this._signData[i + 0], this._data[1]++, n
        }, r.push = function(t) {
            var e = 2 * t;
            this._signData[e + 1] = 0, this._signData[e + 0] = this._data[0], this._data[0] = t, this._data[1]--
        }, r.dump = function() {
            for (var t = 0, e = this._data[0], i = ""; 65535 != e;) t++, i += e + "->", e = this._signData[2 * e + 0];
            for (var n = 0, r = "", s = this._contentNum, o = 0; o < s; o++) {
                1 == this._signData[2 * o + 1] && (n++, r += o + "->")
            }
            var a = t + n;
            console.log("unitID:", this.unitID, "spaceNum:", t, "calc using num:", n, "store using num:", this._data[1], "calc total num:", a, "actually total num:", this._contentNum), console.log("free info:", i), console.log("using info:", r), n != this._data[1] && cc.error("using num error", "calc using num:", n, "store using num:", this._data[1]), t + n != this._contentNum && cc.error("total num error", "calc total num:", a, "actually total num:", this._contentNum)
        }, e.exports = n
    }), {}],
    314: [(function(t, e, i) {
        "use strict";
        var n = t("../vmath"),
            r = t("./value-type"),
            s = t("../platform/js"),
            o = (function() {
                function e(t, e, i, n) {
                    "object" == typeof t && (e = t.g, i = t.b, n = t.a, t = t.r), t = t || 0, e = e || 0, i = i || 0, n = "number" == typeof n ? n : 255, this._val = (n << 24 >>> 0) + (i << 16) + (e << 8) + t
                }
                s.extend(e, r), t("../platform/CCClass").fastDefine("cc.Color", e, {
                    r: 0,
                    g: 0,
                    b: 0,
                    a: 255
                });
                var i = {
                    WHITE: [255, 255, 255, 255],
                    BLACK: [0, 0, 0, 255],
                    TRANSPARENT: [0, 0, 0, 0],
                    GRAY: [127.5, 127.5, 127.5],
                    RED: [255, 0, 0],
                    GREEN: [0, 255, 0],
                    BLUE: [0, 0, 255],
                    YELLOW: [255, 235, 4],
                    ORANGE: [255, 127, 0],
                    CYAN: [0, 255, 255],
                    MAGENTA: [255, 0, 255]
                };
                for (var o in i) s.get(e, o, (function(t) {
                    return function() {
                        return new e(t[0], t[1], t[2], t[3])
                    }
                })(i[o]));
                var a = e.prototype;
                return a.clone = function() {
                    var t = new e;
                    return t._val = this._val, t
                }, a.equals = function(t) {
                    return t && this._val === t._val
                }, a.lerp = function(t, i, n) {
                    n = n || new e;
                    var r = this.r,
                        s = this.g,
                        o = this.b,
                        a = this.a;
                    return n.r = r + (t.r - r) * i, n.g = s + (t.g - s) * i, n.b = o + (t.b - o) * i, n.a = a + (t.a - a) * i, n
                }, a.toString = function() {
                    return "rgba(" + this.r.toFixed() + ", " + this.g.toFixed() + ", " + this.b.toFixed() + ", " + this.a.toFixed() + ")"
                }, a.getR = function() {
                    return 255 & this._val
                }, a.setR = function(t) {
                    return t = ~~cc.misc.clampf(t, 0, 255), this._val = (4294967040 & this._val | t) >>> 0, this
                }, a.getG = function() {
                    return (65280 & this._val) >> 8
                }, a.setG = function(t) {
                    return t = ~~cc.misc.clampf(t, 0, 255), this._val = (4294902015 & this._val | t << 8) >>> 0, this
                }, a.getB = function() {
                    return (16711680 & this._val) >> 16
                }, a.setB = function(t) {
                    return t = ~~cc.misc.clampf(t, 0, 255), this._val = (4278255615 & this._val | t << 16) >>> 0, this
                }, a.getA = function() {
                    return (4278190080 & this._val) >>> 24
                }, a.setA = function(t) {
                    return t = ~~cc.misc.clampf(t, 0, 255), this._val = (16777215 & this._val | t << 24) >>> 0, this
                }, a._fastSetA = function(t) {
                    this._val = (16777215 & this._val | t << 24) >>> 0
                }, s.getset(a, "r", a.getR, a.setR, !0), s.getset(a, "g", a.getG, a.setG, !0), s.getset(a, "b", a.getB, a.setB, !0), s.getset(a, "a", a.getA, a.setA, !0), a.toCSS = function(t) {
                    return "rgba" === t ? "rgba(" + (0 | this.r) + "," + (0 | this.g) + "," + (0 | this.b) + "," + (this.a / 255).toFixed(2) + ")" : "rgb" === t ? "rgb(" + (0 | this.r) + "," + (0 | this.g) + "," + (0 | this.b) + ")" : "#" + this.toHEX(t)
                }, a.fromHEX = function(t) {
                    t = 0 === t.indexOf("#") ? t.substring(1) : t;
                    var e = parseInt(t.substr(0, 2), 16) || 0,
                        i = parseInt(t.substr(2, 2), 16) || 0,
                        n = parseInt(t.substr(4, 2), 16) || 0,
                        r = parseInt(t.substr(6, 2), 16) || 255;
                    return this._val = (r << 24 >>> 0) + (n << 16) + (i << 8) + e, this
                }, a.toHEX = function(t) {
                    var e = [(this.r < 16 ? "0" : "") + (0 | this.r).toString(16), (this.g < 16 ? "0" : "") + (0 | this.g).toString(16), (this.b < 16 ? "0" : "") + (0 | this.b).toString(16)],
                        i = -1;
                    if ("#rgb" === t)
                        for (i = 0; i < e.length; ++i) e[i].length > 1 && (e[i] = e[i][0]);
                    else if ("#rrggbb" === t)
                        for (i = 0; i < e.length; ++i) 1 === e[i].length && (e[i] = "0" + e[i]);
                    else "#rrggbbaa" === t && e.push((this.a < 16 ? "0" : "") + (0 | this.a).toString(16));
                    return e.join("")
                }, a.toRGBValue = function() {
                    return 16777215 & this._val
                }, a.fromHSV = function(t, e, i) {
                    var n, r, s;
                    if (0 === e) n = r = s = i;
                    else if (0 === i) n = r = s = 0;
                    else {
                        1 === t && (t = 0), t *= 6, e = e, i = i;
                        var o = Math.floor(t),
                            a = t - o,
                            l = i * (1 - e),
                            h = i * (1 - e * a),
                            c = i * (1 - e * (1 - a));
                        switch (o) {
                            case 0:
                                n = i, r = c, s = l;
                                break;
                            case 1:
                                n = h, r = i, s = l;
                                break;
                            case 2:
                                n = l, r = i, s = c;
                                break;
                            case 3:
                                n = l, r = h, s = i;
                                break;
                            case 4:
                                n = c, r = l, s = i;
                                break;
                            case 5:
                                n = i, r = l, s = h
                        }
                    }
                    return n *= 255, r *= 255, s *= 255, this._val = (this.a << 24 >>> 0) + (s << 16) + (r << 8) + n, this
                }, a.toHSV = function() {
                    var t = this.r / 255,
                        e = this.g / 255,
                        i = this.b / 255,
                        n = {
                            h: 0,
                            s: 0,
                            v: 0
                        },
                        r = Math.max(t, e, i),
                        s = Math.min(t, e, i),
                        o = 0;
                    return n.v = r, n.s = r ? (r - s) / r : 0, n.s ? (o = r - s, n.h = t === r ? (e - i) / o : e === r ? 2 + (i - t) / o : 4 + (t - e) / o, n.h /= 6, n.h < 0 && (n.h += 1)) : n.h = 0, n
                }, a.set = function(t) {
                    t._val ? this._val = t._val : (this.r = t.r, this.g = t.g, this.b = t.b, this.a = t.a)
                }, a.array = function(t) {
                    n.color4.array(t, this)
                }, e
            })();
        cc.Color = o, cc.color = function(t, e, i, n) {
            return "string" == typeof t ? (new cc.Color).fromHEX(t) : "object" == typeof t ? new cc.Color(t.r, t.g, t.b, t.a) : new cc.Color(t, e, i, n)
        }, e.exports = cc.Color
    }), {
        "../platform/CCClass": 198,
        "../platform/js": 218,
        "../vmath": 326,
        "./value-type": 320
    }],
    315: [(function(t, e, i) {
        "use strict";
        t("./value-type"), cc.vmath = t("../vmath").default, e.exports = {
            Vec2: t("./vec2"),
            Vec3: t("./vec3"),
            Vec4: t("./vec4"),
            Quat: t("./quat"),
            Mat4: t("./mat4"),
            Size: t("./size"),
            Rect: t("./rect"),
            Color: t("./color")
        }
    }), {
        "../vmath": 326,
        "./color": 314,
        "./mat4": 316,
        "./quat": 317,
        "./rect": 318,
        "./size": 319,
        "./value-type": 320,
        "./vec2": 321,
        "./vec3": 322,
        "./vec4": 323
    }],
    316: [(function(t, e, i) {
        "use strict";
        var n = t("../vmath"),
            r = t("../vmath/utils"),
            s = t("./value-type"),
            o = t("../platform/js"),
            a = t("../platform/CCClass");

        function l(t, e, i, n, s, o, a, l, h, c, u, _, f, d, p, m) {
            this.m = new r.FLOAT_ARRAY_TYPE(16);
            var y = this.m;
            y[0] = t, y[1] = e, y[2] = i, y[3] = n, y[4] = s, y[5] = o, y[6] = a, y[7] = l, y[8] = h, y[9] = c, y[10] = u, y[11] = _, y[12] = f, y[13] = d, y[14] = p, y[15] = m
        }
        o.extend(l, s), a.fastDefine("cc.Mat4", l, {
            m00: 1,
            m01: 0,
            m02: 0,
            m03: 0,
            m04: 0,
            m05: 1,
            m06: 0,
            m07: 0,
            m08: 0,
            m09: 0,
            m10: 1,
            m11: 0,
            m12: 0,
            m13: 0,
            m14: 0,
            m15: 1
        });
        for (var h = function(t) {
                Object.defineProperty(l.prototype, "m" + t, {
                    get: function() {
                        return this.m[t]
                    },
                    set: function(e) {
                        this.m[t] = e
                    }
                })
            }, c = 0; c < 16; c++) h(c);
        o.mixin(l.prototype, {
            clone: function() {
                var t = this.m;
                return new l(t[0], t[1], t[2], t[3], t[4], t[5], t[6], t[7], t[8], t[9], t[10], t[11], t[12], t[13], t[14], t[15])
            },
            set: function(t) {
                var e = this.m,
                    i = t.m;
                return e[0] = i[0], e[1] = i[1], e[2] = i[2], e[3] = i[3], e[4] = i[4], e[5] = i[5], e[6] = i[6], e[7] = i[7], e[8] = i[8], e[9] = i[9], e[10] = i[10], e[11] = i[11], e[12] = i[12], e[13] = i[13], e[14] = i[14], e[15] = i[15], this
            },
            equals: function(t) {
                return n.mat4.exactEquals(this, t)
            },
            fuzzyEquals: function(t) {
                return n.mat4.equals(this, t)
            },
            toString: function() {
                var t = this.m;
                return t ? "[\n" + t[0] + ", " + t[1] + ", " + t[2] + ", " + t[3] + ",\n" + t[4] + ", " + t[5] + ", " + t[6] + ", " + t[7] + ",\n" + t[8] + ", " + t[9] + ", " + t[10] + ", " + t[11] + ",\n" + t[12] + ", " + t[13] + ", " + t[14] + ", " + t[15] + "\n]" : "[\n1, 0, 0, 0\n0, 1, 0, 0\n0, 0, 1, 0\n0, 0, 0, 1\n]"
            },
            identity: function() {
                return n.mat4.identity(this)
            },
            transpose: function(t) {
                return t = t || new cc.Mat4, n.mat4.transpose(t, this)
            },
            invert: function(t) {
                return t = t || new cc.Mat4, n.mat4.invert(t, this)
            },
            adjoint: function(t) {
                return t = t || new cc.Mat4, n.mat4.adjoint(t, this)
            },
            determinant: function() {
                return n.mat4.determinant(this)
            },
            add: function(t, e) {
                return e = e || new cc.Mat4, n.mat4.add(e, this, t)
            },
            sub: function(t, e) {
                return e = e || new cc.Mat4, n.mat4.subtract(e, this, t)
            },
            mul: function(t, e) {
                return e = e || new cc.Mat4, n.mat4.multiply(e, this, t)
            },
            mulScalar: function(t, e) {
                return e = e || new cc.Mat4, n.mat4.mulScalar(e, this, t)
            },
            translate: function(t, e) {
                return e = e || new cc.Mat4, n.mat4.translate(e, this, t)
            },
            scale: function(t, e) {
                return e = e || new cc.Mat4, n.mat4.scale(e, this, t)
            },
            rotate: function(t, e, i) {
                return i = i || new cc.Mat4, n.mat4.rotate(i, this, t, e)
            },
            getTranslation: function(t) {
                return t = t || new cc.Vec3, n.mat4.getTranslation(t, this)
            },
            getScale: function(t) {
                return t = t || new cc.Vec3, n.mat4.getScaling(t, this)
            },
            getRotation: function(t) {
                return t = t || new cc.Quat, n.mat4.getRotation(t, this)
            },
            fromRTS: function(t, e, i) {
                return n.mat4.fromRTS(this, t, e, i)
            },
            fromQuat: function(t) {
                return n.mat4.fromQuat(this, t)
            },
            array: function(t) {
                return n.mat4.array(t, this)
            }
        }), cc.mat4 = function(t, e, i, r, s, o, a, h, c, u, _, f, d, p, m, y) {
            var v = new l(t, e, i, r, s, o, a, h, c, u, _, f, d, p, m, y);
            return void 0 === t && n.mat4.identity(v), v
        }, e.exports = cc.Mat4 = l
    }), {
        "../platform/CCClass": 198,
        "../platform/js": 218,
        "../vmath": 326,
        "../vmath/utils": 333,
        "./value-type": 320
    }],
    317: [(function(t, e, i) {
        "use strict";
        var n = t("./value-type"),
            r = t("../platform/js"),
            s = t("../platform/CCClass"),
            o = t("../vmath/quat");

        function a(t, e, i, n) {
            t && "object" == typeof t && (i = t.z, e = t.y, n = t.w, t = t.x), this.x = t || 0, this.y = e || 0, this.z = i || 0, this.w = n || 1
        }
        r.extend(a, n), s.fastDefine("cc.Quat", a, {
            x: 0,
            y: 0,
            z: 0,
            w: 1
        });
        var l = a.prototype;
        l.clone = function() {
            return new a(this.x, this.y, this.z, this.w)
        }, l.set = function(t) {
            return this.x = t.x, this.y = t.y, this.z = t.z, this.w = t.w, this
        }, l.equals = function(t) {
            return t && this.x === t.x && this.y === t.y && this.z === t.z && this.w === t.w
        }, l.toEuler = function(t) {
            return o.toEuler(t, this), t
        }, l.fromEuler = function(t) {
            return o.fromEuler(this, t.x, t.y, t.z), this
        }, l.lerp = function(t, e, i) {
            return i = i || new cc.Quat, o.slerp(i, this, t, e), i
        }, l.mul = function(t, e) {
            return e = e || new cc.Quat, o.mul(e, this, t), e
        }, l.array = function(t) {
            o.array(t, this)
        }, l.rotateAround = function(t, e, i, n) {
            return n = n || new cc.Quat, o.rotateAround(n, t, e, i)
        }, cc.quat = function(t, e, i, n) {
            return new a(t, e, i, n)
        }, e.exports = cc.Quat = a
    }), {
        "../platform/CCClass": 198,
        "../platform/js": 218,
        "../vmath/quat": 331,
        "./value-type": 320
    }],
    318: [(function(t, e, i) {
        "use strict";
        var n = t("./value-type"),
            r = t("../platform/js");

        function s(t, e, i, n) {
            t && "object" == typeof t && (e = t.y, i = t.width, n = t.height, t = t.x), this.x = t || 0, this.y = e || 0, this.width = i || 0, this.height = n || 0
        }
        r.extend(s, n), t("../platform/CCClass").fastDefine("cc.Rect", s, {
            x: 0,
            y: 0,
            width: 0,
            height: 0
        }), s.fromMinMax = function(t, e) {
            var i = Math.min(t.x, e.x),
                n = Math.min(t.y, e.y);
            return new s(i, n, Math.max(t.x, e.x) - i, Math.max(t.y, e.y) - n)
        };
        var o = s.prototype;
        o.clone = function() {
            return new s(this.x, this.y, this.width, this.height)
        }, o.equals = function(t) {
            return t && this.x === t.x && this.y === t.y && this.width === t.width && this.height === t.height
        }, o.lerp = function(t, e, i) {
            i = i || new s;
            var n = this.x,
                r = this.y,
                o = this.width,
                a = this.height;
            return i.x = n + (t.x - n) * e, i.y = r + (t.y - r) * e, i.width = o + (t.width - o) * e, i.height = a + (t.height - a) * e, i
        }, o.set = function(t) {
            this.x = t.x, this.y = t.y, this.width = t.width, this.height = t.height
        }, o.intersects = function(t) {
            var e = this.x + this.width,
                i = this.y + this.height,
                n = t.x + t.width,
                r = t.y + t.height;
            return !(e < t.x || n < this.x || i < t.y || r < this.y)
        }, o.intersection = function(t, e) {
            var i = this.x,
                n = this.y,
                r = this.x + this.width,
                s = this.y + this.height,
                o = e.x,
                a = e.y,
                l = e.x + e.width,
                h = e.y + e.height;
            return t.x = Math.max(i, o), t.y = Math.max(n, a), t.width = Math.min(r, l) - t.x, t.height = Math.min(s, h) - t.y, t
        }, o.contains = function(t) {
            return this.x <= t.x && this.x + this.width >= t.x && this.y <= t.y && this.y + this.height >= t.y
        }, o.containsRect = function(t) {
            return this.x <= t.x && this.x + this.width >= t.x + t.width && this.y <= t.y && this.y + this.height >= t.y + t.height
        }, o.union = function(t, e) {
            var i = this.x,
                n = this.y,
                r = this.width,
                s = this.height,
                o = e.x,
                a = e.y,
                l = e.width,
                h = e.height;
            return t.x = Math.min(i, o), t.y = Math.min(n, a), t.width = Math.max(i + r, o + l) - t.x, t.height = Math.max(n + s, a + h) - t.y, t
        }, o.transformMat4 = function(t, e) {
            var i = this.x,
                n = this.y,
                r = i + this.width,
                s = n + this.height,
                o = e.m,
                a = o[0] * i + o[4] * n + o[12],
                l = o[1] * i + o[5] * n + o[13],
                h = o[0] * r + o[4] * n + o[12],
                c = o[1] * r + o[5] * n + o[13],
                u = o[0] * i + o[4] * s + o[12],
                _ = o[1] * i + o[5] * s + o[13],
                f = o[0] * r + o[4] * s + o[12],
                d = o[1] * r + o[5] * s + o[13],
                p = Math.min(a, h, u, f),
                m = Math.max(a, h, u, f),
                y = Math.min(l, c, _, d),
                v = Math.max(l, c, _, d);
            return t.x = p, t.y = y, t.width = m - p, t.height = v - y, t
        }, o.toString = function() {
            return "(" + this.x.toFixed(2) + ", " + this.y.toFixed(2) + ", " + this.width.toFixed(2) + ", " + this.height.toFixed(2) + ")"
        }, r.getset(o, "xMin", (function() {
            return this.x
        }), (function(t) {
            this.width += this.x - t, this.x = t
        })), r.getset(o, "yMin", (function() {
            return this.y
        }), (function(t) {
            this.height += this.y - t, this.y = t
        })), r.getset(o, "xMax", (function() {
            return this.x + this.width
        }), (function(t) {
            this.width = t - this.x
        })), r.getset(o, "yMax", (function() {
            return this.y + this.height
        }), (function(t) {
            this.height = t - this.y
        })), r.getset(o, "center", (function() {
            return new cc.Vec2(this.x + .5 * this.width, this.y + .5 * this.height)
        }), (function(t) {
            this.x = t.x - .5 * this.width, this.y = t.y - .5 * this.height
        })), r.getset(o, "origin", (function() {
            return new cc.Vec2(this.x, this.y)
        }), (function(t) {
            this.x = t.x, this.y = t.y
        })), r.getset(o, "size", (function() {
            return new cc.Size(this.width, this.height)
        }), (function(t) {
            this.width = t.width, this.height = t.height
        })), cc.Rect = s, cc.rect = function(t, e, i, n) {
            return new s(t, e, i, n)
        }, e.exports = cc.Rect
    }), {
        "../platform/CCClass": 198,
        "../platform/js": 218,
        "./value-type": 320
    }],
    319: [(function(t, e, i) {
        "use strict";
        var n = t("./value-type"),
            r = t("../platform/js");

        function s(t, e) {
            t && "object" == typeof t && (e = t.height, t = t.width), this.width = t || 0, this.height = e || 0
        }
        r.extend(s, n), t("../platform/CCClass").fastDefine("cc.Size", s, {
            width: 0,
            height: 0
        }), r.get(s, "ZERO", (function() {
            return new s(0, 0)
        }));
        var o = s.prototype;
        o.clone = function() {
            return new s(this.width, this.height)
        }, o.equals = function(t) {
            return t && this.width === t.width && this.height === t.height
        }, o.lerp = function(t, e, i) {
            i = i || new s;
            var n = this.width,
                r = this.height;
            return i.width = n + (t.width - n) * e, i.height = r + (t.height - r) * e, i
        }, o.set = function(t) {
            this.width = t.width, this.height = t.height
        }, o.toString = function() {
            return "(" + this.width.toFixed(2) + ", " + this.height.toFixed(2) + ")"
        }, cc.size = function(t, e) {
            return new s(t, e)
        }, cc.Size = e.exports = s
    }), {
        "../platform/CCClass": 198,
        "../platform/js": 218,
        "./value-type": 320
    }],
    320: [(function(t, e, i) {
        "use strict";
        var n = t("../platform/js");

        function r() {}
        n.setClassName("cc.ValueType", r);
        var s = r.prototype;
        s.toString = function() {
            return "" + {}
        }, cc.ValueType = e.exports = r
    }), {
        "../platform/js": 218
    }],
    321: [(function(t, e, i) {
        "use strict";
        var n = t("../vmath"),
            r = t("./value-type"),
            s = t("../platform/js"),
            o = t("../platform/CCClass"),
            a = t("../utils/misc");

        function l(t, e) {
            t && "object" == typeof t && (e = t.y, t = t.x), this.x = t || 0, this.y = e || 0
        }
        s.extend(l, r), o.fastDefine("cc.Vec2", l, {
            x: 0,
            y: 0
        });
        var h = l.prototype;
        s.value(h, "z", 0, !0), h.clone = function() {
            return new l(this.x, this.y)
        }, h.set = function(t) {
            return this.x = t.x, this.y = t.y, this
        }, h.equals = function(t) {
            return t && this.x === t.x && this.y === t.y
        }, h.fuzzyEquals = function(t, e) {
            return this.x - e <= t.x && t.x <= this.x + e && this.y - e <= t.y && t.y <= this.y + e
        }, h.toString = function() {
            return "(" + this.x.toFixed(2) + ", " + this.y.toFixed(2) + ")"
        }, h.lerp = function(t, e, i) {
            i = i || new l;
            var n = this.x,
                r = this.y;
            return i.x = n + (t.x - n) * e, i.y = r + (t.y - r) * e, i
        }, h.clampf = function(t, e) {
            return this.x = a.clampf(this.x, t.x, e.x), this.y = a.clampf(this.y, t.y, e.y), this
        }, h.addSelf = function(t) {
            return this.x += t.x, this.y += t.y, this
        }, h.add = function(t, e) {
            return (e = e || new l).x = this.x + t.x, e.y = this.y + t.y, e
        }, h.subSelf = function(t) {
            return this.x -= t.x, this.y -= t.y, this
        }, h.sub = function(t, e) {
            return (e = e || new l).x = this.x - t.x, e.y = this.y - t.y, e
        }, h.mulSelf = function(t) {
            return this.x *= t, this.y *= t, this
        }, h.mul = function(t, e) {
            return (e = e || new l).x = this.x * t, e.y = this.y * t, e
        }, h.scaleSelf = function(t) {
            return this.x *= t.x, this.y *= t.y, this
        }, h.scale = function(t, e) {
            return (e = e || new l).x = this.x * t.x, e.y = this.y * t.y, e
        }, h.divSelf = function(t) {
            return this.x /= t, this.y /= t, this
        }, h.div = function(t, e) {
            return (e = e || new l).x = this.x / t, e.y = this.y / t, e
        }, h.negSelf = function() {
            return this.x = -this.x, this.y = -this.y, this
        }, h.neg = function(t) {
            return (t = t || new l).x = -this.x, t.y = -this.y, t
        }, h.dot = function(t) {
            return this.x * t.x + this.y * t.y
        }, h.cross = function(t) {
            return this.x * t.y - this.y * t.x
        }, h.mag = function() {
            return Math.sqrt(this.x * this.x + this.y * this.y)
        }, h.magSqr = function() {
            return this.x * this.x + this.y * this.y
        }, h.normalizeSelf = function() {
            var t = this.x * this.x + this.y * this.y;
            if (1 === t) return this;
            if (0 === t) return this;
            var e = 1 / Math.sqrt(t);
            return this.x *= e, this.y *= e, this
        }, h.normalize = function(t) {
            return (t = t || new l).x = this.x, t.y = this.y, t.normalizeSelf(), t
        }, h.angle = function(t) {
            var e = this.magSqr(),
                i = t.magSqr();
            if (0 === e || 0 === i) return console.warn("Can't get angle between zero vector"), 0;
            var n = this.dot(t) / Math.sqrt(e * i);
            return n = a.clampf(n, -1, 1), Math.acos(n)
        }, h.signAngle = function(t) {
            var e = this.angle(t);
            return this.cross(t) < 0 ? -e : e
        }, h.rotate = function(t, e) {
            return (e = e || new l).x = this.x, e.y = this.y, e.rotateSelf(t)
        }, h.rotateSelf = function(t) {
            var e = Math.sin(t),
                i = Math.cos(t),
                n = this.x;
            return this.x = i * n - e * this.y, this.y = e * n + i * this.y, this
        }, h.project = function(t) {
            return t.mul(this.dot(t) / t.dot(t))
        }, h.transformMat4 = function(t, e) {
            e = e || new l, n.vec2.transformMat4(e, this, t)
        }, h.fromTranslation = function(t) {
            return this.x = t[0], this.y = t[1], this
        }, h.toTranslation = function(t) {
            t[0] = this.x, t[1] = this.y
        }, h.fromScale = function(t) {
            return this.x = t[7], this.y = t[8], this
        }, h.toScale = function(t) {
            t[7] = this.x, t[8] = this.y
        }, h.array = function(t) {
            n.vec2.array(t, this)
        }, s.get(l, "ONE", (function() {
            return new l(1, 1)
        })), s.get(l, "ZERO", (function() {
            return new l(0, 0)
        })), s.get(l, "UP", (function() {
            return new l(0, 1)
        })), s.get(l, "RIGHT", (function() {
            return new l(1, 0)
        })), cc.Vec2 = l, cc.v2 = function(t, e) {
            return new l(t, e)
        }, cc.p = cc.v2, e.exports = cc.Vec2
    }), {
        "../platform/CCClass": 198,
        "../platform/js": 218,
        "../utils/misc": 300,
        "../vmath": 326,
        "./value-type": 320
    }],
    322: [(function(t, e, i) {
        "use strict";
        var n = t("../vmath"),
            r = t("./value-type"),
            s = t("../platform/js"),
            o = t("../platform/CCClass"),
            a = t("../utils/misc"),
            l = t("./vec2").prototype;

        function h(t, e, i) {
            t && "object" == typeof t && (i = t.z, e = t.y, t = t.x), this.x = t || 0, this.y = e || 0, this.z = i || 0
        }
        s.extend(h, r), o.fastDefine("cc.Vec3", h, {
            x: 0,
            y: 0,
            z: 0
        });
        var c = h.prototype;
        c.clone = function() {
            return new h(this.x, this.y, this.z)
        }, c.set = function(t) {
            return this.x = t.x, this.y = t.y, this.z = t.z, this
        }, c.equals = function(t) {
            return t && this.x === t.x && this.y === t.y && this.z === t.z
        }, c.fuzzyEquals = function(t, e) {
            return this.x - e <= t.x && t.x <= this.x + e && this.y - e <= t.y && t.y <= this.y + e && this.z - e <= t.z && t.z <= this.z + e
        }, c.toString = function() {
            return "(" + this.x.toFixed(2) + ", " + this.y.toFixed(2) + ", " + this.z.toFixed(2) + ")"
        }, c.lerp = function(t, e, i) {
            return i = i || new h, n.vec3.lerp(i, this, t, e), i
        }, c.clampf = function(t, e) {
            return this.x = a.clampf(this.x, t.x, e.x), this.y = a.clampf(this.y, t.y, e.y), this.z = a.clampf(this.z, t.z, e.z), this
        }, c.addSelf = function(t) {
            return this.x += t.x, this.y += t.y, this.z += t.z, this
        }, c.add = function(t, e) {
            return (e = e || new h).x = this.x + t.x, e.y = this.y + t.y, e.z = this.z + t.z, e
        }, c.subSelf = function(t) {
            return this.x -= t.x, this.y -= t.y, this.z -= t.z, this
        }, c.sub = function(t, e) {
            return (e = e || new h).x = this.x - t.x, e.y = this.y - t.y, e.z = this.z - t.z, e
        }, c.mulSelf = function(t) {
            return this.x *= t, this.y *= t, this.z *= t, this
        }, c.mul = function(t, e) {
            return (e = e || new h).x = this.x * t, e.y = this.y * t, e.z = this.z * t, e
        }, c.scaleSelf = function(t) {
            return this.x *= t.x, this.y *= t.y, this.z *= t.z, this
        }, c.scale = function(t, e) {
            return (e = e || new h).x = this.x * t.x, e.y = this.y * t.y, e.z = this.z * t.z, e
        }, c.divSelf = function(t) {
            return this.x /= t, this.y /= t, this.z /= t, this
        }, c.div = function(t, e) {
            return (e = e || new h).x = this.x / t, e.y = this.y / t, e.z = this.z / t, e
        }, c.negSelf = function() {
            return this.x = -this.x, this.y = -this.y, this.z = -this.z, this
        }, c.neg = function(t) {
            return (t = t || new h).x = -this.x, t.y = -this.y, t.z = -this.z, t
        }, c.dot = function(t) {
            return this.x * t.x + this.y * t.y + this.z * t.z
        }, c.cross = function(t, e) {
            return e = e || new h, n.vec3.cross(e, this, t), e
        }, c.mag = function() {
            return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z)
        }, c.magSqr = function() {
            return this.x * this.x + this.y * this.y + this.z * this.z
        }, c.normalizeSelf = function() {
            return n.vec3.normalize(this, this), this
        }, c.normalize = function(t) {
            return t = t || new h, n.vec3.normalize(t, this), t
        }, c.transformMat4 = function(t, e) {
            e = e || new h, n.vec3.transformMat4(e, this, t)
        }, c.angle = l.angle, c.project = l.project, c.signAngle = function(t) {
            cc.warnID(1408, "vec3.signAngle", "v2.1", "cc.v2(selfVector).signAngle(vector)");
            var e = new cc.Vec2(this.x, this.y),
                i = new cc.Vec2(t.x, t.y);
            return e.signAngle(i)
        }, c.rotate = function(t, e) {
            return cc.warnID(1408, "vec3.rotate", "v2.1", "cc.v2(selfVector).rotate(radians, out)"), l.rotate.call(this, t, e)
        }, c.rotateSelf = function(t) {
            return cc.warnID(1408, "vec3.rotateSelf", "v2.1", "cc.v2(selfVector).rotateSelf(radians)"), l.rotateSelf.call(this, t)
        }, c.array = function(t) {
            n.vec3.array(t, this)
        }, s.get(h, "ONE", (function() {
            return new h(1, 1, 1)
        })), s.get(h, "ZERO", (function() {
            return new h(0, 0, 0)
        })), s.get(h, "UP", (function() {
            return new h(0, 1, 0)
        })), s.get(h, "RIGHT", (function() {
            return new h(1, 0, 0)
        })), s.get(h, "FRONT", (function() {
            return new h(0, 0, 1)
        })), cc.v3 = function(t, e, i) {
            return new h(t, e, i)
        }, e.exports = cc.Vec3 = h
    }), {
        "../platform/CCClass": 198,
        "../platform/js": 218,
        "../utils/misc": 300,
        "../vmath": 326,
        "./value-type": 320,
        "./vec2": 321
    }],
    323: [(function(t, e, i) {
        "use strict";
        var n = a(t("./value-type")),
            r = a(t("../platform/CCClass")),
            s = t("../vmath"),
            o = t("../utils/misc");

        function a(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }

        function l(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }

        function h(t, e) {
            if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
            return !e || "object" != typeof e && "function" != typeof e ? t : e
        }

        function c(t, e) {
            if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e);
            t.prototype = Object.create(e && e.prototype, {
                constructor: {
                    value: t,
                    enumerable: !1,
                    writable: !0,
                    configurable: !0
                }
            }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e)
        }
        var u = (function(t) {
            function e(i, n, r, s) {
                l(this, e);
                var o = h(this, t.call(this));
                return i && "object" == typeof i && (s = i.w, r = i.z, n = i.y, i = i.x), o.x = i || 0, o.y = n || 0, o.z = r || 0, o.w = s || 0, o
            }
            return c(e, t), e.prototype.clone = function() {
                return new e(this.x, this.y, this.z, this.w)
            }, e.prototype.set = function(t) {
                return this.x = t.x, this.y = t.y, this.z = t.z, this.w = t.w, this
            }, e.prototype.equals = function(t) {
                return t && this.x === t.x && this.y === t.y && this.z === t.z && this.w === t.w
            }, e.prototype.fuzzyEquals = function(t, e) {
                return this.x - e <= t.x && t.x <= this.x + e && this.y - e <= t.y && t.y <= this.y + e && this.z - e <= t.z && t.z <= this.z + e && this.w - e <= t.w && t.w <= this.w + e
            }, e.prototype.toString = function() {
                return "(" + this.x.toFixed(2) + ", " + this.y.toFixed(2) + ", " + this.z.toFixed(2) + ", " + this.w.toFixed(2) + ")"
            }, e.prototype.lerp = function(t, i, n) {
                return n = n || new e, s.vec4.lerp(n, this, t, i), n
            }, e.prototype.clampf = function(t, e) {
                return this.x = (0, o.clampf)(this.x, t.x, e.x), this.y = (0, o.clampf)(this.y, t.y, e.y), this.z = (0, o.clampf)(this.z, t.z, e.z), this.w = (0, o.clampf)(this.w, t.w, e.w), this
            }, e.prototype.addSelf = function(t) {
                return this.x += t.x, this.y += t.y, this.z += t.z, this.w += t.w, this
            }, e.prototype.add = function(t, i) {
                return (i = i || new e).x = this.x + t.x, i.y = this.y + t.y, i.z = this.z + t.z, i.w = this.w + t.w, i
            }, e.prototype.subSelf = function(t) {
                return this.x -= t.x, this.y -= t.y, this.z -= t.z, this.w -= t.w, this
            }, e.prototype.sub = function(t, i) {
                return (i = i || new e).x = this.x - t.x, i.y = this.y - t.y, i.z = this.z - t.z, i.w = this.w - t.w, i
            }, e.prototype.mulSelf = function(t) {
                return this.x *= t, this.y *= t, this.z *= t, this.w *= t, this
            }, e.prototype.mul = function(t, i) {
                return (i = i || new e).x = this.x * t, i.y = this.y * t, i.z = this.z * t, i.w = this.w * t, i
            }, e.prototype.scaleSelf = function(t) {
                return this.x *= t.x, this.y *= t.y, this.z *= t.z, this.w *= t.w, this
            }, e.prototype.scale = function(t, i) {
                return (i = i || new e).x = this.x * t.x, i.y = this.y * t.y, i.z = this.z * t.z, i.w = this.w * t.w, i
            }, e.prototype.divSelf = function(t) {
                return this.x /= t, this.y /= t, this.z /= t, this.w /= t, this
            }, e.prototype.div = function(t, i) {
                return (i = i || new e).x = this.x / t, i.y = this.y / t, i.z = this.z / t, i.w = this.w / t, i
            }, e.prototype.negSelf = function() {
                return this.x = -this.x, this.y = -this.y, this.z = -this.z, this.w = -this.w, this
            }, e.prototype.neg = function(t) {
                return (t = t || new e).x = -this.x, t.y = -this.y, t.z = -this.z, t.w = -this.w, t
            }, e.prototype.dot = function(t) {
                return this.x * t.x + this.y * t.y + this.z * t.z + this.w * t.w
            }, e.prototype.cross = function(t, i) {
                return i = i || new e, s.vec4.cross(i, this, t), i
            }, e.prototype.mag = function() {
                var t = this.x,
                    e = this.y,
                    i = this.z,
                    n = this.w;
                return Math.sqrt(t * t + e * e + i * i + n * n)
            }, e.prototype.magSqr = function() {
                var t = this.x,
                    e = this.y,
                    i = this.z,
                    n = this.w;
                return t * t + e * e + i * i + n * n
            }, e.prototype.normalizeSelf = function() {
                return s.vec4.normalize(this, this), this
            }, e.prototype.normalize = function(t) {
                return t = t || new e, s.vec4.normalize(t, this), t
            }, e.prototype.transformMat4 = function(t, i) {
                return i = i || new e, s.vec4.transformMat4(i, this, t), i
            }, e.prototype.array = function(t) {
                s.vec4.array(t, this)
            }, e
        })(n.default);
        r.default.fastDefine("cc.Vec4", u, {
            x: 0,
            y: 0,
            z: 0,
            w: 0
        }), cc.v4 = function(t, e, i, n) {
            return new u(t, e, i, n)
        }, e.exports = cc.Vec4 = u
    }), {
        "../platform/CCClass": 198,
        "../utils/misc": 300,
        "../vmath": 326,
        "./value-type": 320
    }],
    324: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0;
        var n = t("./utils");

        function r(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }
        var s = (function() {
            function t() {
                var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 1,
                    i = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 1,
                    n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 1;
                r(this, t), this.r = e, this.g = i, this.b = n
            }
            return t.create = function() {
                return new t(arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 1, arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 1, arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 1)
            }, t.clone = function(e) {
                return new t(e.r, e.g, e.b)
            }, t.copy = function(t, e) {
                return t.r = e.r, t.g = e.g, t.b = e.b, t
            }, t.set = function(t, e, i, n) {
                return t.r = e, t.g = i, t.b = n, t
            }, t.fromHex = function(t, e) {
                var i = (e >> 16) / 255,
                    n = (e >> 8 & 255) / 255,
                    r = (255 & e) / 255;
                return t.r = i, t.g = n, t.b = r, t
            }, t.add = function(t, e, i) {
                return t.r = e.r + i.r, t.g = e.g + i.g, t.b = e.b + i.b, t
            }, t.subtract = function(t, e, i) {
                return t.r = e.r - i.r, t.g = e.g - i.g, t.b = e.b - i.b, t
            }, t.sub = function(e, i, n) {
                return t.subtract(e, i, n)
            }, t.multiply = function(t, e, i) {
                return t.r = e.r * i.r, t.g = e.g * i.g, t.b = e.b * i.b, t
            }, t.mul = function(e, i, n) {
                return t.multiply(e, i, n)
            }, t.divide = function(t, e, i) {
                return t.r = e.r / i.r, t.g = e.g / i.g, t.b = e.b / i.b, t
            }, t.div = function(e, i, n) {
                return t.divide(e, i, n)
            }, t.scale = function(t, e, i) {
                return t.r = e.r * i, t.g = e.g * i, t.b = e.b * i, t
            }, t.lerp = function(t, e, i, n) {
                var r = e.r,
                    s = e.g,
                    o = e.b;
                return t.r = r + n * (i.r - r), t.g = s + n * (i.g - s), t.b = o + n * (i.b - o), t
            }, t.str = function(t) {
                return "color3(" + t.r + ", " + t.g + ", " + t.b + ")"
            }, t.array = function(t, e) {
                var i = e instanceof cc.Color ? 1 / 255 : 1;
                return t[0] = e.r * i, t[1] = e.g * i, t[2] = e.b * i, t
            }, t.exactEquals = function(t, e) {
                return t.r === e.r && t.g === e.g && t.b === e.b
            }, t.equals = function(t, e) {
                var i = t.r,
                    r = t.g,
                    s = t.b,
                    o = e.r,
                    a = e.g,
                    l = e.b;
                return Math.abs(i - o) <= n.EPSILON * Math.max(1, Math.abs(i), Math.abs(o)) && Math.abs(r - a) <= n.EPSILON * Math.max(1, Math.abs(r), Math.abs(a)) && Math.abs(s - l) <= n.EPSILON * Math.max(1, Math.abs(s), Math.abs(l))
            }, t.hex = function(t) {
                return 255 * t.r << 16 | 255 * t.g << 8 | 255 * t.b
            }, t
        })();
        i.default = s, e.exports = i.default
    }), {
        "./utils": 333
    }],
    325: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0;
        var n = t("./utils");

        function r(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }
        var s = (function() {
            function t() {
                var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 1,
                    i = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 1,
                    n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 1,
                    s = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : 1;
                r(this, t), this.r = e, this.g = i, this.b = n, this.a = s
            }
            return t.create = function() {
                return new t(arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 1, arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 1, arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 1, arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : 1)
            }, t.clone = function(e) {
                return new t(e.r, e.g, e.b, e.a)
            }, t.copy = function(t, e) {
                return t.r = e.r, t.g = e.g, t.b = e.b, t.a = e.a, t
            }, t.set = function(t, e, i, n, r) {
                return t.r = e, t.g = i, t.b = n, t.a = r, t
            }, t.fromHex = function(t, e) {
                var i = (e >> 24) / 255,
                    n = (e >> 16 & 255) / 255,
                    r = (e >> 8 & 255) / 255,
                    s = (255 & e) / 255;
                return t.r = i, t.g = n, t.b = r, t.a = s, t
            }, t.add = function(t, e, i) {
                return t.r = e.r + i.r, t.g = e.g + i.g, t.b = e.b + i.b, t.a = e.a + i.a, t
            }, t.subtract = function(t, e, i) {
                return t.r = e.r - i.r, t.g = e.g - i.g, t.b = e.b - i.b, t.a = e.a - i.a, t
            }, t.sub = function(e, i, n) {
                return t.subtract(e, i, n)
            }, t.multiply = function(t, e, i) {
                return t.r = e.r * i.r, t.g = e.g * i.g, t.b = e.b * i.b, t.a = e.a * i.a, t
            }, t.mul = function(e, i, n) {
                return t.multiply(e, i, n)
            }, t.divide = function(t, e, i) {
                return t.r = e.r / i.r, t.g = e.g / i.g, t.b = e.b / i.b, t.a = e.a / i.a, t
            }, t.div = function(e, i, n) {
                return t.divide(e, i, n)
            }, t.scale = function(t, e, i) {
                return t.r = e.r * i, t.g = e.g * i, t.b = e.b * i, t.a = e.a * i, t
            }, t.lerp = function(t, e, i, n) {
                var r = e.r,
                    s = e.g,
                    o = e.b,
                    a = e.a;
                return t.r = r + n * (i.r - r), t.g = s + n * (i.g - s), t.b = o + n * (i.b - o), t.a = a + n * (i.a - a), t
            }, t.str = function(t) {
                return "color4(" + t.r + ", " + t.g + ", " + t.b + ", " + t.a + ")"
            }, t.array = function(t, e) {
                var i = e instanceof cc.Color || e.a > 1 ? 1 / 255 : 1;
                return t[0] = e.r * i, t[1] = e.g * i, t[2] = e.b * i, t[3] = e.a * i, t
            }, t.exactEquals = function(t, e) {
                return t.r === e.r && t.g === e.g && t.b === e.b && t.a === e.a
            }, t.equals = function(t, e) {
                var i = t.r,
                    r = t.g,
                    s = t.b,
                    o = t.a,
                    a = e.r,
                    l = e.g,
                    h = e.b,
                    c = e.a;
                return Math.abs(i - a) <= n.EPSILON * Math.max(1, Math.abs(i), Math.abs(a)) && Math.abs(r - l) <= n.EPSILON * Math.max(1, Math.abs(r), Math.abs(l)) && Math.abs(s - h) <= n.EPSILON * Math.max(1, Math.abs(s), Math.abs(h)) && Math.abs(o - c) <= n.EPSILON * Math.max(1, Math.abs(o), Math.abs(c))
            }, t.hex = function(t) {
                return (255 * t.r << 24 | 255 * t.g << 16 | 255 * t.b << 8 | 255 * t.a) >>> 0
            }, t
        })();
        i.default = s, e.exports = i.default
    }), {
        "./utils": 333
    }],
    326: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.color4 = i.color3 = i.mat4 = i.mat3 = i.mat23 = i.mat2 = i.trs = i.quat = i.vec4 = i.vec3 = i.vec2 = void 0;
        var n = t("./utils");
        Object.keys(n).forEach((function(t) {
            "default" !== t && "__esModule" !== t && Object.defineProperty(i, t, {
                enumerable: !0,
                get: function() {
                    return n[t]
                }
            })
        }));
        var r = p(t("./vec2")),
            s = p(t("./vec3")),
            o = p(t("./vec4")),
            a = p(t("./quat")),
            l = p(t("./trs")),
            h = p(t("./mat2")),
            c = p(t("./mat23")),
            u = p(t("./mat3")),
            _ = p(t("./mat4")),
            f = p(t("./color3")),
            d = p(t("./color4"));

        function p(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }
        i.vec2 = r.default, i.vec3 = s.default, i.vec4 = o.default, i.quat = a.default, i.trs = l.default, i.mat2 = h.default, i.mat23 = c.default, i.mat3 = u.default, i.mat4 = _.default, i.color3 = f.default, i.color4 = d.default, i.default = {
            vec2: r.default,
            vec3: s.default,
            vec4: o.default,
            quat: a.default,
            trs: l.default,
            mat2: h.default,
            mat23: c.default,
            mat3: u.default,
            mat4: _.default,
            color3: f.default,
            color4: d.default
        }
    }), {
        "./color3": 324,
        "./color4": 325,
        "./mat2": 327,
        "./mat23": 328,
        "./mat3": 329,
        "./mat4": 330,
        "./quat": 331,
        "./trs": 332,
        "./utils": 333,
        "./vec2": 334,
        "./vec3": 335,
        "./vec4": 336
    }],
    327: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0;
        var n = t("./utils");

        function r(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }
        var s = (function() {
            function t() {
                var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 1,
                    i = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 0,
                    s = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 0,
                    o = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : 1;
                if (r(this, t), "object" == typeof e) i ? (this.m = new e.constructor(4), this.m.set(e)) : this.m = e;
                else {
                    this.m = new n.FLOAT_ARRAY_TYPE(4);
                    var a = this.m;
                    a[0] = e, a[1] = i, a[2] = s, a[3] = o
                }
            }
            return t.create = function() {
                return new t(arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 1, arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 0, arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 0, arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : 1)
            }, t.clone = function(e) {
                var i = e.m;
                return new t(i[0], i[1], i[2], i[3])
            }, t.copy = function(t, e) {
                return t.m.set(e.m), t
            }, t.identity = function(t) {
                var e = t.m;
                return e[0] = 1, e[1] = 0, e[2] = 0, e[3] = 1, t
            }, t.set = function(t, e, i, n, r) {
                var s = t.m;
                return s[0] = e, s[1] = i, s[2] = n, s[3] = r, t
            }, t.transpose = function(t, e) {
                var i = t.m,
                    n = e.m;
                if (t === e) {
                    var r = n[1];
                    i[1] = n[2], i[2] = r
                } else i[0] = n[0], i[1] = n[2], i[2] = n[1], i[3] = n[3];
                return t
            }, t.invert = function(t, e) {
                var i = e.m,
                    n = t.m,
                    r = i[0],
                    s = i[1],
                    o = i[2],
                    a = i[3],
                    l = r * a - o * s;
                return l ? (l = 1 / l, n[0] = a * l, n[1] = -s * l, n[2] = -o * l, n[3] = r * l, t) : null
            }, t.adjoint = function(t, e) {
                var i = t.m,
                    n = e.m,
                    r = n[0];
                return i[0] = n[3], i[1] = -n[1], i[2] = -n[2], i[3] = r, t
            }, t.determinant = function(t) {
                var e = t.m;
                return e[0] * e[3] - e[2] * e[1]
            }, t.multiply = function(t, e, i) {
                var n = e.m,
                    r = t.m,
                    s = n[0],
                    o = n[1],
                    a = n[2],
                    l = n[3],
                    h = bm[0],
                    c = bm[1],
                    u = bm[2],
                    _ = bm[3];
                return r[0] = s * h + a * c, r[1] = o * h + l * c, r[2] = s * u + a * _, r[3] = o * u + l * _, t
            }, t.mul = function(e, i, n) {
                return t.multiply(e, i, n)
            }, t.rotate = function(t, e, i) {
                var n = e.m,
                    r = t.m,
                    s = n[0],
                    o = n[1],
                    a = n[2],
                    l = n[3],
                    h = Math.sin(i),
                    c = Math.cos(i);
                return r[0] = s * c + a * h, r[1] = o * c + l * h, r[2] = s * -h + a * c, r[3] = o * -h + l * c, t
            }, t.scale = function(t, e, i) {
                var n = e.m,
                    r = t.m,
                    s = n[0],
                    o = n[1],
                    a = n[2],
                    l = n[3],
                    h = i.x,
                    c = i.y;
                return r[0] = s * h, r[1] = o * h, r[2] = a * c, r[3] = l * c, t
            }, t.fromRotation = function(t, e) {
                var i = t.m,
                    n = Math.sin(e),
                    r = Math.cos(e);
                return i[0] = r, i[1] = n, i[2] = -n, i[3] = r, t
            }, t.fromScaling = function(t, e) {
                var i = t.m;
                return i[0] = e.x, i[1] = 0, i[2] = 0, i[3] = e.y, t
            }, t.str = function(t) {
                var e = t.m;
                return "mat2(" + e[0] + ", " + e[1] + ", " + e[2] + ", " + e[3] + ")"
            }, t.array = function(t, e) {
                var i = e.m;
                return t[0] = i[0], t[1] = i[1], t[2] = i[2], t[3] = i[3], t
            }, t.frob = function(t) {
                var e = t.m;
                return Math.sqrt(Math.pow(e[0], 2) + Math.pow(e[1], 2) + Math.pow(e[2], 2) + Math.pow(e[3], 2))
            }, t.LDU = function(t, e, i, n) {
                var r = t.m,
                    s = i.m,
                    o = n.m;
                r[2] = o[2] / o[0], s[0] = o[0], s[1] = o[1], s[3] = o[3] - r[2] * s[1]
            }, t.add = function(t, e, i) {
                var n = e.m,
                    r = i.m,
                    s = t.m;
                return s[0] = n[0] + r[0], s[1] = n[1] + r[1], s[2] = n[2] + r[2], s[3] = n[3] + r[3], t
            }, t.subtract = function(t, e, i) {
                var n = e.m,
                    r = i.m,
                    s = t.m;
                return s[0] = n[0] - r[0], s[1] = n[1] - r[1], s[2] = n[2] - r[2], s[3] = n[3] - r[3], t
            }, t.sub = function(e, i, n) {
                return t.subtract(e, i, n)
            }, t.exactEquals = function(t, e) {
                var i = t.m,
                    n = e.m;
                return i[0] === n[0] && i[1] === n[1] && i[2] === n[2] && i[3] === n[3]
            }, t.equals = function(t, e) {
                var i = t.m,
                    r = e.m,
                    s = i[0],
                    o = i[1],
                    a = i[2],
                    l = i[3],
                    h = r[0],
                    c = r[1],
                    u = r[2],
                    _ = r[3];
                return Math.abs(s - h) <= n.EPSILON * Math.max(1, Math.abs(s), Math.abs(h)) && Math.abs(o - c) <= n.EPSILON * Math.max(1, Math.abs(o), Math.abs(c)) && Math.abs(a - u) <= n.EPSILON * Math.max(1, Math.abs(a), Math.abs(u)) && Math.abs(l - _) <= n.EPSILON * Math.max(1, Math.abs(l), Math.abs(_))
            }, t.multiplyScalar = function(t, e, i) {
                var n = e.m,
                    r = t.m;
                return r[0] = n[0] * i, r[1] = n[1] * i, r[2] = n[2] * i, r[3] = n[3] * i, t
            }, t.multiplyScalarAndAdd = function(t, e, i, n) {
                var r = e.m,
                    s = i.m,
                    o = t.m;
                return o[0] = r[0] + s[0] * n, o[1] = r[1] + s[1] * n, o[2] = r[2] + s[2] * n, o[3] = r[3] + s[3] * n, t
            }, t
        })();
        i.default = s, e.exports = i.default
    }), {
        "./utils": 333
    }],
    328: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0;
        var n = t("./utils");

        function r(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }
        var s = (function() {
            function t() {
                var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 1,
                    i = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 0,
                    s = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 0,
                    o = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : 1,
                    a = arguments.length > 4 && void 0 !== arguments[4] ? arguments[4] : 0,
                    l = arguments.length > 5 && void 0 !== arguments[5] ? arguments[5] : 0;
                if (r(this, t), "object" == typeof e) i ? (this.m = new e.constructor(6), this.m.set(e)) : this.m = e;
                else {
                    this.m = new n.FLOAT_ARRAY_TYPE(6);
                    var h = this.m;
                    h[0] = e, h[1] = i, h[2] = s, h[3] = o, h[4] = a, h[5] = l
                }
            }
            return t.create = function() {
                return new t(arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 1, arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 0, arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 0, arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : 1, arguments.length > 4 && void 0 !== arguments[4] ? arguments[4] : 0, arguments.length > 5 && void 0 !== arguments[5] ? arguments[5] : 0)
            }, t.clone = function(e) {
                var i = e.m;
                return new t(i[0], i[1], i[2], i[3], i[4], i[5])
            }, t.copy = function(t, e) {
                return t.m.set(e.m), t
            }, t.identity = function(t) {
                var e = t.m;
                return e[0] = 1, e[1] = 0, e[2] = 0, e[3] = 1, e[4] = 0, e[5] = 0, t
            }, t.set = function(t, e, i, n, r, s, o) {
                var a = t.m;
                return a[0] = e, a[1] = i, a[2] = n, a[3] = r, a[4] = s, a[5] = o, t
            }, t.invert = function(t, e) {
                var i = e.m,
                    n = t.m,
                    r = i[0],
                    s = i[1],
                    o = i[2],
                    a = i[3],
                    l = i[4],
                    h = i[5],
                    c = r * a - s * o;
                return c ? (c = 1 / c, n[0] = a * c, n[1] = -s * c, n[2] = -o * c, n[3] = r * c, n[4] = (o * h - a * l) * c, n[5] = (s * l - r * h) * c, t) : null
            }, t.determinant = function(t) {
                var e = t.m;
                return e[0] * e[3] - e[1] * e[2]
            }, t.multiply = function(t, e, i) {
                var n = e.m,
                    r = i.m,
                    s = t.m,
                    o = n[0],
                    a = n[1],
                    l = n[2],
                    h = n[3],
                    c = n[4],
                    u = n[5],
                    _ = r[0],
                    f = r[1],
                    d = r[2],
                    p = r[3],
                    m = r[4],
                    y = r[5];
                return s[0] = o * _ + l * f, s[1] = a * _ + h * f, s[2] = o * d + l * p, s[3] = a * d + h * p, s[4] = o * m + l * y + c, s[5] = a * m + h * y + u, t
            }, t.mul = function(e, i, n) {
                return t.multiply(e, i, n)
            }, t.rotate = function(t, e, i) {
                var n = e.m,
                    r = t.m,
                    s = n[0],
                    o = n[1],
                    a = n[2],
                    l = n[3],
                    h = n[4],
                    c = n[5],
                    u = Math.sin(i),
                    _ = Math.cos(i);
                return r[0] = s * _ + a * u, r[1] = o * _ + l * u, r[2] = s * -u + a * _, r[3] = o * -u + l * _, r[4] = h, r[5] = c, t
            }, t.scale = function(t, e, i) {
                var n = e.m,
                    r = t.m,
                    s = n[0],
                    o = n[1],
                    a = n[2],
                    l = n[3],
                    h = n[4],
                    c = n[5],
                    u = i.x,
                    _ = i.y;
                return r[0] = s * u, r[1] = o * u, r[2] = a * _, r[3] = l * _, r[4] = h, r[5] = c, t
            }, t.translate = function(t, e, i) {
                var n = e.m,
                    r = t.m,
                    s = n[0],
                    o = n[1],
                    a = n[2],
                    l = n[3],
                    h = n[4],
                    c = n[5],
                    u = i.x,
                    _ = i.y;
                return r[0] = s, r[1] = o, r[2] = a, r[3] = l, r[4] = s * u + a * _ + h, r[5] = o * u + l * _ + c, t
            }, t.fromRotation = function(t, e) {
                var i = t.m,
                    n = Math.sin(e),
                    r = Math.cos(e);
                return i[0] = r, i[1] = n, i[2] = -n, i[3] = r, i[4] = 0, i[5] = 0, t
            }, t.fromScaling = function(t, e) {
                var i = e.m,
                    n = t.m;
                return n[0] = i[0], n[1] = 0, n[2] = 0, n[3] = i[1], n[4] = 0, n[5] = 0, t
            }, t.fromTranslation = function(t, e) {
                var i = t.m;
                return i[0] = 1, i[1] = 0, i[2] = 0, i[3] = 1, i[4] = e.x, i[5] = e.y, t
            }, t.fromRTS = function(t, e, i, n) {
                var r = t.m,
                    s = Math.sin(e),
                    o = Math.cos(e);
                return r[0] = o * n.x, r[1] = s * n.x, r[2] = -s * n.y, r[3] = o * n.y, r[4] = i.x, r[5] = i.y, t
            }, t.str = function(t) {
                var e = t.m;
                return "mat23(" + e[0] + ", " + e[1] + ", " + e[2] + ", " + e[3] + ", " + e[4] + ", " + e[5] + ")"
            }, t.array = function(t, e) {
                var i = e.m;
                return t[0] = i[0], t[1] = i[1], t[2] = i[2], t[3] = i[3], t[4] = i[4], t[5] = i[5], t
            }, t.array4x4 = function(t, e) {
                var i = e.m;
                return t[0] = i[0], t[1] = i[1], t[2] = 0, t[3] = 0, t[4] = i[2], t[5] = i[3], t[6] = 0, t[7] = 0, t[8] = 0, t[9] = 0, t[10] = 1, t[11] = 0, t[12] = i[4], t[13] = i[5], t[14] = 0, t[15] = 1, t
            }, t.frob = function(t) {
                var e = t.m;
                return Math.sqrt(Math.pow(e[0], 2) + Math.pow(e[1], 2) + Math.pow(e[2], 2) + Math.pow(e[3], 2) + Math.pow(e[4], 2) + Math.pow(e[5], 2) + 1)
            }, t.add = function(t, e, i) {
                var n = e.m,
                    r = i.m,
                    s = t.m;
                return s[0] = n[0] + r[0], s[1] = n[1] + r[1], s[2] = n[2] + r[2], s[3] = n[3] + r[3], s[4] = n[4] + r[4], s[5] = n[5] + r[5], t
            }, t.subtract = function(t, e, i) {
                var n = e.m,
                    r = i.m,
                    s = t.m;
                return s[0] = n[0] - r[0], s[1] = n[1] - r[1], s[2] = n[2] - r[2], s[3] = n[3] - r[3], s[4] = n[4] - r[4], s[5] = n[5] - r[5], t
            }, t.sub = function(e, i, n) {
                return t.subtract(e, i, n)
            }, t.multiplyScalar = function(t, e, i) {
                var n = e.m,
                    r = t.m;
                return r[0] = n[0] * i, r[1] = n[1] * i, r[2] = n[2] * i, r[3] = n[3] * i, r[4] = n[4] * i, r[5] = n[5] * i, t
            }, t.multiplyScalarAndAdd = function(t, e, i, n) {
                var r = e.m,
                    s = i.m,
                    o = t.m;
                return o[0] = r[0] + s[0] * n, o[1] = r[1] + s[1] * n, o[2] = r[2] + s[2] * n, o[3] = r[3] + s[3] * n, o[4] = r[4] + s[4] * n, o[5] = r[5] + s[5] * n, t
            }, t.exactEquals = function(t, e) {
                var i = t.m,
                    n = e.m;
                return i[0] === n[0] && i[1] === n[1] && i[2] === n[2] && i[3] === n[3] && i[4] === n[4] && i[5] === n[5]
            }, t.equals = function(t, e) {
                var i = t.m,
                    r = e.m,
                    s = i[0],
                    o = i[1],
                    a = i[2],
                    l = i[3],
                    h = i[4],
                    c = i[5],
                    u = r[0],
                    _ = r[1],
                    f = r[2],
                    d = r[3],
                    p = r[4],
                    m = r[5];
                return Math.abs(s - u) <= n.EPSILON * Math.max(1, Math.abs(s), Math.abs(u)) && Math.abs(o - _) <= n.EPSILON * Math.max(1, Math.abs(o), Math.abs(_)) && Math.abs(a - f) <= n.EPSILON * Math.max(1, Math.abs(a), Math.abs(f)) && Math.abs(l - d) <= n.EPSILON * Math.max(1, Math.abs(l), Math.abs(d)) && Math.abs(h - p) <= n.EPSILON * Math.max(1, Math.abs(h), Math.abs(p)) && Math.abs(c - m) <= n.EPSILON * Math.max(1, Math.abs(c), Math.abs(m))
            }, t
        })();
        i.default = s, e.exports = i.default
    }), {
        "./utils": 333
    }],
    329: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0;
        var n = t("./utils"),
            r = (function(t) {
                return t && t.__esModule ? t : {
                    default: t
                }
            })(t("./vec3"));

        function s(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }
        var o = (function() {
            function t() {
                var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 1,
                    i = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 0,
                    r = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 0,
                    o = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : 0,
                    a = arguments.length > 4 && void 0 !== arguments[4] ? arguments[4] : 1,
                    l = arguments.length > 5 && void 0 !== arguments[5] ? arguments[5] : 0,
                    h = arguments.length > 6 && void 0 !== arguments[6] ? arguments[6] : 0,
                    c = arguments.length > 7 && void 0 !== arguments[7] ? arguments[7] : 0,
                    u = arguments.length > 8 && void 0 !== arguments[8] ? arguments[8] : 1;
                if (s(this, t), "object" == typeof e) i ? (this.m = new e.constructor(9), this.m.set(e)) : this.m = e;
                else {
                    this.m = new n.FLOAT_ARRAY_TYPE(9);
                    var _ = this.m;
                    _[0] = e, _[1] = i, _[2] = r, _[3] = o, _[4] = a, _[5] = l, _[6] = h, _[7] = c, _[8] = u
                }
            }
            return t.create = function() {
                return new t(arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 1, arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 0, arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 0, arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : 0, arguments.length > 4 && void 0 !== arguments[4] ? arguments[4] : 1, arguments.length > 5 && void 0 !== arguments[5] ? arguments[5] : 0, arguments.length > 6 && void 0 !== arguments[6] ? arguments[6] : 0, arguments.length > 7 && void 0 !== arguments[7] ? arguments[7] : 0, arguments.length > 8 && void 0 !== arguments[8] ? arguments[8] : 1)
            }, t.clone = function(e) {
                var i = e.m;
                return new t(i[0], i[1], i[2], i[3], i[4], i[5], i[6], i[7], i[8])
            }, t.copy = function(t, e) {
                return t.m.set(e.m), t
            }, t.set = function(t, e, i, n, r, s, o, a, l, h) {
                var c = t.m;
                return c[0] = e, c[1] = i, c[2] = n, c[3] = r, c[4] = s, c[5] = o, c[6] = a, c[7] = l, c[8] = h, t
            }, t.identity = function(t) {
                var e = t.m;
                return e[0] = 1, e[1] = 0, e[2] = 0, e[3] = 0, e[4] = 1, e[5] = 0, e[6] = 0, e[7] = 0, e[8] = 1, t
            }, t.transpose = function(t, e) {
                var i = e.m,
                    n = t.m;
                if (t === e) {
                    var r = i[1],
                        s = i[2],
                        o = i[5];
                    n[1] = i[3], n[2] = i[6], n[3] = r, n[5] = i[7], n[6] = s, n[7] = o
                } else n[0] = i[0], n[1] = i[3], n[2] = i[6], n[3] = i[1], n[4] = i[4], n[5] = i[7], n[6] = i[2], n[7] = i[5], n[8] = i[8];
                return t
            }, t.invert = function(t, e) {
                var i = e.m,
                    n = t.m,
                    r = i[0],
                    s = i[1],
                    o = i[2],
                    a = i[3],
                    l = i[4],
                    h = i[5],
                    c = i[6],
                    u = i[7],
                    _ = i[8],
                    f = _ * l - h * u,
                    d = -_ * a + h * c,
                    p = u * a - l * c,
                    m = r * f + s * d + o * p;
                return m ? (m = 1 / m, n[0] = f * m, n[1] = (-_ * s + o * u) * m, n[2] = (h * s - o * l) * m, n[3] = d * m, n[4] = (_ * r - o * c) * m, n[5] = (-h * r + o * a) * m, n[6] = p * m, n[7] = (-u * r + s * c) * m, n[8] = (l * r - s * a) * m, t) : null
            }, t.adjoint = function(t, e) {
                var i = e.m,
                    n = t.m,
                    r = i[0],
                    s = i[1],
                    o = i[2],
                    a = i[3],
                    l = i[4],
                    h = i[5],
                    c = i[6],
                    u = i[7],
                    _ = i[8];
                return n[0] = l * _ - h * u, n[1] = o * u - s * _, n[2] = s * h - o * l, n[3] = h * c - a * _, n[4] = r * _ - o * c, n[5] = o * a - r * h, n[6] = a * u - l * c, n[7] = s * c - r * u, n[8] = r * l - s * a, t
            }, t.determinant = function(t) {
                var e = t.m,
                    i = e[0],
                    n = e[1],
                    r = e[2],
                    s = e[3],
                    o = e[4],
                    a = e[5],
                    l = e[6],
                    h = e[7],
                    c = e[8];
                return i * (c * o - a * h) + n * (-c * s + a * l) + r * (h * s - o * l)
            }, t.multiply = function(t, e, i) {
                var n = e.m,
                    r = i.m,
                    s = t.m,
                    o = n[0],
                    a = n[1],
                    l = n[2],
                    h = n[3],
                    c = n[4],
                    u = n[5],
                    _ = n[6],
                    f = n[7],
                    d = n[8],
                    p = r[0],
                    m = r[1],
                    y = r[2],
                    v = r[3],
                    g = r[4],
                    x = r[5],
                    b = r[6],
                    A = r[7],
                    C = r[8];
                return s[0] = p * o + m * h + y * _, s[1] = p * a + m * c + y * f, s[2] = p * l + m * u + y * d, s[3] = v * o + g * h + x * _, s[4] = v * a + g * c + x * f, s[5] = v * l + g * u + x * d, s[6] = b * o + A * h + C * _, s[7] = b * a + A * c + C * f, s[8] = b * l + A * u + C * d, t
            }, t.mul = function(e, i, n) {
                return t.multiply(e, i, n)
            }, t.translate = function(t, e, i) {
                var n = e.m,
                    r = t.m,
                    s = n[0],
                    o = n[1],
                    a = n[2],
                    l = n[3],
                    h = n[4],
                    c = n[5],
                    u = n[6],
                    _ = n[7],
                    f = n[8],
                    d = i.x,
                    p = i.y;
                return r[0] = s, r[1] = o, r[2] = a, r[3] = l, r[4] = h, r[5] = c, r[6] = d * s + p * l + u, r[7] = d * o + p * h + _, r[8] = d * a + p * c + f, t
            }, t.rotate = function(t, e, i) {
                var n = e.m,
                    r = t.m,
                    s = n[0],
                    o = n[1],
                    a = n[2],
                    l = n[3],
                    h = n[4],
                    c = n[5],
                    u = n[6],
                    _ = n[7],
                    f = n[8],
                    d = Math.sin(i),
                    p = Math.cos(i);
                return r[0] = p * s + d * l, r[1] = p * o + d * h, r[2] = p * a + d * c, r[3] = p * l - d * s, r[4] = p * h - d * o, r[5] = p * c - d * a, r[6] = u, r[7] = _, r[8] = f, t
            }, t.scale = function(t, e, i) {
                var n = i.x,
                    r = i.y,
                    s = e.m,
                    o = t.m;
                return o[0] = n * s[0], o[1] = n * s[1], o[2] = n * s[2], o[3] = r * s[3], o[4] = r * s[4], o[5] = r * s[5], o[6] = s[6], o[7] = s[7], o[8] = s[8], t
            }, t.fromMat4 = function(t, e) {
                var i = e.m,
                    n = t.m;
                return n[0] = i[0], n[1] = i[1], n[2] = i[2], n[3] = i[4], n[4] = i[5], n[5] = i[6], n[6] = i[8], n[7] = i[9], n[8] = i[10], t
            }, t.fromTranslation = function(t, e) {
                var i = t.m;
                return i[0] = 1, i[1] = 0, i[2] = 0, i[3] = 0, i[4] = 1, i[5] = 0, i[6] = e.x, i[7] = e.y, i[8] = 1, t
            }, t.fromRotation = function(t, e) {
                var i = Math.sin(e),
                    n = Math.cos(e),
                    r = t.m;
                return r[0] = n, r[1] = i, r[2] = 0, r[3] = -i, r[4] = n, r[5] = 0, r[6] = 0, r[7] = 0, r[8] = 1, t
            }, t.fromScaling = function(t, e) {
                var i = t.m;
                return i[0] = e.x, i[1] = 0, i[2] = 0, i[3] = 0, i[4] = e.y, i[5] = 0, i[6] = 0, i[7] = 0, i[8] = 1, t
            }, t.fromMat2d = function(t, e) {
                var i = e.m,
                    n = t.m;
                return n[0] = i[0], n[1] = i[1], n[2] = 0, n[3] = i[2], n[4] = i[3], n[5] = 0, n[6] = i[4], n[7] = i[5], n[8] = 1, t
            }, t.fromQuat = function(t, e) {
                var i = t.m,
                    n = e.x,
                    r = e.y,
                    s = e.z,
                    o = e.w,
                    a = n + n,
                    l = r + r,
                    h = s + s,
                    c = n * a,
                    u = r * a,
                    _ = r * l,
                    f = s * a,
                    d = s * l,
                    p = s * h,
                    m = o * a,
                    y = o * l,
                    v = o * h;
                return i[0] = 1 - _ - p, i[3] = u - v, i[6] = f + y, i[1] = u + v, i[4] = 1 - c - p, i[7] = d - m, i[2] = f - y, i[5] = d + m, i[8] = 1 - c - _, t
            }, t.fromViewUp = function(e, i, s) {
                return (function() {
                    var e = r.default.create(0, 1, 0),
                        i = r.default.create(0, 0, 0),
                        s = r.default.create(0, 0, 0);
                    return function(o, a, l) {
                        return r.default.sqrMag(a) < n.EPSILON * n.EPSILON ? (t.identity(o), o) : (l = l || e, r.default.normalize(i, r.default.cross(i, l, a)), r.default.sqrMag(i) < n.EPSILON * n.EPSILON ? (t.identity(o), o) : (r.default.cross(s, a, i), t.set(o, i.x, i.y, i.z, s.x, s.y, s.z, a.x, a.y, a.z), o))
                    }
                })()(e, i, s)
            }, t.normalFromMat4 = function(t, e) {
                var i = e.m,
                    n = t.m,
                    r = i[0],
                    s = i[1],
                    o = i[2],
                    a = i[3],
                    l = i[4],
                    h = i[5],
                    c = i[6],
                    u = i[7],
                    _ = i[8],
                    f = i[9],
                    d = i[10],
                    p = i[11],
                    m = i[12],
                    y = i[13],
                    v = i[14],
                    g = i[15],
                    x = r * h - s * l,
                    b = r * c - o * l,
                    A = r * u - a * l,
                    C = s * c - o * h,
                    T = s * u - a * h,
                    S = o * u - a * c,
                    w = _ * y - f * m,
                    E = _ * v - d * m,
                    M = _ * g - p * m,
                    D = f * v - d * y,
                    B = f * g - p * y,
                    I = d * g - p * v,
                    P = x * I - b * B + A * D + C * M - T * E + S * w;
                return P ? (P = 1 / P, n[0] = (h * I - c * B + u * D) * P, n[1] = (c * M - l * I - u * E) * P, n[2] = (l * B - h * M + u * w) * P, n[3] = (o * B - s * I - a * D) * P, n[4] = (r * I - o * M + a * E) * P, n[5] = (s * M - r * B - a * w) * P, n[6] = (y * S - v * T + g * C) * P, n[7] = (v * A - m * S - g * b) * P, n[8] = (m * T - y * A + g * x) * P, t) : null
            }, t.str = function(t) {
                var e = t.m;
                return "mat3(" + e[0] + ", " + e[1] + ", " + e[2] + ", " + e[3] + ", " + e[4] + ", " + e[5] + ", " + e[6] + ", " + e[7] + ", " + e[8] + ")"
            }, t.array = function(t, e) {
                var i = e.m;
                return t[0] = i[0], t[1] = i[1], t[2] = i[2], t[3] = i[3], t[4] = i[4], t[5] = i[5], t[6] = i[6], t[7] = i[7], t[8] = i[8], t
            }, t.frob = function(t) {
                var e = t.m;
                return Math.sqrt(Math.pow(e[0], 2) + Math.pow(e[1], 2) + Math.pow(e[2], 2) + Math.pow(e[3], 2) + Math.pow(e[4], 2) + Math.pow(e[5], 2) + Math.pow(e[6], 2) + Math.pow(e[7], 2) + Math.pow(e[8], 2))
            }, t.add = function(t, e, i) {
                var n = e.m,
                    r = i.m,
                    s = t.m;
                return s[0] = n[0] + r[0], s[1] = n[1] + r[1], s[2] = n[2] + r[2], s[3] = n[3] + r[3], s[4] = n[4] + r[4], s[5] = n[5] + r[5], s[6] = n[6] + r[6], s[7] = n[7] + r[7], s[8] = n[8] + r[8], t
            }, t.subtract = function(t, e, i) {
                var n = e.m,
                    r = i.m,
                    s = t.m;
                return s[0] = n[0] - r[0], s[1] = n[1] - r[1], s[2] = n[2] - r[2], s[3] = n[3] - r[3], s[4] = n[4] - r[4], s[5] = n[5] - r[5], s[6] = n[6] - r[6], s[7] = n[7] - r[7], s[8] = n[8] - r[8], t
            }, t.sub = function(e, i, n) {
                return t.subtract(e, i, n)
            }, t.multiplyScalar = function(t, e, i) {
                var n = e.m,
                    r = t.m;
                return r[0] = n[0] * i, r[1] = n[1] * i, r[2] = n[2] * i, r[3] = n[3] * i, r[4] = n[4] * i, r[5] = n[5] * i, r[6] = n[6] * i, r[7] = n[7] * i, r[8] = n[8] * i, t
            }, t.multiplyScalarAndAdd = function(t, e, i, n) {
                var r = e.m,
                    s = i.m,
                    o = t.m;
                return o[0] = r[0] + s[0] * n, o[1] = r[1] + s[1] * n, o[2] = r[2] + s[2] * n, o[3] = r[3] + s[3] * n, o[4] = r[4] + s[4] * n, o[5] = r[5] + s[5] * n, o[6] = r[6] + s[6] * n, o[7] = r[7] + s[7] * n, o[8] = r[8] + s[8] * n, t
            }, t.exactEquals = function(t, e) {
                var i = t.m,
                    n = e.m;
                return i[0] === n[0] && i[1] === n[1] && i[2] === n[2] && i[3] === n[3] && i[4] === n[4] && i[5] === n[5] && i[6] === n[6] && i[7] === n[7] && i[8] === n[8]
            }, t.equals = function(t, e) {
                var i = t.m,
                    r = e.m,
                    s = i[0],
                    o = i[1],
                    a = i[2],
                    l = i[3],
                    h = i[4],
                    c = i[5],
                    u = i[6],
                    _ = i[7],
                    f = i[8],
                    d = r[0],
                    p = r[1],
                    m = r[2],
                    y = r[3],
                    v = r[4],
                    g = r[5],
                    x = r[6],
                    b = r[7],
                    A = r[8];
                return Math.abs(s - d) <= n.EPSILON * Math.max(1, Math.abs(s), Math.abs(d)) && Math.abs(o - p) <= n.EPSILON * Math.max(1, Math.abs(o), Math.abs(p)) && Math.abs(a - m) <= n.EPSILON * Math.max(1, Math.abs(a), Math.abs(m)) && Math.abs(l - y) <= n.EPSILON * Math.max(1, Math.abs(l), Math.abs(y)) && Math.abs(h - v) <= n.EPSILON * Math.max(1, Math.abs(h), Math.abs(v)) && Math.abs(c - g) <= n.EPSILON * Math.max(1, Math.abs(c), Math.abs(g)) && Math.abs(u - x) <= n.EPSILON * Math.max(1, Math.abs(u), Math.abs(x)) && Math.abs(_ - b) <= n.EPSILON * Math.max(1, Math.abs(_), Math.abs(b)) && Math.abs(f - A) <= n.EPSILON * Math.max(1, Math.abs(f), Math.abs(A))
            }, t
        })();
        i.default = o, e.exports = i.default
    }), {
        "./utils": 333,
        "./vec3": 335
    }],
    330: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0;
        var n = t("./utils");

        function r(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }
        var s = (function() {
            function t() {
                var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 1,
                    i = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 0,
                    s = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 0,
                    o = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : 0,
                    a = arguments.length > 4 && void 0 !== arguments[4] ? arguments[4] : 0,
                    l = arguments.length > 5 && void 0 !== arguments[5] ? arguments[5] : 1,
                    h = arguments.length > 6 && void 0 !== arguments[6] ? arguments[6] : 0,
                    c = arguments.length > 7 && void 0 !== arguments[7] ? arguments[7] : 0,
                    u = arguments.length > 8 && void 0 !== arguments[8] ? arguments[8] : 0,
                    _ = arguments.length > 9 && void 0 !== arguments[9] ? arguments[9] : 0,
                    f = arguments.length > 10 && void 0 !== arguments[10] ? arguments[10] : 1,
                    d = arguments.length > 11 && void 0 !== arguments[11] ? arguments[11] : 0,
                    p = arguments.length > 12 && void 0 !== arguments[12] ? arguments[12] : 0,
                    m = arguments.length > 13 && void 0 !== arguments[13] ? arguments[13] : 0,
                    y = arguments.length > 14 && void 0 !== arguments[14] ? arguments[14] : 0,
                    v = arguments.length > 15 && void 0 !== arguments[15] ? arguments[15] : 1;
                if (r(this, t), "object" == typeof e) i ? (this.m = new e.constructor(16), this.m.set(e)) : this.m = e;
                else {
                    this.m = new n.FLOAT_ARRAY_TYPE(16);
                    var g = this.m;
                    g[0] = e, g[1] = i, g[2] = s, g[3] = o, g[4] = a, g[5] = l, g[6] = h, g[7] = c, g[8] = u, g[9] = _, g[10] = f, g[11] = d, g[12] = p, g[13] = m, g[14] = y, g[15] = v
                }
            }
            return t.create = function() {
                return new t(arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 1, arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 0, arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 0, arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : 0, arguments.length > 4 && void 0 !== arguments[4] ? arguments[4] : 0, arguments.length > 5 && void 0 !== arguments[5] ? arguments[5] : 1, arguments.length > 6 && void 0 !== arguments[6] ? arguments[6] : 0, arguments.length > 7 && void 0 !== arguments[7] ? arguments[7] : 0, arguments.length > 8 && void 0 !== arguments[8] ? arguments[8] : 0, arguments.length > 9 && void 0 !== arguments[9] ? arguments[9] : 0, arguments.length > 10 && void 0 !== arguments[10] ? arguments[10] : 1, arguments.length > 11 && void 0 !== arguments[11] ? arguments[11] : 0, arguments.length > 12 && void 0 !== arguments[12] ? arguments[12] : 0, arguments.length > 13 && void 0 !== arguments[13] ? arguments[13] : 0, arguments.length > 14 && void 0 !== arguments[14] ? arguments[14] : 0, arguments.length > 15 && void 0 !== arguments[15] ? arguments[15] : 1)
            }, t.clone = function(e) {
                var i = e.m;
                return new t(i[0], i[1], i[2], i[3], i[4], i[5], i[6], i[7], i[8], i[9], i[10], i[11], i[12], i[13], i[14], i[15])
            }, t.copy = function(t, e) {
                return t.m.set(e.m), t
            }, t.set = function(t, e, i, n, r, s, o, a, l, h, c, u, _, f, d, p, m) {
                var y = t.m;
                return y[0] = e, y[1] = i, y[2] = n, y[3] = r, y[4] = s, y[5] = o, y[6] = a, y[7] = l, y[8] = h, y[9] = c, y[10] = u, y[11] = _, y[12] = f, y[13] = d, y[14] = p, y[15] = m, t
            }, t.identity = function(t) {
                var e = t.m;
                return e[0] = 1, e[1] = 0, e[2] = 0, e[3] = 0, e[4] = 0, e[5] = 1, e[6] = 0, e[7] = 0, e[8] = 0, e[9] = 0, e[10] = 1, e[11] = 0, e[12] = 0, e[13] = 0, e[14] = 0, e[15] = 1, t
            }, t.transpose = function(t, e) {
                var i = e.m,
                    n = t.m;
                if (t === e) {
                    var r = i[1],
                        s = i[2],
                        o = i[3],
                        a = i[6],
                        l = i[7],
                        h = i[11];
                    n[1] = i[4], n[2] = i[8], n[3] = i[12], n[4] = r, n[6] = i[9], n[7] = i[13], n[8] = s, n[9] = a, n[11] = i[14], n[12] = o, n[13] = l, n[14] = h
                } else n[0] = i[0], n[1] = i[4], n[2] = i[8], n[3] = i[12], n[4] = i[1], n[5] = i[5], n[6] = i[9], n[7] = i[13], n[8] = i[2], n[9] = i[6], n[10] = i[10], n[11] = i[14], n[12] = i[3], n[13] = i[7], n[14] = i[11], n[15] = i[15];
                return t
            }, t.invert = function(t, e) {
                var i = e.m,
                    n = t.m,
                    r = i[0],
                    s = i[1],
                    o = i[2],
                    a = i[3],
                    l = i[4],
                    h = i[5],
                    c = i[6],
                    u = i[7],
                    _ = i[8],
                    f = i[9],
                    d = i[10],
                    p = i[11],
                    m = i[12],
                    y = i[13],
                    v = i[14],
                    g = i[15],
                    x = r * h - s * l,
                    b = r * c - o * l,
                    A = r * u - a * l,
                    C = s * c - o * h,
                    T = s * u - a * h,
                    S = o * u - a * c,
                    w = _ * y - f * m,
                    E = _ * v - d * m,
                    M = _ * g - p * m,
                    D = f * v - d * y,
                    B = f * g - p * y,
                    I = d * g - p * v,
                    P = x * I - b * B + A * D + C * M - T * E + S * w;
                return P ? (P = 1 / P, n[0] = (h * I - c * B + u * D) * P, n[1] = (o * B - s * I - a * D) * P, n[2] = (y * S - v * T + g * C) * P, n[3] = (d * T - f * S - p * C) * P, n[4] = (c * M - l * I - u * E) * P, n[5] = (r * I - o * M + a * E) * P, n[6] = (v * A - m * S - g * b) * P, n[7] = (_ * S - d * A + p * b) * P, n[8] = (l * B - h * M + u * w) * P, n[9] = (s * M - r * B - a * w) * P, n[10] = (m * T - y * A + g * x) * P, n[11] = (f * A - _ * T - p * x) * P, n[12] = (h * E - l * D - c * w) * P, n[13] = (r * D - s * E + o * w) * P, n[14] = (y * b - m * C - v * x) * P, n[15] = (_ * C - f * b + d * x) * P, t) : null
            }, t.adjoint = function(t, e) {
                var i = e.m,
                    n = t.m,
                    r = i[0],
                    s = i[1],
                    o = i[2],
                    a = i[3],
                    l = i[4],
                    h = i[5],
                    c = i[6],
                    u = i[7],
                    _ = i[8],
                    f = i[9],
                    d = i[10],
                    p = i[11],
                    m = i[12],
                    y = i[13],
                    v = i[14],
                    g = i[15];
                return n[0] = h * (d * g - p * v) - f * (c * g - u * v) + y * (c * p - u * d), n[1] = -(s * (d * g - p * v) - f * (o * g - a * v) + y * (o * p - a * d)), n[2] = s * (c * g - u * v) - h * (o * g - a * v) + y * (o * u - a * c), n[3] = -(s * (c * p - u * d) - h * (o * p - a * d) + f * (o * u - a * c)), n[4] = -(l * (d * g - p * v) - _ * (c * g - u * v) + m * (c * p - u * d)), n[5] = r * (d * g - p * v) - _ * (o * g - a * v) + m * (o * p - a * d), n[6] = -(r * (c * g - u * v) - l * (o * g - a * v) + m * (o * u - a * c)), n[7] = r * (c * p - u * d) - l * (o * p - a * d) + _ * (o * u - a * c), n[8] = l * (f * g - p * y) - _ * (h * g - u * y) + m * (h * p - u * f), n[9] = -(r * (f * g - p * y) - _ * (s * g - a * y) + m * (s * p - a * f)), n[10] = r * (h * g - u * y) - l * (s * g - a * y) + m * (s * u - a * h), n[11] = -(r * (h * p - u * f) - l * (s * p - a * f) + _ * (s * u - a * h)), n[12] = -(l * (f * v - d * y) - _ * (h * v - c * y) + m * (h * d - c * f)), n[13] = r * (f * v - d * y) - _ * (s * v - o * y) + m * (s * d - o * f), n[14] = -(r * (h * v - c * y) - l * (s * v - o * y) + m * (s * c - o * h)), n[15] = r * (h * d - c * f) - l * (s * d - o * f) + _ * (s * c - o * h), t
            }, t.determinant = function(t) {
                var e = t.m,
                    i = e[0],
                    n = e[1],
                    r = e[2],
                    s = e[3],
                    o = e[4],
                    a = e[5],
                    l = e[6],
                    h = e[7],
                    c = e[8],
                    u = e[9],
                    _ = e[10],
                    f = e[11],
                    d = e[12],
                    p = e[13],
                    m = e[14],
                    y = e[15];
                return (i * a - n * o) * (_ * y - f * m) - (i * l - r * o) * (u * y - f * p) + (i * h - s * o) * (u * m - _ * p) + (n * l - r * a) * (c * y - f * d) - (n * h - s * a) * (c * m - _ * d) + (r * h - s * l) * (c * p - u * d)
            }, t.multiply = function(t, e, i) {
                var n = e.m,
                    r = i.m,
                    s = t.m,
                    o = n[0],
                    a = n[1],
                    l = n[2],
                    h = n[3],
                    c = n[4],
                    u = n[5],
                    _ = n[6],
                    f = n[7],
                    d = n[8],
                    p = n[9],
                    m = n[10],
                    y = n[11],
                    v = n[12],
                    g = n[13],
                    x = n[14],
                    b = n[15],
                    A = r[0],
                    C = r[1],
                    T = r[2],
                    S = r[3];
                return s[0] = A * o + C * c + T * d + S * v, s[1] = A * a + C * u + T * p + S * g, s[2] = A * l + C * _ + T * m + S * x, s[3] = A * h + C * f + T * y + S * b, A = r[4], C = r[5], T = r[6], S = r[7], s[4] = A * o + C * c + T * d + S * v, s[5] = A * a + C * u + T * p + S * g, s[6] = A * l + C * _ + T * m + S * x, s[7] = A * h + C * f + T * y + S * b, A = r[8], C = r[9], T = r[10], S = r[11], s[8] = A * o + C * c + T * d + S * v, s[9] = A * a + C * u + T * p + S * g, s[10] = A * l + C * _ + T * m + S * x, s[11] = A * h + C * f + T * y + S * b, A = r[12], C = r[13], T = r[14], S = r[15], s[12] = A * o + C * c + T * d + S * v, s[13] = A * a + C * u + T * p + S * g, s[14] = A * l + C * _ + T * m + S * x, s[15] = A * h + C * f + T * y + S * b, t
            }, t.mul = function(e, i, n) {
                return t.multiply(e, i, n)
            }, t.translate = function(t, e, i) {
                var n = e.m,
                    r = t.m,
                    s = i.x,
                    o = i.y,
                    a = i.z,
                    l = void 0,
                    h = void 0,
                    c = void 0,
                    u = void 0,
                    _ = void 0,
                    f = void 0,
                    d = void 0,
                    p = void 0,
                    m = void 0,
                    y = void 0,
                    v = void 0,
                    g = void 0;
                return e === t ? (r[12] = n[0] * s + n[4] * o + n[8] * a + n[12], r[13] = n[1] * s + n[5] * o + n[9] * a + n[13], r[14] = n[2] * s + n[6] * o + n[10] * a + n[14], r[15] = n[3] * s + n[7] * o + n[11] * a + n[15]) : (l = n[0], h = n[1], c = n[2], u = n[3], _ = n[4], f = n[5], d = n[6], p = n[7], m = n[8], y = n[9], v = n[10], g = n[11], r[0] = l, r[1] = h, r[2] = c, r[3] = u, r[4] = _, r[5] = f, r[6] = d, r[7] = p, r[8] = m, r[9] = y, r[10] = v, r[11] = g, r[12] = l * s + _ * o + m * a + n[12], r[13] = h * s + f * o + y * a + n[13], r[14] = c * s + d * o + v * a + n[14], r[15] = u * s + p * o + g * a + n[15]), t
            }, t.scale = function(t, e, i) {
                var n = i.x,
                    r = i.y,
                    s = i.z,
                    o = e.m,
                    a = t.m;
                return a[0] = o[0] * n, a[1] = o[1] * n, a[2] = o[2] * n, a[3] = o[3] * n, a[4] = o[4] * r, a[5] = o[5] * r, a[6] = o[6] * r, a[7] = o[7] * r, a[8] = o[8] * s, a[9] = o[9] * s, a[10] = o[10] * s, a[11] = o[11] * s, a[12] = o[12], a[13] = o[13], a[14] = o[14], a[15] = o[15], t
            }, t.rotate = function(t, e, i, r) {
                var s, o, a, l, h, c, u, _, f, d, p, m, y, v, g, x, b, A, C, T, S, w, E, M, D = e.m,
                    B = t.m,
                    I = r.x,
                    P = r.y,
                    R = r.z,
                    O = Math.sqrt(I * I + P * P + R * R);
                return Math.abs(O) < n.EPSILON ? null : (I *= O = 1 / O, P *= O, R *= O, s = Math.sin(i), a = 1 - (o = Math.cos(i)), l = D[0], h = D[1], c = D[2], u = D[3], _ = D[4], f = D[5], d = D[6], p = D[7], m = D[8], y = D[9], v = D[10], g = D[11], x = I * I * a + o, b = P * I * a + R * s, A = R * I * a - P * s, C = I * P * a - R * s, T = P * P * a + o, S = R * P * a + I * s, w = I * R * a + P * s, E = P * R * a - I * s, M = R * R * a + o, B[0] = l * x + _ * b + m * A, B[1] = h * x + f * b + y * A, B[2] = c * x + d * b + v * A, B[3] = u * x + p * b + g * A, B[4] = l * C + _ * T + m * S, B[5] = h * C + f * T + y * S, B[6] = c * C + d * T + v * S, B[7] = u * C + p * T + g * S, B[8] = l * w + _ * E + m * M, B[9] = h * w + f * E + y * M, B[10] = c * w + d * E + v * M, B[11] = u * w + p * E + g * M, e !== t && (B[12] = D[12], B[13] = D[13], B[14] = D[14], B[15] = D[15]), t)
            }, t.rotateX = function(t, e, i) {
                var n = e.m,
                    r = t.m,
                    s = Math.sin(i),
                    o = Math.cos(i),
                    a = n[4],
                    l = n[5],
                    h = n[6],
                    c = n[7],
                    u = n[8],
                    _ = n[9],
                    f = n[10],
                    d = n[11];
                return e !== t && (r[0] = n[0], r[1] = n[1], r[2] = n[2], r[3] = n[3], r[12] = n[12], r[13] = n[13], r[14] = n[14], r[15] = n[15]), r[4] = a * o + u * s, r[5] = l * o + _ * s, r[6] = h * o + f * s, r[7] = c * o + d * s, r[8] = u * o - a * s, r[9] = _ * o - l * s, r[10] = f * o - h * s, r[11] = d * o - c * s, t
            }, t.rotateY = function(t, e, i) {
                var n = e.m,
                    r = t.m,
                    s = Math.sin(i),
                    o = Math.cos(i),
                    a = n[0],
                    l = n[1],
                    h = n[2],
                    c = n[3],
                    u = n[8],
                    _ = n[9],
                    f = n[10],
                    d = n[11];
                return e !== t && (r[4] = n[4], r[5] = n[5], r[6] = n[6], r[7] = n[7], r[12] = n[12], r[13] = n[13], r[14] = n[14], r[15] = n[15]), r[0] = a * o - u * s, r[1] = l * o - _ * s, r[2] = h * o - f * s, r[3] = c * o - d * s, r[8] = a * s + u * o, r[9] = l * s + _ * o, r[10] = h * s + f * o, r[11] = c * s + d * o, t
            }, t.rotateZ = function(t, e, i) {
                var n = e.m,
                    r = t.m,
                    s = Math.sin(i),
                    o = Math.cos(i),
                    a = n[0],
                    l = n[1],
                    h = n[2],
                    c = n[3],
                    u = n[4],
                    _ = n[5],
                    f = n[6],
                    d = n[7];
                return e !== t && (r[8] = n[8], r[9] = n[9], r[10] = n[10], r[11] = n[11], r[12] = n[12], r[13] = n[13], r[14] = n[14], r[15] = n[15]), r[0] = a * o + u * s, r[1] = l * o + _ * s, r[2] = h * o + f * s, r[3] = c * o + d * s, r[4] = u * o - a * s, r[5] = _ * o - l * s, r[6] = f * o - h * s, r[7] = d * o - c * s, t
            }, t.fromTranslation = function(t, e) {
                var i = t.m;
                return i[0] = 1, i[1] = 0, i[2] = 0, i[3] = 0, i[4] = 0, i[5] = 1, i[6] = 0, i[7] = 0, i[8] = 0, i[9] = 0, i[10] = 1, i[11] = 0, i[12] = e.x, i[13] = e.y, i[14] = e.z, i[15] = 1, t
            }, t.fromScaling = function(t, e) {
                var i = t.m;
                return i[0] = e.x, i[1] = 0, i[2] = 0, i[3] = 0, i[4] = 0, i[5] = e.y, i[6] = 0, i[7] = 0, i[8] = 0, i[9] = 0, i[10] = e.z, i[11] = 0, i[12] = 0, i[13] = 0, i[14] = 0, i[15] = 1, t
            }, t.fromRotation = function(t, e, i) {
                var r, s, o, a = t.m,
                    l = i.x,
                    h = i.y,
                    c = i.z,
                    u = Math.sqrt(l * l + h * h + c * c);
                return Math.abs(u) < n.EPSILON ? null : (l *= u = 1 / u, h *= u, c *= u, r = Math.sin(e), o = 1 - (s = Math.cos(e)), a[0] = l * l * o + s, a[1] = h * l * o + c * r, a[2] = c * l * o - h * r, a[3] = 0, a[4] = l * h * o - c * r, a[5] = h * h * o + s, a[6] = c * h * o + l * r, a[7] = 0, a[8] = l * c * o + h * r, a[9] = h * c * o - l * r, a[10] = c * c * o + s, a[11] = 0, a[12] = 0, a[13] = 0, a[14] = 0, a[15] = 1, t)
            }, t.fromXRotation = function(t, e) {
                var i = t.m,
                    n = Math.sin(e),
                    r = Math.cos(e);
                return i[0] = 1, i[1] = 0, i[2] = 0, i[3] = 0, i[4] = 0, i[5] = r, i[6] = n, i[7] = 0, i[8] = 0, i[9] = -n, i[10] = r, i[11] = 0, i[12] = 0, i[13] = 0, i[14] = 0, i[15] = 1, t
            }, t.fromYRotation = function(t, e) {
                var i = t.m,
                    n = Math.sin(e),
                    r = Math.cos(e);
                return i[0] = r, i[1] = 0, i[2] = -n, i[3] = 0, i[4] = 0, i[5] = 1, i[6] = 0, i[7] = 0, i[8] = n, i[9] = 0, i[10] = r, i[11] = 0, i[12] = 0, i[13] = 0, i[14] = 0, i[15] = 1, t
            }, t.fromZRotation = function(t, e) {
                var i = t.m,
                    n = Math.sin(e),
                    r = Math.cos(e);
                return i[0] = r, i[1] = n, i[2] = 0, i[3] = 0, i[4] = -n, i[5] = r, i[6] = 0, i[7] = 0, i[8] = 0, i[9] = 0, i[10] = 1, i[11] = 0, i[12] = 0, i[13] = 0, i[14] = 0, i[15] = 1, t
            }, t.fromRT = function(t, e, i) {
                var n = t.m,
                    r = e.x,
                    s = e.y,
                    o = e.z,
                    a = e.w,
                    l = r + r,
                    h = s + s,
                    c = o + o,
                    u = r * l,
                    _ = r * h,
                    f = r * c,
                    d = s * h,
                    p = s * c,
                    m = o * c,
                    y = a * l,
                    v = a * h,
                    g = a * c;
                return n[0] = 1 - (d + m), n[1] = _ + g, n[2] = f - v, n[3] = 0, n[4] = _ - g, n[5] = 1 - (u + m), n[6] = p + y, n[7] = 0, n[8] = f + v, n[9] = p - y, n[10] = 1 - (u + d), n[11] = 0, n[12] = i.x, n[13] = i.y, n[14] = i.z, n[15] = 1, t
            }, t.fromTRSArray = function(t, e) {
                var i = t.m,
                    n = e[3],
                    r = e[4],
                    s = e[5],
                    o = e[6],
                    a = n + n,
                    l = r + r,
                    h = s + s,
                    c = n * a,
                    u = n * l,
                    _ = n * h,
                    f = r * l,
                    d = r * h,
                    p = s * h,
                    m = o * a,
                    y = o * l,
                    v = o * h,
                    g = e[7],
                    x = e[8],
                    b = e[9];
                return i[0] = (1 - (f + p)) * g, i[1] = (u + v) * g, i[2] = (_ - y) * g, i[3] = 0, i[4] = (u - v) * x, i[5] = (1 - (c + p)) * x, i[6] = (d + m) * x, i[7] = 0, i[8] = (_ + y) * b, i[9] = (d - m) * b, i[10] = (1 - (c + f)) * b, i[11] = 0, i[12] = e[0], i[13] = e[1], i[14] = e[2], i[15] = 1, t
            }, t.getTranslation = function(t, e) {
                var i = e.m;
                return t.x = i[12], t.y = i[13], t.z = i[14], t
            }, t.getScaling = function(t, e) {
                var i = e.m,
                    n = i[0],
                    r = i[1],
                    s = i[2],
                    o = i[4],
                    a = i[5],
                    l = i[6],
                    h = i[8],
                    c = i[9],
                    u = i[10];
                return t.x = Math.sqrt(n * n + r * r + s * s), t.y = Math.sqrt(o * o + a * a + l * l), t.z = Math.sqrt(h * h + c * c + u * u), t
            }, t.getRotation = function(t, e) {
                var i = e.m,
                    n = i[0] + i[5] + i[10],
                    r = 0;
                return n > 0 ? (r = 2 * Math.sqrt(n + 1), t.w = .25 * r, t.x = (i[6] - i[9]) / r, t.y = (i[8] - i[2]) / r, t.z = (i[1] - i[4]) / r) : i[0] > i[5] & i[0] > i[10] ? (r = 2 * Math.sqrt(1 + i[0] - i[5] - i[10]), t.w = (i[6] - i[9]) / r, t.x = .25 * r, t.y = (i[1] + i[4]) / r, t.z = (i[8] + i[2]) / r) : i[5] > i[10] ? (r = 2 * Math.sqrt(1 + i[5] - i[0] - i[10]), t.w = (i[8] - i[2]) / r, t.x = (i[1] + i[4]) / r, t.y = .25 * r, t.z = (i[6] + i[9]) / r) : (r = 2 * Math.sqrt(1 + i[10] - i[0] - i[5]), t.w = (i[1] - i[4]) / r, t.x = (i[8] + i[2]) / r, t.y = (i[6] + i[9]) / r, t.z = .25 * r), t
            }, t.fromRTS = function(t, e, i, n) {
                var r = t.m,
                    s = e.x,
                    o = e.y,
                    a = e.z,
                    l = e.w,
                    h = s + s,
                    c = o + o,
                    u = a + a,
                    _ = s * h,
                    f = s * c,
                    d = s * u,
                    p = o * c,
                    m = o * u,
                    y = a * u,
                    v = l * h,
                    g = l * c,
                    x = l * u,
                    b = n.x,
                    A = n.y,
                    C = n.z;
                return r[0] = (1 - (p + y)) * b, r[1] = (f + x) * b, r[2] = (d - g) * b, r[3] = 0, r[4] = (f - x) * A, r[5] = (1 - (_ + y)) * A, r[6] = (m + v) * A, r[7] = 0, r[8] = (d + g) * C, r[9] = (m - v) * C, r[10] = (1 - (_ + p)) * C, r[11] = 0, r[12] = i.x, r[13] = i.y, r[14] = i.z, r[15] = 1, t
            }, t.fromRTSOrigin = function(t, e, i, n, r) {
                var s = t.m,
                    o = e.x,
                    a = e.y,
                    l = e.z,
                    h = e.w,
                    c = o + o,
                    u = a + a,
                    _ = l + l,
                    f = o * c,
                    d = o * u,
                    p = o * _,
                    m = a * u,
                    y = a * _,
                    v = l * _,
                    g = h * c,
                    x = h * u,
                    b = h * _,
                    A = n.x,
                    C = n.y,
                    T = n.z,
                    S = r.x,
                    w = r.y,
                    E = r.z;
                return s[0] = (1 - (m + v)) * A, s[1] = (d + b) * A, s[2] = (p - x) * A, s[3] = 0, s[4] = (d - b) * C, s[5] = (1 - (f + v)) * C, s[6] = (y + g) * C, s[7] = 0, s[8] = (p + x) * T, s[9] = (y - g) * T, s[10] = (1 - (f + m)) * T, s[11] = 0, s[12] = i.x + S - (s[0] * S + s[4] * w + s[8] * E), s[13] = i.y + w - (s[1] * S + s[5] * w + s[9] * E), s[14] = i.z + E - (s[2] * S + s[6] * w + s[10] * E), s[15] = 1, t
            }, t.fromQuat = function(t, e) {
                var i = t.m,
                    n = e.x,
                    r = e.y,
                    s = e.z,
                    o = e.w,
                    a = n + n,
                    l = r + r,
                    h = s + s,
                    c = n * a,
                    u = r * a,
                    _ = r * l,
                    f = s * a,
                    d = s * l,
                    p = s * h,
                    m = o * a,
                    y = o * l,
                    v = o * h;
                return i[0] = 1 - _ - p, i[1] = u + v, i[2] = f - y, i[3] = 0, i[4] = u - v, i[5] = 1 - c - p, i[6] = d + m, i[7] = 0, i[8] = f + y, i[9] = d - m, i[10] = 1 - c - _, i[11] = 0, i[12] = 0, i[13] = 0, i[14] = 0, i[15] = 1, t
            }, t.frustum = function(t, e, i, n, r, s, o) {
                var a = t.m,
                    l = 1 / (i - e),
                    h = 1 / (r - n),
                    c = 1 / (s - o);
                return a[0] = 2 * s * l, a[1] = 0, a[2] = 0, a[3] = 0, a[4] = 0, a[5] = 2 * s * h, a[6] = 0, a[7] = 0, a[8] = (i + e) * l, a[9] = (r + n) * h, a[10] = (o + s) * c, a[11] = -1, a[12] = 0, a[13] = 0, a[14] = o * s * 2 * c, a[15] = 0, t
            }, t.perspective = function(t, e, i, n, r) {
                var s = t.m,
                    o = 1 / Math.tan(e / 2),
                    a = 1 / (n - r);
                return s[0] = o / i, s[1] = 0, s[2] = 0, s[3] = 0, s[4] = 0, s[5] = o, s[6] = 0, s[7] = 0, s[8] = 0, s[9] = 0, s[10] = (r + n) * a, s[11] = -1, s[12] = 0, s[13] = 0, s[14] = 2 * r * n * a, s[15] = 0, t
            }, t.perspectiveFromFieldOfView = function(t, e, i, n) {
                var r = t.m,
                    s = Math.tan(e.upDegrees * Math.PI / 180),
                    o = Math.tan(e.downDegrees * Math.PI / 180),
                    a = Math.tan(e.leftDegrees * Math.PI / 180),
                    l = Math.tan(e.rightDegrees * Math.PI / 180),
                    h = 2 / (a + l),
                    c = 2 / (s + o);
                return r[0] = h, r[1] = 0, r[2] = 0, r[3] = 0, r[4] = 0, r[5] = c, r[6] = 0, r[7] = 0, r[8] = -(a - l) * h * .5, r[9] = (s - o) * c * .5, r[10] = n / (i - n), r[11] = -1, r[12] = 0, r[13] = 0, r[14] = n * i / (i - n), r[15] = 0, t
            }, t.ortho = function(t, e, i, n, r, s, o) {
                var a = t.m,
                    l = 1 / (e - i),
                    h = 1 / (n - r),
                    c = 1 / (s - o);
                return a[0] = -2 * l, a[1] = 0, a[2] = 0, a[3] = 0, a[4] = 0, a[5] = -2 * h, a[6] = 0, a[7] = 0, a[8] = 0, a[9] = 0, a[10] = 2 * c, a[11] = 0, a[12] = (e + i) * l, a[13] = (r + n) * h, a[14] = (o + s) * c, a[15] = 1, t
            }, t.lookAt = function(t, e, i, n) {
                var r, s, o, a = t.m,
                    l = void 0,
                    h = void 0,
                    c = void 0,
                    u = void 0,
                    _ = void 0,
                    f = void 0,
                    d = void 0,
                    p = e.x,
                    m = e.y,
                    y = e.z,
                    v = n.x,
                    g = n.y,
                    x = n.z;
                return u = p - i.x, _ = m - i.y, f = y - i.z, l = g * (f *= d = 1 / Math.sqrt(u * u + _ * _ + f * f)) - x * (_ *= d), h = x * (u *= d) - v * f, c = v * _ - g * u, r = _ * (c *= d = 1 / Math.sqrt(l * l + h * h + c * c)) - f * (h *= d), s = f * (l *= d) - u * c, o = u * h - _ * l, a[0] = l, a[1] = r, a[2] = u, a[3] = 0, a[4] = h, a[5] = s, a[6] = _, a[7] = 0, a[8] = c, a[9] = o, a[10] = f, a[11] = 0, a[12] = -(l * p + h * m + c * y), a[13] = -(r * p + s * m + o * y), a[14] = -(u * p + _ * m + f * y), a[15] = 1, t
            }, t.str = function(t) {
                var e = t.m;
                return "mat4(" + e[0] + ", " + e[1] + ", " + e[2] + ", " + e[3] + ", " + e[4] + ", " + e[5] + ", " + e[6] + ", " + e[7] + ", " + e[8] + ", " + e[9] + ", " + e[10] + ", " + e[11] + ", " + e[12] + ", " + e[13] + ", " + e[14] + ", " + e[15] + ")"
            }, t.array = function(t, e) {
                var i = e.m;
                return t[0] = i[0], t[1] = i[1], t[2] = i[2], t[3] = i[3], t[4] = i[4], t[5] = i[5], t[6] = i[6], t[7] = i[7], t[8] = i[8], t[9] = i[9], t[10] = i[10], t[11] = i[11], t[12] = i[12], t[13] = i[13], t[14] = i[14], t[15] = i[15], t
            }, t.frob = function(t) {
                var e = t.m;
                return Math.sqrt(Math.pow(e[0], 2) + Math.pow(e[1], 2) + Math.pow(e[2], 2) + Math.pow(e[3], 2) + Math.pow(e[4], 2) + Math.pow(e[5], 2) + Math.pow(e[6], 2) + Math.pow(e[7], 2) + Math.pow(e[8], 2) + Math.pow(e[9], 2) + Math.pow(e[10], 2) + Math.pow(e[11], 2) + Math.pow(e[12], 2) + Math.pow(e[13], 2) + Math.pow(e[14], 2) + Math.pow(e[15], 2))
            }, t.add = function(t, e, i) {
                var n = e.m,
                    r = i.m,
                    s = t.m;
                return s[0] = n[0] + r[0], s[1] = n[1] + r[1], s[2] = n[2] + r[2], s[3] = n[3] + r[3], s[4] = n[4] + r[4], s[5] = n[5] + r[5], s[6] = n[6] + r[6], s[7] = n[7] + r[7], s[8] = n[8] + r[8], s[9] = n[9] + r[9], s[10] = n[10] + r[10], s[11] = n[11] + r[11], s[12] = n[12] + r[12], s[13] = n[13] + r[13], s[14] = n[14] + r[14], s[15] = n[15] + r[15], t
            }, t.subtract = function(t, e, i) {
                var n = e.m,
                    r = i.m,
                    s = t.m;
                return s[0] = n[0] - r[0], s[1] = n[1] - r[1], s[2] = n[2] - r[2], s[3] = n[3] - r[3], s[4] = n[4] - r[4], s[5] = n[5] - r[5], s[6] = n[6] - r[6], s[7] = n[7] - r[7], s[8] = n[8] - r[8], s[9] = n[9] - r[9], s[10] = n[10] - r[10], s[11] = n[11] - r[11], s[12] = n[12] - r[12], s[13] = n[13] - r[13], s[14] = n[14] - r[14], s[15] = n[15] - r[15], t
            }, t.sub = function(e, i, n) {
                return t.subtract(e, i, n)
            }, t.multiplyScalar = function(t, e, i) {
                var n = e.m,
                    r = t.m;
                return r[0] = n[0] * i, r[1] = n[1] * i, r[2] = n[2] * i, r[3] = n[3] * i, r[4] = n[4] * i, r[5] = n[5] * i, r[6] = n[6] * i, r[7] = n[7] * i, r[8] = n[8] * i, r[9] = n[9] * i, r[10] = n[10] * i, r[11] = n[11] * i, r[12] = n[12] * i, r[13] = n[13] * i, r[14] = n[14] * i, r[15] = n[15] * i, t
            }, t.multiplyScalarAndAdd = function(t, e, i, n) {
                var r = e.m,
                    s = i.m,
                    o = t.m;
                return o[0] = r[0] + s[0] * n, o[1] = r[1] + s[1] * n, o[2] = r[2] + s[2] * n, o[3] = r[3] + s[3] * n, o[4] = r[4] + s[4] * n, o[5] = r[5] + s[5] * n, o[6] = r[6] + s[6] * n, o[7] = r[7] + s[7] * n, o[8] = r[8] + s[8] * n, o[9] = r[9] + s[9] * n, o[10] = r[10] + s[10] * n, o[11] = r[11] + s[11] * n, o[12] = r[12] + s[12] * n, o[13] = r[13] + s[13] * n, o[14] = r[14] + s[14] * n, o[15] = r[15] + s[15] * n, t
            }, t.exactEquals = function(t, e) {
                var i = t.m,
                    n = e.m;
                return i[0] === n[0] && i[1] === n[1] && i[2] === n[2] && i[3] === n[3] && i[4] === n[4] && i[5] === n[5] && i[6] === n[6] && i[7] === n[7] && i[8] === n[8] && i[9] === n[9] && i[10] === n[10] && i[11] === n[11] && i[12] === n[12] && i[13] === n[13] && i[14] === n[14] && i[15] === n[15]
            }, t.equals = function(t, e) {
                var i = t.m,
                    r = e.m,
                    s = i[0],
                    o = i[1],
                    a = i[2],
                    l = i[3],
                    h = i[4],
                    c = i[5],
                    u = i[6],
                    _ = i[7],
                    f = i[8],
                    d = i[9],
                    p = i[10],
                    m = i[11],
                    y = i[12],
                    v = i[13],
                    g = i[14],
                    x = i[15],
                    b = r[0],
                    A = r[1],
                    C = r[2],
                    T = r[3],
                    S = r[4],
                    w = r[5],
                    E = r[6],
                    M = r[7],
                    D = r[8],
                    B = r[9],
                    I = r[10],
                    P = r[11],
                    R = r[12],
                    O = r[13],
                    L = r[14],
                    F = r[15];
                return Math.abs(s - b) <= n.EPSILON * Math.max(1, Math.abs(s), Math.abs(b)) && Math.abs(o - A) <= n.EPSILON * Math.max(1, Math.abs(o), Math.abs(A)) && Math.abs(a - C) <= n.EPSILON * Math.max(1, Math.abs(a), Math.abs(C)) && Math.abs(l - T) <= n.EPSILON * Math.max(1, Math.abs(l), Math.abs(T)) && Math.abs(h - S) <= n.EPSILON * Math.max(1, Math.abs(h), Math.abs(S)) && Math.abs(c - w) <= n.EPSILON * Math.max(1, Math.abs(c), Math.abs(w)) && Math.abs(u - E) <= n.EPSILON * Math.max(1, Math.abs(u), Math.abs(E)) && Math.abs(_ - M) <= n.EPSILON * Math.max(1, Math.abs(_), Math.abs(M)) && Math.abs(f - D) <= n.EPSILON * Math.max(1, Math.abs(f), Math.abs(D)) && Math.abs(d - B) <= n.EPSILON * Math.max(1, Math.abs(d), Math.abs(B)) && Math.abs(p - I) <= n.EPSILON * Math.max(1, Math.abs(p), Math.abs(I)) && Math.abs(m - P) <= n.EPSILON * Math.max(1, Math.abs(m), Math.abs(P)) && Math.abs(y - R) <= n.EPSILON * Math.max(1, Math.abs(y), Math.abs(R)) && Math.abs(v - O) <= n.EPSILON * Math.max(1, Math.abs(v), Math.abs(O)) && Math.abs(g - L) <= n.EPSILON * Math.max(1, Math.abs(g), Math.abs(L)) && Math.abs(x - F) <= n.EPSILON * Math.max(1, Math.abs(x), Math.abs(F))
            }, t
        })();
        i.default = s, e.exports = i.default
    }), {
        "./utils": 333
    }],
    331: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0;
        var n = a(t("./vec3")),
            r = a(t("./vec4")),
            s = a(t("./mat3")),
            o = t("./utils");

        function a(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }

        function l(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }
        var h = .5 * Math.PI / 180,
            c = (function() {
                function t() {
                    var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 0,
                        i = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 0,
                        n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 0,
                        r = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : 1;
                    l(this, t), this.x = e, this.y = i, this.z = n, this.w = r
                }
                return t.create = function() {
                    return new t(arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 0, arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 0, arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 0, arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : 1)
                }, t.clone = function(e) {
                    return new t(e.x, e.y, e.z, e.w)
                }, t.copy = function(t, e) {
                    return r.default.copy(t, e)
                }, t.set = function(t, e, i, n, r) {
                    return t.x = e, t.y = i, t.z = n, t.w = r, t
                }, t.identity = function(t) {
                    return t.x = 0, t.y = 0, t.z = 0, t.w = 1, t
                }, t.rotationTo = function(e, i, r) {
                    return (function() {
                        var e = n.default.create(0, 0, 0),
                            i = n.default.create(1, 0, 0),
                            r = n.default.create(0, 1, 0);
                        return function(s, o, a) {
                            var l = n.default.dot(o, a);
                            return l < -.999999 ? (n.default.cross(e, i, o), n.default.magnitude(e) < 1e-6 && n.default.cross(e, r, o), n.default.normalize(e, e), t.fromAxisAngle(s, e, Math.PI), s) : l > .999999 ? (s.x = 0, s.y = 0, s.z = 0, s.w = 1, s) : (n.default.cross(e, o, a), s.x = e.x, s.y = e.y, s.z = e.z, s.w = 1 + l, t.normalize(s, s))
                        }
                    })()(e, i, r)
                }, t.getAxisAngle = function(t, e) {
                    var i = 2 * Math.acos(e.w),
                        n = Math.sin(i / 2);
                    return 0 != n ? (t.x = e.x / n, t.y = e.y / n, t.z = e.z / n) : (t.x = 1, t.y = 0, t.z = 0), i
                }, t.multiply = function(t, e, i) {
                    var n = e.x,
                        r = e.y,
                        s = e.z,
                        o = e.w,
                        a = i.x,
                        l = i.y,
                        h = i.z,
                        c = i.w;
                    return t.x = n * c + o * a + r * h - s * l, t.y = r * c + o * l + s * a - n * h, t.z = s * c + o * h + n * l - r * a, t.w = o * c - n * a - r * l - s * h, t
                }, t.mul = function(e, i, n) {
                    return t.multiply(e, i, n)
                }, t.scale = function(t, e, i) {
                    return t.x = e.x * i, t.y = e.y * i, t.z = e.z * i, t.w = e.w * i, t
                }, t.rotateX = function(t, e, i) {
                    i *= .5;
                    var n = e.x,
                        r = e.y,
                        s = e.z,
                        o = e.w,
                        a = Math.sin(i),
                        l = Math.cos(i);
                    return t.x = n * l + o * a, t.y = r * l + s * a, t.z = s * l - r * a, t.w = o * l - n * a, t
                }, t.rotateY = function(t, e, i) {
                    i *= .5;
                    var n = e.x,
                        r = e.y,
                        s = e.z,
                        o = e.w,
                        a = Math.sin(i),
                        l = Math.cos(i);
                    return t.x = n * l - s * a, t.y = r * l + o * a, t.z = s * l + n * a, t.w = o * l - r * a, t
                }, t.rotateZ = function(t, e, i) {
                    i *= .5;
                    var n = e.x,
                        r = e.y,
                        s = e.z,
                        o = e.w,
                        a = Math.sin(i),
                        l = Math.cos(i);
                    return t.x = n * l + r * a, t.y = r * l - n * a, t.z = s * l + o * a, t.w = o * l - s * a, t
                }, t.rotateAround = function(e, i, r, s) {
                    return (function() {
                        var e = n.default.create(0, 0, 0),
                            i = t.create();
                        return function(r, s, o, a) {
                            return t.invert(i, s), n.default.transformQuat(e, o, i), t.fromAxisAngle(i, e, a), t.mul(r, s, i), r
                        }
                    })()(e, i, r, s)
                }, t.rotateAroundLocal = function(e, i, n, r) {
                    return (function() {
                        var e = t.create();
                        return function(i, n, r, s) {
                            return t.fromAxisAngle(e, r, s), t.mul(i, n, e), i
                        }
                    })()(e, i, n, r)
                }, t.calculateW = function(t, e) {
                    var i = e.x,
                        n = e.y,
                        r = e.z;
                    return t.x = i, t.y = n, t.z = r, t.w = Math.sqrt(Math.abs(1 - i * i - n * n - r * r)), t
                }, t.dot = function(t, e) {
                    return t.x * e.x + t.y * e.y + t.z * e.z + t.w * e.w
                }, t.lerp = function(t, e, i, n) {
                    var r = e.x,
                        s = e.y,
                        o = e.z,
                        a = e.w;
                    return t.x = r + n * (i.x - r), t.y = s + n * (i.y - s), t.z = o + n * (i.z - o), t.w = a + n * (i.w - a), t
                }, t.slerp = function(t, e, i, n) {
                    var r = e.x,
                        s = e.y,
                        o = e.z,
                        a = e.w,
                        l = i.x,
                        h = i.y,
                        c = i.z,
                        u = i.w,
                        _ = void 0,
                        f = void 0,
                        d = void 0,
                        p = void 0,
                        m = void 0;
                    return (f = r * l + s * h + o * c + a * u) < 0 && (f = -f, l = -l, h = -h, c = -c, u = -u), 1 - f > 1e-6 ? (_ = Math.acos(f), d = Math.sin(_), p = Math.sin((1 - n) * _) / d, m = Math.sin(n * _) / d) : (p = 1 - n, m = n), t.x = p * r + m * l, t.y = p * s + m * h, t.z = p * o + m * c, t.w = p * a + m * u, t
                }, t.sqlerp = function(e, i, n, r, s, o) {
                    return (function() {
                        var e = t.create(),
                            i = t.create();
                        return function(n, r, s, o, a, l) {
                            return t.slerp(e, r, a, l), t.slerp(i, s, o, l), t.slerp(n, e, i, 2 * l * (1 - l)), n
                        }
                    })()(e, i, n, r, s, o)
                }, t.invert = function(t, e) {
                    var i = e.x,
                        n = e.y,
                        r = e.z,
                        s = e.w,
                        o = i * i + n * n + r * r + s * s,
                        a = o ? 1 / o : 0;
                    return t.x = -i * a, t.y = -n * a, t.z = -r * a, t.w = s * a, t
                }, t.conjugate = function(t, e) {
                    return t.x = -e.x, t.y = -e.y, t.z = -e.z, t.w = e.w, t
                }, t.magnitude = function(t) {
                    var e = t.x,
                        i = t.y,
                        n = t.z,
                        r = t.w;
                    return Math.sqrt(e * e + i * i + n * n + r * r)
                }, t.mag = function(e) {
                    return t.magnitude(e)
                }, t.squaredMagnitude = function(t) {
                    var e = t.x,
                        i = t.y,
                        n = t.z,
                        r = t.w;
                    return e * e + i * i + n * n + r * r
                }, t.sqrMag = function(e) {
                    return t.squaredMagnitude(e)
                }, t.normalize = function(t, e) {
                    var i = e.x,
                        n = e.y,
                        r = e.z,
                        s = e.w,
                        o = i * i + n * n + r * r + s * s;
                    return o > 0 && (o = 1 / Math.sqrt(o), t.x = i * o, t.y = n * o, t.z = r * o, t.w = s * o), t
                }, t.fromAxes = function(e, i, n, r) {
                    return (function() {
                        var e = s.default.create();
                        return function(i, n, r, o) {
                            return s.default.set(e, n.x, n.y, n.z, r.x, r.y, r.z, o.x, o.y, o.z), t.normalize(i, t.fromMat3(i, e))
                        }
                    })()(e, i, n, r)
                }, t.fromViewUp = function(e, i, n) {
                    return (function() {
                        var e = s.default.create();
                        return function(i, n, r) {
                            return s.default.fromViewUp(e, n, r), e ? t.normalize(i, t.fromMat3(i, e)) : null
                        }
                    })()(e, i, n)
                }, t.fromAxisAngle = function(t, e, i) {
                    i *= .5;
                    var n = Math.sin(i);
                    return t.x = n * e.x, t.y = n * e.y, t.z = n * e.z, t.w = Math.cos(i), t
                }, t.fromMat3 = function(t, e) {
                    var i = e.m,
                        n = i[0],
                        r = i[3],
                        s = i[6],
                        o = i[1],
                        a = i[4],
                        l = i[7],
                        h = i[2],
                        c = i[5],
                        u = i[8],
                        _ = n + a + u;
                    if (_ > 0) {
                        var f = .5 / Math.sqrt(_ + 1);
                        t.w = .25 / f, t.x = (c - l) * f, t.y = (s - h) * f, t.z = (o - r) * f
                    } else if (n > a && n > u) {
                        var d = 2 * Math.sqrt(1 + n - a - u);
                        t.w = (c - l) / d, t.x = .25 * d, t.y = (r + o) / d, t.z = (s + h) / d
                    } else if (a > u) {
                        var p = 2 * Math.sqrt(1 + a - n - u);
                        t.w = (s - h) / p, t.x = (r + o) / p, t.y = .25 * p, t.z = (l + c) / p
                    } else {
                        var m = 2 * Math.sqrt(1 + u - n - a);
                        t.w = (o - r) / m, t.x = (s + h) / m, t.y = (l + c) / m, t.z = .25 * m
                    }
                    return t
                }, t.fromEuler = function(t, e, i, n) {
                    e *= h, i *= h, n *= h;
                    var r = Math.sin(e),
                        s = Math.cos(e),
                        o = Math.sin(i),
                        a = Math.cos(i),
                        l = Math.sin(n),
                        c = Math.cos(n);
                    return t.x = r * a * c + s * o * l, t.y = s * o * c + r * a * l, t.z = s * a * l - r * o * c, t.w = s * a * c - r * o * l, t
                }, t.fromAngleZ = function(t, e) {
                    e *= h, t.x = t.y = 0, t.z = Math.sin(e), t.w = Math.cos(e)
                }, t.toEuler = function(t, e) {
                    var i = e.x,
                        n = e.y,
                        r = e.z,
                        s = e.w,
                        a = void 0,
                        l = void 0,
                        h = void 0,
                        c = i * n + r * s;
                    if (c > .499 && (a = 2 * Math.atan2(i, s), l = Math.PI / 2, h = 0), c < -.499 && (a = -2 * Math.atan2(i, s), l = -Math.PI / 2, h = 0), isNaN(a)) {
                        var u = i * i,
                            _ = n * n,
                            f = r * r;
                        a = Math.atan2(2 * n * s - 2 * i * r, 1 - 2 * _ - 2 * f), l = Math.asin(2 * c), h = Math.atan2(2 * i * s - 2 * n * r, 1 - 2 * u - 2 * f)
                    }
                    return t.y = (0, o.toDegree)(a), t.z = (0, o.toDegree)(l), t.x = (0, o.toDegree)(h), t
                }, t.str = function(t) {
                    return "quat(" + t.x + ", " + t.y + ", " + t.z + ", " + t.w + ")"
                }, t.array = function(t, e) {
                    return t[0] = e.x, t[1] = e.y, t[2] = e.z, t[3] = e.w, t
                }, t.exactEquals = function(t, e) {
                    return r.default.exactEquals(t, e)
                }, t.equals = function(t, e) {
                    return r.default.equals(t, e)
                }, t
            })();
        i.default = c, e.exports = i.default
    }), {
        "./mat3": 329,
        "./utils": 333,
        "./vec3": 335,
        "./vec4": 336
    }],
    332: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.default = void 0;
        var n = (function(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        })(t("./quat"));

        function r(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }
        var s = n.default.create(),
            o = (function() {
                function t() {
                    r(this, t)
                }
                return t.toRotation = function(t, e) {
                    return t.x = e[3], t.y = e[4], t.z = e[5], t.w = e[6], t
                }, t.fromRotation = function(t, e) {
                    return t[3] = e.x, t[4] = e.y, t[5] = e.z, t[6] = e.w, t
                }, t.toEuler = function(e, i) {
                    return t.toRotation(s, i), n.default.toEuler(e, s), e
                }, t.fromEuler = function(e, i) {
                    return n.default.fromEuler(s, i.x, i.y, i.z), t.fromRotation(e, s), e
                }, t.fromEulerNumber = function(e, i, r, o) {
                    return n.default.fromEuler(s, i, r, o), t.fromRotation(e, s), e
                }, t.toScale = function(t, e) {
                    return t.x = e[7], t.y = e[8], t.z = e[9], t
                }, t.fromScale = function(t, e) {
                    return t[7] = e.x, t[8] = e.y, t[9] = e.z, t
                }, t.toPosition = function(t, e) {
                    return t.x = e[0], t.y = e[1], t.z = e[2], t
                }, t.fromPosition = function(t, e) {
                    return t[0] = e.x, t[1] = e.y, t[2] = e.z, t
                }, t.fromAngleZ = function(e, i) {
                    return n.default.fromAngleZ(s, i), t.fromRotation(e, s), e
                }, t
            })();
        i.default = o, e.exports = i.default
    }), {
        "./quat": 331
    }],
    333: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.equals = function(t, e) {
            return Math.abs(t - e) <= s * Math.max(1, Math.abs(t), Math.abs(e))
        }, i.approx = function(t, e, i) {
            return i = i || s, Math.abs(t - e) <= i
        }, i.clamp = function(t, e, i) {
            return t < e ? e : t > i ? i : t
        }, i.clamp01 = function(t) {
            return t < 0 ? 0 : t > 1 ? 1 : t
        }, i.lerp = function(t, e, i) {
            return t + (e - t) * i
        }, i.toRadian = function(t) {
            return t * n
        }, i.toDegree = function(t) {
            return t * r
        }, i.randomRange = o, i.randomRangeInt = function(t, e) {
            return Math.floor(o(t, e))
        }, i.pseudoRandom = a, i.pseudoRandomRange = l, i.pseudoRandomRangeInt = function(t, e, i) {
            return Math.floor(l(t, e, i))
        }, i.nextPow2 = function(t) {
            return --t, t |= t >> 1, t |= t >> 2, t |= t >> 4, t |= t >> 8, t |= t >> 16, ++t
        }, i.repeat = h, i.pingPong = function(t, e) {
            return t = h(t, 2 * e), t = e - Math.abs(t - e)
        }, i.inverseLerp = function(t, e, i) {
            return (i - t) / (e - t)
        };
        var n = Math.PI / 180,
            r = 180 / Math.PI,
            s = i.EPSILON = 1e-6;
        i.FLOAT_ARRAY_TYPE = Float64Array, i.FLOAT_BYTES = 8;
        i.random = Math.random;

        function o(t, e) {
            return Math.random() * (e - t) + t
        }

        function a(t) {
            return (t = (9301 * t + 49297) % 233280) / 233280
        }

        function l(t, e, i) {
            return a(t) * (i - e) + e
        }

        function h(t, e) {
            return t - Math.floor(t / e) * e
        }
    }), {}],
    334: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0;
        var n = t("./utils");

        function r(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }
        var s = (function() {
            function t() {
                var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 0,
                    i = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 0;
                r(this, t), this.x = e, this.y = i
            }
            return t.create = function() {
                return new t(arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 0, arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 0)
            }, t.zero = function(t) {
                return t.x = 0, t.y = 0, t
            }, t.clone = function(e) {
                return new t(e.x, e.y)
            }, t.copy = function(t, e) {
                return t.x = e.x, t.y = e.y, t
            }, t.set = function(t, e, i) {
                return t.x = e, t.y = i, t
            }, t.add = function(t, e, i) {
                return t.x = e.x + i.x, t.y = e.y + i.y, t
            }, t.subtract = function(t, e, i) {
                return t.x = e.x - i.x, t.y = e.y - i.y, t
            }, t.sub = function(e, i, n) {
                return t.subtract(e, i, n)
            }, t.multiply = function(t, e, i) {
                return t.x = e.x * i.x, t.y = e.y * i.y, t
            }, t.mul = function(e, i, n) {
                return t.multiply(e, i, n)
            }, t.divide = function(t, e, i) {
                return t.x = e.x / i.x, t.y = e.y / i.y, t
            }, t.div = function(e, i, n) {
                return t.divide(e, i, n)
            }, t.ceil = function(t, e) {
                return t.x = Math.ceil(e.x), t.y = Math.ceil(e.y), t
            }, t.floor = function(t, e) {
                return t.x = Math.floor(e.x), t.y = Math.floor(e.y), t
            }, t.min = function(t, e, i) {
                return t.x = Math.min(e.x, i.x), t.y = Math.min(e.y, i.y), t
            }, t.max = function(t, e, i) {
                return t.x = Math.max(e.x, i.x), t.y = Math.max(e.y, i.y), t
            }, t.round = function(t, e) {
                return t.x = Math.round(e.x), t.y = Math.round(e.y), t
            }, t.scale = function(t, e, i) {
                return t.x = e.x * i, t.y = e.y * i, t
            }, t.scaleAndAdd = function(t, e, i, n) {
                return t.x = e.x + i.x * n, t.y = e.y + i.y * n, t
            }, t.distance = function(t, e) {
                var i = e.x - t.x,
                    n = e.y - t.y;
                return Math.sqrt(i * i + n * n)
            }, t.dist = function(e, i) {
                return t.distance(e, i)
            }, t.squaredDistance = function(t, e) {
                var i = e.x - t.x,
                    n = e.y - t.y;
                return i * i + n * n
            }, t.sqrDist = function(e, i) {
                return t.squaredDistance(e, i)
            }, t.magnitude = function(t) {
                var e = t.x,
                    i = t.y;
                return Math.sqrt(e * e + i * i)
            }, t.mag = function(e) {
                return t.magnitude(e)
            }, t.squaredMagnitude = function(t) {
                var e = t.x,
                    i = t.y;
                return e * e + i * i
            }, t.sqrMag = function(e) {
                return t.squaredMagnitude(e)
            }, t.negate = function(t, e) {
                return t.x = -e.x, t.y = -e.y, t
            }, t.inverse = function(t, e) {
                return t.x = 1 / e.x, t.y = 1 / e.y, t
            }, t.inverseSafe = function(t, e) {
                var i = e.x,
                    r = e.y;
                return Math.abs(i) < n.EPSILON ? t.x = 0 : t.x = 1 / i, Math.abs(r) < n.EPSILON ? t.y = 0 : t.y = 1 / e.y, t
            }, t.normalize = function(t, e) {
                var i = e.x,
                    n = e.y,
                    r = i * i + n * n;
                return r > 0 && (r = 1 / Math.sqrt(r), t.x = e.x * r, t.y = e.y * r), t
            }, t.dot = function(t, e) {
                return t.x * e.x + t.y * e.y
            }, t.cross = function(t, e, i) {
                var n = e.x * i.y - e.y * i.x;
                return t.x = t.y = 0, t.z = n, t
            }, t.lerp = function(t, e, i, n) {
                var r = e.x,
                    s = e.y;
                return t.x = r + n * (i.x - r), t.y = s + n * (i.y - s), t
            }, t.random = function(t, e) {
                e = e || 1;
                var i = 2 * (0, n.random)() * Math.PI;
                return t.x = Math.cos(i) * e, t.y = Math.sin(i) * e, t
            }, t.transformMat2 = function(t, e, i) {
                var n = i.m,
                    r = e.x,
                    s = e.y;
                return t.x = n[0] * r + n[2] * s, t.y = n[1] * r + n[3] * s, t
            }, t.transformMat23 = function(t, e, i) {
                var n = i.m,
                    r = e.x,
                    s = e.y;
                return t.x = n[0] * r + n[2] * s + n[4], t.y = n[1] * r + n[3] * s + n[5], t
            }, t.transformMat3 = function(t, e, i) {
                var n = i.m,
                    r = e.x,
                    s = e.y;
                return t.x = n[0] * r + n[3] * s + n[6], t.y = n[1] * r + n[4] * s + n[7], t
            }, t.transformMat4 = function(t, e, i) {
                var n = i.m,
                    r = e.x,
                    s = e.y;
                return t.x = n[0] * r + n[4] * s + n[12], t.y = n[1] * r + n[5] * s + n[13], t
            }, t.forEach = function(e, i, n, r, s, o) {
                return t._forEach(e, i, n, r, s, o)
            }, t.str = function(t) {
                return "vec2(" + t.x + ", " + t.y + ")"
            }, t.array = function(t, e) {
                return t[0] = e.x, t[1] = e.y, t
            }, t.exactEquals = function(t, e) {
                return t.x === e.x && t.y === e.y
            }, t.equals = function(t, e) {
                var i = t.x,
                    r = t.y,
                    s = e.x,
                    o = e.y;
                return Math.abs(i - s) <= n.EPSILON * Math.max(1, Math.abs(i), Math.abs(s)) && Math.abs(r - o) <= n.EPSILON * Math.max(1, Math.abs(r), Math.abs(o))
            }, t.angle = function(e, i) {
                return t._angle(e, i)
            }, t
        })();
        s._forEach = (function() {
            var t = s.create(0, 0);
            return function(e, i, n, r, s, o) {
                var a = void 0,
                    l = void 0;
                for (i || (i = 2), n || (n = 0), l = r ? Math.min(r * i + n, e.length) : e.length, a = n; a < l; a += i) t.x = e[a], t.y = e[a + 1], s(t, t, o), e[a] = t.x, e[a + 1] = t.y;
                return e
            }
        })(), s._angle = (function() {
            var t = s.create(0, 0),
                e = s.create(0, 0);
            return function(i, n) {
                s.normalize(t, i), s.normalize(e, n);
                var r = s.dot(t, e);
                return r > 1 ? 0 : r < -1 ? Math.PI : Math.acos(r)
            }
        })(), i.default = s, e.exports = i.default
    }), {
        "./utils": 333
    }],
    335: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0;
        var n = t("./utils");

        function r(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }
        var s = (function() {
            function t() {
                var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 0,
                    i = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 0,
                    n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 0;
                r(this, t), this.x = e, this.y = i, this.z = n
            }
            return t.create = function() {
                return new t(arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 0, arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 0, arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 0)
            }, t.zero = function(t) {
                return t.x = 0, t.y = 0, t.z = 0, t
            }, t.clone = function(e) {
                return new t(e.x, e.y, e.z)
            }, t.copy = function(t, e) {
                return t.x = e.x, t.y = e.y, t.z = e.z, t
            }, t.set = function(t, e, i, n) {
                return t.x = e, t.y = i, t.z = n, t
            }, t.add = function(t, e, i) {
                return t.x = e.x + i.x, t.y = e.y + i.y, t.z = e.z + i.z, t
            }, t.subtract = function(t, e, i) {
                return t.x = e.x - i.x, t.y = e.y - i.y, t.z = e.z - i.z, t
            }, t.sub = function(e, i, n) {
                return t.subtract(e, i, n)
            }, t.multiply = function(t, e, i) {
                return t.x = e.x * i.x, t.y = e.y * i.y, t.z = e.z * i.z, t
            }, t.mul = function(e, i, n) {
                return t.multiply(e, i, n)
            }, t.divide = function(t, e, i) {
                return t.x = e.x / i.x, t.y = e.y / i.y, t.z = e.z / i.z, t
            }, t.div = function(e, i, n) {
                return t.divide(e, i, n)
            }, t.ceil = function(t, e) {
                return t.x = Math.ceil(e.x), t.y = Math.ceil(e.y), t.z = Math.ceil(e.z), t
            }, t.floor = function(t, e) {
                return t.x = Math.floor(e.x), t.y = Math.floor(e.y), t.z = Math.floor(e.z), t
            }, t.min = function(t, e, i) {
                return t.x = Math.min(e.x, i.x), t.y = Math.min(e.y, i.y), t.z = Math.min(e.z, i.z), t
            }, t.max = function(t, e, i) {
                return t.x = Math.max(e.x, i.x), t.y = Math.max(e.y, i.y), t.z = Math.max(e.z, i.z), t
            }, t.round = function(t, e) {
                return t.x = Math.round(e.x), t.y = Math.round(e.y), t.z = Math.round(e.z), t
            }, t.scale = function(t, e, i) {
                return t.x = e.x * i, t.y = e.y * i, t.z = e.z * i, t
            }, t.scaleAndAdd = function(t, e, i, n) {
                return t.x = e.x + i.x * n, t.y = e.y + i.y * n, t.z = e.z + i.z * n, t
            }, t.distance = function(t, e) {
                var i = e.x - t.x,
                    n = e.y - t.y,
                    r = e.z - t.z;
                return Math.sqrt(i * i + n * n + r * r)
            }, t.dist = function(e, i) {
                return t.distance(e, i)
            }, t.squaredDistance = function(t, e) {
                var i = e.x - t.x,
                    n = e.y - t.y,
                    r = e.z - t.z;
                return i * i + n * n + r * r
            }, t.sqrDist = function(e, i) {
                return t.squaredDistance(e, i)
            }, t.magnitude = function(t) {
                var e = t.x,
                    i = t.y,
                    n = t.z;
                return Math.sqrt(e * e + i * i + n * n)
            }, t.mag = function(e) {
                return t.magnitude(e)
            }, t.squaredMagnitude = function(t) {
                var e = t.x,
                    i = t.y,
                    n = t.z;
                return e * e + i * i + n * n
            }, t.sqrMag = function(e) {
                return t.squaredMagnitude(e)
            }, t.negate = function(t, e) {
                return t.x = -e.x, t.y = -e.y, t.z = -e.z, t
            }, t.inverse = function(t, e) {
                return t.x = 1 / e.x, t.y = 1 / e.y, t.z = 1 / e.z, t
            }, t.inverseSafe = function(t, e) {
                var i = e.x,
                    r = e.y,
                    s = e.z;
                return Math.abs(i) < n.EPSILON ? t.x = 0 : t.x = 1 / i, Math.abs(r) < n.EPSILON ? t.y = 0 : t.y = 1 / r, Math.abs(s) < n.EPSILON ? t.z = 0 : t.z = 1 / s, t
            }, t.normalize = function(t, e) {
                var i = e.x,
                    n = e.y,
                    r = e.z,
                    s = i * i + n * n + r * r;
                return s > 0 && (s = 1 / Math.sqrt(s), t.x = i * s, t.y = n * s, t.z = r * s), t
            }, t.dot = function(t, e) {
                return t.x * e.x + t.y * e.y + t.z * e.z
            }, t.cross = function(t, e, i) {
                var n = e.x,
                    r = e.y,
                    s = e.z,
                    o = i.x,
                    a = i.y,
                    l = i.z;
                return t.x = r * l - s * a, t.y = s * o - n * l, t.z = n * a - r * o, t
            }, t.lerp = function(t, e, i, n) {
                var r = e.x,
                    s = e.y,
                    o = e.z;
                return t.x = r + n * (i.x - r), t.y = s + n * (i.y - s), t.z = o + n * (i.z - o), t
            }, t.hermite = function(t, e, i, n, r, s) {
                var o = s * s,
                    a = o * (2 * s - 3) + 1,
                    l = o * (s - 2) + s,
                    h = o * (s - 1),
                    c = o * (3 - 2 * s);
                return t.x = e.x * a + i.x * l + n.x * h + r.x * c, t.y = e.y * a + i.y * l + n.y * h + r.y * c, t.z = e.z * a + i.z * l + n.z * h + r.z * c, t
            }, t.bezier = function(t, e, i, n, r, s) {
                var o = 1 - s,
                    a = o * o,
                    l = s * s,
                    h = a * o,
                    c = 3 * s * a,
                    u = 3 * l * o,
                    _ = l * s;
                return t.x = e.x * h + i.x * c + n.x * u + r.x * _, t.y = e.y * h + i.y * c + n.y * u + r.y * _, t.z = e.z * h + i.z * c + n.z * u + r.z * _, t
            }, t.random = function(t, e) {
                e = e || 1;
                var i = 2 * (0, n.random)() * Math.PI,
                    r = Math.acos(2 * (0, n.random)() - 1);
                return t.x = Math.sin(r) * Math.cos(i) * e, t.y = Math.sin(r) * Math.sin(i) * e, t.z = Math.cos(r) * e, t
            }, t.transformMat4 = function(t, e, i) {
                var n = i.m,
                    r = e.x,
                    s = e.y,
                    o = e.z,
                    a = n[3] * r + n[7] * s + n[11] * o + n[15];
                return a = a ? 1 / a : 1, t.x = (n[0] * r + n[4] * s + n[8] * o + n[12]) * a, t.y = (n[1] * r + n[5] * s + n[9] * o + n[13]) * a, t.z = (n[2] * r + n[6] * s + n[10] * o + n[14]) * a, t
            }, t.transformMat4Normal = function(t, e, i) {
                var n = i.m,
                    r = e.x,
                    s = e.y,
                    o = e.z,
                    a = n[3] * r + n[7] * s + n[11] * o;
                return a = a ? 1 / a : 1, t.x = (n[0] * r + n[4] * s + n[8] * o) * a, t.y = (n[1] * r + n[5] * s + n[9] * o) * a, t.z = (n[2] * r + n[6] * s + n[10] * o) * a, t
            }, t.transformMat3 = function(t, e, i) {
                var n = i.m,
                    r = e.x,
                    s = e.y,
                    o = e.z;
                return t.x = r * n[0] + s * n[3] + o * n[6], t.y = r * n[1] + s * n[4] + o * n[7], t.z = r * n[2] + s * n[5] + o * n[8], t
            }, t.transformQuat = function(t, e, i) {
                var n = e.x,
                    r = e.y,
                    s = e.z,
                    o = i.x,
                    a = i.y,
                    l = i.z,
                    h = i.w,
                    c = h * n + a * s - l * r,
                    u = h * r + l * n - o * s,
                    _ = h * s + o * r - a * n,
                    f = -o * n - a * r - l * s;
                return t.x = c * h + f * -o + u * -l - _ * -a, t.y = u * h + f * -a + _ * -o - c * -l, t.z = _ * h + f * -l + c * -a - u * -o, t
            }, t.rotateX = function(t, e, i, n) {
                var r = e.x - i.x,
                    s = e.y - i.y,
                    o = e.z - i.z,
                    a = r,
                    l = s * Math.cos(n) - o * Math.sin(n),
                    h = s * Math.sin(n) + o * Math.cos(n);
                return t.x = a + i.x, t.y = l + i.y, t.z = h + i.z, t
            }, t.rotateY = function(t, e, i, n) {
                var r = e.x - i.x,
                    s = e.y - i.y,
                    o = e.z - i.z,
                    a = o * Math.sin(n) + r * Math.cos(n),
                    l = s,
                    h = o * Math.cos(n) - r * Math.sin(n);
                return t.x = a + i.x, t.y = l + i.y, t.z = h + i.z, t
            }, t.rotateZ = function(t, e, i, n) {
                var r = e.x - i.x,
                    s = e.y - i.y,
                    o = e.z - i.z,
                    a = r * Math.cos(n) - s * Math.sin(n),
                    l = r * Math.sin(n) + s * Math.cos(n),
                    h = o;
                return t.x = a + i.x, t.y = l + i.y, t.z = h + i.z, t
            }, t.str = function(t) {
                return "vec3(" + t.x + ", " + t.y + ", " + t.z + ")"
            }, t.array = function(t, e) {
                return t[0] = e.x, t[1] = e.y, t[2] = e.z, t
            }, t.exactEquals = function(t, e) {
                return t.x === e.x && t.y === e.y && t.z === e.z
            }, t.equals = function(t, e) {
                var i = t.x,
                    r = t.y,
                    s = t.z,
                    o = e.x,
                    a = e.y,
                    l = e.z;
                return Math.abs(i - o) <= n.EPSILON * Math.max(1, Math.abs(i), Math.abs(o)) && Math.abs(r - a) <= n.EPSILON * Math.max(1, Math.abs(r), Math.abs(a)) && Math.abs(s - l) <= n.EPSILON * Math.max(1, Math.abs(s), Math.abs(l))
            }, t.forEach = function(e, i, n, r, s, o) {
                return t._forEach(e, i, n, r, s, o)
            }, t.angle = function(e, i) {
                return t._angle(e, i)
            }, t.projectOnPlane = function(e, i, n) {
                return t.sub(e, i, t.project(e, i, n))
            }, t.project = function(e, i, n) {
                var r = t.squaredMagnitude(n);
                return r < 1e-6 ? t.set(e, 0, 0, 0) : t.scale(e, n, t.dot(i, n) / r)
            }, t
        })();
        s._forEach = (function() {
            var t = s.create(0, 0, 0);
            return function(e, i, n, r, s, o) {
                var a = void 0,
                    l = void 0;
                for (i || (i = 3), n || (n = 0), l = r ? Math.min(r * i + n, e.length) : e.length, a = n; a < l; a += i) t.x = e[a], t.y = e[a + 1], t.z = e[a + 2], s(t, t, o), e[a] = t.x, e[a + 1] = t.y, e[a + 2] = t.z;
                return e
            }
        })(), s._angle = (function() {
            var t = s.create(0, 0, 0),
                e = s.create(0, 0, 0);
            return function(i, n) {
                s.copy(t, i), s.copy(e, n), s.normalize(t, t), s.normalize(e, e);
                var r = s.dot(t, e);
                return r > 1 ? 0 : r < -1 ? Math.PI : Math.acos(r)
            }
        })(), i.default = s, e.exports = i.default
    }), {
        "./utils": 333
    }],
    336: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0;
        var n = t("./utils");

        function r(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }
        var s = (function() {
            function t() {
                var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 0,
                    i = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 0,
                    n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 0,
                    s = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : 1;
                r(this, t), this.x = e, this.y = i, this.z = n, this.w = s
            }
            return t.create = function() {
                return new t(arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 0, arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 0, arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 0, arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : 1)
            }, t.zero = function(t) {
                return t.x = 0, t.y = 0, t.z = 0, t.w = 0, t
            }, t.clone = function(e) {
                return new t(e.x, e.y, e.z, e.w)
            }, t.copy = function(t, e) {
                return t.x = e.x, t.y = e.y, t.z = e.z, t.w = e.w, t
            }, t.set = function(t, e, i, n, r) {
                return t.x = e, t.y = i, t.z = n, t.w = r, t
            }, t.add = function(t, e, i) {
                return t.x = e.x + i.x, t.y = e.y + i.y, t.z = e.z + i.z, t.w = e.w + i.w, t
            }, t.subtract = function(t, e, i) {
                return t.x = e.x - i.x, t.y = e.y - i.y, t.z = e.z - i.z, t.w = e.w - i.w, t
            }, t.sub = function(e, i, n) {
                return t.subtract(e, i, n)
            }, t.multiply = function(t, e, i) {
                return t.x = e.x * i.x, t.y = e.y * i.y, t.z = e.z * i.z, t.w = e.w * i.w, t
            }, t.mul = function(e, i, n) {
                return t.multiply(e, i, n)
            }, t.divide = function(t, e, i) {
                return t.x = e.x / i.x, t.y = e.y / i.y, t.z = e.z / i.z, t.w = e.w / i.w, t
            }, t.div = function(e, i, n) {
                return t.divide(e, i, n)
            }, t.ceil = function(t, e) {
                return t.x = Math.ceil(e.x), t.y = Math.ceil(e.y), t.z = Math.ceil(e.z), t.w = Math.ceil(e.w), t
            }, t.floor = function(t, e) {
                return t.x = Math.floor(e.x), t.y = Math.floor(e.y), t.z = Math.floor(e.z), t.w = Math.floor(e.w), t
            }, t.min = function(t, e, i) {
                return t.x = Math.min(e.x, i.x), t.y = Math.min(e.y, i.y), t.z = Math.min(e.z, i.z), t.w = Math.min(e.w, i.w), t
            }, t.max = function(t, e, i) {
                return t.x = Math.max(e.x, i.x), t.y = Math.max(e.y, i.y), t.z = Math.max(e.z, i.z), t.w = Math.max(e.w, i.w), t
            }, t.round = function(t, e) {
                return t.x = Math.round(e.x), t.y = Math.round(e.y), t.z = Math.round(e.z), t.w = Math.round(e.w), t
            }, t.scale = function(t, e, i) {
                return t.x = e.x * i, t.y = e.y * i, t.z = e.z * i, t.w = e.w * i, t
            }, t.scaleAndAdd = function(t, e, i, n) {
                return t.x = e.x + i.x * n, t.y = e.y + i.y * n, t.z = e.z + i.z * n, t.w = e.w + i.w * n, t
            }, t.distance = function(t, e) {
                var i = e.x - t.x,
                    n = e.y - t.y,
                    r = e.z - t.z,
                    s = e.w - t.w;
                return Math.sqrt(i * i + n * n + r * r + s * s)
            }, t.dist = function(e, i) {
                return t.distance(e, i)
            }, t.squaredDistance = function(t, e) {
                var i = e.x - t.x,
                    n = e.y - t.y,
                    r = e.z - t.z,
                    s = e.w - t.w;
                return i * i + n * n + r * r + s * s
            }, t.sqrDist = function(e, i) {
                return t.squaredDistance(e, i)
            }, t.magnitude = function(t) {
                var e = t.x,
                    i = t.y,
                    n = t.z,
                    r = t.w;
                return Math.sqrt(e * e + i * i + n * n + r * r)
            }, t.mag = function(e) {
                return t.magnitude(e)
            }, t.squaredMagnitude = function(t) {
                var e = t.x,
                    i = t.y,
                    n = t.z,
                    r = t.w;
                return e * e + i * i + n * n + r * r
            }, t.sqrMag = function(e) {
                return t.squaredMagnitude(e)
            }, t.negate = function(t, e) {
                return t.x = -e.x, t.y = -e.y, t.z = -e.z, t.w = -e.w, t
            }, t.inverse = function(t, e) {
                return t.x = 1 / e.x, t.y = 1 / e.y, t.z = 1 / e.z, t.w = 1 / e.w, t
            }, t.inverseSafe = function(t, e) {
                var i = e.x,
                    r = e.y,
                    s = e.z,
                    o = e.w;
                return Math.abs(i) < n.EPSILON ? t.x = 0 : t.x = 1 / i, Math.abs(r) < n.EPSILON ? t.y = 0 : t.y = 1 / r, Math.abs(s) < n.EPSILON ? t.z = 0 : t.z = 1 / s, Math.abs(o) < n.EPSILON ? t.w = 0 : t.w = 1 / o, t
            }, t.normalize = function(t, e) {
                var i = e.x,
                    n = e.y,
                    r = e.z,
                    s = e.w,
                    o = i * i + n * n + r * r + s * s;
                return o > 0 && (o = 1 / Math.sqrt(o), t.x = i * o, t.y = n * o, t.z = r * o, t.w = s * o), t
            }, t.dot = function(t, e) {
                return t.x * e.x + t.y * e.y + t.z * e.z + t.w * e.w
            }, t.lerp = function(t, e, i, n) {
                var r = e.x,
                    s = e.y,
                    o = e.z,
                    a = e.w;
                return t.x = r + n * (i.x - r), t.y = s + n * (i.y - s), t.z = o + n * (i.z - o), t.w = a + n * (i.w - a), t
            }, t.random = function(t, e) {
                e = e || 1;
                var i = 2 * (0, n.random)() * Math.PI,
                    r = Math.acos(2 * (0, n.random)() - 1);
                return t.x = Math.sin(r) * Math.cos(i) * e, t.y = Math.sin(r) * Math.sin(i) * e, t.z = Math.cos(r) * e, t.w = 0, t
            }, t.transformMat4 = function(t, e, i) {
                var n = i.m,
                    r = e.x,
                    s = e.y,
                    o = e.z,
                    a = e.w;
                return t.x = n[0] * r + n[4] * s + n[8] * o + n[12] * a, t.y = n[1] * r + n[5] * s + n[9] * o + n[13] * a, t.z = n[2] * r + n[6] * s + n[10] * o + n[14] * a, t.w = n[3] * r + n[7] * s + n[11] * o + n[15] * a, t
            }, t.transformQuat = function(t, e, i) {
                var n = e.x,
                    r = e.y,
                    s = e.z,
                    o = i.x,
                    a = i.y,
                    l = i.z,
                    h = i.w,
                    c = h * n + a * s - l * r,
                    u = h * r + l * n - o * s,
                    _ = h * s + o * r - a * n,
                    f = -o * n - a * r - l * s;
                return t.x = c * h + f * -o + u * -l - _ * -a, t.y = u * h + f * -a + _ * -o - c * -l, t.z = _ * h + f * -l + c * -a - u * -o, t.w = e.w, t
            }, t.str = function(t) {
                return "vec4(" + t.x + ", " + t.y + ", " + t.z + ", " + t.w + ")"
            }, t.array = function(t, e) {
                return t[0] = e.x, t[1] = e.y, t[2] = e.z, t[3] = e.w, t
            }, t.exactEquals = function(t, e) {
                return t.x === e.x && t.y === e.y && t.z === e.z && t.w === e.w
            }, t.equals = function(t, e) {
                var i = t.x,
                    r = t.y,
                    s = t.z,
                    o = t.w,
                    a = e.x,
                    l = e.y,
                    h = e.z,
                    c = e.w;
                return Math.abs(i - a) <= n.EPSILON * Math.max(1, Math.abs(i), Math.abs(a)) && Math.abs(r - l) <= n.EPSILON * Math.max(1, Math.abs(r), Math.abs(l)) && Math.abs(s - h) <= n.EPSILON * Math.max(1, Math.abs(s), Math.abs(h)) && Math.abs(o - c) <= n.EPSILON * Math.max(1, Math.abs(o), Math.abs(c))
            }, t.forEach = function(e, i, n, r, s, o) {
                return t._forEach(e, i, n, r, s, o)
            }, t
        })();
        s._forEach = (function() {
            var t = s.create(0, 0, 0, 0);
            return function(e, i, n, r, s, o) {
                var a = void 0,
                    l = void 0;
                for (i || (i = 4), n || (n = 0), l = r ? Math.min(r * i + n, e.length) : e.length, a = n; a < l; a += i) t.x = e[a], t.y = e[a + 1], t.z = e[a + 2], t.w = e[a + 3], s(t, t, o), e[a] = t.x, e[a + 1] = t.y, e[a + 2] = t.z, e[a + 3] = t.w;
                return e
            }
        })(), i.default = s, e.exports = i.default
    }), {
        "./utils": 333
    }],
    337: [(function(t, e, i) {
        "use strict";
        cc.js
    }), {}],
    338: [(function(t, e, i) {
        "use strict";
        t("./core/CCGame"), t("./actions")
    }), {
        "./actions": 7,
        "./core/CCGame": 51
    }],
    339: [(function(t, e, i) {
        "use strict";
        var n = t("../compression/zlib.min"),
            r = t("../core/CCDebug"),
            s = function(t) {
                var e, i, n, s, o, a, l, h, c, u, _, f, d;
                for (this.data = t, this.pos = 8, this.palette = [], this.imgData = [], this.transparency = {}, this.animation = null, this.text = {}, o = null;;) {
                    switch (e = this.readUInt32(), h = function() {
                        var t, e;
                        for (e = [], t = 0; t < 4; ++t) e.push(String.fromCharCode(this.data[this.pos++]));
                        return e
                    }.call(this).join("")) {
                        case "IHDR":
                            this.width = this.readUInt32(), this.height = this.readUInt32(), this.bits = this.data[this.pos++], this.colorType = this.data[this.pos++], this.compressionMethod = this.data[this.pos++], this.filterMethod = this.data[this.pos++], this.interlaceMethod = this.data[this.pos++];
                            break;
                        case "acTL":
                            this.animation = {
                                numFrames: this.readUInt32(),
                                numPlays: this.readUInt32() || 1 / 0,
                                frames: []
                            };
                            break;
                        case "PLTE":
                            this.palette = this.read(e);
                            break;
                        case "fcTL":
                            o && this.animation.frames.push(o), this.pos += 4, o = {
                                width: this.readUInt32(),
                                height: this.readUInt32(),
                                xOffset: this.readUInt32(),
                                yOffset: this.readUInt32()
                            }, s = this.readUInt16(), n = this.readUInt16() || 100, o.delay = 1e3 * s / n, o.disposeOp = this.data[this.pos++], o.blendOp = this.data[this.pos++], o.data = [];
                            break;
                        case "IDAT":
                        case "fdAT":
                            for ("fdAT" === h && (this.pos += 4, e -= 4), t = (null != o ? o.data : void 0) || this.imgData, _ = 0; 0 <= e ? _ < e : _ > e; 0 <= e ? ++_ : --_) t.push(this.data[this.pos++]);
                            break;
                        case "tRNS":
                            switch (this.transparency = {}, this.colorType) {
                                case 3:
                                    if (this.transparency.indexed = this.read(e), (c = 255 - this.transparency.indexed.length) > 0)
                                        for (f = 0; 0 <= c ? f < c : f > c; 0 <= c ? ++f : --f) this.transparency.indexed.push(255);
                                    break;
                                case 0:
                                    this.transparency.grayscale = this.read(e)[0];
                                    break;
                                case 2:
                                    this.transparency.rgb = this.read(e)
                            }
                            break;
                        case "tEXt":
                            a = (u = this.read(e)).indexOf(0), l = String.fromCharCode.apply(String, u.slice(0, a)), this.text[l] = String.fromCharCode.apply(String, u.slice(a + 1));
                            break;
                        case "IEND":
                            return o && this.animation.frames.push(o), this.colors = function() {
                                switch (this.colorType) {
                                    case 0:
                                    case 3:
                                    case 4:
                                        return 1;
                                    case 2:
                                    case 6:
                                        return 3
                                }
                            }.call(this), this.hasAlphaChannel = 4 === (d = this.colorType) || 6 === d, i = this.colors + (this.hasAlphaChannel ? 1 : 0), this.pixelBitlength = this.bits * i, this.colorSpace = function() {
                                switch (this.colors) {
                                    case 1:
                                        return "DeviceGray";
                                    case 3:
                                        return "DeviceRGB"
                                }
                            }.call(this), void(Uint8Array != Array && (this.imgData = new Uint8Array(this.imgData)));
                        default:
                            this.pos += e
                    }
                    if (this.pos += 4, this.pos > this.data.length) throw new Error(r.getError(6017))
                }
            };
        s.prototype = {
            constructor: s,
            read: function(t) {
                var e, i;
                for (i = [], e = 0; 0 <= t ? e < t : e > t; 0 <= t ? ++e : --e) i.push(this.data[this.pos++]);
                return i
            },
            readUInt32: function() {
                return this.data[this.pos++] << 24 | this.data[this.pos++] << 16 | this.data[this.pos++] << 8 | this.data[this.pos++]
            },
            readUInt16: function() {
                return this.data[this.pos++] << 8 | this.data[this.pos++]
            },
            decodePixels: function(t) {
                var e, i, s, o, a, l, h, c, u, _, f, d, p, m, y, v, g, x, b, A, C, T, S;
                if (null == t && (t = this.imgData), 0 === t.length) return new Uint8Array(0);
                for (t = new n.Inflate(t, {
                        index: 0,
                        verify: !1
                    }).decompress(), v = (d = this.pixelBitlength / 8) * this.width, p = new Uint8Array(v * this.height), l = t.length, y = 0, m = 0, i = 0; m < l;) {
                    switch (t[m++]) {
                        case 0:
                            for (o = b = 0; b < v; o = b += 1) p[i++] = t[m++];
                            break;
                        case 1:
                            for (o = A = 0; A < v; o = A += 1) e = t[m++], a = o < d ? 0 : p[i - d], p[i++] = (e + a) % 256;
                            break;
                        case 2:
                            for (o = C = 0; C < v; o = C += 1) e = t[m++], s = (o - o % d) / d, g = y && p[(y - 1) * v + s * d + o % d], p[i++] = (g + e) % 256;
                            break;
                        case 3:
                            for (o = T = 0; T < v; o = T += 1) e = t[m++], s = (o - o % d) / d, a = o < d ? 0 : p[i - d], g = y && p[(y - 1) * v + s * d + o % d], p[i++] = (e + Math.floor((a + g) / 2)) % 256;
                            break;
                        case 4:
                            for (o = S = 0; S < v; o = S += 1) e = t[m++], s = (o - o % d) / d, a = o < d ? 0 : p[i - d], 0 === y ? g = x = 0 : (g = p[(y - 1) * v + s * d + o % d], x = s && p[(y - 1) * v + (s - 1) * d + o % d]), h = a + g - x, c = Math.abs(h - a), _ = Math.abs(h - g), f = Math.abs(h - x), u = c <= _ && c <= f ? a : _ <= f ? g : x, p[i++] = (e + u) % 256;
                            break;
                        default:
                            throw new Error(r.getError(6018, t[m - 1]))
                    }
                    y++
                }
                return p
            },
            copyToImageData: function(t, e) {
                var i, n, r, s, o, a, l, h, c, u, _;
                if (n = this.colors, c = null, i = this.hasAlphaChannel, this.palette.length && (c = null != (_ = this._decodedPalette) ? _ : this._decodedPalette = this.decodePalette(), n = 4, i = !0), h = (r = t.data || t).length, o = c || e, s = a = 0, 1 === n)
                    for (; s < h;) l = c ? 4 * e[s / 4] : a, u = o[l++], r[s++] = u, r[s++] = u, r[s++] = u, r[s++] = i ? o[l++] : 255, a = l;
                else
                    for (; s < h;) l = c ? 4 * e[s / 4] : a, r[s++] = o[l++], r[s++] = o[l++], r[s++] = o[l++], r[s++] = i ? o[l++] : 255, a = l
            },
            decodePalette: function() {
                var t, e, i, n, r, s, o, a, l;
                for (i = this.palette, s = this.transparency.indexed || [], r = new Uint8Array((s.length || 0) + i.length), n = 0, t = 0, e = o = 0, a = i.length; o < a; e = o += 3) r[n++] = i[e], r[n++] = i[e + 1], r[n++] = i[e + 2], r[n++] = null != (l = s[t++]) ? l : 255;
                return r
            },
            render: function(t) {
                var e, i;
                return t.width = this.width, t.height = this.height, i = (e = t.getContext("2d")).createImageData(this.width, this.height), this.copyToImageData(i, this.decodePixels()), e.putImageData(i, 0, 0)
            }
        }, e.exports = s
    }), {
        "../compression/zlib.min": 25,
        "../core/CCDebug": 49
    }],
    340: [(function(t, e, i) {
        "use strict";
        var n = t("../core/assets/CCAsset"),
            r = t("../core/assets/CCSpriteFrame"),
            s = cc.Class({
                name: "cc.ParticleAsset",
                extends: n,
                properties: {
                    spriteFrame: {
                        default: null,
                        type: r
                    }
                }
            });
        cc.ParticleAsset = e.exports = s
    }), {
        "../core/assets/CCAsset": 56,
        "../core/assets/CCSpriteFrame": 70
    }],
    341: [(function(t, e, i) {
        "use strict";
        var n = t("../core/platform/CCMacro"),
            r = t("./CCParticleAsset"),
            s = t("../core/components/CCRenderComponent"),
            o = t("../compression/ZipUtils"),
            a = t("./CCPNGReader"),
            l = t("./CCTIFFReader"),
            h = t("../core/utils/texture-util"),
            c = (t("../core/renderer/render-flow"), t("./particle-simulator")),
            u = t("../core/assets/material/CCMaterial"),
            _ = t("../core/utils/blend-func");

        function f(t) {
            return t.length > 8 && 137 === t[0] && 80 === t[1] && 78 === t[2] && 71 === t[3] && 13 === t[4] && 10 === t[5] && 26 === t[6] && 10 === t[7] ? n.ImageFormat.PNG : t.length > 2 && (73 === t[0] && 73 === t[1] || 77 === t[0] && 77 === t[1] || 255 === t[0] && 216 === t[1]) ? n.ImageFormat.TIFF : n.ImageFormat.UNKNOWN
        }
        var d = cc.Enum({
                GRAVITY: 0,
                RADIUS: 1
            }),
            p = cc.Enum({
                FREE: 0,
                RELATIVE: 1,
                GROUPED: 2
            }),
            m = {
                preview: {
                    default: !0,
                    editorOnly: !0,
                    notify: !1,
                    animatable: !1,
                    tooltip: !1
                },
                _custom: !1,
                custom: {
                    get: function() {
                        return this._custom
                    },
                    set: function(t) {
                        this._custom !== t && (this._custom = t, this._applyFile())
                    },
                    animatable: !1,
                    tooltip: !1
                },
                _file: {
                    default: null,
                    type: r
                },
                file: {
                    get: function() {
                        return this._file
                    },
                    set: function(t, e) {
                        this._file !== t && (this._file = t, t ? this._applyFile() : this.custom = !0)
                    },
                    animatable: !1,
                    type: r,
                    tooltip: !1
                },
                _spriteFrame: {
                    default: null,
                    type: cc.SpriteFrame
                },
                spriteFrame: {
                    get: function() {
                        return this._spriteFrame
                    },
                    set: function(t, e) {
                        var i = this._renderSpriteFrame;
                        i !== t && (this._renderSpriteFrame = t, t && !t._uuid || (this._spriteFrame = t), (i && i.getTexture()) !== (t && t.getTexture()) && (this._texture = null, this._applySpriteFrame(i)))
                    },
                    type: cc.SpriteFrame,
                    tooltip: !1
                },
                _texture: {
                    default: null,
                    type: cc.Texture2D,
                    editorOnly: !0
                },
                texture: {
                    get: function() {
                        return this._texture
                    },
                    set: function(t) {
                        t && cc.warnID(6017)
                    },
                    type: cc.Texture2D,
                    tooltip: !1,
                    readonly: !0,
                    visible: !1,
                    animatable: !1
                },
                particleCount: {
                    visible: !1,
                    get: function() {
                        return this._simulator.particles.length
                    },
                    readonly: !0
                },
                _stopped: !0,
                stopped: {
                    get: function() {
                        return this._stopped
                    },
                    animatable: !1,
                    visible: !1
                },
                playOnLoad: !0,
                autoRemoveOnFinish: {
                    default: !1,
                    animatable: !1,
                    tooltip: !1
                },
                active: {
                    get: function() {
                        return this._simulator.active
                    },
                    visible: !1
                },
                totalParticles: 150,
                duration: -1,
                emissionRate: 10,
                life: 1,
                lifeVar: 0,
                _startColor: null,
                startColor: {
                    type: cc.Color,
                    get: function() {
                        return this._startColor
                    },
                    set: function(t) {
                        this._startColor.r = t.r, this._startColor.g = t.g, this._startColor.b = t.b, this._startColor.a = t.a
                    }
                },
                _startColorVar: null,
                startColorVar: {
                    type: cc.Color,
                    get: function() {
                        return this._startColorVar
                    },
                    set: function(t) {
                        this._startColorVar.r = t.r, this._startColorVar.g = t.g, this._startColorVar.b = t.b, this._startColorVar.a = t.a
                    }
                },
                _endColor: null,
                endColor: {
                    type: cc.Color,
                    get: function() {
                        return this._endColor
                    },
                    set: function(t) {
                        this._endColor.r = t.r, this._endColor.g = t.g, this._endColor.b = t.b, this._endColor.a = t.a
                    }
                },
                _endColorVar: null,
                endColorVar: {
                    type: cc.Color,
                    get: function() {
                        return this._endColorVar
                    },
                    set: function(t) {
                        this._endColorVar.r = t.r, this._endColorVar.g = t.g, this._endColorVar.b = t.b, this._endColorVar.a = t.a
                    }
                },
                angle: 90,
                angleVar: 20,
                startSize: 50,
                startSizeVar: 0,
                endSize: 0,
                endSizeVar: 0,
                startSpin: 0,
                startSpinVar: 0,
                endSpin: 0,
                endSpinVar: 0,
                sourcePos: cc.Vec2.ZERO,
                posVar: cc.Vec2.ZERO,
                _positionType: {
                    default: p.FREE,
                    formerlySerializedAs: "positionType"
                },
                positionType: {
                    type: p,
                    get: function() {
                        return this._positionType
                    },
                    set: function(t) {
                        var e = this.getMaterial(0);
                        e && e.define("CC_USE_MODEL", t !== p.FREE), this._positionType = t
                    }
                },
                emitterMode: {
                    default: d.GRAVITY,
                    type: d
                },
                gravity: cc.Vec2.ZERO,
                speed: 180,
                speedVar: 50,
                tangentialAccel: 80,
                tangentialAccelVar: 0,
                radialAccel: 0,
                radialAccelVar: 0,
                rotationIsDir: !1,
                startRadius: 0,
                startRadiusVar: 0,
                endRadius: 0,
                endRadiusVar: 0,
                rotatePerS: 0,
                rotatePerSVar: 0
            },
            y = cc.Class({
                name: "cc.ParticleSystem",
                extends: s,
                mixins: [_],
                editor: !1,
                ctor: function() {
                    this.initProperties()
                },
                initProperties: function() {
                    this._previewTimer = null, this._focused = !1, this._simulator = new c(this), this._texture = null, this._startColor = cc.color(255, 255, 255, 255), this._startColorVar = cc.color(0, 0, 0, 0), this._endColor = cc.color(255, 255, 255, 0), this._endColorVar = cc.color(0, 0, 0, 0), this._renderSpriteFrame = null
                },
                properties: m,
                statics: {
                    DURATION_INFINITY: -1,
                    START_SIZE_EQUAL_TO_END_SIZE: -1,
                    START_RADIUS_EQUAL_TO_END_RADIUS: -1,
                    EmitterMode: d,
                    PositionType: p,
                    _PNGReader: a,
                    _TIFFReader: l
                },
                onFocusInEditor: !1,
                onLostFocusInEditor: !1,
                _startPreview: !1,
                _stopPreview: !1,
                _convertTextureToSpriteFrame: !1,
                __preload: function() {
                    if (this._super(), this._custom && this.spriteFrame && !this._renderSpriteFrame) this._applySpriteFrame(this.spriteFrame);
                    else if (this._file) {
                        if (this._custom) !this._texture && this._applyFile();
                        else this._applyFile()
                    }
                    this.playOnLoad && this.resetSystem()
                },
                onEnable: function() {
                    this._super(), this._activateMaterial()
                },
                onDestroy: function() {
                    this.autoRemoveOnFinish && (this.autoRemoveOnFinish = !1), this._buffer && (this._buffer.destroy(), this._buffer = null), this._simulator._uvFilled = 0, this._super()
                },
                lateUpdate: function(t) {
                    this._simulator.finished || this._simulator.step(t)
                },
                addParticle: function() {},
                stopSystem: function() {
                    this._stopped = !0, this._simulator.stop()
                },
                resetSystem: function() {
                    this._stopped = !1, this._simulator.reset(), this._activateMaterial()
                },
                isFull: function() {
                    return this.particleCount >= this.totalParticles
                },
                setTextureWithRect: function(t, e) {
                    t instanceof cc.Texture2D && (this.spriteFrame = new cc.SpriteFrame(t, e))
                },
                _applyFile: function() {
                    var t = this._file;
                    if (t) {
                        var e = this;
                        cc.loader.load(t.nativeUrl, (function(i, n) {
                            !i && n ? e.isValid && (e._plistFile = t.nativeUrl, e._custom || e._initWithDictionary(n), e._spriteFrame ? !e._renderSpriteFrame && e._spriteFrame && e._applySpriteFrame(e.spriteFrame) : t.spriteFrame ? e.spriteFrame = t.spriteFrame : e._custom && e._initTextureWithDictionary(n)) : cc.errorID(6029)
                        }))
                    }
                },
                _initTextureWithDictionary: function(t) {
                    var e = cc.path.changeBasename(this._plistFile, t.textureFileName || "");
                    if (t.textureFileName) h.loadImage(e, (function(e, i) {
                        e ? (t.textureFileName = void 0, this._initTextureWithDictionary(t)) : this.spriteFrame = new cc.SpriteFrame(i)
                    }), this);
                    else if (t.textureImageData) {
                        var i = t.textureImageData;
                        if (!(i && i.length > 0)) return !1;
                        var r = cc.loader.getRes(e);
                        if (!r) {
                            var s = o.unzipBase64AsArray(i, 1);
                            if (!s) return cc.logID(6030), !1;
                            var c = f(s);
                            if (c !== n.ImageFormat.TIFF && c !== n.ImageFormat.PNG) return cc.logID(6031), !1;
                            var u = document.createElement("canvas");
                            if (c === n.ImageFormat.PNG) new a(s).render(u);
                            else l.parseTIFF(s, u);
                            r = h.cacheImage(e, u)
                        }
                        r || cc.logID(6032), this.spriteFrame = new cc.SpriteFrame(r)
                    }
                    return !0
                },
                _initWithDictionary: function(t) {
                    this.totalParticles = parseInt(t.maxParticles || 0), this.life = parseFloat(t.particleLifespan || 0), this.lifeVar = parseFloat(t.particleLifespanVariance || 0);
                    var e = t.emissionRate;
                    this.emissionRate = e || Math.min(this.totalParticles / this.life, Number.MAX_VALUE), this.duration = parseFloat(t.duration || 0), this.srcBlendFactor = parseInt(t.blendFuncSource || n.SRC_ALPHA), this.dstBlendFactor = parseInt(t.blendFuncDestination || n.ONE_MINUS_SRC_ALPHA);
                    var i = this._startColor;
                    i.r = 255 * parseFloat(t.startColorRed || 0), i.g = 255 * parseFloat(t.startColorGreen || 0), i.b = 255 * parseFloat(t.startColorBlue || 0), i.a = 255 * parseFloat(t.startColorAlpha || 0);
                    var r = this._startColorVar;
                    r.r = 255 * parseFloat(t.startColorVarianceRed || 0), r.g = 255 * parseFloat(t.startColorVarianceGreen || 0), r.b = 255 * parseFloat(t.startColorVarianceBlue || 0), r.a = 255 * parseFloat(t.startColorVarianceAlpha || 0);
                    var s = this._endColor;
                    s.r = 255 * parseFloat(t.finishColorRed || 0), s.g = 255 * parseFloat(t.finishColorGreen || 0), s.b = 255 * parseFloat(t.finishColorBlue || 0), s.a = 255 * parseFloat(t.finishColorAlpha || 0);
                    var o = this._endColorVar;
                    if (o.r = 255 * parseFloat(t.finishColorVarianceRed || 0), o.g = 255 * parseFloat(t.finishColorVarianceGreen || 0), o.b = 255 * parseFloat(t.finishColorVarianceBlue || 0), o.a = 255 * parseFloat(t.finishColorVarianceAlpha || 0), this.startSize = parseFloat(t.startParticleSize || 0), this.startSizeVar = parseFloat(t.startParticleSizeVariance || 0), this.endSize = parseFloat(t.finishParticleSize || 0), this.endSizeVar = parseFloat(t.finishParticleSizeVariance || 0), this.positionType = parseFloat(t.positionType || p.RELATIVE), this.sourcePos.x = 0, this.sourcePos.y = 0, this.posVar.x = parseFloat(t.sourcePositionVariancex || 0), this.posVar.y = parseFloat(t.sourcePositionVariancey || 0), this.angle = parseFloat(t.angle || 0), this.angleVar = parseFloat(t.angleVariance || 0), this.startSpin = parseFloat(t.rotationStart || 0), this.startSpinVar = parseFloat(t.rotationStartVariance || 0), this.endSpin = parseFloat(t.rotationEnd || 0), this.endSpinVar = parseFloat(t.rotationEndVariance || 0), this.emitterMode = parseInt(t.emitterType || d.GRAVITY), this.emitterMode === d.GRAVITY) {
                        this.gravity.x = parseFloat(t.gravityx || 0), this.gravity.y = parseFloat(t.gravityy || 0), this.speed = parseFloat(t.speed || 0), this.speedVar = parseFloat(t.speedVariance || 0), this.radialAccel = parseFloat(t.radialAcceleration || 0), this.radialAccelVar = parseFloat(t.radialAccelVariance || 0), this.tangentialAccel = parseFloat(t.tangentialAcceleration || 0), this.tangentialAccelVar = parseFloat(t.tangentialAccelVariance || 0);
                        var a = t.rotationIsDir || "";
                        null !== a ? (a = a.toString().toLowerCase(), this.rotationIsDir = "true" === a || "1" === a) : this.rotationIsDir = !1
                    } else {
                        if (this.emitterMode !== d.RADIUS) return cc.warnID(6009), !1;
                        this.startRadius = parseFloat(t.maxRadius || 0), this.startRadiusVar = parseFloat(t.maxRadiusVariance || 0), this.endRadius = parseFloat(t.minRadius || 0), this.endRadiusVar = parseFloat(t.minRadiusVariance || 0), this.rotatePerS = parseFloat(t.rotatePerSecond || 0), this.rotatePerSVar = parseFloat(t.rotatePerSecondVariance || 0)
                    }
                    return this._initTextureWithDictionary(t), !0
                },
                _onTextureLoaded: function() {
                    this._texture = this._renderSpriteFrame.getTexture(), this._simulator.updateUVs(!0), this._activateMaterial()
                },
                _applySpriteFrame: function(t) {
                    t && t.off && t.off("load", this._onTextureLoaded, this);
                    var e = this._renderSpriteFrame = this._renderSpriteFrame || this._spriteFrame;
                    e && (e.textureLoaded() ? this._onTextureLoaded(null) : (e.once("load", this._onTextureLoaded, this), e.ensureLoadTexture()))
                },
                _activateMaterial: function() {
                    if (!this._texture || !this._texture.loaded) return this.markForUpdateRenderData(!1), this.markForRender(!1), void(this._renderSpriteFrame && this._applySpriteFrame());
                    var t = this.sharedMaterials[0];
                    (t = t ? u.getInstantiatedMaterial(t, this) : u.getInstantiatedBuiltinMaterial("2d-sprite", this)).define("CC_USE_MODEL", this._positionType !== p.FREE), t.setProperty("texture", this._texture), this.setMaterial(0, t), this.markForRender(!0)
                },
                _finishedSimulation: function() {
                    this.resetSystem(), this.stopSystem(), this.disableRender(), this.autoRemoveOnFinish && this._stopped && this.node.destroy()
                }
            });
        cc.ParticleSystem = e.exports = y
    }), {
        "../compression/ZipUtils": 22,
        "../core/assets/material/CCMaterial": 75,
        "../core/components/CCRenderComponent": 106,
        "../core/platform/CCMacro": 203,
        "../core/renderer/render-flow": 248,
        "../core/utils/blend-func": 293,
        "../core/utils/texture-util": 308,
        "./CCPNGReader": 339,
        "./CCParticleAsset": 340,
        "./CCTIFFReader": 342,
        "./particle-simulator": 344,
        "fire-url": void 0
    }],
    342: [(function(t, e, i) {
        "use strict";
        var n = t("../core/CCDebug"),
            r = {
                _littleEndian: !1,
                _tiffData: null,
                _fileDirectories: [],
                getUint8: function(t) {
                    return this._tiffData[t]
                },
                getUint16: function(t) {
                    return this._littleEndian ? this._tiffData[t + 1] << 8 | this._tiffData[t] : this._tiffData[t] << 8 | this._tiffData[t + 1]
                },
                getUint32: function(t) {
                    var e = this._tiffData;
                    return this._littleEndian ? e[t + 3] << 24 | e[t + 2] << 16 | e[t + 1] << 8 | e[t] : e[t] << 24 | e[t + 1] << 16 | e[t + 2] << 8 | e[t + 3]
                },
                checkLittleEndian: function() {
                    var t = this.getUint16(0);
                    if (18761 === t) this.littleEndian = !0;
                    else {
                        if (19789 !== t) throw console.log(t), TypeError(n.getError(6019));
                        this.littleEndian = !1
                    }
                    return this.littleEndian
                },
                hasTowel: function() {
                    if (42 !== this.getUint16(2)) throw RangeError(n.getError(6020));
                    return !0
                },
                getFieldTypeName: function(t) {
                    var e = this.fieldTypeNames;
                    return t in e ? e[t] : null
                },
                getFieldTagName: function(t) {
                    var e = this.fieldTagNames;
                    return t in e ? e[t] : (cc.logID(6021, t), "Tag" + t)
                },
                getFieldTypeLength: function(t) {
                    return -1 !== ["BYTE", "ASCII", "SBYTE", "UNDEFINED"].indexOf(t) ? 1 : -1 !== ["SHORT", "SSHORT"].indexOf(t) ? 2 : -1 !== ["LONG", "SLONG", "FLOAT"].indexOf(t) ? 4 : -1 !== ["RATIONAL", "SRATIONAL", "DOUBLE"].indexOf(t) ? 8 : null
                },
                getFieldValues: function(t, e, i, n) {
                    var r = [],
                        s = this.getFieldTypeLength(e);
                    if (s * i <= 4) !1 === this.littleEndian ? r.push(n >>> 8 * (4 - s)) : r.push(n);
                    else
                        for (var o = 0; o < i; o++) {
                            var a = s * o;
                            s >= 8 ? -1 !== ["RATIONAL", "SRATIONAL"].indexOf(e) ? (r.push(this.getUint32(n + a)), r.push(this.getUint32(n + a + 4))) : cc.logID(8e3) : r.push(this.getBytes(s, n + a))
                        }
                    return "ASCII" === e && r.forEach((function(t, e, i) {
                        i[e] = String.fromCharCode(t)
                    })), r
                },
                getBytes: function(t, e) {
                    if (t <= 0) cc.logID(8001);
                    else {
                        if (t <= 1) return this.getUint8(e);
                        if (t <= 2) return this.getUint16(e);
                        if (t <= 3) return this.getUint32(e) >>> 8;
                        if (t <= 4) return this.getUint32(e);
                        cc.logID(8002)
                    }
                },
                getBits: function(t, e, i) {
                    i = i || 0;
                    var n, r, s = e + Math.floor(i / 8),
                        o = i + t,
                        a = 32 - t;
                    return o <= 0 ? cc.logID(6023) : o <= 8 ? (n = 24 + i, r = this.getUint8(s)) : o <= 16 ? (n = 16 + i, r = this.getUint16(s)) : o <= 32 ? (n = i, r = this.getUint32(s)) : cc.logID(6022), {
                        bits: r << n >>> a,
                        byteOffset: s + Math.floor(o / 8),
                        bitOffset: o % 8
                    }
                },
                parseFileDirectory: function(t) {
                    for (var e = this.getUint16(t), i = [], n = t + 2, r = 0; r < e; n += 12, r++) {
                        var s = this.getUint16(n),
                            o = this.getUint16(n + 2),
                            a = this.getUint32(n + 4),
                            l = this.getUint32(n + 8),
                            h = this.getFieldTagName(s),
                            c = this.getFieldTypeName(o),
                            u = this.getFieldValues(h, c, a, l);
                        i[h] = {
                            type: c,
                            values: u
                        }
                    }
                    this._fileDirectories.push(i);
                    var _ = this.getUint32(n);
                    0 !== _ && this.parseFileDirectory(_)
                },
                clampColorSample: function(t, e) {
                    var i = Math.pow(2, 8 - e);
                    return Math.floor(t * i + (i - 1))
                },
                parseTIFF: function(t, e) {
                    if (e = e || document.createElement("canvas"), this._tiffData = t, this.canvas = e, this.checkLittleEndian(), this.hasTowel()) {
                        var i = this.getUint32(4);
                        this._fileDirectories.length = 0, this.parseFileDirectory(i);
                        var r = this._fileDirectories[0],
                            s = r.ImageWidth.values[0],
                            o = r.ImageLength.values[0];
                        this.canvas.width = s, this.canvas.height = o;
                        var a = [],
                            l = r.Compression ? r.Compression.values[0] : 1,
                            h = r.SamplesPerPixel.values[0],
                            c = [],
                            u = 0,
                            _ = !1;
                        if (r.BitsPerSample.values.forEach((function(t, e, i) {
                                c[e] = {
                                    bitsPerSample: t,
                                    hasBytesPerSample: !1,
                                    bytesPerSample: void 0
                                }, t % 8 == 0 && (c[e].hasBytesPerSample = !0, c[e].bytesPerSample = t / 8), u += t
                            }), this), u % 8 == 0) {
                            _ = !0;
                            var f = u / 8
                        }
                        var d = r.StripOffsets.values,
                            p = d.length;
                        if (r.StripByteCounts) var m = r.StripByteCounts.values;
                        else {
                            if (cc.logID(8003), 1 !== p) throw Error(n.getError(6024));
                            m = [Math.ceil(s * o * u / 8)]
                        }
                        for (var y = 0; y < p; y++) {
                            var v = d[y];
                            a[y] = [];
                            for (var g = m[y], x = 0, b = 0, A = 1, C = !0, T = [], S = 0, w = 0, E = 0; x < g; x += A) switch (l) {
                                case 1:
                                    var M = 0;
                                    for (T = []; M < h; M++) {
                                        if (!c[M].hasBytesPerSample) {
                                            var D = this.getBits(c[M].bitsPerSample, v + x, b);
                                            throw T.push(D.bits), x = D.byteOffset - v, b = D.bitOffset, RangeError(n.getError(6025))
                                        }
                                        var B = c[M].bytesPerSample * M;
                                        T.push(this.getBytes(c[M].bytesPerSample, v + x + B))
                                    }
                                    if (a[y].push(T), !_) throw A = 0, RangeError(n.getError(6026));
                                    A = f;
                                    break;
                                case 2:
                                case 3:
                                case 4:
                                case 5:
                                case 6:
                                case 7:
                                    break;
                                case 32773:
                                    if (C) {
                                        C = !1;
                                        var I = 1,
                                            P = 1,
                                            R = this.getInt8(v + x);
                                        R >= 0 && R <= 127 ? I = R + 1 : R >= -127 && R <= -1 ? P = 1 - R : C = !0
                                    } else {
                                        var O = this.getUint8(v + x);
                                        for (M = 0; M < P; M++) {
                                            if (!c[w].hasBytesPerSample) throw RangeError(n.getError(6025));
                                            E = E << 8 * S | O, ++S === c[w].bytesPerSample && (T.push(E), E = S = 0, w++), w === h && (a[y].push(T), T = [], w = 0)
                                        }
                                        0 === --I && (C = !0)
                                    }
                                    A = 1
                            }
                        }
                        if (e.getContext) {
                            var L = this.canvas.getContext("2d");
                            L.fillStyle = "rgba(255, 255, 255, 0)";
                            var F = r.RowsPerStrip ? r.RowsPerStrip.values[0] : o,
                                N = a.length,
                                V = o % F,
                                k = 0 === V ? F : V,
                                G = F,
                                U = 0,
                                z = r.PhotometricInterpretation.values[0],
                                j = [],
                                W = 0;
                            if (r.ExtraSamples && (W = (j = r.ExtraSamples.values).length), r.ColorMap) var H = r.ColorMap.values,
                                X = Math.pow(2, c[0].bitsPerSample);
                            for (y = 0; y < N; y++) {
                                y + 1 === N && (G = k);
                                for (var Y = a[y].length, q = U * y, J = 0, Z = 0; Z < Y; J++)
                                    for (var K = 0; K < s; K++, Z++) {
                                        var Q = a[y][Z],
                                            $ = 0,
                                            tt = 0,
                                            et = 0,
                                            it = 1;
                                        if (W > 0)
                                            for (var nt = 0; nt < W; nt++)
                                                if (1 === j[nt] || 2 === j[nt]) {
                                                    it = Q[3 + nt] / 256;
                                                    break
                                                }
                                        switch (z) {
                                            case 0:
                                                if (c[0].hasBytesPerSample) var rt = Math.pow(16, 2 * c[0].bytesPerSample);
                                                Q.forEach((function(t, e, i) {
                                                    i[e] = rt - t
                                                }));
                                            case 1:
                                                $ = tt = et = this.clampColorSample(Q[0], c[0].bitsPerSample);
                                                break;
                                            case 2:
                                                $ = this.clampColorSample(Q[0], c[0].bitsPerSample), tt = this.clampColorSample(Q[1], c[1].bitsPerSample), et = this.clampColorSample(Q[2], c[2].bitsPerSample);
                                                break;
                                            case 3:
                                                if (void 0 === H) throw Error(n.getError(6027));
                                                var st = Q[0];
                                                $ = this.clampColorSample(H[st], 16), tt = this.clampColorSample(H[X + st], 16), et = this.clampColorSample(H[2 * X + st], 16);
                                                break;
                                            default:
                                                throw RangeError(n.getError(6028, z))
                                        }
                                        L.fillStyle = "rgba(" + $ + ", " + tt + ", " + et + ", " + it + ")", L.fillRect(K, q + J, 1, 1)
                                    }
                                U = G
                            }
                        }
                        return this.canvas
                    }
                },
                fieldTagNames: {
                    315: "Artist",
                    258: "BitsPerSample",
                    265: "CellLength",
                    264: "CellWidth",
                    320: "ColorMap",
                    259: "Compression",
                    33432: "Copyright",
                    306: "DateTime",
                    338: "ExtraSamples",
                    266: "FillOrder",
                    289: "FreeByteCounts",
                    288: "FreeOffsets",
                    291: "GrayResponseCurve",
                    290: "GrayResponseUnit",
                    316: "HostComputer",
                    270: "ImageDescription",
                    257: "ImageLength",
                    256: "ImageWidth",
                    271: "Make",
                    281: "MaxSampleValue",
                    280: "MinSampleValue",
                    272: "Model",
                    254: "NewSubfileType",
                    274: "Orientation",
                    262: "PhotometricInterpretation",
                    284: "PlanarConfiguration",
                    296: "ResolutionUnit",
                    278: "RowsPerStrip",
                    277: "SamplesPerPixel",
                    305: "Software",
                    279: "StripByteCounts",
                    273: "StripOffsets",
                    255: "SubfileType",
                    263: "Threshholding",
                    282: "XResolution",
                    283: "YResolution",
                    326: "BadFaxLines",
                    327: "CleanFaxData",
                    343: "ClipPath",
                    328: "ConsecutiveBadFaxLines",
                    433: "Decode",
                    434: "DefaultImageColor",
                    269: "DocumentName",
                    336: "DotRange",
                    321: "HalftoneHints",
                    346: "Indexed",
                    347: "JPEGTables",
                    285: "PageName",
                    297: "PageNumber",
                    317: "Predictor",
                    319: "PrimaryChromaticities",
                    532: "ReferenceBlackWhite",
                    339: "SampleFormat",
                    559: "StripRowCounts",
                    330: "SubIFDs",
                    292: "T4Options",
                    293: "T6Options",
                    325: "TileByteCounts",
                    323: "TileLength",
                    324: "TileOffsets",
                    322: "TileWidth",
                    301: "TransferFunction",
                    318: "WhitePoint",
                    344: "XClipPathUnits",
                    286: "XPosition",
                    529: "YCbCrCoefficients",
                    531: "YCbCrPositioning",
                    530: "YCbCrSubSampling",
                    345: "YClipPathUnits",
                    287: "YPosition",
                    37378: "ApertureValue",
                    40961: "ColorSpace",
                    36868: "DateTimeDigitized",
                    36867: "DateTimeOriginal",
                    34665: "Exif IFD",
                    36864: "ExifVersion",
                    33434: "ExposureTime",
                    41728: "FileSource",
                    37385: "Flash",
                    40960: "FlashpixVersion",
                    33437: "FNumber",
                    42016: "ImageUniqueID",
                    37384: "LightSource",
                    37500: "MakerNote",
                    37377: "ShutterSpeedValue",
                    37510: "UserComment",
                    33723: "IPTC",
                    34675: "ICC Profile",
                    700: "XMP",
                    42112: "GDAL_METADATA",
                    42113: "GDAL_NODATA",
                    34377: "Photoshop"
                },
                fieldTypeNames: {
                    1: "BYTE",
                    2: "ASCII",
                    3: "SHORT",
                    4: "LONG",
                    5: "RATIONAL",
                    6: "SBYTE",
                    7: "UNDEFINED",
                    8: "SSHORT",
                    9: "SLONG",
                    10: "SRATIONAL",
                    11: "FLOAT",
                    12: "DOUBLE"
                }
            };
        e.exports = r
    }), {
        "../core/CCDebug": 49
    }],
    343: [(function(t, e, i) {
        "use strict";
        t("./CCParticleAsset"), t("./CCParticleSystem"), t("./particle-simulator"), t("./particle-system-assembler")
    }), {
        "./CCParticleAsset": 340,
        "./CCParticleSystem": 341,
        "./particle-simulator": 344,
        "./particle-system-assembler": 345
    }],
    344: [(function(t, e, i) {
        "use strict";
        var n = t("../core/utils/affine-transform"),
            r = t("../core/platform/js"),
            s = t("../core/utils/misc"),
            o = cc.v2(0, 0),
            a = n.create(),
            l = cc.v2(),
            h = cc.v2(),
            c = cc.v2(),
            u = cc.v2(),
            _ = function() {
                this.pos = cc.v2(0, 0), this.startPos = cc.v2(0, 0), this.color = cc.color(0, 0, 0, 255), this.deltaColor = {
                    r: 0,
                    g: 0,
                    b: 0,
                    a: 255
                }, this.size = 0, this.deltaSize = 0, this.rotation = 0, this.deltaRotation = 0, this.timeToLive = 0, this.drawPos = cc.v2(0, 0), this.dir = cc.v2(0, 0), this.radialAccel = 0, this.tangentialAccel = 0, this.angle = 0, this.degreesPerSecond = 0, this.radius = 0, this.deltaRadius = 0
            },
            f = new r.Pool(function(t) {
                t.pos.set(o), t.startPos.set(o), t.color._val = 4278190080, t.deltaColor.r = t.deltaColor.g = t.deltaColor.b = 0, t.deltaColor.a = 255, t.size = 0, t.deltaSize = 0, t.rotation = 0, t.deltaRotation = 0, t.timeToLive = 0, t.drawPos.set(o), t.dir.set(o), t.radialAccel = 0, t.tangentialAccel = 0, t.angle = 0, t.degreesPerSecond = 0, t.radius = 0, t.deltaRadius = 0
            }, 1024);
        f.get = function() {
            return this._get() || new _
        };
        var d = function(t) {
            this.sys = t, this.particles = [], this.active = !1, this.readyToPlay = !0, this.finished = !1, this.elapsed = 0, this.emitCounter = 0, this._uvFilled = 0
        };

        function p(t) {
            for (var e = 0, i = t; i;) e += i.angle, i = i.parent;
            return e
        }
        d.prototype.stop = function() {
            this.active = !1, this.readyToPlay = !1, this.elapsed = this.sys.duration, this.emitCounter = 0
        }, d.prototype.reset = function() {
            this.active = !0, this.readyToPlay = !0, this.elapsed = 0, this.emitCounter = 0, this.finished = !1;
            for (var t = this.particles, e = 0; e < t.length; ++e) f.put(t[e]);
            t.length = 0
        }, d.prototype.emitParticle = function(t) {
            var e = this.sys,
                i = s.clampf,
                n = f.get();
            this.particles.push(n), n.timeToLive = e.life + e.lifeVar * (Math.random() - .5) * 2;
            var r = n.timeToLive = Math.max(0, n.timeToLive);
            n.pos.x = e.sourcePos.x + e.posVar.x * (Math.random() - .5) * 2, n.pos.y = e.sourcePos.y + e.posVar.y * (Math.random() - .5) * 2;
            var o, a, l, h, c = e._startColor,
                u = e._startColorVar,
                _ = e._endColor,
                d = e._endColorVar;
            n.color.r = o = i(c.r + u.r * (Math.random() - .5) * 2, 0, 255), n.color.g = a = i(c.g + u.g * (Math.random() - .5) * 2, 0, 255), n.color.b = l = i(c.b + u.b * (Math.random() - .5) * 2, 0, 255), n.color.a = h = i(c.a + u.a * (Math.random() - .5) * 2, 0, 255), n.deltaColor.r = (i(_.r + d.r * (Math.random() - .5) * 2, 0, 255) - o) / r, n.deltaColor.g = (i(_.g + d.g * (Math.random() - .5) * 2, 0, 255) - a) / r, n.deltaColor.b = (i(_.b + d.b * (Math.random() - .5) * 2, 0, 255) - l) / r, n.deltaColor.a = (i(_.a + d.a * (Math.random() - .5) * 2, 0, 255) - h) / r;
            var m = e.startSize + e.startSizeVar * (Math.random() - .5) * 2;
            if (m = Math.max(0, m), n.size = m, e.endSize === cc.ParticleSystem.START_SIZE_EQUAL_TO_END_SIZE) n.deltaSize = 0;
            else {
                var y = e.endSize + e.endSizeVar * (Math.random() - .5) * 2;
                y = Math.max(0, y), n.deltaSize = (y - m) / r
            }
            var v = e.startSpin + e.startSpinVar * (Math.random() - .5) * 2,
                g = e.endSpin + e.endSpinVar * (Math.random() - .5) * 2;
            n.rotation = v, n.deltaRotation = (g - v) / r, n.startPos.x = t.x, n.startPos.y = t.y;
            var x = p(e.node),
                b = e.positionType === cc.ParticleSystem.PositionType.FREE ? e.angle + x : e.angle,
                A = s.degreesToRadians(b + e.angleVar * (Math.random() - .5) * 2);
            if (e.emitterMode === cc.ParticleSystem.EmitterMode.GRAVITY) {
                var C = e.speed + e.speedVar * (Math.random() - .5) * 2;
                n.dir.x = Math.cos(A), n.dir.y = Math.sin(A), n.dir.mulSelf(C), n.radialAccel = e.radialAccel + e.radialAccelVar * (Math.random() - .5) * 2, n.tangentialAccel = e.tangentialAccel + e.tangentialAccelVar * (Math.random() - .5) * 2, e.rotationIsDir && (n.rotation = -s.radiansToDegrees(Math.atan2(n.dir.y, n.dir.x)))
            } else {
                var T = e.startRadius + e.startRadiusVar * (Math.random() - .5) * 2,
                    S = e.endRadius + e.endRadiusVar * (Math.random() - .5) * 2;
                n.radius = T, n.deltaRadius = e.endRadius === cc.ParticleSystem.START_RADIUS_EQUAL_TO_END_RADIUS ? 0 : (S - T) / r, n.angle = A, n.degreesPerSecond = s.degreesToRadians(e.rotatePerS + e.rotatePerSVar * (Math.random() - .5) * 2)
            }
        }, d.prototype.updateUVs = function(t) {
            var e = this.sys._assembler;
            if (e) {
                var i = e.getBuffer();
                if (i && this.sys._renderSpriteFrame) {
                    for (var n = 4 * e._vfmt._bytes / 4, r = i._vData, s = this.sys._renderSpriteFrame.uv, o = t ? 0 : this._uvFilled, a = this.particles.length, l = o; l < a; l++) {
                        var h = l * n;
                        r[h + 2] = s[0], r[h + 3] = s[1], r[h + 7] = s[2], r[h + 8] = s[3], r[h + 12] = s[4], r[h + 13] = s[5], r[h + 17] = s[6], r[h + 18] = s[7]
                    }
                    this._uvFilled = a
                }
            }
        }, d.prototype.updateParticleBuffer = function(t, e, i, n) {
            var r = i._vData,
                o = i._uintVData,
                a = e.x,
                l = e.y,
                h = t.size / 2;
            if (t.rotation) {
                var c = -h,
                    u = -h,
                    _ = h,
                    f = h,
                    d = -s.degreesToRadians(t.rotation),
                    p = Math.cos(d),
                    m = Math.sin(d);
                r[n] = c * p - u * m + a, r[n + 1] = c * m + u * p + l, r[n + 5] = _ * p - u * m + a, r[n + 6] = _ * m + u * p + l, r[n + 10] = c * p - f * m + a, r[n + 11] = c * m + f * p + l, r[n + 15] = _ * p - f * m + a, r[n + 16] = _ * m + f * p + l
            } else r[n] = a - h, r[n + 1] = l - h, r[n + 5] = a + h, r[n + 6] = l - h, r[n + 10] = a - h, r[n + 11] = l + h, r[n + 15] = a + h, r[n + 16] = l + h;
            o[n + 4] = t.color._val, o[n + 9] = t.color._val, o[n + 14] = t.color._val, o[n + 19] = t.color._val
        }, d.prototype.step = function(t) {
            var e = this.sys,
                i = e.node,
                r = this.particles,
                _ = 4 * this.sys._assembler._vfmt._bytes / 4;
            if (i._updateWorldMatrix(), a = n.identity(), e.positionType === cc.ParticleSystem.PositionType.FREE) {
                var d = i._worldMatrix.m;
                a.tx = d[12], a.ty = d[13], n.transformVec2(l, o, a)
            } else if (e.positionType === cc.ParticleSystem.PositionType.RELATIVE) {
                var p = s.degreesToRadians(-i.angle),
                    m = Math.cos(p),
                    y = Math.sin(p);
                a = n.create(m, -y, y, m, 0, 0), l.x = i.x, l.y = i.y
            }
            n.invert(a, a);
            var v = a;
            if (this.active && e.emissionRate) {
                var g = 1 / e.emissionRate;
                for (r.length < e.totalParticles && (this.emitCounter += t); r.length < e.totalParticles && this.emitCounter > g;) this.emitParticle(l), this.emitCounter -= g;
                this.elapsed += t, -1 !== e.duration && e.duration < this.elapsed && e.stopSystem()
            }
            var x = e._assembler.getBuffer(),
                b = r.length;
            x.reset(), x.request(4 * b, 6 * b), b > this._uvFilled && this.updateUVs();
            for (var A = 0; A < r.length;) {
                h.x = h.y = c.x = c.y = u.x = u.y = 0;
                var C = r[A];
                if (C.timeToLive -= t, C.timeToLive > 0) {
                    if (e.emitterMode === cc.ParticleSystem.EmitterMode.GRAVITY) {
                        var T = u,
                            S = h,
                            w = c;
                        (C.pos.x || C.pos.y) && (S.set(C.pos), S.normalizeSelf()), w.set(S), S.mulSelf(C.radialAccel);
                        var E = w.x;
                        w.x = -w.y, w.y = E, w.mulSelf(C.tangentialAccel), T.set(S), T.addSelf(w), T.addSelf(e.gravity), T.mulSelf(t), C.dir.addSelf(T), T.set(C.dir), T.mulSelf(t), C.pos.addSelf(T)
                    } else C.angle += C.degreesPerSecond * t, C.radius += C.deltaRadius * t, C.pos.x = -Math.cos(C.angle) * C.radius, C.pos.y = -Math.sin(C.angle) * C.radius;
                    C.color.r += C.deltaColor.r * t, C.color.g += C.deltaColor.g * t, C.color.b += C.deltaColor.b * t, C.color.a += C.deltaColor.a * t, C.size += C.deltaSize * t, C.size < 0 && (C.size = 0), C.rotation += C.deltaRotation * t;
                    var M = h,
                        D = c;
                    if (e.positionType === cc.ParticleSystem.PositionType.FREE) D.set(C.startPos), D.negSelf(), M.set(C.pos), M.subSelf(D);
                    else if (e.positionType === cc.ParticleSystem.PositionType.RELATIVE) {
                        var B = u;
                        n.transformVec2(D, l, v), n.transformVec2(B, C.startPos, v), D.subSelf(B), M.set(C.pos), M.subSelf(D)
                    } else M.set(C.pos);
                    var I = _ * A;
                    this.updateParticleBuffer(C, M, x, I), ++A
                } else {
                    var P = r[A];
                    A !== r.length - 1 && (r[A] = r[r.length - 1]), f.put(P), r.length--
                }
            }
            r.length > 0 ? (x.uploadData(), e._assembler._ia._count = 6 * r.length) : this.active || this.readyToPlay || (this.finished = !0, e._finishedSimulation())
        }, e.exports = d
    }), {
        "../core/platform/js": 218,
        "../core/utils/affine-transform": 290,
        "../core/utils/misc": 300
    }],
    345: [(function(t, e, i) {
        "use strict";
        var n = s(t("../core/renderer/assembler")),
            r = s(t("../renderer/core/input-assembler"));

        function s(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }

        function o(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }

        function a(t, e) {
            if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
            return !e || "object" != typeof e && "function" != typeof e ? t : e
        }

        function l(t, e) {
            if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e);
            t.prototype = Object.create(e && e.prototype, {
                constructor: {
                    value: t,
                    enumerable: !1,
                    writable: !0,
                    configurable: !0
                }
            }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e)
        }
        var h = t("./CCParticleSystem"),
            c = t("../core/renderer/"),
            u = t("../core/renderer/webgl/quad-buffer"),
            _ = t("../core/renderer/webgl/vertex-format").vfmtPosUvColor,
            f = (function(t) {
                function e(i) {
                    o(this, e);
                    var n = a(this, t.call(this, i));
                    return n._buffer = null, n._ia = null, n._vfmt = _, n
                }
                return l(e, t), e.prototype.getBuffer = function() {
                    return this._buffer || (this._buffer = new u(c._handle, _), this._ia = new r.default, this._ia._vertexBuffer = this._buffer._vb, this._ia._indexBuffer = this._buffer._ib, this._ia._start = 0, this._ia._count = 0), this._buffer
                }, e.prototype.fillBuffers = function(t, e) {
                    this._ia && (e.node = t.node, e.material = t.sharedMaterials[0], e._flushIA(this._ia))
                }, e
            })(n.default);
        n.default.register(h, f), e.exports = f
    }), {
        "../core/renderer/": 247,
        "../core/renderer/assembler": 227,
        "../core/renderer/webgl/quad-buffer": 285,
        "../core/renderer/webgl/vertex-format": 288,
        "../renderer/core/input-assembler": 350,
        "./CCParticleSystem": 341
    }],
    346: [(function(t, e, i) {
        "use strict";
        var n, r, s, o = 512,
            a = 513,
            l = 514,
            h = 515,
            c = 516,
            u = 517,
            _ = 518,
            f = 519,
            d = 32774,
            p = 32778,
            m = 32779,
            y = 0,
            v = 1,
            g = 768,
            x = 769,
            b = 774,
            A = 775,
            C = 770,
            T = 771,
            S = 772,
            w = 773,
            E = 32769,
            M = 32770,
            D = 32771,
            B = 32772,
            I = 776,
            P = 7680,
            R = 7681,
            O = 7682,
            L = 34055,
            F = 7683,
            N = 34056,
            V = 5386,
            k = 0,
            G = 1028,
            U = 1029;
        (function(t) {
            t[t.COMPRESSED_RGB_S3TC_DXT1_EXT = 33776] = "COMPRESSED_RGB_S3TC_DXT1_EXT", t[t.COMPRESSED_RGBA_S3TC_DXT1_EXT = 33777] = "COMPRESSED_RGBA_S3TC_DXT1_EXT", t[t.COMPRESSED_RGBA_S3TC_DXT3_EXT = 33778] = "COMPRESSED_RGBA_S3TC_DXT3_EXT", t[t.COMPRESSED_RGBA_S3TC_DXT5_EXT = 33779] = "COMPRESSED_RGBA_S3TC_DXT5_EXT", t[t.COMPRESSED_SRGB_S3TC_DXT1_EXT = 35916] = "COMPRESSED_SRGB_S3TC_DXT1_EXT", t[t.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT = 35917] = "COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT", t[t.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT = 35918] = "COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT", t[t.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT = 35919] = "COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT", t[t.COMPRESSED_RGB_PVRTC_4BPPV1_IMG = 35840] = "COMPRESSED_RGB_PVRTC_4BPPV1_IMG", t[t.COMPRESSED_RGB_PVRTC_2BPPV1_IMG = 35841] = "COMPRESSED_RGB_PVRTC_2BPPV1_IMG", t[t.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG = 35842] = "COMPRESSED_RGBA_PVRTC_4BPPV1_IMG", t[t.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG = 35843] = "COMPRESSED_RGBA_PVRTC_2BPPV1_IMG", t[t.COMPRESSED_RGB_ETC1_WEBGL = 36196] = "COMPRESSED_RGB_ETC1_WEBGL"
        })(n || (n = {})), (function(t) {
            t[t.UNKNOWN = 0] = "UNKNOWN", t[t.BUFFER = 1] = "BUFFER", t[t.TEXTURE = 2] = "TEXTURE", t[t.TEXTURE_VIEW = 3] = "TEXTURE_VIEW", t[t.RENDER_PASS = 4] = "RENDER_PASS", t[t.FRAMEBUFFER = 5] = "FRAMEBUFFER", t[t.SAMPLER = 6] = "SAMPLER", t[t.SHADER = 7] = "SHADER", t[t.PIPELINE_LAYOUT = 8] = "PIPELINE_LAYOUT", t[t.PIPELINE_STATE = 9] = "PIPELINE_STATE", t[t.BINDING_LAYOUT = 10] = "BINDING_LAYOUT", t[t.INPUT_ASSEMBLER = 11] = "INPUT_ASSEMBLER", t[t.COMMAND_ALLOCATOR = 12] = "COMMAND_ALLOCATOR", t[t.COMMAND_BUFFER = 13] = "COMMAND_BUFFER", t[t.QUEUE = 14] = "QUEUE", t[t.WINDOW = 15] = "WINDOW"
        })(r || (r = {})), (function(t) {
            t[t.UNREADY = 0] = "UNREADY", t[t.FAILED = 1] = "FAILED", t[t.SUCCESS = 2] = "SUCCESS"
        })(s || (s = {}));
        var z, j, W, H, X, Y, q, J, Z, K, Q, $, tt, et, it, nt, rt, st, ot, at, lt, ht, ct, ut, _t, ft, dt, pt, mt, yt, vt, gt, xt, bt, At;
        (function() {
            function t(t) {
                this._gfxType = r.UNKNOWN, this._status = s.UNREADY, this._gfxType = t
            }
            Object.defineProperty(t.prototype, "gfxType", {
                get: function() {
                    return this._gfxType
                },
                enumerable: !0,
                configurable: !0
            }), Object.defineProperty(t.prototype, "status", {
                get: function() {
                    return this._status
                },
                enumerable: !0,
                configurable: !0
            })
        })();
        (function(t) {
            t.ATTR_POSITION = "a_position", t.ATTR_NORMAL = "a_normal", t.ATTR_TANGENT = "a_tangent", t.ATTR_BITANGENT = "a_bitangent", t.ATTR_WEIGHTS = "a_weights", t.ATTR_JOINTS = "a_joints", t.ATTR_COLOR = "a_color", t.ATTR_COLOR1 = "a_color1", t.ATTR_COLOR2 = "a_color2", t.ATTR_TEX_COORD = "a_texCoord", t.ATTR_TEX_COORD1 = "a_texCoord1", t.ATTR_TEX_COORD2 = "a_texCoord2", t.ATTR_TEX_COORD3 = "a_texCoord3", t.ATTR_TEX_COORD4 = "a_texCoord4", t.ATTR_TEX_COORD5 = "a_texCoord5", t.ATTR_TEX_COORD6 = "a_texCoord6", t.ATTR_TEX_COORD7 = "a_texCoord7", t.ATTR_TEX_COORD8 = "a_texCoord8"
        })(z || (z = {})), (function(t) {
            t[t.UNKNOWN = 0] = "UNKNOWN", t[t.BOOL = 1] = "BOOL", t[t.BOOL2 = 2] = "BOOL2", t[t.BOOL3 = 3] = "BOOL3", t[t.BOOL4 = 4] = "BOOL4", t[t.INT = 5] = "INT", t[t.INT2 = 6] = "INT2", t[t.INT3 = 7] = "INT3", t[t.INT4 = 8] = "INT4", t[t.UINT = 9] = "UINT", t[t.UINT2 = 10] = "UINT2", t[t.UINT3 = 11] = "UINT3", t[t.UINT4 = 12] = "UINT4", t[t.FLOAT = 13] = "FLOAT", t[t.FLOAT2 = 14] = "FLOAT2", t[t.FLOAT3 = 15] = "FLOAT3", t[t.FLOAT4 = 16] = "FLOAT4", t[t.COLOR4 = 17] = "COLOR4", t[t.MAT2 = 18] = "MAT2", t[t.MAT2X3 = 19] = "MAT2X3", t[t.MAT2X4 = 20] = "MAT2X4", t[t.MAT3X2 = 21] = "MAT3X2", t[t.MAT3 = 22] = "MAT3", t[t.MAT3X4 = 23] = "MAT3X4", t[t.MAT4X2 = 24] = "MAT4X2", t[t.MAT4X3 = 25] = "MAT4X3", t[t.MAT4 = 26] = "MAT4", t[t.SAMPLER1D = 27] = "SAMPLER1D", t[t.SAMPLER1D_ARRAY = 28] = "SAMPLER1D_ARRAY", t[t.SAMPLER2D = 29] = "SAMPLER2D", t[t.SAMPLER2D_ARRAY = 30] = "SAMPLER2D_ARRAY", t[t.SAMPLER3D = 31] = "SAMPLER3D", t[t.SAMPLER_CUBE = 32] = "SAMPLER_CUBE", t[t.COUNT = 33] = "COUNT"
        })(j || (j = {})), (function(t) {
            t[t.UNKNOWN = 0] = "UNKNOWN", t[t.A8 = 1] = "A8", t[t.L8 = 2] = "L8", t[t.LA8 = 3] = "LA8", t[t.R8 = 4] = "R8", t[t.R8SN = 5] = "R8SN", t[t.R8UI = 6] = "R8UI", t[t.R8I = 7] = "R8I", t[t.R16F = 8] = "R16F", t[t.R16UI = 9] = "R16UI", t[t.R16I = 10] = "R16I", t[t.R32F = 11] = "R32F", t[t.R32UI = 12] = "R32UI", t[t.R32I = 13] = "R32I", t[t.RG8 = 14] = "RG8", t[t.RG8SN = 15] = "RG8SN", t[t.RG8UI = 16] = "RG8UI", t[t.RG8I = 17] = "RG8I", t[t.RG16F = 18] = "RG16F", t[t.RG16UI = 19] = "RG16UI", t[t.RG16I = 20] = "RG16I", t[t.RG32F = 21] = "RG32F", t[t.RG32UI = 22] = "RG32UI", t[t.RG32I = 23] = "RG32I", t[t.RGB8 = 24] = "RGB8", t[t.SRGB8 = 25] = "SRGB8", t[t.RGB8SN = 26] = "RGB8SN", t[t.RGB8UI = 27] = "RGB8UI", t[t.RGB8I = 28] = "RGB8I", t[t.RGB16F = 29] = "RGB16F", t[t.RGB16UI = 30] = "RGB16UI", t[t.RGB16I = 31] = "RGB16I", t[t.RGB32F = 32] = "RGB32F", t[t.RGB32UI = 33] = "RGB32UI", t[t.RGB32I = 34] = "RGB32I", t[t.RGBA8 = 35] = "RGBA8", t[t.SRGB8_A8 = 36] = "SRGB8_A8", t[t.RGBA8SN = 37] = "RGBA8SN", t[t.RGBA8UI = 38] = "RGBA8UI", t[t.RGBA8I = 39] = "RGBA8I", t[t.RGBA16F = 40] = "RGBA16F", t[t.RGBA16UI = 41] = "RGBA16UI", t[t.RGBA16I = 42] = "RGBA16I", t[t.RGBA32F = 43] = "RGBA32F", t[t.RGBA32UI = 44] = "RGBA32UI", t[t.RGBA32I = 45] = "RGBA32I", t[t.R5G6B5 = 46] = "R5G6B5", t[t.R11G11B10F = 47] = "R11G11B10F", t[t.RGB5A1 = 48] = "RGB5A1", t[t.RGBA4 = 49] = "RGBA4", t[t.RGB10A2 = 50] = "RGB10A2", t[t.RGB10A2UI = 51] = "RGB10A2UI", t[t.RGB9E5 = 52] = "RGB9E5", t[t.D16 = 53] = "D16", t[t.D16S8 = 54] = "D16S8", t[t.D24 = 55] = "D24", t[t.D24S8 = 56] = "D24S8", t[t.D32F = 57] = "D32F", t[t.D32F_S8 = 58] = "D32F_S8", t[t.BC1 = 59] = "BC1", t[t.BC1_ALPHA = 60] = "BC1_ALPHA", t[t.BC1_SRGB = 61] = "BC1_SRGB", t[t.BC1_SRGB_ALPHA = 62] = "BC1_SRGB_ALPHA", t[t.BC2 = 63] = "BC2", t[t.BC2_SRGB = 64] = "BC2_SRGB", t[t.BC3 = 65] = "BC3", t[t.BC3_SRGB = 66] = "BC3_SRGB", t[t.BC4 = 67] = "BC4", t[t.BC4_SNORM = 68] = "BC4_SNORM", t[t.BC5 = 69] = "BC5", t[t.BC5_SNORM = 70] = "BC5_SNORM", t[t.BC6H_UF16 = 71] = "BC6H_UF16", t[t.BC6H_SF16 = 72] = "BC6H_SF16", t[t.BC7 = 73] = "BC7", t[t.BC7_SRGB = 74] = "BC7_SRGB", t[t.ETC_RGB8 = 75] = "ETC_RGB8", t[t.ETC2_RGB8 = 76] = "ETC2_RGB8", t[t.ETC2_SRGB8 = 77] = "ETC2_SRGB8", t[t.ETC2_RGB8_A1 = 78] = "ETC2_RGB8_A1", t[t.ETC2_SRGB8_A1 = 79] = "ETC2_SRGB8_A1", t[t.ETC2_RGBA8 = 80] = "ETC2_RGBA8", t[t.ETC2_SRGB8_A8 = 81] = "ETC2_SRGB8_A8", t[t.EAC_R11 = 82] = "EAC_R11", t[t.EAC_R11SN = 83] = "EAC_R11SN", t[t.EAC_RG11 = 84] = "EAC_RG11", t[t.EAC_RG11SN = 85] = "EAC_RG11SN", t[t.PVRTC_RGB2 = 86] = "PVRTC_RGB2", t[t.PVRTC_RGBA2 = 87] = "PVRTC_RGBA2", t[t.PVRTC_RGB4 = 88] = "PVRTC_RGB4", t[t.PVRTC_RGBA4 = 89] = "PVRTC_RGBA4", t[t.PVRTC2_2BPP = 90] = "PVRTC2_2BPP", t[t.PVRTC2_4BPP = 91] = "PVRTC2_4BPP"
        })(W || (W = {})), (function(t) {
            t[t.NONE = 0] = "NONE", t[t.TRANSFER_SRC = 1] = "TRANSFER_SRC", t[t.TRANSFER_DST = 2] = "TRANSFER_DST", t[t.INDEX = 4] = "INDEX", t[t.VERTEX = 8] = "VERTEX", t[t.UNIFORM = 16] = "UNIFORM", t[t.STORAGE = 32] = "STORAGE", t[t.INDIRECT = 64] = "INDIRECT"
        })(H || (H = {})), (function(t) {
            t[t.NONE = 0] = "NONE", t[t.DEVICE = 1] = "DEVICE", t[t.HOST = 2] = "HOST"
        })(X || (X = {})), (function(t) {
            t[t.NONE = 0] = "NONE", t[t.READ = 1] = "READ", t[t.WRITE = 2] = "WRITE"
        })(Y || (Y = {})), (function(t) {
            t[t.POINT_LIST = 0] = "POINT_LIST", t[t.LINE_LIST = 1] = "LINE_LIST", t[t.LINE_STRIP = 2] = "LINE_STRIP", t[t.LINE_LOOP = 3] = "LINE_LOOP", t[t.LINE_LIST_ADJACENCY = 4] = "LINE_LIST_ADJACENCY", t[t.LINE_STRIP_ADJACENCY = 5] = "LINE_STRIP_ADJACENCY", t[t.ISO_LINE_LIST = 6] = "ISO_LINE_LIST", t[t.TRIANGLE_LIST = 7] = "TRIANGLE_LIST", t[t.TRIANGLE_STRIP = 8] = "TRIANGLE_STRIP", t[t.TRIANGLE_FAN = 9] = "TRIANGLE_FAN", t[t.TRIANGLE_LIST_ADJACENCY = 10] = "TRIANGLE_LIST_ADJACENCY", t[t.TRIANGLE_STRIP_ADJACENCY = 11] = "TRIANGLE_STRIP_ADJACENCY", t[t.TRIANGLE_PATCH_ADJACENCY = 12] = "TRIANGLE_PATCH_ADJACENCY", t[t.QUAD_PATCH_LIST = 13] = "QUAD_PATCH_LIST"
        })(q || (q = {})), (function(t) {
            t[t.FILL = 0] = "FILL", t[t.POINT = 1] = "POINT", t[t.LINE = 2] = "LINE"
        })(J || (J = {})), (function(t) {
            t[t.GOURAND = 0] = "GOURAND", t[t.FLAT = 1] = "FLAT"
        })(Z || (Z = {})), (function(t) {
            t[t.NONE = 0] = "NONE", t[t.FRONT = 1] = "FRONT", t[t.BACK = 2] = "BACK"
        })(K || (K = {})), (function(t) {
            t[t.NEVER = 0] = "NEVER", t[t.LESS = 1] = "LESS", t[t.EQUAL = 2] = "EQUAL", t[t.LESS_EQUAL = 3] = "LESS_EQUAL", t[t.GREATER = 4] = "GREATER", t[t.NOT_EQUAL = 5] = "NOT_EQUAL", t[t.GREATER_EQUAL = 6] = "GREATER_EQUAL", t[t.ALWAYS = 7] = "ALWAYS"
        })(Q || (Q = {})), (function(t) {
            t[t.ZERO = 0] = "ZERO", t[t.KEEP = 1] = "KEEP", t[t.REPLACE = 2] = "REPLACE", t[t.INCR = 3] = "INCR", t[t.DECR = 4] = "DECR", t[t.INVERT = 5] = "INVERT", t[t.INCR_WRAP = 6] = "INCR_WRAP", t[t.DECR_WRAP = 7] = "DECR_WRAP"
        })($ || ($ = {})), (function(t) {
            t[t.ADD = 0] = "ADD", t[t.SUB = 1] = "SUB", t[t.REV_SUB = 2] = "REV_SUB", t[t.MIN = 3] = "MIN", t[t.MAX = 4] = "MAX"
        })(tt || (tt = {})), (function(t) {
            t[t.ZERO = 0] = "ZERO", t[t.ONE = 1] = "ONE", t[t.SRC_ALPHA = 2] = "SRC_ALPHA", t[t.DST_ALPHA = 3] = "DST_ALPHA", t[t.ONE_MINUS_SRC_ALPHA = 4] = "ONE_MINUS_SRC_ALPHA", t[t.ONE_MINUS_DST_ALPHA = 5] = "ONE_MINUS_DST_ALPHA", t[t.SRC_COLOR = 6] = "SRC_COLOR", t[t.DST_COLOR = 7] = "DST_COLOR", t[t.ONE_MINUS_SRC_COLOR = 8] = "ONE_MINUS_SRC_COLOR", t[t.ONE_MINUS_DST_COLOR = 9] = "ONE_MINUS_DST_COLOR", t[t.SRC_ALPHA_SATURATE = 10] = "SRC_ALPHA_SATURATE", t[t.CONSTANT_COLOR = 11] = "CONSTANT_COLOR", t[t.ONE_MINUS_CONSTANT_COLOR = 12] = "ONE_MINUS_CONSTANT_COLOR", t[t.CONSTANT_ALPHA = 13] = "CONSTANT_ALPHA", t[t.ONE_MINUS_CONSTANT_ALPHA = 14] = "ONE_MINUS_CONSTANT_ALPHA"
        })(et || (et = {})), (function(t) {
            t[t.NONE = 0] = "NONE", t[t.R = 1] = "R", t[t.G = 2] = "G", t[t.B = 4] = "B", t[t.A = 8] = "A", t[t.ALL = 15] = "ALL"
        })(it || (it = {})), (function(t) {
            t[t.NONE = 0] = "NONE", t[t.POINT = 1] = "POINT", t[t.LINEAR = 2] = "LINEAR", t[t.ANISOTROPIC = 3] = "ANISOTROPIC"
        })(nt || (nt = {})), (function(t) {
            t[t.WRAP = 0] = "WRAP", t[t.MIRROR = 1] = "MIRROR", t[t.CLAMP = 2] = "CLAMP", t[t.BORDER = 3] = "BORDER"
        })(rt || (rt = {})), (function(t) {
            t[t.TEX1D = 0] = "TEX1D", t[t.TEX2D = 1] = "TEX2D", t[t.TEX3D = 2] = "TEX3D"
        })(st || (st = {})), (function(t) {
            t[t.NONE = 0] = "NONE", t[t.TRANSFER_SRC = 1] = "TRANSFER_SRC", t[t.TRANSFER_DST = 2] = "TRANSFER_DST", t[t.SAMPLED = 4] = "SAMPLED", t[t.STORAGE = 8] = "STORAGE", t[t.COLOR_ATTACHMENT = 16] = "COLOR_ATTACHMENT", t[t.DEPTH_STENCIL_ATTACHMENT = 32] = "DEPTH_STENCIL_ATTACHMENT", t[t.TRANSIENT_ATTACHMENT = 64] = "TRANSIENT_ATTACHMENT", t[t.INPUT_ATTACHMENT = 128] = "INPUT_ATTACHMENT"
        })(ot || (ot = {})), (function(t) {
            t[t.X1 = 0] = "X1", t[t.X2 = 1] = "X2", t[t.X4 = 2] = "X4", t[t.X8 = 3] = "X8", t[t.X16 = 4] = "X16", t[t.X32 = 5] = "X32", t[t.X64 = 6] = "X64"
        })(at || (at = {})), (function(t) {
            t[t.NONE = 0] = "NONE", t[t.GEN_MIPMAP = 1] = "GEN_MIPMAP", t[t.CUBEMAP = 2] = "CUBEMAP", t[t.BAKUP_BUFFER = 4] = "BAKUP_BUFFER"
        })(lt || (lt = {})), (function(t) {
            t[t.TV1D = 0] = "TV1D", t[t.TV2D = 1] = "TV2D", t[t.TV3D = 2] = "TV3D", t[t.CUBE = 3] = "CUBE", t[t.TV1D_ARRAY = 4] = "TV1D_ARRAY", t[t.TV2D_ARRAY = 5] = "TV2D_ARRAY"
        })(ht || (ht = {})), (function(t) {
            t[t.VERTEX = 0] = "VERTEX", t[t.HULL = 1] = "HULL", t[t.DOMAIN = 2] = "DOMAIN", t[t.GEOMETRY = 3] = "GEOMETRY", t[t.FRAGMENT = 4] = "FRAGMENT", t[t.COMPUTE = 5] = "COMPUTE", t[t.COUNT = 6] = "COUNT"
        })(ct || (ct = {})), (function(t) {
            t[t.UNKNOWN = 0] = "UNKNOWN", t[t.UNIFORM_BUFFER = 1] = "UNIFORM_BUFFER", t[t.SAMPLER = 2] = "SAMPLER", t[t.STORAGE_BUFFER = 3] = "STORAGE_BUFFER"
        })(ut || (ut = {})), (function(t) {
            t[t.PRIMARY = 0] = "PRIMARY", t[t.SECONDARY = 1] = "SECONDARY"
        })(_t || (_t = {})), (function(t) {
            t[t.LOAD = 0] = "LOAD", t[t.CLEAR = 1] = "CLEAR", t[t.DISCARD = 2] = "DISCARD"
        })(ft || (ft = {})), (function(t) {
            t[t.STORE = 0] = "STORE", t[t.DISCARD = 1] = "DISCARD"
        })(dt || (dt = {})), (function(t) {
            t[t.UNDEFINED = 0] = "UNDEFINED", t[t.GENERAL = 1] = "GENERAL", t[t.COLOR_ATTACHMENT_OPTIMAL = 2] = "COLOR_ATTACHMENT_OPTIMAL", t[t.DEPTH_STENCIL_ATTACHMENT_OPTIMAL = 3] = "DEPTH_STENCIL_ATTACHMENT_OPTIMAL", t[t.DEPTH_STENCIL_READONLY_OPTIMAL = 4] = "DEPTH_STENCIL_READONLY_OPTIMAL", t[t.SHADER_READONLY_OPTIMAL = 5] = "SHADER_READONLY_OPTIMAL", t[t.TRANSFER_SRC_OPTIMAL = 6] = "TRANSFER_SRC_OPTIMAL", t[t.TRANSFER_DST_OPTIMAL = 7] = "TRANSFER_DST_OPTIMAL", t[t.PREINITIALIZED = 8] = "PREINITIALIZED", t[t.PRESENT_SRC = 9] = "PRESENT_SRC"
        })(pt || (pt = {})), (function(t) {
            t[t.GRAPHICS = 0] = "GRAPHICS", t[t.COMPUTE = 1] = "COMPUTE", t[t.RAY_TRACING = 2] = "RAY_TRACING"
        })(mt || (mt = {})), (function(t) {
            t[t.VIEWPORT = 0] = "VIEWPORT", t[t.SCISSOR = 1] = "SCISSOR", t[t.LINE_WIDTH = 2] = "LINE_WIDTH", t[t.DEPTH_BIAS = 3] = "DEPTH_BIAS", t[t.BLEND_CONSTANTS = 4] = "BLEND_CONSTANTS", t[t.DEPTH_BOUNDS = 5] = "DEPTH_BOUNDS", t[t.STENCIL_WRITE_MASK = 6] = "STENCIL_WRITE_MASK", t[t.STENCIL_COMPARE_MASK = 7] = "STENCIL_COMPARE_MASK"
        })(yt || (yt = {})), (function(t) {
            t[t.FRONT = 0] = "FRONT", t[t.BACK = 1] = "BACK", t[t.ALL = 2] = "ALL"
        })(vt || (vt = {})), (function(t) {
            t[t.GRAPHICS = 0] = "GRAPHICS", t[t.COMPUTE = 1] = "COMPUTE", t[t.TRANSFER = 2] = "TRANSFER"
        })(gt || (gt = {})), (function(t) {
            t[t.NONE = 0] = "NONE", t[t.COLOR = 1] = "COLOR", t[t.DEPTH = 2] = "DEPTH", t[t.STENCIL = 4] = "STENCIL", t[t.DEPTH_STENCIL = 6] = "DEPTH_STENCIL", t[t.ALL = 7] = "ALL"
        })(xt || (xt = {})), (function(t) {
            t[t.DEFAULT = 100] = "DEFAULT"
        })(bt || (bt = {})), (function(t) {
            t[t.MIN = 0] = "MIN", t[t.MAX = 255] = "MAX", t[t.DEFAULT = 128] = "DEFAULT"
        })(At || (At = {}));
        var Ct, Tt, St, wt;
        (function(t) {
            t[t.UBO_GLOBAL = 23] = "UBO_GLOBAL", t[t.UBO_SHADOW = 22] = "UBO_SHADOW", t[t.UBO_LOCAL = 21] = "UBO_LOCAL", t[t.UBO_FORWARD_LIGHTS = 20] = "UBO_FORWARD_LIGHTS", t[t.UBO_SKINNING = 19] = "UBO_SKINNING", t[t.UBO_SKINNING_TEXTURE = 18] = "UBO_SKINNING_TEXTURE", t[t.UBO_UI = 17] = "UBO_UI", t[t.SAMPLER_JOINTS = 25] = "SAMPLER_JOINTS", t[t.SAMPLER_ENVIRONMENT = 26] = "SAMPLER_ENVIRONMENT", t[t.CUSTUM_UBO_BINDING_END_POINT = 17] = "CUSTUM_UBO_BINDING_END_POINT", t[t.CUSTOM_SAMPLER_BINDING_START_POINT = 30] = "CUSTOM_SAMPLER_BINDING_START_POINT"
        })(Ct || (Ct = {})), (function(t) {
            t[t.minFilter = 0] = "minFilter", t[t.magFilter = 1] = "magFilter", t[t.mipFilter = 2] = "mipFilter", t[t.addressU = 3] = "addressU", t[t.addressV = 4] = "addressV", t[t.addressW = 5] = "addressW", t[t.maxAnisotropy = 6] = "maxAnisotropy", t[t.cmpFunc = 7] = "cmpFunc", t[t.minLOD = 8] = "minLOD", t[t.maxLOD = 9] = "maxLOD", t[t.mipLODBias = 10] = "mipLODBias", t[t.borderColor = 11] = "borderColor", t[t.total = 15] = "total"
        })(wt || (wt = {}));
        var Et = {};
        Et[Et.bool = j.BOOL] = "bool", Et[Et.int = j.INT] = "int", Et[Et.ivec2 = j.INT2] = "ivec2invTypeParams", Et[Et.ivec3 = j.INT3] = "ivec3", Et[Et.ivec4 = j.INT4] = "ivec4", Et[Et.float = j.FLOAT] = "float", Et[Et.vec2 = j.FLOAT2] = "vec2", Et[Et.vec3 = j.FLOAT3] = "vec3", Et[Et.vec4 = j.FLOAT4] = "vec4", Et[Et.mat2 = j.MAT2] = "mat2", Et[Et.mat3 = j.MAT3] = "mat3", Et[Et.mat4 = j.MAT4] = "mat4", Et[Et.sampler2D = j.SAMPLER2D] = "sampler2D", Et[Et.samplerCube = j.SAMPLER_CUBE] = "samplerCube";
        var Mt = ((Tt = {})[j.BOOL] = 4, Tt[j.INT] = 4, Tt[j.INT2] = 8, Tt[j.INT3] = 12, Tt[j.INT4] = 16, Tt[j.FLOAT] = 4, Tt[j.FLOAT2] = 8, Tt[j.FLOAT3] = 12, Tt[j.FLOAT4] = 16, Tt[j.MAT2] = 16, Tt[j.MAT3] = 36, Tt[j.MAT4] = 64, Tt[j.SAMPLER2D] = 4, Tt[j.SAMPLER_CUBE] = 4, Tt),
            Dt = ((St = {})[j.BOOL] = W.R32I, St[j.INT] = W.R32I, St[j.INT2] = W.RG32I, St[j.INT3] = W.RGB32I, St[j.INT4] = W.RGBA32I, St[j.FLOAT] = W.R32F, St[j.FLOAT2] = W.RG32F, St[j.FLOAT3] = W.RGB32F, St[j.FLOAT4] = W.RGBA32F, St),
            Bt = {
                BACK: U,
                FRONT: G,
                NONE: k,
                ADD: d,
                SUB: p,
                REV_SUB: m,
                ZERO: y,
                ONE: v,
                SRC_COLOR: g,
                ONE_MINUS_SRC_COLOR: x,
                DST_COLOR: b,
                ONE_MINUS_DST_COLOR: A,
                SRC_ALPHA: C,
                ONE_MINUS_SRC_ALPHA: T,
                DST_ALPHA: S,
                ONE_MINUS_DST_ALPHA: w,
                CONSTANT_COLOR: E,
                ONE_MINUS_CONSTANT_COLOR: M,
                CONSTANT_ALPHA: D,
                ONE_MINUS_CONSTANT_ALPHA: B,
                SRC_ALPHA_SATURATE: I,
                NEVER: o,
                LESS: a,
                EQUAL: l,
                LEQUAL: h,
                GREATER: c,
                NOTEQUAL: u,
                GEQUAL: _,
                ALWAYS: f,
                KEEP: P,
                REPLACE: R,
                INCR: O,
                INCR_WRAP: L,
                DECR: F,
                DECR_WRAP: N,
                INVERT: V
            };
        Object.assign(Bt, bt);
        var It = {
            murmurhash2_32_gc: function(t, e) {
                for (var i, n = t.length, r = e ^ n, s = 0; n >= 4;) i = 1540483477 * (65535 & (i = 255 & t.charCodeAt(s) | (255 & t.charCodeAt(++s)) << 8 | (255 & t.charCodeAt(++s)) << 16 | (255 & t.charCodeAt(++s)) << 24)) + ((1540483477 * (i >>> 16) & 65535) << 16), r = 1540483477 * (65535 & r) + ((1540483477 * (r >>> 16) & 65535) << 16) ^ (i = 1540483477 * (65535 & (i ^= i >>> 24)) + ((1540483477 * (i >>> 16) & 65535) << 16)), n -= 4, ++s;
                switch (n) {
                    case 3:
                        r ^= (255 & t.charCodeAt(s + 2)) << 16;
                    case 2:
                        r ^= (255 & t.charCodeAt(s + 1)) << 8;
                    case 1:
                        r = 1540483477 * (65535 & (r ^= 255 & t.charCodeAt(s))) + ((1540483477 * (r >>> 16) & 65535) << 16)
                }
                return r = 1540483477 * (65535 & (r ^= r >>> 13)) + ((1540483477 * (r >>> 16) & 65535) << 16), (r ^= r >>> 15) >>> 0
            },
            SamplerInfoIndex: wt,
            effectStructure: {
                $techniques: [{
                    $passes: [{
                        depthStencilState: {},
                        rasterizerState: {},
                        blendState: {
                            targets: [{}]
                        },
                        properties: {
                            any: {
                                sampler: {},
                                inspector: {}
                            }
                        }
                    }]
                }]
            },
            typeMap: Et,
            sizeMap: Mt,
            formatMap: Dt,
            passParams: Bt,
            RenderQueue: {
                OPAQUE: 0,
                TRANSPARENT: 1,
                OVERLAY: 2
            },
            RenderPriority: At,
            GFXGetTypeSize: function(t) {
                switch (t) {
                    case j.BOOL:
                    case j.INT:
                    case j.UINT:
                    case j.FLOAT:
                        return 4;
                    case j.BOOL2:
                    case j.INT2:
                    case j.UINT2:
                    case j.FLOAT2:
                        return 8;
                    case j.BOOL3:
                    case j.INT3:
                    case j.UINT3:
                    case j.FLOAT3:
                        return 12;
                    case j.BOOL4:
                    case j.INT4:
                    case j.UINT4:
                    case j.FLOAT4:
                    case j.MAT2:
                        return 16;
                    case j.MAT2X3:
                        return 24;
                    case j.MAT2X4:
                        return 32;
                    case j.MAT3X2:
                        return 24;
                    case j.MAT3:
                        return 36;
                    case j.MAT3X4:
                        return 48;
                    case j.MAT4X2:
                    case j.MAT4X2:
                        return 32;
                    case j.MAT4:
                        return 64;
                    case j.SAMPLER1D:
                    case j.SAMPLER1D_ARRAY:
                    case j.SAMPLER2D:
                    case j.SAMPLER2D_ARRAY:
                    case j.SAMPLER3D:
                    case j.SAMPLER_CUBE:
                        return 4;
                    default:
                        return 0
                }
            },
            UniformBinding: Ct
        };
        e.exports = It
    }), {}],
    347: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0;
        var n = 0,
            r = {};
        i.default = {
            addStage: function(t) {
                if (void 0 === r[t]) {
                    var e = 1 << n;
                    r[t] = e, n += 1
                }
            },
            stageID: function(t) {
                var e = r[t];
                return void 0 === e ? -1 : e
            },
            stageIDs: function(t) {
                for (var e = 0, i = 0; i < t.length; ++i) {
                    var n = r[t[i]];
                    void 0 !== n && (e |= n)
                }
                return e
            }
        }, e.exports = i.default
    }), {}],
    348: [(function(t, e, i) {
        "use strict";
        var n, r;
        i.__esModule = !0, i.default = void 0;
        var s = t("../memop"),
            o = u(t("../enums")),
            a = t("../../core/vmath"),
            l = u(t("./program-lib")),
            h = u(t("./view")),
            c = u(t("../gfx"));

        function u(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }

        function _(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }
        a.mat3.create();
        var f = a.mat4.create(),
            d = new s.RecyclePool(function() {
                return {
                    stage: null,
                    items: null
                }
            }, 8),
            p = new s.RecyclePool(function() {
                return new Float32Array(2)
            }, 8),
            m = new s.RecyclePool(function() {
                return new Float32Array(3)
            }, 8),
            y = new s.RecyclePool(function() {
                return new Float32Array(4)
            }, 8),
            v = new s.RecyclePool(function() {
                return new Float32Array(9)
            }, 8),
            g = new s.RecyclePool(function() {
                return new Float32Array(16)
            }, 8),
            x = new s.RecyclePool(function() {
                return new Float32Array(64)
            }, 8),
            b = new s.RecyclePool(function() {
                return new Int32Array(2)
            }, 8),
            A = new s.RecyclePool(function() {
                return new Int32Array(3)
            }, 8),
            C = new s.RecyclePool(function() {
                return new Int32Array(4)
            }, 8),
            T = new s.RecyclePool(function() {
                return new Int32Array(64)
            }, 8),
            S = ((n = {})[o.default.PARAM_INT] = function(t) {
                return t
            }, n[o.default.PARAM_INT2] = function(t) {
                return a.vec2.array(b.add(), t)
            }, n[o.default.PARAM_INT3] = function(t) {
                return a.vec3.array(A.add(), t)
            }, n[o.default.PARAM_INT4] = function(t) {
                return a.vec4.array(C.add(), t)
            }, n[o.default.PARAM_FLOAT] = function(t) {
                return t
            }, n[o.default.PARAM_FLOAT2] = function(t) {
                return a.vec2.array(p.add(), t)
            }, n[o.default.PARAM_FLOAT3] = function(t) {
                return a.vec3.array(m.add(), t)
            }, n[o.default.PARAM_FLOAT4] = function(t) {
                return a.vec4.array(y.add(), t)
            }, n[o.default.PARAM_COLOR3] = function(t) {
                return a.color3.array(m.add(), t)
            }, n[o.default.PARAM_COLOR4] = function(t) {
                return a.color4.array(y.add(), t)
            }, n[o.default.PARAM_MAT2] = function(t) {
                return a.mat2.array(y.add(), t)
            }, n[o.default.PARAM_MAT3] = function(t) {
                return a.mat3.array(v.add(), t)
            }, n[o.default.PARAM_MAT4] = function(t) {
                return a.mat4.array(g.add(), t)
            }, (r = {})[o.default.PARAM_INT] = {
                func: function(t) {
                    for (var e = T.add(), i = 0; i < t.length; ++i) e[i] = t[i];
                    return e
                },
                size: 1
            }, r[o.default.PARAM_INT2] = {
                func: function(t) {
                    for (var e = T.add(), i = 0; i < t.length; ++i) e[2 * i] = t[i].x, e[2 * i + 1] = t[i].y;
                    return e
                },
                size: 2
            }, r[o.default.PARAM_INT3] = {
                func: void 0,
                size: 3
            }, r[o.default.PARAM_INT4] = {
                func: function(t) {
                    for (var e = T.add(), i = 0; i < t.length; ++i) {
                        var n = t[i];
                        e[4 * i] = n.x, e[4 * i + 1] = n.y, e[4 * i + 2] = n.z, e[4 * i + 3] = n.w
                    }
                    return e
                },
                size: 4
            }, r[o.default.PARAM_FLOAT] = {
                func: function(t) {
                    for (var e = x.add(), i = 0; i < t.length; ++i) e[i] = t[i];
                    return e
                },
                size: 1
            }, r[o.default.PARAM_FLOAT2] = {
                func: function(t) {
                    for (var e = x.add(), i = 0; i < t.length; ++i) e[2 * i] = t[i].x, e[2 * i + 1] = t[i].y;
                    return e
                },
                size: 2
            }, r[o.default.PARAM_FLOAT3] = {
                func: void 0,
                size: 3
            }, r[o.default.PARAM_FLOAT4] = {
                func: function(t) {
                    for (var e = x.add(), i = 0; i < t.length; ++i) {
                        var n = t[i];
                        e[4 * i] = n.x, e[4 * i + 1] = n.y, e[4 * i + 2] = n.z, e[4 * i + 3] = n.w
                    }
                    return e
                },
                size: 4
            }, r[o.default.PARAM_COLOR3] = {
                func: void 0,
                size: 3
            }, r[o.default.PARAM_COLOR4] = {
                func: function(t) {
                    for (var e = x.add(), i = 0; i < t.length; ++i) {
                        var n = t[i];
                        e[4 * i] = n.r, e[4 * i + 1] = n.g, e[4 * i + 2] = n.b, e[4 * i + 3] = n.a
                    }
                    return e
                },
                size: 4
            }, r[o.default.PARAM_MAT2] = {
                func: function(t) {
                    for (var e = x.add(), i = 0; i < t.length; ++i) {
                        var n = t[i];
                        e.set(n.m, 4 * i)
                    }
                    return e
                },
                size: 4
            }, r[o.default.PARAM_MAT3] = {
                func: void 0,
                size: 9
            }, r[o.default.PARAM_MAT4] = {
                func: function(t) {
                    for (var e = x.add(), i = 0; i < t.length; ++i) {
                        var n = t[i];
                        e.set(n.m, 16 * i)
                    }
                    return e
                },
                size: 16
            }, (function() {
                function t(e, i) {
                    var n;
                    _(this, t), this._device = e, this._programLib = new l.default(e), this._opts = i, this._type2defaultValue = ((n = {})[o.default.PARAM_INT] = 0, n[o.default.PARAM_INT2] = a.vec2.create(0, 0), n[o.default.PARAM_INT3] = a.vec3.create(0, 0, 0), n[o.default.PARAM_INT4] = a.vec4.create(0, 0, 0, 0), n[o.default.PARAM_FLOAT] = 0, n[o.default.PARAM_FLOAT2] = a.vec2.create(0, 0), n[o.default.PARAM_FLOAT3] = a.vec3.create(0, 0, 0), n[o.default.PARAM_FLOAT4] = a.vec4.create(0, 0, 0, 0), n[o.default.PARAM_COLOR3] = a.color3.create(0, 0, 0), n[o.default.PARAM_COLOR4] = a.color4.create(0, 0, 0, 1), n[o.default.PARAM_MAT2] = a.mat2.create(), n[o.default.PARAM_MAT3] = a.mat3.create(), n[o.default.PARAM_MAT4] = a.mat4.create(), n[o.default.PARAM_TEXTURE_2D] = i.defaultTexture, n[o.default.PARAM_TEXTURE_CUBE] = i.defaultTextureCube, n), this._stage2fn = {}, this._usedTextureUnits = 0, this._viewPools = new s.RecyclePool(function() {
                        return new h.default
                    }, 8), this._drawItemsPools = new s.RecyclePool(function() {
                        return {
                            model: null,
                            node: null,
                            ia: null,
                            effect: null,
                            defines: null,
                            uniforms: null
                        }
                    }, 100), this._stageItemsPools = new s.RecyclePool(function() {
                        return new s.RecyclePool(function() {
                            return {
                                model: null,
                                node: null,
                                ia: null,
                                effect: null,
                                defines: null,
                                technique: null,
                                sortKey: -1,
                                uniforms: null
                            }
                        }, 100)
                    }, 16)
                }
                return t.prototype._resetTextuerUnit = function() {
                    this._usedTextureUnits = 0
                }, t.prototype._allocTextureUnit = function() {
                    var t = this._device,
                        e = this._usedTextureUnits;
                    return e >= t._caps.maxTextureUnits && console.warn("Trying to use " + e + " texture units while this GPU supports only " + t._caps.maxTextureUnits), this._usedTextureUnits += 1, e
                }, t.prototype._registerStage = function(t, e) {
                    this._stage2fn[t] = e
                }, t.prototype.clear = function() {
                    this._programLib.clear(), this.reset()
                }, t.prototype.reset = function() {
                    this._viewPools.reset(), this._stageItemsPools.reset()
                }, t.prototype._requestView = function() {
                    return this._viewPools.add()
                }, t.prototype._render = function(t, e) {
                    var i = this._device;
                    i.setFrameBuffer(t._framebuffer), i.setViewport(t._rect.x, t._rect.y, t._rect.w, t._rect.h);
                    var n = {};
                    t._clearFlags & o.default.CLEAR_COLOR && (n.color = [t._color.r, t._color.g, t._color.b, t._color.a]), t._clearFlags & o.default.CLEAR_DEPTH && (n.depth = t._depth), t._clearFlags & o.default.CLEAR_STENCIL && (n.stencil = t._stencil), i.clear(n), this._drawItemsPools.reset();
                    for (var r = 0; r < e._models.length; ++r) {
                        var s = e._models.data[r];
                        if (0 != (s._cullingMask & t._cullingMask)) {
                            var a = this._drawItemsPools.add();
                            s.extractDrawItem(a)
                        }
                    }
                    d.reset();
                    for (var l = 0; l < t._stages.length; ++l) {
                        var h = t._stages[l],
                            c = this._stageItemsPools.add();
                        c.reset();
                        for (var u = 0; u < this._drawItemsPools.length; ++u) {
                            var _ = this._drawItemsPools.data[u],
                                f = _.effect.getTechnique(h);
                            if (f) {
                                var p = c.add();
                                p.model = _.model, p.node = _.node, p.ia = _.ia, p.effect = _.effect, p.defines = _.defines, p.technique = f, p.sortKey = -1, p.uniforms = _.uniforms
                            }
                        }
                        var m = d.add();
                        m.stage = h, m.items = c
                    }
                    for (var y = 0; y < d.length; ++y) {
                        var v = d.data[y];
                        (0, this._stage2fn[v.stage])(t, v.items)
                    }
                }, t.prototype._setProperty = function(t) {
                    var e = this._device,
                        i = t.value;
                    if (void 0 === i && (i = t.val), void 0 === i && (i = this._type2defaultValue[t.type]), void 0 !== i)
                        if (t.type === o.default.PARAM_TEXTURE_2D || t.type === o.default.PARAM_TEXTURE_CUBE)
                            if (Array.isArray(i)) {
                                if (i.length > t.count) return void console.error("Failed to set property [" + t.name + "] : The length of texture array [" + i.length + "] is bigger than [" + t.count + "].");
                                for (var n = T.add(), r = 0; r < i.length; ++r) n[r] = this._allocTextureUnit();
                                e.setTextureArray(t.name, i, n)
                            } else e.setTexture(t.name, i, this._allocTextureUnit());
                    else t.directly ? e.setUniformDirectly(t.name, i) : e.setUniform(t.name, i);
                    else console.warn("Failed to set technique property " + t.name + ", value not found.")
                }, t.prototype._draw = function(t) {
                    var e = this._device,
                        i = this._programLib,
                        n = t.node,
                        r = t.ia,
                        s = t.uniforms,
                        o = t.technique,
                        l = t.defines,
                        h = t.effect;
                    p.reset(), m.reset(), y.reset(), v.reset(), g.reset(), x.reset(), b.reset(), A.reset(), C.reset(), T.reset(), n.getWorldMatrix(f), e.setUniform("cc_matWorld", a.mat4.array(g.add(), f)), a.mat4.invert(f, f), a.mat4.transpose(f, f), e.setUniform("cc_matWorldIT", a.mat4.array(g.add(), f));
                    for (var u = 0; u < s.length; u++) {
                        var _ = s[u];
                        for (var d in _) this._setProperty(_[d])
                    }
                    for (var S = 0; S < o._passes.length; ++S) {
                        var w = o._passes[S],
                            E = r.count;
                        r._vertexBuffer && e.setVertexBuffer(0, r._vertexBuffer), r._indexBuffer && e.setIndexBuffer(r._indexBuffer), e.setPrimitiveType(r._primitiveType);
                        var M = i.getProgram(w._programName, l, h._name);
                        e.setProgram(M), e.setCullMode(w._cullMode), w._blend && (e.enableBlend(), e.setBlendFuncSep(w._blendSrc, w._blendDst, w._blendSrcAlpha, w._blendDstAlpha), e.setBlendEqSep(w._blendEq, w._blendAlphaEq), e.setBlendColor32(w._blendColor)), w._depthTest && (e.enableDepthTest(), e.setDepthFunc(w._depthFunc)), w._depthWrite && e.enableDepthWrite(), e.setStencilTest(w._stencilTest), w._stencilTest === c.default.STENCIL_ENABLE && (e.setStencilFuncFront(w._stencilFuncFront, w._stencilRefFront, w._stencilMaskFront), e.setStencilOpFront(w._stencilFailOpFront, w._stencilZFailOpFront, w._stencilZPassOpFront, w._stencilWriteMaskFront), e.setStencilFuncBack(w._stencilFuncBack, w._stencilRefBack, w._stencilMaskBack), e.setStencilOpBack(w._stencilFailOpBack, w._stencilZFailOpBack, w._stencilZPassOpBack, w._stencilWriteMaskBack)), e.draw(r._start, E), this._resetTextuerUnit()
                    }
                }, t
            })());
        i.default = S, e.exports = i.default
    }), {
        "../../core/vmath": 326,
        "../enums": 355,
        "../gfx": 360,
        "../memop": 372,
        "./program-lib": 352,
        "./view": 354
    }],
    349: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0;
        var n = l(t("../config")),
            r = l(t("../core/pass")),
            s = l(t("../core/technique")),
            o = t("../types"),
            a = l(t("../enums"));
        l(t("../gfx"));

        function l(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }

        function h(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }
        var c = (function() {
                function t(e, i) {
                    var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {},
                        r = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : {},
                        s = arguments.length > 4 && void 0 !== arguments[4] ? arguments[4] : [];
                    h(this, t), this._name = e, this._techniques = i, this._properties = n, this._defines = r, this._dependencies = s
                }
                return t.prototype.clear = function() {
                    this._techniques.length = 0, this._properties = {}, this._defines = {}
                }, t.prototype.setCullMode = function(t) {
                    for (var e = this._techniques[0].passes, i = 0; i < e.length; i++) e[i].setCullMode(t)
                }, t.prototype.setDepth = function(t, e, i) {
                    for (var n = this._techniques[0].passes, r = 0; r < n.length; r++) n[r].setDepth(t, e, i)
                }, t.prototype.setBlend = function(t, e, i, n, r, s, o, a) {
                    for (var l = this._techniques[0].passes, h = 0; h < l.length; h++) {
                        l[h].setBlend(t, e, i, n, r, s, o, a)
                    }
                }, t.prototype.setStencilEnabled = function(t) {
                    for (var e = this._techniques[0].passes, i = 0; i < e.length; i++) e[i].setStencilEnabled(t)
                }, t.prototype.setStencil = function(t, e, i, n, r, s, o, a) {
                    for (var l = this._techniques[0].passes, h = 0; h < l.length; ++h) {
                        var c = l[h];
                        c.setStencilFront(t, e, i, n, r, s, o, a), c.setStencilBack(t, e, i, n, r, s, o, a)
                    }
                }, t.prototype.getTechnique = function(t) {
                    var e = n.default.stageID(t);
                    if (-1 === e) return null;
                    for (var i = 0; i < this._techniques.length; ++i) {
                        var r = this._techniques[i];
                        if (r.stageIDs & e) return r
                    }
                    return null
                }, t.prototype.getProperty = function(t) {
                    return this._properties[t] ? this._properties[t].value : (cc.warn(this._name + " : Failed to get property " + t + ", property not found."), null)
                }, t.prototype.setProperty = function(t, e) {
                    var i = this._properties[t];
                    if (i)
                        if (Array.isArray(e)) {
                            var n = i.value;
                            if (n.length !== e.length) return void cc.warn(this._name + " : Failed to set property " + t + ", property length not correct.");
                            for (var r = 0; r < e.length; r++) n[r] = e[r]
                        } else i.type === a.default.PARAM_TEXTURE_2D ? i.value = e ? e.getImpl() : null : e.array ? e.array(i.value) : (e && "object" == typeof e && cc.warn("Set effect property " + this._name + " warning : should transform object to ArrayBuffer"), i.value = e);
                    else cc.warn(this._name + " : Failed to set property " + t + ", property not found.")
                }, t.prototype.updateHash = function(t) {}, t.prototype.getDefine = function(t) {
                    var e = this._defines[t];
                    return void 0 === e && cc.warn(this._name + " : Failed to get define " + t + ", define not found."), e
                }, t.prototype.define = function(t, e) {
                    void 0 !== this._defines[t] ? this._defines[t] = e : cc.warn(this._name + " : Failed to set define " + t + ", define not found.")
                }, t.prototype.extractProperties = function() {
                    var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
                    return Object.assign(t, this._properties), t
                }, t.prototype.extractDefines = function() {
                    var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
                    return Object.assign(t, this._defines), t
                }, t.prototype.extractDependencies = function() {
                    for (var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, e = 0; e < this._dependencies.length; ++e) {
                        var i = this._dependencies[e];
                        t[i.define] = i.extension
                    }
                    return t
                }, t.prototype.clone = function() {
                    var t = this.extractDefines({}),
                        e = this.extractDependencies({}),
                        i = {},
                        n = this._properties;
                    for (var r in n) {
                        var s = n[r],
                            o = i[r] = {},
                            a = s.value;
                        for (var l in Array.isArray(a) ? o.value = a.concat() : ArrayBuffer.isView(a) ? o.value = new a.__proto__.constructor(a) : o.value = a, s) "value" !== l && (o[l] = s[l])
                    }
                    for (var h = [], c = 0; c < this._techniques.length; c++) h.push(this._techniques[c].clone());
                    return new cc.Effect(this._name, h, i, t, e)
                }, t
            })(),
            u = function(t) {
                var e = [],
                    i = cc.renderer._forward._programLib;
                return t.techniques.forEach((function(t) {
                    t.passes.forEach((function(t) {
                        e.push(i.getTemplate(t.program))
                    }))
                })), e
            };

        function _(t, e) {
            var i = {},
                n = {};
            t.techniques.forEach((function(t) {
                t.passes.forEach((function(t) {
                    Object.assign(n, t.properties)
                }))
            }));
            var r = function(r) {
                for (var s = n[r], o = void 0, l = 0; l < e.length && !(o = e[l].uniforms.find((function(t) {
                        return t.name === r
                    }))); l++);
                if (!o) return cc.warn(t.name + " : illegal property: " + r + ", myabe defined a not used property"), "continue";
                i[r] = Object.assign({}, s), i[r].value = s.type === a.default.PARAM_TEXTURE_2D ? null : new Float32Array(s.value)
            };
            for (var s in n) r(s);
            return i
        }
        c.parseTechniques = function(t) {
            for (var e = t.techniques.length, i = new Array(e), n = 0; n < e; ++n) {
                var o = t.techniques[n];
                o.stages || (o.stages = ["opaque"]);
                for (var a = o.passes.length, l = new Array(a), h = 0; h < a; ++h) {
                    var c = o.passes[h];
                    l[h] = new r.default(c.program), c.rasterizerState && l[h].setCullMode(c.rasterizerState.cullMode);
                    var u = c.blendState && c.blendState.targets[0];
                    u && l[h].setBlend(u.blend, u.blendEq, u.blendSrc, u.blendDst, u.blendAlphaEq, u.blendSrcAlpha, u.blendDstAlpha, u.blendColor);
                    var _ = c.depthStencilState;
                    _ && (l[h].setDepth(_.depthTest, _.depthWrite, _.depthFunc), l[h].setStencilFront(_.stencilTest, _.stencilFuncFront, _.stencilRefFront, _.stencilMaskFront, _.stencilFailOpFront, _.stencilZFailOpFront, _.stencilZPassOpFront, _.stencilWriteMaskFront), l[h].setStencilBack(_.stencilTest, _.stencilFuncBack, _.stencilRefBack, _.stencilMaskBack, _.stencilFailOpBack, _.stencilZFailOpBack, _.stencilZPassOpBack, _.stencilWriteMaskBack))
                }
                i[n] = new s.default(o.stages, l, o.layer)
            }
            return i
        }, c.parseEffect = function(t) {
            var e = c.parseTechniques(t),
                i = u(t),
                n = _(t, i),
                r = {},
                s = {};
            i.forEach((function(t) {
                t.uniforms.forEach((function(t) {
                    var e = t.name,
                        i = r[e] = Object.assign({}, t);
                    n[e] ? i.value = n[e].value : i.value = o.enums2default[t.type]
                })), t.defines.forEach((function(t) {
                    s[t.name] = o.enums2default[t.type]
                }))
            }));
            var a = i.reduce((function(t, e) {
                return t.concat(e.extensions)
            }), []);
            return a = a.map((function(t) {
                return Object.assign({}, t)
            })), new cc.Effect(t.name, e, r, s, a, t)
        }, cc.Effect = c, i.default = c, e.exports = i.default
    }), {
        "../config": 347,
        "../core/pass": 351,
        "../core/technique": 353,
        "../enums": 355,
        "../gfx": 360,
        "../types": 384
    }],
    350: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.default = void 0;
        var n = (function() {
                function t(t, e) {
                    for (var i = 0; i < e.length; i++) {
                        var n = e[i];
                        n.enumerable = n.enumerable || !1, n.configurable = !0, "value" in n && (n.writable = !0), Object.defineProperty(t, n.key, n)
                    }
                }
                return function(e, i, n) {
                    return i && t(e.prototype, i), n && t(e, n), e
                }
            })(),
            r = (function(t) {
                return t && t.__esModule ? t : {
                    default: t
                }
            })(t("../gfx"));

        function s(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }
        var o = (function() {
            function t(e, i) {
                var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : r.default.PT_TRIANGLES;
                s(this, t), this._vertexBuffer = e, this._indexBuffer = i, this._primitiveType = n, this._start = 0, this._count = -1
            }
            return n(t, [{
                key: "count",
                get: function() {
                    return -1 !== this._count ? this._count : this._indexBuffer ? this._indexBuffer.count : this._vertexBuffer ? this._vertexBuffer.count : 0
                }
            }]), t
        })();
        i.default = o, e.exports = i.default
    }), {
        "../gfx": 360
    }],
    351: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.default = void 0;
        var n = (function(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        })(t("../gfx"));

        function r(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }
        var s = (function() {
            function t(e) {
                r(this, t), this._programName = e, this._cullMode = n.default.CULL_BACK, this._blend = !1, this._blendEq = n.default.BLEND_FUNC_ADD, this._blendAlphaEq = n.default.BLEND_FUNC_ADD, this._blendSrc = n.default.BLEND_SRC_ALPHA, this._blendDst = n.default.BLEND_ONE_MINUS_SRC_ALPHA, this._blendSrcAlpha = n.default.BLEND_SRC_ALPHA, this._blendDstAlpha = n.default.BLEND_ONE_MINUS_SRC_ALPHA, this._blendColor = 4294967295, this._depthTest = !1, this._depthWrite = !1, this._depthFunc = n.default.DS_FUNC_LESS, this._stencilTest = n.default.STENCIL_INHERIT, this._stencilFuncFront = n.default.DS_FUNC_ALWAYS, this._stencilRefFront = 0, this._stencilMaskFront = 255, this._stencilFailOpFront = n.default.STENCIL_OP_KEEP, this._stencilZFailOpFront = n.default.STENCIL_OP_KEEP, this._stencilZPassOpFront = n.default.STENCIL_OP_KEEP, this._stencilWriteMaskFront = 255, this._stencilFuncBack = n.default.DS_FUNC_ALWAYS, this._stencilRefBack = 0, this._stencilMaskBack = 255, this._stencilFailOpBack = n.default.STENCIL_OP_KEEP, this._stencilZFailOpBack = n.default.STENCIL_OP_KEEP, this._stencilZPassOpBack = n.default.STENCIL_OP_KEEP, this._stencilWriteMaskBack = 255
            }
            return t.prototype.setCullMode = function() {
                var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : n.default.CULL_BACK;
                this._cullMode = t
            }, t.prototype.setBlend = function() {
                var t = arguments.length > 0 && void 0 !== arguments[0] && arguments[0],
                    e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : n.default.BLEND_FUNC_ADD,
                    i = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : n.default.BLEND_SRC_ALPHA,
                    r = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : n.default.BLEND_ONE_MINUS_SRC_ALPHA,
                    s = arguments.length > 4 && void 0 !== arguments[4] ? arguments[4] : n.default.BLEND_FUNC_ADD,
                    o = arguments.length > 5 && void 0 !== arguments[5] ? arguments[5] : n.default.BLEND_SRC_ALPHA,
                    a = arguments.length > 6 && void 0 !== arguments[6] ? arguments[6] : n.default.BLEND_ONE_MINUS_SRC_ALPHA,
                    l = arguments.length > 7 && void 0 !== arguments[7] ? arguments[7] : 4294967295;
                this._blend = t, this._blendEq = e, this._blendSrc = i, this._blendDst = r, this._blendAlphaEq = s, this._blendSrcAlpha = o, this._blendDstAlpha = a, this._blendColor = l
            }, t.prototype.setDepth = function() {
                var t = arguments.length > 0 && void 0 !== arguments[0] && arguments[0],
                    e = arguments.length > 1 && void 0 !== arguments[1] && arguments[1],
                    i = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : n.default.DS_FUNC_LESS;
                this._depthTest = t, this._depthWrite = e, this._depthFunc = i
            }, t.prototype.setStencilFront = function() {
                var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : n.default.STENCIL_INHERIT,
                    e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : n.default.DS_FUNC_ALWAYS,
                    i = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 0,
                    r = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : 255,
                    s = arguments.length > 4 && void 0 !== arguments[4] ? arguments[4] : n.default.STENCIL_OP_KEEP,
                    o = arguments.length > 5 && void 0 !== arguments[5] ? arguments[5] : n.default.STENCIL_OP_KEEP,
                    a = arguments.length > 6 && void 0 !== arguments[6] ? arguments[6] : n.default.STENCIL_OP_KEEP,
                    l = arguments.length > 7 && void 0 !== arguments[7] ? arguments[7] : 255;
                this._stencilTest = t, this._stencilFuncFront = e, this._stencilRefFront = i, this._stencilMaskFront = r, this._stencilFailOpFront = s, this._stencilZFailOpFront = o, this._stencilZPassOpFront = a, this._stencilWriteMaskFront = l
            }, t.prototype.setStencilEnabled = function() {
                var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : n.default.STENCIL_INHERIT;
                this._stencilTest = t
            }, t.prototype.setStencilBack = function() {
                var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : n.default.STENCIL_INHERIT,
                    e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : n.default.DS_FUNC_ALWAYS,
                    i = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 0,
                    r = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : 255,
                    s = arguments.length > 4 && void 0 !== arguments[4] ? arguments[4] : n.default.STENCIL_OP_KEEP,
                    o = arguments.length > 5 && void 0 !== arguments[5] ? arguments[5] : n.default.STENCIL_OP_KEEP,
                    a = arguments.length > 6 && void 0 !== arguments[6] ? arguments[6] : n.default.STENCIL_OP_KEEP,
                    l = arguments.length > 7 && void 0 !== arguments[7] ? arguments[7] : 255;
                this._stencilTest = t, this._stencilFuncBack = e, this._stencilRefBack = i, this._stencilMaskBack = r, this._stencilFailOpBack = s, this._stencilZFailOpBack = o, this._stencilZPassOpBack = a, this._stencilWriteMaskBack = l
            }, t.prototype.clone = function() {
                var e = new t(this._programName);
                return Object.assign(e, this), e
            }, t
        })();
        i.default = s, e.exports = i.default
    }), {
        "../gfx": 360
    }],
    352: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.default = void 0;
        var n = (function(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        })(t("../gfx"));

        function r(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }
        var s = 0;

        function o(t) {
            for (var e = [], i = {}, n = t.length - 1; n >= 0; n--) {
                var r = t[n];
                for (var s in r) {
                    var o = r[s];
                    void 0 !== o && (void 0 === i[s] && ("number" != typeof o && (o = o ? 1 : 0), i[s] = o, e.push("#define " + s + " " + o)))
                }
            }
            return e.join("\n") + "\n"
        }

        function a(t, e) {
            for (var i = {}, n = t, r = e.length - 1; r >= 0; r--) {
                var s = e[r];
                for (var o in s) {
                    var a = s[o];
                    void 0 !== a && (void 0 === i[o] && Number.isInteger(a) && (i[o] = a))
                }
            }
            for (var l in i) {
                var h = new RegExp(l, "g");
                n = n.replace(h, i[l])
            }
            return n
        }

        function l(t) {
            return t.replace(/#pragma for (\w+) in range\(\s*(\d+)\s*,\s*(\d+)\s*\)([\s\S]+?)#pragma endFor/g, (function(t, e, i, n, r) {
                var s = "",
                    o = parseInt(i),
                    a = parseInt(n);
                (o.isNaN || a.isNaN) && console.error("Unroll For Loops Error: begin and end of range must be an int num.");
                for (var l = o; l < a; ++l) s += r.replace(new RegExp("{" + e + "}", "g"), l);
                return s
            }))
        }

        function h(t) {
            return t.replace(/\bhighp\b/g, "mediump")
        }
        var c = (function() {
            function t(e) {
                r(this, t), this._device = e, this._templates = {}, this._cache = {}, this._checkPrecision()
            }
            return t.prototype.clear = function() {
                this._templates = {}, this._cache = {}
            }, t.prototype.define = function(t) {
                var e = t.name,
                    i = t.defines,
                    n = t.glsl1 || t,
                    r = n.vert,
                    o = n.frag;
                if (!this._templates[e]) {
                    for (var a = ++s, l = 0, h = 0; h < i.length; ++h) {
                        var c = i[h],
                            u = 1;
                        if ("number" === c.type) {
                            var _ = c.range || [];
                            c.min = _[0] || 0, c.max = _[1] || 4, u = Math.ceil(Math.log2(c.max - c.min)), c._map = function(t) {
                                return t - this.min << this._offset
                            }.bind(c)
                        } else c._map = function(t) {
                            return t ? 1 << this._offset : 0
                        }.bind(c);
                        l += u, c._offset = l
                    }
                    var f = t.uniforms || [];
                    if (t.samplers)
                        for (var d = 0; d < t.samplers.length; d++) f.push(t.samplers[d]);
                    if (t.blocks)
                        for (var p = 0; p < t.blocks.length; p++)
                            for (var m = t.blocks[p].defines, y = t.blocks[p].members, v = 0; v < y.length; v++) f.push({
                                defines: m,
                                name: y[v].name,
                                type: y[v].type
                            });
                    this._templates[e] = {
                        id: a,
                        name: e,
                        vert: r,
                        frag: o,
                        defines: i,
                        attributes: t.attributes,
                        uniforms: f,
                        extensions: t.extensions
                    }
                }
            }, t.prototype.getTemplate = function(t) {
                return this._templates[t]
            }, t.prototype.hasProgram = function(t) {
                return void 0 !== this._templates[t]
            }, t.prototype.getKey = function(t, e) {
                for (var i = this._templates[t], n = 0, r = 0; r < i.defines.length; ++r) {
                    var s = i.defines[r],
                        o = this._getValueFromDefineList(s.name, e);
                    void 0 !== o && (n |= s._map(o))
                }
                return i.id + ":" + n
            }, t.prototype.getProgram = function(t, e, i) {
                var r = this.getKey(t, e),
                    s = this._cache[r];
                if (s) return s;
                var c = this._templates[t],
                    u = o(e),
                    _ = a(c.vert, e);
                _ = u + l(_), this._highpSupported || (_ = h(_));
                var f = a(c.frag, e);
                f = u + l(f), this._highpSupported || (f = h(f));
                var d = (s = new n.default.Program(this._device, {
                    vert: _,
                    frag: f
                })).link();
                if (d) {
                    var p = _.split("\n"),
                        m = f.split("\n"),
                        y = Object.keys(e).length;
                    d.forEach((function(t) {
                        var e = t.line - 1,
                            n = t.line - y,
                            r = ("vs" === t.type ? p : m)[e],
                            s = t.info || "Failed to compile " + t.type + " " + t.fileID + " (ln " + n + "): \n " + t.message + ": \n  " + r;
                        cc.error(i + " : " + s)
                    }))
                }
                return this._cache[r] = s, s
            }, t.prototype._getValueFromDefineList = function(t, e) {
                for (var i = void 0, n = e.length - 1; n >= 0; n--)
                    if (void 0 !== (i = e[n][t])) return i
            }, t.prototype._checkPrecision = function() {
                var t = this._device._gl,
                    e = !1;
                if (t.getShaderPrecisionFormat) {
                    var i = t.getShaderPrecisionFormat(t.VERTEX_SHADER, t.HIGH_FLOAT),
                        n = t.getShaderPrecisionFormat(t.FRAGMENT_SHADER, t.HIGH_FLOAT);
                    e = i && i.precision > 0 && n && n.precision > 0
                }
                e || cc.warnID(9102), this._highpSupported = e
            }, t
        })();
        i.default = c, e.exports = i.default
    }), {
        "../gfx": 360
    }],
    353: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.default = void 0;
        var n = (function() {
                function t(t, e) {
                    for (var i = 0; i < e.length; i++) {
                        var n = e[i];
                        n.enumerable = n.enumerable || !1, n.configurable = !0, "value" in n && (n.writable = !0), Object.defineProperty(t, n.key, n)
                    }
                }
                return function(e, i, n) {
                    return i && t(e.prototype, i), n && t(e, n), e
                }
            })(),
            r = (function(t) {
                return t && t.__esModule ? t : {
                    default: t
                }
            })(t("../config"));

        function s(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }
        var o = 0,
            a = (function() {
                function t(e, i) {
                    var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 0;
                    s(this, t), this._id = o++, this._stages = e, this._stageIDs = r.default.stageIDs(e), this._passes = i, this._layer = n
                }
                return t.prototype.setStages = function(t) {
                    this._stageIDs = r.default.stageIDs(t)
                }, t.prototype.clone = function() {
                    for (var e = [], i = 0; i < this._passes.length; i++) e.push(this._passes[i].clone());
                    return new t(this._stages, e, this._layer)
                }, n(t, [{
                    key: "passes",
                    get: function() {
                        return this._passes
                    }
                }, {
                    key: "stageIDs",
                    get: function() {
                        return this._stageIDs
                    }
                }]), t
            })();
        i.default = a, e.exports = i.default
    }), {
        "../config": 347
    }],
    354: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.default = void 0;
        var n = t("../../core/vmath"),
            r = (function(t) {
                return t && t.__esModule ? t : {
                    default: t
                }
            })(t("../enums"));

        function s(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }
        var o = n.mat4.create(),
            a = 0,
            l = (function() {
                function t() {
                    s(this, t), this._id = a++, this._priority = 0, this._rect = {
                        x: 0,
                        y: 0,
                        w: 1,
                        h: 1
                    }, this._color = n.color4.create(.3, .3, .3, 1), this._depth = 1, this._stencil = 0, this._clearFlags = r.default.CLEAR_COLOR | r.default.CLEAR_DEPTH, this._clearModel = null, this._matView = n.mat4.create(), this._matProj = n.mat4.create(), this._matViewProj = n.mat4.create(), this._matInvViewProj = n.mat4.create(), this._stages = [], this._cullingByID = !1, this._framebuffer = null, this._shadowLight = null, this._cullingMask = 4294967295
                }
                return t.prototype.getForward = function(t) {
                    var e = this._matView.m;
                    return n.vec3.set(t, -e[2], -e[6], -e[10])
                }, t.prototype.getPosition = function(t) {
                    return n.mat4.invert(o, this._matView), n.mat4.getTranslation(t, o)
                }, t
            })();
        i.default = l, e.exports = i.default
    }), {
        "../../core/vmath": 326,
        "../enums": 355
    }],
    355: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0;
        var n = t("./build/mappings");
        i.default = {
            PROJ_PERSPECTIVE: 0,
            PROJ_ORTHO: 1,
            LIGHT_DIRECTIONAL: 0,
            LIGHT_POINT: 1,
            LIGHT_SPOT: 2,
            LIGHT_AMBIENT: 3,
            SHADOW_NONE: 0,
            SHADOW_HARD: 1,
            SHADOW_SOFT: 2,
            PARAM_INT: n.typeMap.int,
            PARAM_INT2: n.typeMap.ivec2,
            PARAM_INT3: n.typeMap.ivec3,
            PARAM_INT4: n.typeMap.ivec4,
            PARAM_FLOAT: n.typeMap.float,
            PARAM_FLOAT2: n.typeMap.vec2,
            PARAM_FLOAT3: n.typeMap.vec3,
            PARAM_FLOAT4: n.typeMap.vec4,
            PARAM_MAT2: n.typeMap.mat2,
            PARAM_MAT3: n.typeMap.mat3,
            PARAM_MAT4: n.typeMap.mat4,
            PARAM_TEXTURE_2D: n.typeMap.sampler2D,
            PARAM_TEXTURE_CUBE: n.typeMap.samplerCube,
            CLEAR_COLOR: 1,
            CLEAR_DEPTH: 2,
            CLEAR_STENCIL: 4,
            CLEAR_SKYBOX: 8,
            BUFFER_VIEW_INT8: 0,
            BUFFER_VIEW_UINT8: 1,
            BUFFER_VIEW_INT16: 2,
            BUFFER_VIEW_UINT16: 3,
            BUFFER_VIEW_INT32: 4,
            BUFFER_VIEW_UINT32: 5,
            BUFFER_VIEW_FLOAT32: 6
        }, e.exports = i.default
    }), {
        "./build/mappings": 346
    }],
    356: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.default = void 0;
        var n, r, s = (function() {
                function t(t, e) {
                    for (var i = 0; i < e.length; i++) {
                        var n = e[i];
                        n.enumerable = n.enumerable || !1, n.configurable = !0, "value" in n && (n.writable = !0), Object.defineProperty(t, n.key, n)
                    }
                }
                return function(e, i, n) {
                    return i && t(e.prototype, i), n && t(e, n), e
                }
            })(),
            o = c(t("./state")),
            a = t("./enums"),
            l = c(t("./texture-2d")),
            h = c(t("./texture-cube"));

        function c(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }

        function u(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }
        var _ = ((n = {})[5124] = function(t, e, i) {
                t.uniform1i(e, i)
            }, n[5126] = function(t, e, i) {
                t.uniform1f(e, i)
            }, n[35664] = function(t, e, i) {
                t.uniform2fv(e, i)
            }, n[35665] = function(t, e, i) {
                t.uniform3fv(e, i)
            }, n[35666] = function(t, e, i) {
                t.uniform4fv(e, i)
            }, n[35667] = function(t, e, i) {
                t.uniform2iv(e, i)
            }, n[35668] = function(t, e, i) {
                t.uniform3iv(e, i)
            }, n[35669] = function(t, e, i) {
                t.uniform4iv(e, i)
            }, n[35670] = function(t, e, i) {
                t.uniform1i(e, i)
            }, n[35671] = function(t, e, i) {
                t.uniform2iv(e, i)
            }, n[35672] = function(t, e, i) {
                t.uniform3iv(e, i)
            }, n[35673] = function(t, e, i) {
                t.uniform4iv(e, i)
            }, n[35674] = function(t, e, i) {
                t.uniformMatrix2fv(e, !1, i)
            }, n[35675] = function(t, e, i) {
                t.uniformMatrix3fv(e, !1, i)
            }, n[35676] = function(t, e, i) {
                t.uniformMatrix4fv(e, !1, i)
            }, n[35678] = function(t, e, i) {
                t.uniform1i(e, i)
            }, n[35680] = function(t, e, i) {
                t.uniform1i(e, i)
            }, n),
            f = ((r = {})[5124] = function(t, e, i) {
                t.uniform1iv(e, i)
            }, r[5126] = function(t, e, i) {
                t.uniform1fv(e, i)
            }, r[35664] = function(t, e, i) {
                t.uniform2fv(e, i)
            }, r[35665] = function(t, e, i) {
                t.uniform3fv(e, i)
            }, r[35666] = function(t, e, i) {
                t.uniform4fv(e, i)
            }, r[35667] = function(t, e, i) {
                t.uniform2iv(e, i)
            }, r[35668] = function(t, e, i) {
                t.uniform3iv(e, i)
            }, r[35669] = function(t, e, i) {
                t.uniform4iv(e, i)
            }, r[35670] = function(t, e, i) {
                t.uniform1iv(e, i)
            }, r[35671] = function(t, e, i) {
                t.uniform2iv(e, i)
            }, r[35672] = function(t, e, i) {
                t.uniform3iv(e, i)
            }, r[35673] = function(t, e, i) {
                t.uniform4iv(e, i)
            }, r[35674] = function(t, e, i) {
                t.uniformMatrix2fv(e, !1, i)
            }, r[35675] = function(t, e, i) {
                t.uniformMatrix3fv(e, !1, i)
            }, r[35676] = function(t, e, i) {
                t.uniformMatrix4fv(e, !1, i)
            }, r[35678] = function(t, e, i) {
                t.uniform1iv(e, i)
            }, r[35680] = function(t, e, i) {
                t.uniform1iv(e, i)
            }, r);

        function d(t, e, i) {
            if (e.blend !== i.blend) return i.blend ? (t.enable(t.BLEND), i.blendSrc !== a.enums.BLEND_CONSTANT_COLOR && i.blendSrc !== a.enums.BLEND_ONE_MINUS_CONSTANT_COLOR && i.blendDst !== a.enums.BLEND_CONSTANT_COLOR && i.blendDst !== a.enums.BLEND_ONE_MINUS_CONSTANT_COLOR || t.blendColor((i.blendColor >> 24) / 255, (i.blendColor >> 16 & 255) / 255, (i.blendColor >> 8 & 255) / 255, (255 & i.blendColor) / 255), void(i.blendSep ? (t.blendFuncSeparate(i.blendSrc, i.blendDst, i.blendSrcAlpha, i.blendDstAlpha), t.blendEquationSeparate(i.blendEq, i.blendAlphaEq)) : (t.blendFunc(i.blendSrc, i.blendDst), t.blendEquation(i.blendEq)))) : void t.disable(t.BLEND);
            !1 !== i.blend && (e.blendColor !== i.blendColor && t.blendColor((i.blendColor >> 24) / 255, (i.blendColor >> 16 & 255) / 255, (i.blendColor >> 8 & 255) / 255, (255 & i.blendColor) / 255), e.blendSep === i.blendSep ? i.blendSep ? (e.blendSrc === i.blendSrc && e.blendDst === i.blendDst && e.blendSrcAlpha === i.blendSrcAlpha && e.blendDstAlpha === i.blendDstAlpha || t.blendFuncSeparate(i.blendSrc, i.blendDst, i.blendSrcAlpha, i.blendDstAlpha), e.blendEq === i.blendEq && e.blendAlphaEq === i.blendAlphaEq || t.blendEquationSeparate(i.blendEq, i.blendAlphaEq)) : (e.blendSrc === i.blendSrc && e.blendDst === i.blendDst || t.blendFunc(i.blendSrc, i.blendDst), e.blendEq !== i.blendEq && t.blendEquation(i.blendEq)) : i.blendSep ? (t.blendFuncSeparate(i.blendSrc, i.blendDst, i.blendSrcAlpha, i.blendDstAlpha), t.blendEquationSeparate(i.blendEq, i.blendAlphaEq)) : (t.blendFunc(i.blendSrc, i.blendDst), t.blendEquation(i.blendEq)))
        }

        function p(t, e, i) {
            if (e.depthTest !== i.depthTest) return i.depthTest ? (t.enable(t.DEPTH_TEST), t.depthFunc(i.depthFunc), void t.depthMask(i.depthWrite)) : void t.disable(t.DEPTH_TEST);
            e.depthWrite !== i.depthWrite && t.depthMask(i.depthWrite), !1 !== i.depthTest ? e.depthFunc !== i.depthFunc && t.depthFunc(i.depthFunc) : i.depthWrite && (i.depthTest = !0, i.depthFunc = a.enums.DS_FUNC_ALWAYS, t.enable(t.DEPTH_TEST), t.depthFunc(i.depthFunc))
        }

        function m(t, e, i) {
            if (i.stencilTest !== a.enums.STENCIL_INHERIT) return i.stencilTest !== e.stencilTest ? i.stencilTest === a.enums.STENCIL_DISABLE ? void t.disable(t.STENCIL_TEST) : (t.enable(t.STENCIL_TEST), void(i.stencilSep ? (t.stencilFuncSeparate(t.FRONT, i.stencilFuncFront, i.stencilRefFront, i.stencilMaskFront), t.stencilMaskSeparate(t.FRONT, i.stencilWriteMaskFront), t.stencilOpSeparate(t.FRONT, i.stencilFailOpFront, i.stencilZFailOpFront, i.stencilZPassOpFront), t.stencilFuncSeparate(t.BACK, i.stencilFuncBack, i.stencilRefBack, i.stencilMaskBack), t.stencilMaskSeparate(t.BACK, i.stencilWriteMaskBack), t.stencilOpSeparate(t.BACK, i.stencilFailOpBack, i.stencilZFailOpBack, i.stencilZPassOpBack)) : (t.stencilFunc(i.stencilFuncFront, i.stencilRefFront, i.stencilMaskFront), t.stencilMask(i.stencilWriteMaskFront), t.stencilOp(i.stencilFailOpFront, i.stencilZFailOpFront, i.stencilZPassOpFront)))) : void(i.stencilTest !== a.enums.STENCIL_DISABLE && (e.stencilSep === i.stencilSep ? i.stencilSep ? (e.stencilFuncFront === i.stencilFuncFront && e.stencilRefFront === i.stencilRefFront && e.stencilMaskFront === i.stencilMaskFront || t.stencilFuncSeparate(t.FRONT, i.stencilFuncFront, i.stencilRefFront, i.stencilMaskFront), e.stencilWriteMaskFront !== i.stencilWriteMaskFront && t.stencilMaskSeparate(t.FRONT, i.stencilWriteMaskFront), e.stencilFailOpFront === i.stencilFailOpFront && e.stencilZFailOpFront === i.stencilZFailOpFront && e.stencilZPassOpFront === i.stencilZPassOpFront || t.stencilOpSeparate(t.FRONT, i.stencilFailOpFront, i.stencilZFailOpFront, i.stencilZPassOpFront), e.stencilFuncBack === i.stencilFuncBack && e.stencilRefBack === i.stencilRefBack && e.stencilMaskBack === i.stencilMaskBack || t.stencilFuncSeparate(t.BACK, i.stencilFuncBack, i.stencilRefBack, i.stencilMaskBack), e.stencilWriteMaskBack !== i.stencilWriteMaskBack && t.stencilMaskSeparate(t.BACK, i.stencilWriteMaskBack), e.stencilFailOpBack === i.stencilFailOpBack && e.stencilZFailOpBack === i.stencilZFailOpBack && e.stencilZPassOpBack === i.stencilZPassOpBack || t.stencilOpSeparate(t.BACK, i.stencilFailOpBack, i.stencilZFailOpBack, i.stencilZPassOpBack)) : (e.stencilFuncFront === i.stencilFuncFront && e.stencilRefFront === i.stencilRefFront && e.stencilMaskFront === i.stencilMaskFront || t.stencilFunc(i.stencilFuncFront, i.stencilRefFront, i.stencilMaskFront), e.stencilWriteMaskFront !== i.stencilWriteMaskFront && t.stencilMask(i.stencilWriteMaskFront), e.stencilFailOpFront === i.stencilFailOpFront && e.stencilZFailOpFront === i.stencilZFailOpFront && e.stencilZPassOpFront === i.stencilZPassOpFront || t.stencilOp(i.stencilFailOpFront, i.stencilZFailOpFront, i.stencilZPassOpFront)) : i.stencilSep ? (t.stencilFuncSeparate(t.FRONT, i.stencilFuncFront, i.stencilRefFront, i.stencilMaskFront), t.stencilMaskSeparate(t.FRONT, i.stencilWriteMaskFront), t.stencilOpSeparate(t.FRONT, i.stencilFailOpFront, i.stencilZFailOpFront, i.stencilZPassOpFront), t.stencilFuncSeparate(t.BACK, i.stencilFuncBack, i.stencilRefBack, i.stencilMaskBack), t.stencilMaskSeparate(t.BACK, i.stencilWriteMaskBack), t.stencilOpSeparate(t.BACK, i.stencilFailOpBack, i.stencilZFailOpBack, i.stencilZPassOpBack)) : (t.stencilFunc(i.stencilFuncFront, i.stencilRefFront, i.stencilMaskFront), t.stencilMask(i.stencilWriteMaskFront), t.stencilOp(i.stencilFailOpFront, i.stencilZFailOpFront, i.stencilZPassOpFront))))
        }

        function y(t, e, i) {
            e.cullMode !== i.cullMode && (i.cullMode !== a.enums.CULL_NONE ? (t.enable(t.CULL_FACE), t.cullFace(i.cullMode)) : t.disable(t.CULL_FACE))
        }

        function v(t, e, i, n) {
            var r = !1;
            if (-1 !== n.maxStream) {
                if (i.maxStream !== n.maxStream) r = !0;
                else if (i.program !== n.program) r = !0;
                else
                    for (var s = 0; s < n.maxStream + 1; ++s)
                        if (i.vertexBuffers[s] !== n.vertexBuffers[s] || i.vertexBufferOffsets[s] !== n.vertexBufferOffsets[s]) {
                            r = !0;
                            break
                        } if (r) {
                    for (var o = 0; o < t._caps.maxVertexAttribs; ++o) t._newAttributes[o] = 0;
                    for (var a = 0; a < n.maxStream + 1; ++a) {
                        var l = n.vertexBuffers[a],
                            h = n.vertexBufferOffsets[a];
                        if (l && -1 !== l._glID) {
                            e.bindBuffer(e.ARRAY_BUFFER, l._glID);
                            for (var c = 0; c < n.program._attributes.length; ++c) {
                                var u = n.program._attributes[c],
                                    _ = l._format.element(u.name);
                                _ ? (0 === t._enabledAttributes[u.location] && (e.enableVertexAttribArray(u.location), t._enabledAttributes[u.location] = 1), t._newAttributes[u.location] = 1, e.vertexAttribPointer(u.location, _.num, _.type, _.normalize, _.stride, _.offset + h * _.stride)) : console.warn("Can not find vertex attribute: " + u.name)
                            }
                        }
                    }
                    for (var f = 0; f < t._caps.maxVertexAttribs; ++f) t._enabledAttributes[f] !== t._newAttributes[f] && (e.disableVertexAttribArray(f), t._enabledAttributes[f] = 0)
                }
            }
        }

        function g(t, e, i) {
            for (var n = 0; n < i.maxTextureSlot + 1; ++n)
                if (e.textureUnits[n] !== i.textureUnits[n]) {
                    var r = i.textureUnits[n];
                    r && -1 !== r._glID && (t.activeTexture(t.TEXTURE0 + n), t.bindTexture(r._target, r._glID))
                }
        }

        function x(t, e, i) {
            var n = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : 0;
            i instanceof l.default ? t.framebufferTexture2D(t.FRAMEBUFFER, e, t.TEXTURE_2D, i._glID, 0) : i instanceof h.default ? t.framebufferTexture2D(t.FRAMEBUFFER, e, t.TEXTURE_CUBE_MAP_POSITIVE_X + n, i._glID, 0) : t.framebufferRenderbuffer(t.FRAMEBUFFER, e, t.RENDERBUFFER, i._glID)
        }
        var b = (function() {
            function t(e, i) {
                u(this, t);
                var n = void 0;
                void 0 === (i = i || {}).alpha && (i.alpha = !1), void 0 === i.stencil && (i.stencil = !0), void 0 === i.depth && (i.depth = !0), void 0 === i.antialias && (i.antialias = !1), void 0 === i.preserveDrawingBuffer && (i.preserveDrawingBuffer = !1);
                try {
                    n = e.getContext("webgl", i) || e.getContext("experimental-webgl", i) || e.getContext("webkit-3d", i) || e.getContext("moz-webgl", i)
                } catch (t) {
                    return void console.error(t)
                }
                n || console.error("This device does not support webgl"), this._gl = n, this._extensions = {}, this._caps = {}, this._stats = {
                    texture: 0,
                    vb: 0,
                    ib: 0,
                    drawcalls: 0
                }, this._initExtensions(["EXT_texture_filter_anisotropic", "EXT_shader_texture_lod", "OES_standard_derivatives", "OES_texture_float", "OES_texture_float_linear", "OES_texture_half_float", "OES_texture_half_float_linear", "OES_vertex_array_object", "WEBGL_compressed_texture_atc", "WEBGL_compressed_texture_etc", "WEBGL_compressed_texture_etc1", "WEBGL_compressed_texture_pvrtc", "WEBGL_compressed_texture_s3tc", "WEBGL_depth_texture", "WEBGL_draw_buffers"]), this._initCaps(), this._initStates(), o.default.initDefault(this), this._current = new o.default(this), this._next = new o.default(this), this._uniforms = {}, this._vx = this._vy = this._vw = this._vh = 0, this._sx = this._sy = this._sw = this._sh = 0, this._framebuffer = null, this._enabledAttributes = new Array(this._caps.maxVertexAttribs), this._newAttributes = new Array(this._caps.maxVertexAttribs);
                for (var r = 0; r < this._caps.maxVertexAttribs; ++r) this._enabledAttributes[r] = 0, this._newAttributes[r] = 0
            }
            return s(t, [{
                key: "caps",
                get: function() {
                    return this._caps
                }
            }]), t.prototype._initExtensions = function(t) {
                for (var e = this._gl, i = 0; i < t.length; ++i)
                    for (var n = t[i], r = ["", "WEBKIT_", "MOZ_"], s = 0; s < r.length; s++) try {
                        var o = e.getExtension(r[s] + n);
                        if (o) {
                            this._extensions[n] = o;
                            break
                        }
                    } catch (t) {
                        console.error(t)
                    }
            }, t.prototype._initCaps = function() {
                var t = this._gl,
                    e = this.ext("WEBGL_draw_buffers");
                this._caps.maxVertexStreams = 4, this._caps.maxVertexTextures = t.getParameter(t.MAX_VERTEX_TEXTURE_IMAGE_UNITS), this._caps.maxFragUniforms = t.getParameter(t.MAX_FRAGMENT_UNIFORM_VECTORS), this._caps.maxTextureUnits = t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS), this._caps.maxVertexAttribs = t.getParameter(t.MAX_VERTEX_ATTRIBS), this._caps.maxTextureSize = t.getParameter(t.MAX_TEXTURE_SIZE), this._caps.maxDrawBuffers = e ? t.getParameter(e.MAX_DRAW_BUFFERS_WEBGL) : 1, this._caps.maxColorAttachments = e ? t.getParameter(e.MAX_COLOR_ATTACHMENTS_WEBGL) : 1
            }, t.prototype._initStates = function() {
                var t = this._gl;
                t.disable(t.BLEND), t.blendFunc(t.ONE, t.ZERO), t.blendEquation(t.FUNC_ADD), t.blendColor(1, 1, 1, 1), t.colorMask(!0, !0, !0, !0), t.enable(t.CULL_FACE), t.cullFace(t.BACK), t.disable(t.DEPTH_TEST), t.depthFunc(t.LESS), t.depthMask(!1), t.disable(t.POLYGON_OFFSET_FILL), t.depthRange(0, 1), t.disable(t.STENCIL_TEST), t.stencilFunc(t.ALWAYS, 0, 255), t.stencilMask(255), t.stencilOp(t.KEEP, t.KEEP, t.KEEP), t.clearDepth(1), t.clearColor(0, 0, 0, 0), t.clearStencil(0), t.disable(t.SCISSOR_TEST)
            }, t.prototype._restoreTexture = function(t) {
                var e = this._gl,
                    i = this._current.textureUnits[t];
                i && -1 !== i._glID ? e.bindTexture(i._target, i._glID) : e.bindTexture(e.TEXTURE_2D, null)
            }, t.prototype._restoreIndexBuffer = function() {
                var t = this._gl,
                    e = this._current.indexBuffer;
                e && -1 !== e._glID ? t.bindBuffer(t.ELEMENT_ARRAY_BUFFER, e._glID) : t.bindBuffer(t.ELEMENT_ARRAY_BUFFER, null)
            }, t.prototype.ext = function(t) {
                return this._extensions[t]
            }, t.prototype.allowFloatTexture = function() {
                return null != this.ext("OES_texture_float")
            }, t.prototype.setFrameBuffer = function(t) {
                if (this._framebuffer !== t) {
                    this._framebuffer = t;
                    var e = this._gl;
                    if (null !== t) {
                        e.bindFramebuffer(e.FRAMEBUFFER, t._glID);
                        for (var i = t._colors.length, n = 0; n < i; ++n) {
                            var r = t._colors[n];
                            x(e, e.COLOR_ATTACHMENT0 + n, r)
                        }
                        for (var s = i; s < this._caps.maxColorAttachments; ++s) e.framebufferTexture2D(e.FRAMEBUFFER, e.COLOR_ATTACHMENT0 + s, e.TEXTURE_2D, null, 0);
                        t._depth && x(e, e.DEPTH_ATTACHMENT, t._depth), t._stencil && x(e, e.STENCIL_ATTACHMENT, t._stencil), t._depthStencil && x(e, e.DEPTH_STENCIL_ATTACHMENT, t._depthStencil)
                    } else e.bindFramebuffer(e.FRAMEBUFFER, null)
                }
            }, t.prototype.setViewport = function(t, e, i, n) {
                this._vx === t && this._vy === e && this._vw === i && this._vh === n || (this._gl.viewport(t, e, i, n), this._vx = t, this._vy = e, this._vw = i, this._vh = n)
            }, t.prototype.setScissor = function(t, e, i, n) {
                this._sx === t && this._sy === e && this._sw === i && this._sh === n || (this._gl.scissor(t, e, i, n), this._sx = t, this._sy = e, this._sw = i, this._sh = n)
            }, t.prototype.clear = function(t) {
                if (void 0 !== t.color || void 0 !== t.depth || void 0 !== t.stencil) {
                    var e = this._gl,
                        i = 0;
                    void 0 !== t.color && (i |= e.COLOR_BUFFER_BIT, e.clearColor(t.color[0], t.color[1], t.color[2], t.color[3])), void 0 !== t.depth && (i |= e.DEPTH_BUFFER_BIT, e.clearDepth(t.depth), e.enable(e.DEPTH_TEST), e.depthMask(!0), e.depthFunc(e.ALWAYS)), void 0 !== t.stencil && (i |= e.STENCIL_BUFFER_BIT, e.clearStencil(t.stencil)), e.clear(i), void 0 !== t.depth && (!1 === this._current.depthTest ? e.disable(e.DEPTH_TEST) : (!1 === this._current.depthWrite && e.depthMask(!1), this._current.depthFunc !== a.enums.DS_FUNC_ALWAYS && e.depthFunc(this._current.depthFunc)))
                }
            }, t.prototype.enableBlend = function() {
                this._next.blend = !0
            }, t.prototype.enableDepthTest = function() {
                this._next.depthTest = !0
            }, t.prototype.enableDepthWrite = function() {
                this._next.depthWrite = !0
            }, t.prototype.setStencilTest = function(t) {
                this._next.stencilTest = t
            }, t.prototype.setStencilFunc = function(t, e, i) {
                this._next.stencilSep = !1, this._next.stencilFuncFront = this._next.stencilFuncBack = t, this._next.stencilRefFront = this._next.stencilRefBack = e, this._next.stencilMaskFront = this._next.stencilMaskBack = i
            }, t.prototype.setStencilFuncFront = function(t, e, i) {
                this._next.stencilSep = !0, this._next.stencilFuncFront = t, this._next.stencilRefFront = e, this._next.stencilMaskFront = i
            }, t.prototype.setStencilFuncBack = function(t, e, i) {
                this._next.stencilSep = !0, this._next.stencilFuncBack = t, this._next.stencilRefBack = e, this._next.stencilMaskBack = i
            }, t.prototype.setStencilOp = function(t, e, i, n) {
                this._next.stencilFailOpFront = this._next.stencilFailOpBack = t, this._next.stencilZFailOpFront = this._next.stencilZFailOpBack = e, this._next.stencilZPassOpFront = this._next.stencilZPassOpBack = i, this._next.stencilWriteMaskFront = this._next.stencilWriteMaskBack = n
            }, t.prototype.setStencilOpFront = function(t, e, i, n) {
                this._next.stencilSep = !0, this._next.stencilFailOpFront = t, this._next.stencilZFailOpFront = e, this._next.stencilZPassOpFront = i, this._next.stencilWriteMaskFront = n
            }, t.prototype.setStencilOpBack = function(t, e, i, n) {
                this._next.stencilSep = !0, this._next.stencilFailOpBack = t, this._next.stencilZFailOpBack = e, this._next.stencilZPassOpBack = i, this._next.stencilWriteMaskBack = n
            }, t.prototype.setDepthFunc = function(t) {
                this._next.depthFunc = t
            }, t.prototype.setBlendColor32 = function(t) {
                this._next.blendColor = t
            }, t.prototype.setBlendColor = function(t, e, i, n) {
                this._next.blendColor = (255 * t << 24 | 255 * e << 16 | 255 * i << 8 | 255 * n) >>> 0
            }, t.prototype.setBlendFunc = function(t, e) {
                this._next.blendSep = !1, this._next.blendSrc = t, this._next.blendDst = e
            }, t.prototype.setBlendFuncSep = function(t, e, i, n) {
                this._next.blendSep = !0, this._next.blendSrc = t, this._next.blendDst = e, this._next.blendSrcAlpha = i, this._next.blendDstAlpha = n
            }, t.prototype.setBlendEq = function(t) {
                this._next.blendSep = !1, this._next.blendEq = t
            }, t.prototype.setBlendEqSep = function(t, e) {
                this._next.blendSep = !0, this._next.blendEq = t, this._next.blendAlphaEq = e
            }, t.prototype.setCullMode = function(t) {
                this._next.cullMode = t
            }, t.prototype.setVertexBuffer = function(t, e) {
                var i = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 0;
                this._next.vertexBuffers[t] = e, this._next.vertexBufferOffsets[t] = i, this._next.maxStream < t && (this._next.maxStream = t)
            }, t.prototype.setIndexBuffer = function(t) {
                this._next.indexBuffer = t
            }, t.prototype.setProgram = function(t) {
                this._next.program = t
            }, t.prototype.setTexture = function(t, e, i) {
                i >= this._caps.maxTextureUnits ? console.warn("Can not set texture " + t + " at stage " + i + ", max texture exceed: " + this._caps.maxTextureUnits) : (this._next.textureUnits[i] = e, this.setUniform(t, i), this._next.maxTextureSlot < i && (this._next.maxTextureSlot = i))
            }, t.prototype.setTextureArray = function(t, e, i) {
                var n = e.length;
                if (n >= this._caps.maxTextureUnits) console.warn("Can not set " + n + " textures for " + t + ", max texture exceed: " + this._caps.maxTextureUnits);
                else {
                    for (var r = 0; r < n; ++r) {
                        var s = i[r];
                        this._next.textureUnits[s] = e[r]
                    }
                    this.setUniform(t, i)
                }
            }, t.prototype.setUniform = function(t, e) {
                var i = this._uniforms[t],
                    n = !1,
                    r = !1,
                    s = !1,
                    o = !1;
                do {
                    if (!i) break;
                    if (s = Array.isArray(e) || e instanceof Float32Array, o = e instanceof Int32Array, r = s || o, i.isArray !== r) break;
                    if (i.isArray && i.value.length !== e.length) break;
                    n = !0
                } while (0);
                if (n) {
                    var a = i.value,
                        l = !1;
                    if (i.isArray)
                        for (var h = 0, c = a.length; h < c; h++) a[h] !== e[h] && (l = !0, a[h] = e[h]);
                    else a !== e && (l = !0, i.value = e);
                    l && (i.dirty = !0)
                } else {
                    var u = e;
                    s ? u = new Float32Array(e) : o && (u = new Int32Array(e)), i = {
                        dirty: !0,
                        value: u,
                        isArray: r
                    }
                }
                this._uniforms[t] = i
            }, t.prototype.setUniformDirectly = function(t, e) {
                var i = this._uniforms[t];
                i || (this._uniforms[t] = i = {}), i.dirty = !0, i.value = e
            }, t.prototype.setPrimitiveType = function(t) {
                this._next.primitiveType = t
            }, t.prototype.resetDrawCalls = function() {
                this._stats.drawcalls = 0
            }, t.prototype.getDrawCalls = function() {
                return this._stats.drawcalls
            }, t.prototype.draw = function(t, e) {
                var i = this._gl,
                    n = this._current,
                    r = this._next;
                d(i, n, r), p(i, n, r), m(i, n, r), y(i, n, r), v(this, i, n, r), n.indexBuffer !== r.indexBuffer && i.bindBuffer(i.ELEMENT_ARRAY_BUFFER, r.indexBuffer && -1 !== r.indexBuffer._glID ? r.indexBuffer._glID : null);
                var s = !1;
                n.program !== r.program && (r.program._linked ? i.useProgram(r.program._glID) : console.warn("Failed to use program: has not linked yet."), s = !0), g(i, n, r);
                for (var o = 0; o < r.program._uniforms.length; ++o) {
                    var a = r.program._uniforms[o],
                        l = this._uniforms[a.name];
                    if (l && (s || l.dirty)) {
                        l.dirty = !1;
                        var h = void 0 === a.size ? _[a.type] : f[a.type];
                        h ? h(i, a.location, l.value) : console.warn("Can not find commit function for uniform " + a.name)
                    }
                }
                e && (r.indexBuffer ? i.drawElements(this._next.primitiveType, e, r.indexBuffer._format, t * r.indexBuffer._bytesPerIndex) : i.drawArrays(this._next.primitiveType, t, e)), this._stats.drawcalls++, n.set(r), r.reset()
            }, t
        })();
        i.default = b, e.exports = i.default
    }), {
        "./enums": 357,
        "./state": 364,
        "./texture-2d": 365,
        "./texture-cube": 366
    }],
    357: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.attrTypeBytes = function(t) {
            if (t === s.ATTR_TYPE_INT8) return 1;
            if (t === s.ATTR_TYPE_UINT8) return 1;
            if (t === s.ATTR_TYPE_INT16) return 2;
            if (t === s.ATTR_TYPE_UINT16) return 2;
            if (t === s.ATTR_TYPE_INT32) return 4;
            if (t === s.ATTR_TYPE_UINT32) return 4;
            if (t === s.ATTR_TYPE_FLOAT32) return 4;
            return console.warn("Unknown ATTR_TYPE: " + t), 0
        }, i.glFilter = function(t, e) {
            var i = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : -1,
                r = n[e][i + 1];
            if (void 0 === r) return console.warn("Unknown FILTER: " + e), -1 === i ? t.LINEAR : t.LINEAR_MIPMAP_LINEAR;
            return r
        }, i.glTextureFmt = function(t) {
            var e = r[t];
            if (void 0 === e) return console.warn("Unknown TEXTURE_FMT: " + t), r[s.TEXTURE_FMT_RGBA8];
            return e
        };
        var n = [
                [9728, 9984, 9986],
                [9729, 9985, 9987]
            ],
            r = [{
                format: 6407,
                internalFormat: 33776,
                pixelType: null
            }, {
                format: 6408,
                internalFormat: 33777,
                pixelType: null
            }, {
                format: 6408,
                internalFormat: 33778,
                pixelType: null
            }, {
                format: 6408,
                internalFormat: 33779,
                pixelType: null
            }, {
                format: 6407,
                internalFormat: 36196,
                pixelType: null
            }, {
                format: 6407,
                internalFormat: 35841,
                pixelType: null
            }, {
                format: 6408,
                internalFormat: 35843,
                pixelType: null
            }, {
                format: 6407,
                internalFormat: 35840,
                pixelType: null
            }, {
                format: 6408,
                internalFormat: 35842,
                pixelType: null
            }, {
                format: 6406,
                internalFormat: 6406,
                pixelType: 5121
            }, {
                format: 6409,
                internalFormat: 6409,
                pixelType: 5121
            }, {
                format: 6410,
                internalFormat: 6410,
                pixelType: 5121
            }, {
                format: 6407,
                internalFormat: 6407,
                pixelType: 33635
            }, {
                format: 6408,
                internalFormat: 6408,
                pixelType: 32820
            }, {
                format: 6408,
                internalFormat: 6408,
                pixelType: 32819
            }, {
                format: 6407,
                internalFormat: 6407,
                pixelType: 5121
            }, {
                format: 6408,
                internalFormat: 6408,
                pixelType: 5121
            }, {
                format: 6407,
                internalFormat: 6407,
                pixelType: 36193
            }, {
                format: 6408,
                internalFormat: 6408,
                pixelType: 36193
            }, {
                format: 6407,
                internalFormat: 6407,
                pixelType: 5126
            }, {
                format: 6408,
                internalFormat: 6408,
                pixelType: 5126
            }, {
                format: null,
                internalFormat: null,
                pixelType: null
            }, {
                format: null,
                internalFormat: null,
                pixelType: null
            }, {
                format: null,
                internalFormat: null,
                pixelType: null
            }, {
                format: null,
                internalFormat: null,
                pixelType: null
            }, {
                format: 6402,
                internalFormat: 6402,
                pixelType: 5123
            }, {
                format: 6402,
                internalFormat: 6402,
                pixelType: 5125
            }, {
                format: 6402,
                internalFormat: 6402,
                pixelType: 5125
            }, {
                format: 6407,
                internalFormat: 37492,
                pixelType: null
            }, {
                format: 6408,
                internalFormat: 37496,
                pixelType: null
            }],
            s = i.enums = {
                USAGE_STATIC: 35044,
                USAGE_DYNAMIC: 35048,
                USAGE_STREAM: 35040,
                INDEX_FMT_UINT8: 5121,
                INDEX_FMT_UINT16: 5123,
                INDEX_FMT_UINT32: 5125,
                ATTR_POSITION: "a_position",
                ATTR_NORMAL: "a_normal",
                ATTR_TANGENT: "a_tangent",
                ATTR_BITANGENT: "a_bitangent",
                ATTR_WEIGHTS: "a_weights",
                ATTR_JOINTS: "a_joints",
                ATTR_COLOR: "a_color",
                ATTR_COLOR0: "a_color0",
                ATTR_COLOR1: "a_color1",
                ATTR_UV: "a_uv",
                ATTR_UV0: "a_uv0",
                ATTR_UV1: "a_uv1",
                ATTR_UV2: "a_uv2",
                ATTR_UV3: "a_uv3",
                ATTR_UV4: "a_uv4",
                ATTR_UV5: "a_uv5",
                ATTR_UV6: "a_uv6",
                ATTR_UV7: "a_uv7",
                ATTR_TYPE_INT8: 5120,
                ATTR_TYPE_UINT8: 5121,
                ATTR_TYPE_INT16: 5122,
                ATTR_TYPE_UINT16: 5123,
                ATTR_TYPE_INT32: 5124,
                ATTR_TYPE_UINT32: 5125,
                ATTR_TYPE_FLOAT32: 5126,
                FILTER_NEAREST: 0,
                FILTER_LINEAR: 1,
                WRAP_REPEAT: 10497,
                WRAP_CLAMP: 33071,
                WRAP_MIRROR: 33648,
                TEXTURE_FMT_RGB_DXT1: 0,
                TEXTURE_FMT_RGBA_DXT1: 1,
                TEXTURE_FMT_RGBA_DXT3: 2,
                TEXTURE_FMT_RGBA_DXT5: 3,
                TEXTURE_FMT_RGB_ETC1: 4,
                TEXTURE_FMT_RGB_PVRTC_2BPPV1: 5,
                TEXTURE_FMT_RGBA_PVRTC_2BPPV1: 6,
                TEXTURE_FMT_RGB_PVRTC_4BPPV1: 7,
                TEXTURE_FMT_RGBA_PVRTC_4BPPV1: 8,
                TEXTURE_FMT_A8: 9,
                TEXTURE_FMT_L8: 10,
                TEXTURE_FMT_L8_A8: 11,
                TEXTURE_FMT_R5_G6_B5: 12,
                TEXTURE_FMT_R5_G5_B5_A1: 13,
                TEXTURE_FMT_R4_G4_B4_A4: 14,
                TEXTURE_FMT_RGB8: 15,
                TEXTURE_FMT_RGBA8: 16,
                TEXTURE_FMT_RGB16F: 17,
                TEXTURE_FMT_RGBA16F: 18,
                TEXTURE_FMT_RGB32F: 19,
                TEXTURE_FMT_RGBA32F: 20,
                TEXTURE_FMT_R32F: 21,
                TEXTURE_FMT_111110F: 22,
                TEXTURE_FMT_SRGB: 23,
                TEXTURE_FMT_SRGBA: 24,
                TEXTURE_FMT_D16: 25,
                TEXTURE_FMT_D32: 26,
                TEXTURE_FMT_D24S8: 27,
                TEXTURE_FMT_RGB_ETC2: 28,
                TEXTURE_FMT_RGBA_ETC2: 29,
                DS_FUNC_NEVER: 512,
                DS_FUNC_LESS: 513,
                DS_FUNC_EQUAL: 514,
                DS_FUNC_LEQUAL: 515,
                DS_FUNC_GREATER: 516,
                DS_FUNC_NOTEQUAL: 517,
                DS_FUNC_GEQUAL: 518,
                DS_FUNC_ALWAYS: 519,
                RB_FMT_RGBA4: 32854,
                RB_FMT_RGB5_A1: 32855,
                RB_FMT_RGB565: 36194,
                RB_FMT_D16: 33189,
                RB_FMT_S8: 36168,
                RB_FMT_D24S8: 34041,
                BLEND_FUNC_ADD: 32774,
                BLEND_FUNC_SUBTRACT: 32778,
                BLEND_FUNC_REVERSE_SUBTRACT: 32779,
                BLEND_ZERO: 0,
                BLEND_ONE: 1,
                BLEND_SRC_COLOR: 768,
                BLEND_ONE_MINUS_SRC_COLOR: 769,
                BLEND_DST_COLOR: 774,
                BLEND_ONE_MINUS_DST_COLOR: 775,
                BLEND_SRC_ALPHA: 770,
                BLEND_ONE_MINUS_SRC_ALPHA: 771,
                BLEND_DST_ALPHA: 772,
                BLEND_ONE_MINUS_DST_ALPHA: 773,
                BLEND_CONSTANT_COLOR: 32769,
                BLEND_ONE_MINUS_CONSTANT_COLOR: 32770,
                BLEND_CONSTANT_ALPHA: 32771,
                BLEND_ONE_MINUS_CONSTANT_ALPHA: 32772,
                BLEND_SRC_ALPHA_SATURATE: 776,
                STENCIL_DISABLE: 0,
                STENCIL_ENABLE: 1,
                STENCIL_INHERIT: 2,
                STENCIL_OP_KEEP: 7680,
                STENCIL_OP_ZERO: 0,
                STENCIL_OP_REPLACE: 7681,
                STENCIL_OP_INCR: 7682,
                STENCIL_OP_INCR_WRAP: 34055,
                STENCIL_OP_DECR: 7683,
                STENCIL_OP_DECR_WRAP: 34056,
                STENCIL_OP_INVERT: 5386,
                CULL_NONE: 0,
                CULL_FRONT: 1028,
                CULL_BACK: 1029,
                CULL_FRONT_AND_BACK: 1032,
                PT_POINTS: 0,
                PT_LINES: 1,
                PT_LINE_LOOP: 2,
                PT_LINE_STRIP: 3,
                PT_TRIANGLES: 4,
                PT_TRIANGLE_STRIP: 5,
                PT_TRIANGLE_FAN: 6
            }
    }), {}],
    358: [(function(t, e, i) {
        "use strict";

        function n(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }
        i.__esModule = !0;
        var r = (function() {
            function t(e, i, r, s) {
                n(this, t), this._device = e, this._width = i, this._height = r, this._colors = s.colors || [], this._depth = s.depth || null, this._stencil = s.stencil || null, this._depthStencil = s.depthStencil || null, this._glID = e._gl.createFramebuffer()
            }
            return t.prototype.destroy = function() {
                null !== this._glID ? (this._device._gl.deleteFramebuffer(this._glID), this._glID = null) : console.error("The frame-buffer already destroyed")
            }, t.prototype.getHandle = function() {
                return this._glID
            }, t
        })();
        i.default = r, e.exports = i.default
    }), {}],
    359: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0;
        var n, r = (function() {
                function t(t, e) {
                    for (var i = 0; i < e.length; i++) {
                        var n = e[i];
                        n.enumerable = n.enumerable || !1, n.configurable = !0, "value" in n && (n.writable = !0), Object.defineProperty(t, n.key, n)
                    }
                }
                return function(e, i, n) {
                    return i && t(e.prototype, i), n && t(e, n), e
                }
            })(),
            s = t("./enums");

        function o(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }
        var a = ((n = {})[s.enums.INDEX_FMT_UINT8] = 1, n[s.enums.INDEX_FMT_UINT16] = 2, n[s.enums.INDEX_FMT_UINT32] = 4, n),
            l = (function() {
                function t(e, i, n, r) {
                    o(this, t), this._device = e, this._format = i, this._usage = n, this._bytesPerIndex = a[i], this._bytes = r.byteLength, this._numIndices = this._bytes / this._bytesPerIndex, this._needExpandDataStore = !0, this._glID = e._gl.createBuffer(), this.update(0, r), e._stats.ib += this._bytes
                }
                return t.prototype.destroy = function() {
                    -1 !== this._glID ? (this._device._gl.deleteBuffer(this._glID), this._device._stats.ib -= this.bytes, this._glID = -1) : console.error("The buffer already destroyed")
                }, t.prototype.update = function(t, e) {
                    if (-1 !== this._glID) {
                        if (0 !== e.byteLength) {
                            if (t + e.byteLength > this._bytes) {
                                if (t) return void console.error("Failed to update data, bytes exceed.");
                                this._needExpandDataStore = !0, this._bytes = t + e.byteLength, this._numIndices = this._bytes / this._bytesPerIndex
                            }
                            var i = this._device._gl,
                                n = this._usage;
                            i.bindBuffer(i.ELEMENT_ARRAY_BUFFER, this._glID), this._needExpandDataStore ? (i.bufferData(i.ELEMENT_ARRAY_BUFFER, e, n), this._needExpandDataStore = !1) : i.bufferSubData(i.ELEMENT_ARRAY_BUFFER, t, e), this._device._restoreIndexBuffer()
                        }
                    } else console.error("The buffer is destroyed")
                }, t.prototype.setUsage = function(t) {
                    this._usage = t
                }, r(t, [{
                    key: "count",
                    get: function() {
                        return this._numIndices
                    }
                }]), t
            })();
        l.BYTES_PER_INDEX = a, i.default = l, e.exports = i.default
    }), {
        "./enums": 357
    }],
    360: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0;
        var n = t("./enums"),
            r = null;
        r = {
            VertexFormat: t("./vertex-format"),
            IndexBuffer: t("./index-buffer"),
            VertexBuffer: t("./vertex-buffer"),
            Program: t("./program"),
            Texture: t("./texture"),
            Texture2D: t("./texture-2d"),
            TextureCube: t("./texture-cube"),
            RenderBuffer: t("./render-buffer"),
            FrameBuffer: t("./frame-buffer"),
            Device: t("./device"),
            attrTypeBytes: n.attrTypeBytes,
            glFilter: n.glFilter,
            glTextureFmt: n.glTextureFmt
        }, Object.assign(r, n.enums), i.default = r, cc.gfx = r, e.exports = i.default
    }), {
        "./device": 356,
        "./enums": 357,
        "./frame-buffer": 358,
        "./index-buffer": 359,
        "./program": 362,
        "./render-buffer": 363,
        "./texture": 367,
        "./texture-2d": 365,
        "./texture-cube": 366,
        "./vertex-buffer": 368,
        "./vertex-format": 369
    }],
    361: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.isPow2 = function(t) {
            return !(t & t - 1 || !t)
        }
    }), {}],
    362: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0;
        var n = (function() {
            function t(t, e) {
                for (var i = 0; i < e.length; i++) {
                    var n = e[i];
                    n.enumerable = n.enumerable || !1, n.configurable = !0, "value" in n && (n.writable = !0), Object.defineProperty(t, n.key, n)
                }
            }
            return function(e, i, n) {
                return i && t(e.prototype, i), n && t(e, n), e
            }
        })();

        function r(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }
        var s = 0;

        function o(t, e, i) {
            i.split("\n").forEach((function(i) {
                if (!(i.length < 5)) {
                    var n = /^ERROR:\s+(\d+):(\d+):\s*(.*)$/.exec(i);
                    n ? t.push({
                        type: e,
                        fileID: 0 | n[1],
                        line: 0 | n[2],
                        message: n[3].trim()
                    }) : i.length > 0 && t.push({
                        type: e,
                        fileID: -1,
                        line: 0,
                        message: i
                    })
                }
            }))
        }
        var a = (function() {
            function t(e, i) {
                r(this, t), this._device = e, this._attributes = [], this._uniforms = [], this._samplers = [], this._errors = [], this._linked = !1, this._vertSource = i.vert, this._fragSource = i.frag, this._glID = null, this._id = s++
            }
            return t.prototype.link = function() {
                if (!this._linked) {
                    var t = this._device._gl,
                        e = l(t, t.VERTEX_SHADER, this._vertSource),
                        i = l(t, t.FRAGMENT_SHADER, this._fragSource),
                        n = t.createProgram();
                    t.attachShader(n, e), t.attachShader(n, i), t.linkProgram(n);
                    var r = !1,
                        s = this._errors;
                    if (t.getShaderParameter(e, t.COMPILE_STATUS) || (o(s, "vs", t.getShaderInfoLog(e)), r = !0), t.getShaderParameter(i, t.COMPILE_STATUS) || (o(s, "fs", t.getShaderInfoLog(i)), r = !0), t.deleteShader(e), t.deleteShader(i), r) return s;
                    if (!t.getProgramParameter(n, t.LINK_STATUS)) return s.push({
                        info: "Failed to link shader program: " + t.getProgramInfoLog(n)
                    }), s;
                    this._glID = n;
                    for (var a = t.getProgramParameter(n, t.ACTIVE_ATTRIBUTES), h = 0; h < a; ++h) {
                        var c = t.getActiveAttrib(n, h),
                            u = t.getAttribLocation(n, c.name);
                        this._attributes.push({
                            name: c.name,
                            location: u,
                            type: c.type
                        })
                    }
                    for (var _ = t.getProgramParameter(n, t.ACTIVE_UNIFORMS), f = 0; f < _; ++f) {
                        var d = t.getActiveUniform(n, f),
                            p = d.name,
                            m = t.getUniformLocation(n, p),
                            y = "[0]" === p.substr(p.length - 3);
                        y && (p = p.substr(0, p.length - 3));
                        var v = {
                            name: p,
                            location: m,
                            type: d.type,
                            size: y ? d.size : void 0
                        };
                        this._uniforms.push(v)
                    }
                    this._linked = !0
                }
            }, t.prototype.destroy = function() {
                this._device._gl.deleteProgram(this._glID), this._linked = !1, this._glID = null, this._attributes = [], this._uniforms = [], this._samplers = []
            }, n(t, [{
                key: "id",
                get: function() {
                    return this._id
                }
            }]), t
        })();

        function l(t, e, i) {
            var n = t.createShader(e);
            return t.shaderSource(n, i), t.compileShader(n), n
        }
        i.default = a, e.exports = i.default
    }), {}],
    363: [(function(t, e, i) {
        "use strict";

        function n(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }
        i.__esModule = !0;
        var r = (function() {
            function t(e, i, r, s) {
                n(this, t), this._device = e, this._format = i, this._glID = e._gl.createRenderbuffer(), this.update(r, s)
            }
            return t.prototype.update = function(t, e) {
                this._width = t, this._height = e;
                var i = this._device._gl;
                i.bindRenderbuffer(i.RENDERBUFFER, this._glID), i.renderbufferStorage(i.RENDERBUFFER, this._format, t, e), i.bindRenderbuffer(i.RENDERBUFFER, null)
            }, t.prototype.destroy = function() {
                if (null !== this._glID) {
                    var t = this._device._gl;
                    t.bindRenderbuffer(t.RENDERBUFFER, null), t.deleteRenderbuffer(this._glID), this._glID = null
                } else console.error("The render-buffer already destroyed")
            }, t
        })();
        i.default = r, e.exports = i.default
    }), {}],
    364: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.default = void 0;
        var n = t("./enums");

        function r(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }
        var s = {
                blend: !1,
                blendSep: !1,
                blendColor: 4294967295,
                blendEq: n.enums.BLEND_FUNC_ADD,
                blendAlphaEq: n.enums.BLEND_FUNC_ADD,
                blendSrc: n.enums.BLEND_ONE,
                blendDst: n.enums.BLEND_ZERO,
                blendSrcAlpha: n.enums.BLEND_ONE,
                blendDstAlpha: n.enums.BLEND_ZERO,
                depthTest: !1,
                depthWrite: !1,
                depthFunc: n.enums.DS_FUNC_LESS,
                stencilTest: !1,
                stencilSep: !1,
                stencilFuncFront: n.enums.DS_FUNC_ALWAYS,
                stencilRefFront: 0,
                stencilMaskFront: 255,
                stencilFailOpFront: n.enums.STENCIL_OP_KEEP,
                stencilZFailOpFront: n.enums.STENCIL_OP_KEEP,
                stencilZPassOpFront: n.enums.STENCIL_OP_KEEP,
                stencilWriteMaskFront: 255,
                stencilFuncBack: n.enums.DS_FUNC_ALWAYS,
                stencilRefBack: 0,
                stencilMaskBack: 255,
                stencilFailOpBack: n.enums.STENCIL_OP_KEEP,
                stencilZFailOpBack: n.enums.STENCIL_OP_KEEP,
                stencilZPassOpBack: n.enums.STENCIL_OP_KEEP,
                stencilWriteMaskBack: 255,
                cullMode: n.enums.CULL_BACK,
                primitiveType: n.enums.PT_TRIANGLES,
                maxStream: -1,
                vertexBuffers: [],
                vertexBufferOffsets: [],
                indexBuffer: null,
                maxTextureSlot: -1,
                textureUnits: [],
                program: null
            },
            o = (function() {
                function t(e) {
                    r(this, t), this.vertexBuffers = new Array(e._caps.maxVertexStreams), this.vertexBufferOffsets = new Array(e._caps.maxVertexStreams), this.textureUnits = new Array(e._caps.maxTextureUnits), this.set(s)
                }
                return t.initDefault = function(t) {
                    s.vertexBuffers = new Array(t._caps.maxVertexStreams), s.vertexBufferOffsets = new Array(t._caps.maxVertexStreams), s.textureUnits = new Array(t._caps.maxTextureUnits)
                }, t.prototype.reset = function() {
                    this.set(s)
                }, t.prototype.set = function(t) {
                    this.blend = t.blend, this.blendSep = t.blendSep, this.blendColor = t.blendColor, this.blendEq = t.blendEq, this.blendAlphaEq = t.blendAlphaEq, this.blendSrc = t.blendSrc, this.blendDst = t.blendDst, this.blendSrcAlpha = t.blendSrcAlpha, this.blendDstAlpha = t.blendDstAlpha, this.depthTest = t.depthTest, this.depthWrite = t.depthWrite, this.depthFunc = t.depthFunc, this.stencilTest = t.stencilTest, this.stencilSep = t.stencilSep, this.stencilFuncFront = t.stencilFuncFront, this.stencilRefFront = t.stencilRefFront, this.stencilMaskFront = t.stencilMaskFront, this.stencilFailOpFront = t.stencilFailOpFront, this.stencilZFailOpFront = t.stencilZFailOpFront, this.stencilZPassOpFront = t.stencilZPassOpFront, this.stencilWriteMaskFront = t.stencilWriteMaskFront, this.stencilFuncBack = t.stencilFuncBack, this.stencilRefBack = t.stencilRefBack, this.stencilMaskBack = t.stencilMaskBack, this.stencilFailOpBack = t.stencilFailOpBack, this.stencilZFailOpBack = t.stencilZFailOpBack, this.stencilZPassOpBack = t.stencilZPassOpBack, this.stencilWriteMaskBack = t.stencilWriteMaskBack, this.cullMode = t.cullMode, this.primitiveType = t.primitiveType, this.maxStream = t.maxStream;
                    for (var e = 0; e < t.vertexBuffers.length; ++e) this.vertexBuffers[e] = t.vertexBuffers[e];
                    for (var i = 0; i < t.vertexBufferOffsets.length; ++i) this.vertexBufferOffsets[i] = t.vertexBufferOffsets[i];
                    this.indexBuffer = t.indexBuffer, this.maxTextureSlot = t.maxTextureSlot;
                    for (var n = 0; n < t.textureUnits.length; ++n) this.textureUnits[n] = t.textureUnits[n];
                    this.program = t.program
                }, t
            })();
        i.default = o, e.exports = i.default
    }), {
        "./enums": 357
    }],
    365: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.default = void 0;
        var n = (function(t) {
                return t && t.__esModule ? t : {
                    default: t
                }
            })(t("./texture")),
            r = t("./enums"),
            s = t("./misc");

        function o(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }

        function a(t, e) {
            if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
            return !e || "object" != typeof e && "function" != typeof e ? t : e
        }

        function l(t, e) {
            if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e);
            t.prototype = Object.create(e && e.prototype, {
                constructor: {
                    value: t,
                    enumerable: !1,
                    writable: !0,
                    configurable: !0
                }
            }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e)
        }
        Object.getPrototypeOf(Object.getPrototypeOf(new Uint8Array)).constructor;
        var h = (function(t) {
            function e(i, n) {
                o(this, e);
                var r = a(this, t.call(this, i)),
                    s = r._device._gl;
                return r._target = s.TEXTURE_2D, r._glID = s.createTexture(), n.images = n.images || [null], r.update(n), r
            }
            return l(e, t), e.prototype.update = function(t) {
                var e = this._device._gl,
                    i = this._genMipmap;
                if (t) {
                    void 0 !== t.width && (this._width = t.width), void 0 !== t.height && (this._height = t.height), void 0 !== t.anisotropy && (this._anisotropy = t.anisotropy), void 0 !== t.minFilter && (this._minFilter = t.minFilter), void 0 !== t.magFilter && (this._magFilter = t.magFilter), void 0 !== t.mipFilter && (this._mipFilter = t.mipFilter), void 0 !== t.wrapS && (this._wrapS = t.wrapS), void 0 !== t.wrapT && (this._wrapT = t.wrapT), void 0 !== t.format && (this._format = t.format, this._compressed = this._format >= r.enums.TEXTURE_FMT_RGB_DXT1 && this._format <= r.enums.TEXTURE_FMT_RGBA_PVRTC_4BPPV1 || this._format >= r.enums.TEXTURE_FMT_RGB_ETC2 && this._format <= r.enums.TEXTURE_FMT_RGBA_ETC2), void 0 !== t.genMipmaps && (this._genMipmap = t.genMipmaps, i = t.genMipmaps);
                    var n = this._device.caps.maxTextureSize || Number.MAX_VALUE,
                        o = Math.max(t.width || 0, t.height || 0);
                    if (n < o && console.warn("The current texture size " + o + " exceeds the maximum size [" + n + "] supported on the device."), void 0 !== t.images)
                        if (t.images.length > 1) i = !1, (t.width > t.height ? t.width : t.height) >> t.images.length - 1 != 1 && console.error("texture-2d mipmap is invalid, should have a 1x1 mipmap.")
                }(0, s.isPow2)(this._width) && (0, s.isPow2)(this._height) || (i = !1), e.activeTexture(e.TEXTURE0), e.bindTexture(e.TEXTURE_2D, this._glID), void 0 !== t.images && t.images.length > 0 && (this._setMipmap(t.images, t.flipY, t.premultiplyAlpha), t.images.length > 1 && (this._genMipmap = !0)), i && (e.hint(e.GENERATE_MIPMAP_HINT, e.NICEST), e.generateMipmap(e.TEXTURE_2D), this._genMipmap = !0), this._setTexInfo(), this._device._restoreTexture(0)
            }, e.prototype.updateSubImage = function(t) {
                var e = this._device._gl,
                    i = (0, r.glTextureFmt)(this._format);
                e.activeTexture(e.TEXTURE0), e.bindTexture(e.TEXTURE_2D, this._glID), this._setSubImage(i, t), this._device._restoreTexture(0)
            }, e.prototype.updateImage = function(t) {
                var e = this._device._gl,
                    i = (0, r.glTextureFmt)(this._format);
                e.activeTexture(e.TEXTURE0), e.bindTexture(e.TEXTURE_2D, this._glID), this._setImage(i, t), this._device._restoreTexture(0)
            }, e.prototype._setSubImage = function(t, e) {
                var i = this._device._gl,
                    n = e.flipY,
                    r = e.premultiplyAlpha,
                    s = e.image;
                !s || ArrayBuffer.isView(s) || s instanceof ArrayBuffer ? (void 0 === n ? i.pixelStorei(i.UNPACK_FLIP_Y_WEBGL, !1) : i.pixelStorei(i.UNPACK_FLIP_Y_WEBGL, n), void 0 === r ? i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL, !1) : i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL, r), this._compressed ? i.compressedTexSubImage2D(i.TEXTURE_2D, e.level, e.x, e.y, e.width, e.height, t.format, s) : i.texSubImage2D(i.TEXTURE_2D, e.level, e.x, e.y, e.width, e.height, t.format, t.pixelType, s)) : (void 0 === n ? i.pixelStorei(i.UNPACK_FLIP_Y_WEBGL, !0) : i.pixelStorei(i.UNPACK_FLIP_Y_WEBGL, n), void 0 === r ? i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL, !1) : i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL, r), i.texSubImage2D(i.TEXTURE_2D, e.level, e.x, e.y, t.format, t.pixelType, s))
            }, e.prototype._setImage = function(t, e) {
                var i = this._device._gl,
                    n = e.flipY,
                    r = e.premultiplyAlpha,
                    s = e.image;
                !s || ArrayBuffer.isView(s) || s instanceof ArrayBuffer ? (void 0 === n ? i.pixelStorei(i.UNPACK_FLIP_Y_WEBGL, !1) : i.pixelStorei(i.UNPACK_FLIP_Y_WEBGL, n), void 0 === r ? i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL, !1) : i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL, r), this._compressed ? i.compressedTexImage2D(i.TEXTURE_2D, e.level, t.internalFormat, e.width, e.height, 0, s) : i.texImage2D(i.TEXTURE_2D, e.level, t.internalFormat, e.width, e.height, 0, t.format, t.pixelType, s)) : (void 0 === n ? i.pixelStorei(i.UNPACK_FLIP_Y_WEBGL, !0) : i.pixelStorei(i.UNPACK_FLIP_Y_WEBGL, n), void 0 === r ? i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL, !1) : i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL, r), i.texImage2D(i.TEXTURE_2D, e.level, t.internalFormat, t.format, t.pixelType, s))
            }, e.prototype._setMipmap = function(t, e, i) {
                for (var n = (0, r.glTextureFmt)(this._format), s = {
                        width: this._width,
                        height: this._height,
                        flipY: e,
                        premultiplyAlpha: i,
                        level: 0,
                        image: null
                    }, o = 0; o < t.length; ++o) s.level = o, s.width = this._width >> o, s.height = this._height >> o, s.image = t[o], this._setImage(n, s)
            }, e.prototype._setTexInfo = function() {
                var t = this._device._gl,
                    e = (0, s.isPow2)(this._width) && (0, s.isPow2)(this._height);
                e || this._wrapS === r.enums.WRAP_CLAMP && this._wrapT === r.enums.WRAP_CLAMP || (console.warn("WebGL1 doesn't support all wrap modes with NPOT textures"), this._wrapS = r.enums.WRAP_CLAMP, this._wrapT = r.enums.WRAP_CLAMP);
                var i = this._genMipmap ? this._mipFilter : -1;
                e || -1 === i || (console.warn("NPOT textures do not support mipmap filter"), i = -1), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_MIN_FILTER, (0, r.glFilter)(t, this._minFilter, i)), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_MAG_FILTER, (0, r.glFilter)(t, this._magFilter, -1)), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_WRAP_S, this._wrapS), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_WRAP_T, this._wrapT);
                var n = this._device.ext("EXT_texture_filter_anisotropic");
                n && t.texParameteri(t.TEXTURE_2D, n.TEXTURE_MAX_ANISOTROPY_EXT, this._anisotropy)
            }, e
        })(n.default);
        i.default = h, e.exports = i.default
    }), {
        "./enums": 357,
        "./misc": 361,
        "./texture": 367
    }],
    366: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.default = void 0;
        var n = (function(t) {
                return t && t.__esModule ? t : {
                    default: t
                }
            })(t("./texture")),
            r = t("./enums"),
            s = t("./misc");

        function o(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }

        function a(t, e) {
            if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
            return !e || "object" != typeof e && "function" != typeof e ? t : e
        }

        function l(t, e) {
            if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e);
            t.prototype = Object.create(e && e.prototype, {
                constructor: {
                    value: t,
                    enumerable: !1,
                    writable: !0,
                    configurable: !0
                }
            }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e)
        }
        var h = (function(t) {
            function e(i, n) {
                o(this, e);
                var r = a(this, t.call(this, i)),
                    s = r._device._gl;
                return r._target = s.TEXTURE_CUBE_MAP, r._glID = s.createTexture(), r.update(n), r
            }
            return l(e, t), e.prototype.update = function(t) {
                var e = this._device._gl,
                    i = this._genMipmaps;
                t && (void 0 !== t.width && (this._width = t.width), void 0 !== t.height && (this._height = t.height), void 0 !== t.anisotropy && (this._anisotropy = t.anisotropy), void 0 !== t.minFilter && (this._minFilter = t.minFilter), void 0 !== t.magFilter && (this._magFilter = t.magFilter), void 0 !== t.mipFilter && (this._mipFilter = t.mipFilter), void 0 !== t.wrapS && (this._wrapS = t.wrapS), void 0 !== t.wrapT && (this._wrapT = t.wrapT), void 0 !== t.format && (this._format = t.format, this._compressed = this._format >= r.enums.TEXTURE_FMT_RGB_DXT1 && this._format <= r.enums.TEXTURE_FMT_RGBA_PVRTC_4BPPV1 || this._format >= r.enums.TEXTURE_FMT_RGB_ETC2 && this._format <= r.enums.TEXTURE_FMT_RGBA_ETC2), void 0 !== t.genMipmaps && (this._genMipmaps = t.genMipmaps, i = t.genMipmaps), void 0 !== t.images && t.images.length > 1 && (i = !1, t.width !== t.height && console.warn("texture-cube width and height should be identical."), t.width >> t.images.length - 1 != 1 && console.error("texture-cube mipmap is invalid. please set mipmap as 1x1, 2x2, 4x4 ... nxn"))), (0, s.isPow2)(this._width) && (0, s.isPow2)(this._height) || (i = !1), e.activeTexture(e.TEXTURE0), e.bindTexture(e.TEXTURE_CUBE_MAP, this._glID), void 0 !== t.images && t.images.length > 0 && (this._setMipmap(t.images, t.flipY, t.premultiplyAlpha), t.images.length > 1 && (this._genMipmaps = !0)), i && (e.hint(e.GENERATE_MIPMAP_HINT, e.NICEST), e.generateMipmap(e.TEXTURE_CUBE_MAP), this._genMipmaps = !0), this._setTexInfo(), this._device._restoreTexture(0)
            }, e.prototype.updateSubImage = function(t) {
                var e = this._device._gl,
                    i = (0, r.glTextureFmt)(this._format);
                e.activeTexture(e.TEXTURE0), e.bindTexture(e.TEXTURE_CUBE_MAP, this._glID), this._setSubImage(i, t), this._device._restoreTexture(0)
            }, e.prototype.updateImage = function(t) {
                var e = this._device._gl,
                    i = (0, r.glTextureFmt)(this._format);
                e.activeTexture(e.TEXTURE0), e.bindTexture(e.TEXTURE_CUBE_MAP, this._glID), this._setImage(i, t), this._device._restoreTexture(0)
            }, e.prototype._setSubImage = function(t, e) {
                var i = this._device._gl,
                    n = e.flipY,
                    r = e.premultiplyAlpha,
                    s = e.faceIndex,
                    o = e.image;
                void 0 === n ? i.pixelStorei(i.UNPACK_FLIP_Y_WEBGL, !1) : i.pixelStorei(i.UNPACK_FLIP_Y_WEBGL, n), void 0 === r ? i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL, !1) : i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL, r), !o || ArrayBuffer.isView(o) || o instanceof ArrayBuffer ? this._compressed ? i.compressedTexSubImage2D(i.TEXTURE_CUBE_MAP_POSITIVE_X + s, e.level, e.x, e.y, e.width, e.height, t.format, o) : i.texSubImage2D(i.TEXTURE_CUBE_MAP_POSITIVE_X + s, e.level, e.x, e.y, e.width, e.height, t.format, t.pixelType, o) : i.texSubImage2D(i.TEXTURE_CUBE_MAP_POSITIVE_X + s, e.level, e.x, e.y, t.format, t.pixelType, o)
            }, e.prototype._setImage = function(t, e) {
                var i = this._device._gl,
                    n = e.flipY,
                    r = e.premultiplyAlpha,
                    s = e.faceIndex,
                    o = e.image;
                void 0 === n ? i.pixelStorei(i.UNPACK_FLIP_Y_WEBGL, !1) : i.pixelStorei(i.UNPACK_FLIP_Y_WEBGL, n), void 0 === r ? i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL, !1) : i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL, r), !o || ArrayBuffer.isView(o) || o instanceof ArrayBuffer ? this._compressed ? i.compressedTexImage2D(i.TEXTURE_CUBE_MAP_POSITIVE_X + s, e.level, t.internalFormat, e.width, e.height, 0, o) : i.texImage2D(i.TEXTURE_CUBE_MAP_POSITIVE_X + s, e.level, t.internalFormat, e.width, e.height, 0, t.format, t.pixelType, o) : i.texImage2D(i.TEXTURE_CUBE_MAP_POSITIVE_X + s, e.level, t.internalFormat, t.format, t.pixelType, o)
            }, e.prototype._setMipmap = function(t, e, i) {
                for (var n = (0, r.glTextureFmt)(this._format), s = {
                        width: this._width,
                        height: this._height,
                        faceIndex: 0,
                        flipY: e,
                        premultiplyAlpha: i,
                        level: 0,
                        image: null
                    }, o = 0; o < t.length; ++o) {
                    var a = t[o];
                    s.level = o, s.width = this._width >> o, s.height = this._height >> o;
                    for (var l = 0; l < 6; ++l) s.faceIndex = l, s.image = a[l], this._setImage(n, s)
                }
            }, e.prototype._setTexInfo = function() {
                var t = this._device._gl,
                    e = (0, s.isPow2)(this._width) && (0, s.isPow2)(this._height);
                e || this._wrapS === r.enums.WRAP_CLAMP && this._wrapT === r.enums.WRAP_CLAMP || (console.warn("WebGL1 doesn't support all wrap modes with NPOT textures"), this._wrapS = r.enums.WRAP_CLAMP, this._wrapT = r.enums.WRAP_CLAMP);
                var i = this._genMipmaps ? this._mipFilter : -1;
                e || -1 === i || (console.warn("NPOT textures do not support mipmap filter"), i = -1), t.texParameteri(t.TEXTURE_CUBE_MAP, t.TEXTURE_MIN_FILTER, (0, r.glFilter)(t, this._minFilter, i)), t.texParameteri(t.TEXTURE_CUBE_MAP, t.TEXTURE_MAG_FILTER, (0, r.glFilter)(t, this._magFilter, -1)), t.texParameteri(t.TEXTURE_CUBE_MAP, t.TEXTURE_WRAP_S, this._wrapS), t.texParameteri(t.TEXTURE_CUBE_MAP, t.TEXTURE_WRAP_T, this._wrapT);
                var n = this._device.ext("EXT_texture_filter_anisotropic");
                n && t.texParameteri(t.TEXTURE_CUBE_MAP, n.TEXTURE_MAX_ANISOTROPY_EXT, this._anisotropy)
            }, e
        })(n.default);
        i.default = h, e.exports = i.default
    }), {
        "./enums": 357,
        "./misc": 361,
        "./texture": 367
    }],
    367: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.default = void 0;
        var n = t("./enums");

        function r(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }
        var s = 0,
            o = (function() {
                function t(e) {
                    r(this, t), this._device = e, this._width = 4, this._height = 4, this._genMipmaps = !1, this._compressed = !1, this._anisotropy = 1, this._minFilter = n.enums.FILTER_LINEAR, this._magFilter = n.enums.FILTER_LINEAR, this._mipFilter = n.enums.FILTER_LINEAR, this._wrapS = n.enums.WRAP_REPEAT, this._wrapT = n.enums.WRAP_REPEAT, this._format = n.enums.TEXTURE_FMT_RGBA8, this._target = -1, this._id = s++
                }
                return t.prototype.destroy = function() {
                    null !== this._glID ? (this._device._gl.deleteTexture(this._glID), this._device._stats.tex -= this.bytes, this._glID = null) : console.error("The texture already destroyed")
                }, t
            })();
        i.default = o, e.exports = i.default
    }), {
        "./enums": 357
    }],
    368: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0;
        var n = (function() {
            function t(t, e) {
                for (var i = 0; i < e.length; i++) {
                    var n = e[i];
                    n.enumerable = n.enumerable || !1, n.configurable = !0, "value" in n && (n.writable = !0), Object.defineProperty(t, n.key, n)
                }
            }
            return function(e, i, n) {
                return i && t(e.prototype, i), n && t(e, n), e
            }
        })();
        t("./enums");

        function r(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }
        var s = (function() {
            function t(e, i, n, s) {
                r(this, t), this._device = e, this._format = i, this._usage = n, this._bytesPerVertex = this._format._bytes, this._bytes = s.byteLength, this._numVertices = this._bytes / this._bytesPerVertex, this._needExpandDataStore = !0, this._glID = e._gl.createBuffer(), this.update(0, s), e._stats.vb += this._bytes
            }
            return t.prototype.destroy = function() {
                -1 !== this._glID ? (this._device._gl.deleteBuffer(this._glID), this._device._stats.vb -= this.bytes, this._glID = -1) : console.error("The buffer already destroyed")
            }, t.prototype.update = function(t, e) {
                if (-1 !== this._glID) {
                    if (0 !== e.byteLength) {
                        if (t + e.byteLength > this._bytes) {
                            if (t) return void console.error("Failed to update data, bytes exceed.");
                            this._needExpandDataStore = !0, this._bytes = t + e.byteLength, this._numVertices = this._bytes / this._bytesPerVertex
                        }
                        var i = this._device._gl,
                            n = this._usage;
                        i.bindBuffer(i.ARRAY_BUFFER, this._glID), this._needExpandDataStore ? (i.bufferData(i.ARRAY_BUFFER, e, n), this._needExpandDataStore = !1) : i.bufferSubData(i.ARRAY_BUFFER, t, e), i.bindBuffer(i.ARRAY_BUFFER, null)
                    }
                } else console.error("The buffer is destroyed")
            }, t.prototype.getFormat = function(t) {
                return this._format.element(t)
            }, t.prototype.setUsage = function(t) {
                this._usage = t
            }, n(t, [{
                key: "count",
                get: function() {
                    return this._numVertices
                }
            }]), t
        })();
        i.default = s, e.exports = i.default
    }), {
        "./enums": 357
    }],
    369: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.default = void 0;
        var n = t("./enums"),
            r = (function(t) {
                return t && t.__esModule ? t : {
                    default: t
                }
            })(t("../murmurhash2_gc"));

        function s(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }
        var o = (function() {
            function t(e) {
                s(this, t), this._attr2el = {}, this._elements = [], this._bytes = 0;
                for (var i = "", o = 0, a = e.length; o < a; ++o) {
                    var l = e[o],
                        h = {
                            name: l.name,
                            offset: this._bytes,
                            stride: 0,
                            stream: -1,
                            type: l.type,
                            num: l.num,
                            normalize: void 0 !== l.normalize && l.normalize,
                            bytes: l.num * (0, n.attrTypeBytes)(l.type)
                        };
                    this._attr2el[h.name] = h, this._elements.push(h), this._bytes += h.bytes, i += h.name + ":" + h.num + ":" + h.type + ":" + h.normalize
                }
                for (var c = 0, u = this._elements.length; c < u; ++c) {
                    this._elements[c].stride = this._bytes
                }
                this._hash = (0, r.default)(i, 666)
            }
            return t.prototype.element = function(t) {
                return this._attr2el[t]
            }, t.prototype.getHash = function() {
                return this._hash
            }, t
        })();
        i.default = o, e.exports = i.default
    }), {
        "../murmurhash2_gc": 378,
        "./enums": 357
    }],
    370: [(function(t, e, i) {
        "use strict";

        function n(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }
        i.__esModule = !0;
        var r = (function() {
            function t(e, i) {
                n(this, t), this._cursor = 0, this._data = new Array(i);
                for (var r = 0; r < i; ++r) this._data[r] = e()
            }
            return t.prototype.request = function() {
                var t = this._data[this._cursor];
                return this._cursor = (this._cursor + 1) % this._data.length, t
            }, t
        })();
        i.default = r, e.exports = i.default
    }), {}],
    371: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.default = void 0;
        var n = (function() {
                function t(t, e) {
                    for (var i = 0; i < e.length; i++) {
                        var n = e[i];
                        n.enumerable = n.enumerable || !1, n.configurable = !0, "value" in n && (n.writable = !0), Object.defineProperty(t, n.key, n)
                    }
                }
                return function(e, i, n) {
                    return i && t(e.prototype, i), n && t(e, n), e
                }
            })(),
            r = (function(t) {
                return t && t.__esModule ? t : {
                    default: t
                }
            })(t("./timsort"));

        function s(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }
        var o = (function() {
            function t(e) {
                s(this, t), this._count = 0, this._data = new Array(e)
            }
            return t.prototype._resize = function(t) {
                if (t > this._data.length)
                    for (var e = this._data.length; e < t; ++e) this._data[e] = void 0
            }, t.prototype.reset = function() {
                for (var t = 0; t < this._count; ++t) this._data[t] = void 0;
                this._count = 0
            }, t.prototype.push = function(t) {
                this._count >= this._data.length && this._resize(2 * this._data.length), this._data[this._count] = t, ++this._count
            }, t.prototype.pop = function() {
                --this._count, this._count < 0 && (this._count = 0);
                var t = this._data[this._count];
                return this._data[this._count] = void 0, t
            }, t.prototype.fastRemove = function(t) {
                if (!(t >= this._count || t < 0)) {
                    var e = this._count - 1;
                    this._data[t] = this._data[e], this._data[e] = void 0, this._count -= 1
                }
            }, t.prototype.indexOf = function(t) {
                return this._data.indexOf(t)
            }, t.prototype.sort = function(t) {
                return (0, r.default)(this._data, 0, this._count, t)
            }, n(t, [{
                key: "length",
                get: function() {
                    return this._count
                }
            }, {
                key: "data",
                get: function() {
                    return this._data
                }
            }]), t
        })();
        i.default = o, e.exports = i.default
    }), {
        "./timsort": 376
    }],
    372: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0;
        var n = t("./circular-pool");
        Object.defineProperty(i, "CircularPool", {
            enumerable: !0,
            get: function() {
                return h(n).default
            }
        });
        var r = t("./fixed-array");
        Object.defineProperty(i, "FixedArray", {
            enumerable: !0,
            get: function() {
                return h(r).default
            }
        });
        var s = t("./linked-array");
        Object.defineProperty(i, "LinkedArray", {
            enumerable: !0,
            get: function() {
                return h(s).default
            }
        });
        var o = t("./pool");
        Object.defineProperty(i, "Pool", {
            enumerable: !0,
            get: function() {
                return h(o).default
            }
        });
        var a = t("./recycle-pool");
        Object.defineProperty(i, "RecyclePool", {
            enumerable: !0,
            get: function() {
                return h(a).default
            }
        });
        var l = t("./typed-array-pool");

        function h(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }
        Object.defineProperty(i, "TypedArrayPool", {
            enumerable: !0,
            get: function() {
                return h(l).default
            }
        })
    }), {
        "./circular-pool": 370,
        "./fixed-array": 371,
        "./linked-array": 373,
        "./pool": 374,
        "./recycle-pool": 375,
        "./typed-array-pool": 377
    }],
    373: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.default = void 0;
        var n = (function() {
                function t(t, e) {
                    for (var i = 0; i < e.length; i++) {
                        var n = e[i];
                        n.enumerable = n.enumerable || !1, n.configurable = !0, "value" in n && (n.writable = !0), Object.defineProperty(t, n.key, n)
                    }
                }
                return function(e, i, n) {
                    return i && t(e.prototype, i), n && t(e, n), e
                }
            })(),
            r = (function(t) {
                return t && t.__esModule ? t : {
                    default: t
                }
            })(t("./pool"));

        function s(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }
        var o = (function() {
            function t(e, i) {
                s(this, t), this._fn = e, this._count = 0, this._head = null, this._tail = null, this._pool = new r.default(e, i)
            }
            return t.prototype.add = function() {
                var t = this._pool.alloc();
                return this._tail ? (this._tail._next = t, t._prev = this._tail) : this._head = t, this._tail = t, this._count += 1, t
            }, t.prototype.remove = function(t) {
                t._prev ? t._prev._next = t._next : this._head = t._next, t._next ? t._next._prev = t._prev : this._tail = t._prev, t._next = null, t._prev = null, this._pool.free(t), this._count -= 1
            }, t.prototype.forEach = function(t, e) {
                var i = this._head;
                if (i) {
                    e && (t = t.bind(e));
                    for (var n = 0, r = i; i;) r = i._next, t(i, n, this), i = r, ++n
                }
            }, n(t, [{
                key: "head",
                get: function() {
                    return this._head
                }
            }, {
                key: "tail",
                get: function() {
                    return this._tail
                }
            }, {
                key: "length",
                get: function() {
                    return this._count
                }
            }]), t
        })();
        i.default = o, e.exports = i.default
    }), {
        "./pool": 374
    }],
    374: [(function(t, e, i) {
        "use strict";

        function n(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }
        i.__esModule = !0;
        var r = (function() {
            function t(e, i) {
                n(this, t), this._fn = e, this._idx = i - 1, this._frees = new Array(i);
                for (var r = 0; r < i; ++r) this._frees[r] = e()
            }
            return t.prototype._expand = function(t) {
                var e = this._frees;
                this._frees = new Array(t);
                for (var i = t - e.length, n = 0; n < i; ++n) this._frees[n] = this._fn();
                for (var r = i, s = 0; r < t; ++r, ++s) this._frees[r] = e[s];
                this._idx += i
            }, t.prototype.alloc = function() {
                this._idx < 0 && this._expand(Math.round(1.2 * this._frees.length) + 1);
                var t = this._frees[this._idx];
                return this._frees[this._idx] = null, --this._idx, t
            }, t.prototype.free = function(t) {
                ++this._idx, this._frees[this._idx] = t
            }, t
        })();
        i.default = r, e.exports = i.default
    }), {}],
    375: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.default = void 0;
        var n = (function() {
                function t(t, e) {
                    for (var i = 0; i < e.length; i++) {
                        var n = e[i];
                        n.enumerable = n.enumerable || !1, n.configurable = !0, "value" in n && (n.writable = !0), Object.defineProperty(t, n.key, n)
                    }
                }
                return function(e, i, n) {
                    return i && t(e.prototype, i), n && t(e, n), e
                }
            })(),
            r = (function(t) {
                return t && t.__esModule ? t : {
                    default: t
                }
            })(t("./timsort"));

        function s(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }
        var o = (function() {
            function t(e, i) {
                s(this, t), this._fn = e, this._count = 0, this._data = new Array(i);
                for (var n = 0; n < i; ++n) this._data[n] = e()
            }
            return t.prototype.reset = function() {
                this._count = 0
            }, t.prototype.resize = function(t) {
                if (t > this._data.length)
                    for (var e = this._data.length; e < t; ++e) this._data[e] = this._fn()
            }, t.prototype.add = function() {
                return this._count >= this._data.length && this.resize(2 * this._data.length), this._data[this._count++]
            }, t.prototype.remove = function(t) {
                if (!(t >= this._count)) {
                    var e = this._count - 1,
                        i = this._data[t];
                    this._data[t] = this._data[e], this._data[e] = i, this._count -= 1
                }
            }, t.prototype.sort = function(t) {
                return (0, r.default)(this._data, 0, this._count, t)
            }, n(t, [{
                key: "length",
                get: function() {
                    return this._count
                }
            }, {
                key: "data",
                get: function() {
                    return this._data
                }
            }]), t
        })();
        i.default = o, e.exports = i.default
    }), {
        "./timsort": 376
    }],
    376: [(function(t, e, i) {
        "use strict";

        function n(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }
        i.__esModule = !0, i.default = function(t, e, i, n) {
            if (!Array.isArray(t)) throw new TypeError("Can only sort arrays");
            void 0 === e && (e = 0), void 0 === i && (i = t.length), void 0 === n && (n = h);
            var s = i - e;
            if (!(s < 2)) {
                var o = 0;
                if (s < r) f(t, e, i, e + (o = u(t, e, i, n)), n);
                else {
                    var a = new m(t, n),
                        l = c(s);
                    do {
                        if ((o = u(t, e, i, n)) < l) {
                            var _ = s;
                            _ > l && (_ = l), f(t, e, e + _, e + o, n), o = _
                        }
                        a.pushRun(e, o), a.mergeRuns(), s -= o, e += o
                    } while (0 !== s);
                    a.forceMergeRuns()
                }
            }
        };
        var r = 32,
            s = 7,
            o = 256,
            a = [1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9];

        function l(t) {
            return t < 1e5 ? t < 100 ? t < 10 ? 0 : 1 : t < 1e4 ? t < 1e3 ? 2 : 3 : 4 : t < 1e7 ? t < 1e6 ? 5 : 6 : t < 1e9 ? t < 1e8 ? 7 : 8 : 9
        }

        function h(t, e) {
            if (t === e) return 0;
            if (~~t === t && ~~e === e) {
                if (0 === t || 0 === e) return t < e ? -1 : 1;
                if (t < 0 || e < 0) {
                    if (e >= 0) return -1;
                    if (t >= 0) return 1;
                    t = -t, e = -e
                }
                var i = l(t),
                    n = l(e),
                    r = 0;
                return i < n ? (t *= a[n - i - 1], e /= 10, r = -1) : i > n && (e *= a[i - n - 1], t /= 10, r = 1), t === e ? r : t < e ? -1 : 1
            }
            var s = String(t),
                o = String(e);
            return s === o ? 0 : s < o ? -1 : 1
        }

        function c(t) {
            for (var e = 0; t >= r;) e |= 1 & t, t >>= 1;
            return t + e
        }

        function u(t, e, i, n) {
            var r = e + 1;
            if (r === i) return 1;
            if (n(t[r++], t[e]) < 0) {
                for (; r < i && n(t[r], t[r - 1]) < 0;) r++;
                _(t, e, r)
            } else
                for (; r < i && n(t[r], t[r - 1]) >= 0;) r++;
            return r - e
        }

        function _(t, e, i) {
            for (i--; e < i;) {
                var n = t[e];
                t[e++] = t[i], t[i--] = n
            }
        }

        function f(t, e, i, n, r) {
            for (n === e && n++; n < i; n++) {
                for (var s = t[n], o = e, a = n; o < a;) {
                    var l = o + a >>> 1;
                    r(s, t[l]) < 0 ? a = l : o = l + 1
                }
                var h = n - o;
                switch (h) {
                    case 3:
                        t[o + 3] = t[o + 2];
                    case 2:
                        t[o + 2] = t[o + 1];
                    case 1:
                        t[o + 1] = t[o];
                        break;
                    default:
                        for (; h > 0;) t[o + h] = t[o + h - 1], h--
                }
                t[o] = s
            }
        }

        function d(t, e, i, n, r, s) {
            var o = 0,
                a = 0,
                l = 1;
            if (s(t, e[i + r]) > 0) {
                for (a = n - r; l < a && s(t, e[i + r + l]) > 0;) o = l, (l = 1 + (l << 1)) <= 0 && (l = a);
                l > a && (l = a), o += r, l += r
            } else {
                for (a = r + 1; l < a && s(t, e[i + r - l]) <= 0;) o = l, (l = 1 + (l << 1)) <= 0 && (l = a);
                l > a && (l = a);
                var h = o;
                o = r - l, l = r - h
            }
            for (o++; o < l;) {
                var c = o + (l - o >>> 1);
                s(t, e[i + c]) > 0 ? o = c + 1 : l = c
            }
            return l
        }

        function p(t, e, i, n, r, s) {
            var o = 0,
                a = 0,
                l = 1;
            if (s(t, e[i + r]) < 0) {
                for (a = r + 1; l < a && s(t, e[i + r - l]) < 0;) o = l, (l = 1 + (l << 1)) <= 0 && (l = a);
                l > a && (l = a);
                var h = o;
                o = r - l, l = r - h
            } else {
                for (a = n - r; l < a && s(t, e[i + r + l]) >= 0;) o = l, (l = 1 + (l << 1)) <= 0 && (l = a);
                l > a && (l = a), o += r, l += r
            }
            for (o++; o < l;) {
                var c = o + (l - o >>> 1);
                s(t, e[i + c]) < 0 ? l = c : o = c + 1
            }
            return l
        }
        var m = (function() {
            function t(e, i) {
                n(this, t), this.array = e, this.compare = i, this.minGallop = s, this.length = e.length, this.tmpStorageLength = o, this.length < 2 * o && (this.tmpStorageLength = this.length >>> 1), this.tmp = new Array(this.tmpStorageLength), this.stackLength = this.length < 120 ? 5 : this.length < 1542 ? 10 : this.length < 119151 ? 19 : 40, this.runStart = new Array(this.stackLength), this.runLength = new Array(this.stackLength), this.stackSize = 0
            }
            return t.prototype.pushRun = function(t, e) {
                this.runStart[this.stackSize] = t, this.runLength[this.stackSize] = e, this.stackSize += 1
            }, t.prototype.mergeRuns = function() {
                for (; this.stackSize > 1;) {
                    var t = this.stackSize - 2;
                    if (t >= 1 && this.runLength[t - 1] <= this.runLength[t] + this.runLength[t + 1] || t >= 2 && this.runLength[t - 2] <= this.runLength[t] + this.runLength[t - 1]) this.runLength[t - 1] < this.runLength[t + 1] && t--;
                    else if (this.runLength[t] > this.runLength[t + 1]) break;
                    this.mergeAt(t)
                }
            }, t.prototype.forceMergeRuns = function() {
                for (; this.stackSize > 1;) {
                    var t = this.stackSize - 2;
                    t > 0 && this.runLength[t - 1] < this.runLength[t + 1] && t--, this.mergeAt(t)
                }
            }, t.prototype.mergeAt = function(t) {
                var e = this.compare,
                    i = this.array,
                    n = this.runStart[t],
                    r = this.runLength[t],
                    s = this.runStart[t + 1],
                    o = this.runLength[t + 1];
                this.runLength[t] = r + o, t === this.stackSize - 3 && (this.runStart[t + 1] = this.runStart[t + 2], this.runLength[t + 1] = this.runLength[t + 2]), this.stackSize--;
                var a = p(i[s], i, n, r, 0, e);
                n += a, 0 !== (r -= a) && 0 !== (o = d(i[n + r - 1], i, s, o, o - 1, e)) && (r <= o ? this.mergeLow(n, r, s, o) : this.mergeHigh(n, r, s, o))
            }, t.prototype.mergeLow = function(t, e, i, n) {
                var r = this.compare,
                    o = this.array,
                    a = this.tmp,
                    l = 0;
                for (l = 0; l < e; l++) a[l] = o[t + l];
                var h = 0,
                    c = i,
                    u = t;
                if (o[u++] = o[c++], 0 != --n)
                    if (1 !== e) {
                        for (var _ = this.minGallop;;) {
                            var f = 0,
                                m = 0,
                                y = !1;
                            do {
                                if (r(o[c], a[h]) < 0) {
                                    if (o[u++] = o[c++], m++, f = 0, 0 == --n) {
                                        y = !0;
                                        break
                                    }
                                } else if (o[u++] = a[h++], f++, m = 0, 1 == --e) {
                                    y = !0;
                                    break
                                }
                            } while ((f | m) < _);
                            if (y) break;
                            do {
                                if (0 !== (f = p(o[c], a, h, e, 0, r))) {
                                    for (l = 0; l < f; l++) o[u + l] = a[h + l];
                                    if (u += f, h += f, (e -= f) <= 1) {
                                        y = !0;
                                        break
                                    }
                                }
                                if (o[u++] = o[c++], 0 == --n) {
                                    y = !0;
                                    break
                                }
                                if (0 !== (m = d(a[h], o, c, n, 0, r))) {
                                    for (l = 0; l < m; l++) o[u + l] = o[c + l];
                                    if (u += m, c += m, 0 === (n -= m)) {
                                        y = !0;
                                        break
                                    }
                                }
                                if (o[u++] = a[h++], 1 == --e) {
                                    y = !0;
                                    break
                                }
                                _--
                            } while (f >= s || m >= s);
                            if (y) break;
                            _ < 0 && (_ = 0), _ += 2
                        }
                        if (this.minGallop = _, _ < 1 && (this.minGallop = 1), 1 === e) {
                            for (l = 0; l < n; l++) o[u + l] = o[c + l];
                            o[u + n] = a[h]
                        } else {
                            if (0 === e) throw new Error("mergeLow preconditions were not respected");
                            for (l = 0; l < e; l++) o[u + l] = a[h + l]
                        }
                    } else {
                        for (l = 0; l < n; l++) o[u + l] = o[c + l];
                        o[u + n] = a[h]
                    }
                else
                    for (l = 0; l < e; l++) o[u + l] = a[h + l]
            }, t.prototype.mergeHigh = function(t, e, i, n) {
                var r = this.compare,
                    o = this.array,
                    a = this.tmp,
                    l = 0;
                for (l = 0; l < n; l++) a[l] = o[i + l];
                var h = t + e - 1,
                    c = n - 1,
                    u = i + n - 1,
                    _ = 0,
                    f = 0;
                if (o[u--] = o[h--], 0 != --e)
                    if (1 !== n) {
                        for (var m = this.minGallop;;) {
                            var y = 0,
                                v = 0,
                                g = !1;
                            do {
                                if (r(a[c], o[h]) < 0) {
                                    if (o[u--] = o[h--], y++, v = 0, 0 == --e) {
                                        g = !0;
                                        break
                                    }
                                } else if (o[u--] = a[c--], v++, y = 0, 1 == --n) {
                                    g = !0;
                                    break
                                }
                            } while ((y | v) < m);
                            if (g) break;
                            do {
                                if (0 !== (y = e - p(a[c], o, t, e, e - 1, r))) {
                                    for (e -= y, f = (u -= y) + 1, _ = (h -= y) + 1, l = y - 1; l >= 0; l--) o[f + l] = o[_ + l];
                                    if (0 === e) {
                                        g = !0;
                                        break
                                    }
                                }
                                if (o[u--] = a[c--], 1 == --n) {
                                    g = !0;
                                    break
                                }
                                if (0 !== (v = n - d(o[h], a, 0, n, n - 1, r))) {
                                    for (n -= v, f = (u -= v) + 1, _ = (c -= v) + 1, l = 0; l < v; l++) o[f + l] = a[_ + l];
                                    if (n <= 1) {
                                        g = !0;
                                        break
                                    }
                                }
                                if (o[u--] = o[h--], 0 == --e) {
                                    g = !0;
                                    break
                                }
                                m--
                            } while (y >= s || v >= s);
                            if (g) break;
                            m < 0 && (m = 0), m += 2
                        }
                        if (this.minGallop = m, m < 1 && (this.minGallop = 1), 1 === n) {
                            for (f = (u -= e) + 1, _ = (h -= e) + 1, l = e - 1; l >= 0; l--) o[f + l] = o[_ + l];
                            o[u] = a[c]
                        } else {
                            if (0 === n) throw new Error("mergeHigh preconditions were not respected");
                            for (_ = u - (n - 1), l = 0; l < n; l++) o[_ + l] = a[l]
                        }
                    } else {
                        for (f = (u -= e) + 1, _ = (h -= e) + 1, l = e - 1; l >= 0; l--) o[f + l] = o[_ + l];
                        o[u] = a[c]
                    }
                else
                    for (_ = u - (n - 1), l = 0; l < n; l++) o[_ + l] = a[l]
            }, t
        })();
        e.exports = i.default
    }), {}],
    377: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0;
        for (var n = Array(8), r = 0; r < 8; ++r) n[r] = [];

        function s(t) {
            for (var e = 16; e <= 1 << 28; e *= 16)
                if (t <= e) return e;
            return 0
        }

        function o(t) {
            var e = void 0,
                i = void 0;
            return e = (t > 65535) << 4, e |= i = ((t >>>= e) > 255) << 3, e |= i = ((t >>>= i) > 15) << 2, (e |= i = ((t >>>= i) > 3) << 1) | (t >>>= i) >> 1
        }

        function a(t) {
            var e = s(t),
                i = n[o(e) >> 2];
            return i.length > 0 ? i.pop() : new ArrayBuffer(e)
        }

        function l(t) {
            n[o(t.byteLength) >> 2].push(t)
        }
        i.default = {
            alloc_int8: function(t) {
                var e = new Int8Array(a(t), 0, t);
                return e.length !== t ? e.subarray(0, t) : e
            },
            alloc_uint8: function(t) {
                var e = new Uint8Array(a(t), 0, t);
                return e.length !== t ? e.subarray(0, t) : e
            },
            alloc_int16: function(t) {
                var e = new Int16Array(a(2 * t), 0, t);
                return e.length !== t ? e.subarray(0, t) : e
            },
            alloc_uint16: function(t) {
                var e = new Uint16Array(a(2 * t), 0, t);
                return e.length !== t ? e.subarray(0, t) : e
            },
            alloc_int32: function(t) {
                var e = new Int32Array(a(4 * t), 0, t);
                return e.length !== t ? e.subarray(0, t) : e
            },
            alloc_uint32: function(t) {
                var e = new Uint32Array(a(4 * t), 0, t);
                return e.length !== t ? e.subarray(0, t) : e
            },
            alloc_float32: function(t) {
                var e = new Float32Array(a(4 * t), 0, t);
                return e.length !== t ? e.subarray(0, t) : e
            },
            alloc_float64: function(t) {
                var e = new Float64Array(a(8 * t), 0, t);
                return e.length !== t ? e.subarray(0, t) : e
            },
            alloc_dataview: function(t) {
                var e = new DataView(a(t), 0, t);
                return e.length !== t ? e.subarray(0, t) : e
            },
            free: function(t) {
                l(t.buffer)
            },
            reset: function() {
                for (var t = Array(8), e = 0; e < 8; ++e) t[e] = []
            }
        }, e.exports = i.default
    }), {}],
    378: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.default = function(t, e) {
            var i, n = t.length,
                r = e ^ n,
                s = 0;
            for (; n >= 4;) i = 1540483477 * (65535 & (i = 255 & t.charCodeAt(s) | (255 & t.charCodeAt(++s)) << 8 | (255 & t.charCodeAt(++s)) << 16 | (255 & t.charCodeAt(++s)) << 24)) + ((1540483477 * (i >>> 16) & 65535) << 16), r = 1540483477 * (65535 & r) + ((1540483477 * (r >>> 16) & 65535) << 16) ^ (i = 1540483477 * (65535 & (i ^= i >>> 24)) + ((1540483477 * (i >>> 16) & 65535) << 16)), n -= 4, ++s;
            switch (n) {
                case 3:
                    r ^= (255 & t.charCodeAt(s + 2)) << 16;
                case 2:
                    r ^= (255 & t.charCodeAt(s + 1)) << 8;
                case 1:
                    r = 1540483477 * (65535 & (r ^= 255 & t.charCodeAt(s))) + ((1540483477 * (r >>> 16) & 65535) << 16)
            }
            return r = 1540483477 * (65535 & (r ^= r >>> 13)) + ((1540483477 * (r >>> 16) & 65535) << 16), (r ^= r >>> 15) >>> 0
        }, e.exports = i.default
    }), {}],
    379: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.default = void 0;
        var n = t("../../core/vmath"),
            r = a(t("../core/base-renderer")),
            s = a(t("../enums")),
            o = t("../memop");

        function a(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }

        function l(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }

        function h(t, e) {
            if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
            return !e || "object" != typeof e && "function" != typeof e ? t : e
        }

        function c(t, e) {
            if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e);
            t.prototype = Object.create(e && e.prototype, {
                constructor: {
                    value: t,
                    enumerable: !1,
                    writable: !0,
                    configurable: !0
                }
            }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e)
        }
        var u = new Float32Array(16),
            _ = new Float32Array(16),
            f = new Float32Array(16),
            d = new Float32Array(4),
            p = new Float32Array(64),
            m = [],
            y = new Float32Array(4),
            v = cc.v4(0, 0, 0, 0),
            g = cc.v3(0, 0, 0),
            x = cc.v3(0, 0, 0),
            b = new o.RecyclePool(function() {
                return new Float32Array(16)
            }, 8),
            A = (function(t) {
                function e(i, n) {
                    l(this, e);
                    var r = h(this, t.call(this, i, n));
                    return r._time = new Float32Array(4), r._directionalLights = [], r._pointLights = [], r._spotLights = [], r._shadowLights = [], r._ambientLights = [], r._shadowMaps = [], r._shadowMapSlots = new Int32Array(4), r._numLights = 0, r._defines = {}, r._registerStage("shadowcast", r._shadowStage.bind(r)), r._registerStage("opaque", r._opaqueStage.bind(r)), r._registerStage("transparent", r._transparentStage.bind(r)), r
                }
                return c(e, t), e.prototype.reset = function() {
                    b.reset(), t.prototype.reset.call(this)
                }, e.prototype.render = function(t, e) {
                    this.reset(), this._time[0] += e, this._device.setUniform("cc_time", this._time), this._updateLights(t);
                    for (var i = this._device._gl.canvas, n = 0; n < t._cameras.length; ++n) {
                        var r = this._requestView(),
                            s = i.width,
                            o = i.height;
                        t._cameras.data[n].extractView(r, s, o)
                    }
                    this._viewPools.sort((function(t, e) {
                        return t._priority - e._priority
                    }));
                    for (var a = 0; a < this._viewPools.length; ++a) {
                        var l = this._viewPools.data[a];
                        this._render(l, t)
                    }
                }, e.prototype.renderCamera = function(t, e) {
                    this.reset();
                    var i = this._device._gl.canvas,
                        n = i.width,
                        r = i.height,
                        s = this._requestView();
                    t.extractView(s, n, r), this._render(s, e)
                }, e.prototype._updateLights = function(t) {
                    this._directionalLights.length = 0, this._pointLights.length = 0, this._spotLights.length = 0, this._shadowLights.length = 0, this._ambientLights.length = 0;
                    for (var e = t._lights, i = 0; i < e.length; ++i) {
                        var n = e.data[i];
                        if (n.update(this._device), n.shadowType !== s.default.SHADOW_NONE) {
                            this._shadowLights.push(n);
                            var r = this._requestView();
                            n.extractView(r, ["shadowcast"])
                        }
                        n._type === s.default.LIGHT_DIRECTIONAL ? this._directionalLights.push(n) : n._type === s.default.LIGHT_POINT ? this._pointLights.push(n) : n._type === s.default.LIGHT_SPOT ? this._spotLights.push(n) : this._ambientLights.push(n)
                    }
                    this._updateDefines(), this._numLights = e._count
                }, e.prototype._updateDefines = function() {
                    var t = this._defines;
                    t.CC_NUM_DIR_LIGHTS = Math.min(4, this._directionalLights.length), t.CC_NUM_POINT_LIGHTS = Math.min(4, this._pointLights.length), t.CC_NUM_SPOT_LIGHTS = Math.min(4, this._spotLights.length), t.CC_NUM_AMBIENT_LIGHTS = Math.min(4, this._ambientLights.length), t.CC_NUM_SHADOW_LIGHTS = Math.min(4, this._shadowLights.length)
                }, e.prototype._submitLightsUniforms = function() {
                    var t = this._device;
                    if (this._directionalLights.length > 0) {
                        for (var e = b.add(), i = b.add(), n = Math.min(4, this._directionalLights.length), r = 0; r < n; ++r) {
                            var s = this._directionalLights[r],
                                o = 4 * r;
                            e.set(s._directionUniform, o), i.set(s._colorUniform, o)
                        }
                        t.setUniform("cc_dirLightDirection", e), t.setUniform("cc_dirLightColor", i)
                    }
                    if (this._pointLights.length > 0) {
                        for (var a = b.add(), l = b.add(), h = Math.min(4, this._pointLights.length), c = 0; c < h; ++c) {
                            var u = this._pointLights[c],
                                _ = 4 * c;
                            a.set(u._positionUniform, _), a[_ + 3] = u._range, l.set(u._colorUniform, _)
                        }
                        t.setUniform("cc_pointLightPositionAndRange", a), t.setUniform("cc_pointLightColor", l)
                    }
                    if (this._spotLights.length > 0) {
                        for (var f = b.add(), d = b.add(), p = b.add(), m = Math.min(4, this._spotLights.length), y = 0; y < m; ++y) {
                            var v = this._spotLights[y],
                                g = 4 * y;
                            f.set(v._positionUniform, g), f[g + 3] = v._range, d.set(v._directionUniform, g), d[g + 3] = v._spotUniform[0], p.set(v._colorUniform, g), p[g + 3] = v._spotUniform[1]
                        }
                        t.setUniform("cc_spotLightPositionAndRange", f), t.setUniform("cc_spotLightDirection", d), t.setUniform("cc_spotLightColor", p)
                    }
                    if (this._ambientLights.length > 0) {
                        for (var x = b.add(), A = Math.min(4, this._ambientLights.length), C = 0; C < A; ++C) {
                            var T = this._ambientLights[C],
                                S = 4 * C;
                            x.set(T._colorUniform, S)
                        }
                        t.setUniform("cc_ambientColor", x)
                    }
                }, e.prototype._submitShadowStageUniforms = function(t) {
                    var e = t._shadowLight,
                        i = y;
                    i[0] = e.shadowMinDepth, i[1] = e.shadowMaxDepth, i[2] = e.shadowDepthScale, i[3] = e.shadowDarkness, this._device.setUniform("cc_shadow_map_lightViewProjMatrix", n.mat4.array(f, t._matViewProj)), this._device.setUniform("cc_shadow_map_info", i), this._device.setUniform("cc_shadow_map_bias", e.shadowBias)
                }, e.prototype._submitOtherStagesUniforms = function() {
                    for (var t = b.add(), e = 0; e < this._shadowLights.length; ++e) {
                        var i = this._shadowLights[e],
                            r = m[e];
                        r || (r = m[e] = new Float32Array(p.buffer, 16 * e, 16)), n.mat4.array(r, i.viewProjMatrix);
                        var s = 4 * e;
                        t[s] = i.shadowMinDepth, t[s + 1] = i.shadowMaxDepth, t[s + 2] = i.shadowDepthScale, t[s + 3] = i.shadowDarkness
                    }
                    this._device.setUniform("cc_shadow_lightViewProjMatrix", p), this._device.setUniform("cc_shadow_info", t)
                }, e.prototype._updateShaderDefines = function(t) {
                    t.defines.push(this._defines)
                }, e.prototype._sortItems = function(t) {
                    t.sort((function(t, e) {
                        var i = t.technique,
                            n = e.technique;
                        return i._layer !== n._layer ? i._layer - n._layer : i._passes.length !== n._passes.length ? i._passes.length - n._passes.length : t.sortKey - e.sortKey
                    }))
                }, e.prototype._shadowStage = function(t, e) {
                    this._submitShadowStageUniforms(t);
                    for (var i = 0; i < e.length; ++i) {
                        var n = e.data[i];
                        this._programLib._getValueFromDefineList("CC_SHADOW_CASTING", n.defines) && (this._updateShaderDefines(n), this._draw(n))
                    }
                }, e.prototype._drawItems = function(t, e) {
                    var i = this._shadowLights;
                    if (0 === i.length && 0 === this._numLights)
                        for (var n = 0; n < e.length; ++n) {
                            var r = e.data[n];
                            this._updateShaderDefines(r), this._draw(r)
                        } else
                            for (var s = 0; s < e.length; ++s) {
                                var o = e.data[s];
                                this._shadowMaps.length = i.length;
                                for (var a = 0; a < i.length; ++a) {
                                    var l = i[a];
                                    this._shadowMaps[a] = l.shadowMap, this._shadowMapSlots[a] = this._allocTextureUnit()
                                }
                                this._device.setTextureArray("cc_shadow_map", this._shadowMaps, this._shadowMapSlots), this._updateShaderDefines(o), this._draw(o)
                            }
                }, e.prototype._opaqueStage = function(t, e) {
                    t.getPosition(v), this._device.setUniform("cc_matView", n.mat4.array(u, t._matView)), this._device.setUniform("cc_matpProj", n.mat4.array(_, t._matProj)), this._device.setUniform("cc_matViewProj", n.mat4.array(f, t._matViewProj)), this._device.setUniform("cc_cameraPos", n.vec4.array(d, v)), this._submitLightsUniforms(), this._submitOtherStagesUniforms(), this._drawItems(t, e)
                }, e.prototype._transparentStage = function(t, e) {
                    t.getPosition(v), t.getForward(g), this._device.setUniform("cc_matView", n.mat4.array(u, t._matView)), this._device.setUniform("cc_matpProj", n.mat4.array(_, t._matProj)), this._device.setUniform("cc_matViewProj", n.mat4.array(f, t._matViewProj)), this._device.setUniform("cc_cameraPos", n.vec4.array(d, v)), this._submitLightsUniforms(), this._submitOtherStagesUniforms();
                    for (var i = 0; i < e.length; ++i) {
                        var r = e.data[i];
                        r.node.getWorldPosition(x), n.vec3.sub(x, x, v), r.sortKey = -n.vec3.dot(x, g)
                    }
                    this._sortItems(e), this._drawItems(t, e)
                }, e
            })(r.default);
        i.default = A, e.exports = i.default
    }), {
        "../../core/vmath": 326,
        "../core/base-renderer": 348,
        "../enums": 355,
        "../memop": 372
    }],
    380: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.default = void 0;
        var n = (function() {
                function t(t, e) {
                    for (var i = 0; i < e.length; i++) {
                        var n = e[i];
                        n.enumerable = n.enumerable || !1, n.configurable = !0, "value" in n && (n.writable = !0), Object.defineProperty(t, n.key, n)
                    }
                }
                return function(e, i, n) {
                    return i && t(e.prototype, i), n && t(e, n), e
                }
            })(),
            r = t("../../core/vmath"),
            s = a(t("../../core/geom-utils")),
            o = a(t("../enums"));

        function a(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }

        function l(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }
        var h = r.mat4.create(),
            c = r.mat4.create(),
            u = r.mat4.create(),
            _ = r.mat4.create(),
            f = r.mat4.create(),
            d = cc.v3(),
            p = cc.v3(),
            m = (function() {
                function t() {
                    l(this, t), this._poolID = -1, this._node = null, this._projection = o.default.PROJ_PERSPECTIVE, this._priority = 0, this._color = r.color4.create(.2, .3, .47, 1), this._depth = 1, this._stencil = 0, this._clearFlags = o.default.CLEAR_COLOR | o.default.CLEAR_DEPTH, this._clearModel = null, this._stages = [], this._framebuffer = null, this._near = .01, this._far = 1e3, this._fov = Math.PI / 4, this._rect = {
                        x: 0,
                        y: 0,
                        w: 1,
                        h: 1
                    }, this._orthoHeight = 10, this._cullingMask = 4294967295
                }
                return t.prototype.setCullingMask = function(t) {
                    this._cullingMask = t
                }, t.prototype.getNode = function() {
                    return this._node
                }, t.prototype.setNode = function(t) {
                    this._node = t
                }, t.prototype.getType = function() {
                    return this._projection
                }, t.prototype.setType = function(t) {
                    this._projection = t
                }, t.prototype.getPriority = function() {
                    return this._priority
                }, t.prototype.setPriority = function(t) {
                    this._priority = t
                }, t.prototype.getOrthoHeight = function() {
                    return this._orthoHeight
                }, t.prototype.setOrthoHeight = function(t) {
                    this._orthoHeight = t
                }, t.prototype.getFov = function() {
                    return this._fov
                }, t.prototype.setFov = function(t) {
                    this._fov = t
                }, t.prototype.getNear = function() {
                    return this._near
                }, t.prototype.setNear = function(t) {
                    this._near = t
                }, t.prototype.getFar = function() {
                    return this._far
                }, t.prototype.setFar = function(t) {
                    this._far = t
                }, t.prototype.getColor = function(t) {
                    return r.color4.copy(t, this._color)
                }, t.prototype.setColor = function(t, e, i, n) {
                    r.color4.set(this._color, t, e, i, n)
                }, t.prototype.getDepth = function() {
                    return this._depth
                }, t.prototype.setDepth = function(t) {
                    this._depth = t
                }, t.prototype.getStencil = function() {
                    return this._stencil
                }, t.prototype.setStencil = function(t) {
                    this._stencil = t
                }, t.prototype.getClearFlags = function() {
                    return this._clearFlags
                }, t.prototype.setClearFlags = function(t) {
                    this._clearFlags = t
                }, t.prototype.getRect = function(t) {
                    return t.x = this._rect.x, t.y = this._rect.y, t.w = this._rect.w, t.h = this._rect.h, t
                }, t.prototype.setRect = function(t, e, i, n) {
                    this._rect.x = t, this._rect.y = e, this._rect.w = i, this._rect.h = n
                }, t.prototype.getStages = function() {
                    return this._stages
                }, t.prototype.setStages = function(t) {
                    this._stages = t
                }, t.prototype.getFramebuffer = function() {
                    return this._framebuffer
                }, t.prototype.setFrameBuffer = function(t) {
                    this._framebuffer = t
                }, t.prototype._calcMatrices = function(t, e) {
                    this._node.getWorldRT(c), r.mat4.invert(c, c);
                    var i = t / e;
                    if (this._projection === o.default.PROJ_PERSPECTIVE) r.mat4.perspective(u, this._fov, i, this._near, this._far);
                    else {
                        var n = this._orthoHeight * i,
                            s = this._orthoHeight;
                        r.mat4.ortho(u, -n, n, -s, s, this._near, this._far)
                    }
                    r.mat4.mul(_, u, c), r.mat4.invert(f, _)
                }, t.prototype.extractView = function(t, e, i) {
                    this._framebuffer && (e = this._framebuffer._width, i = this._framebuffer._height), t._priority = this._priority, t._rect.x = this._rect.x * e, t._rect.y = this._rect.y * i, t._rect.w = this._rect.w * e, t._rect.h = this._rect.h * i, this.getColor(t._color), t._depth = this._depth, t._stencil = this._stencil, t._clearFlags = this._clearFlags, t._clearModel = this._clearModel, t._stages = this._stages, t._framebuffer = this._framebuffer, this._calcMatrices(e, i), r.mat4.copy(t._matView, c), r.mat4.copy(t._matProj, u), r.mat4.copy(t._matViewProj, _), r.mat4.copy(t._matInvViewProj, f), t._cullingMask = this._cullingMask
                }, t.prototype.screenPointToRay = function(t, e, i, n, a) {
                    if (!s.default) return a;
                    a = a || s.default.Ray.create(), this._calcMatrices(i, n);
                    var l = this._rect.x * i,
                        h = this._rect.y * n,
                        c = this._rect.w * i,
                        u = this._rect.h * n;
                    return r.vec3.set(p, (t - l) / c * 2 - 1, (e - h) / u * 2 - 1, 1), r.vec3.transformMat4(p, p, f), this._projection === o.default.PROJ_PERSPECTIVE ? this._node.getWorldPosition(d) : (r.vec3.set(d, (t - l) / c * 2 - 1, (e - h) / u * 2 - 1, -1), r.vec3.transformMat4(d, d, f)), s.default.Ray.fromPoints(a, d, p)
                }, t.prototype.screenToWorld = function(t, e, i, n) {
                    this._calcMatrices(i, n);
                    var s = this._rect.x * i,
                        a = this._rect.y * n,
                        l = this._rect.w * i,
                        h = this._rect.h * n;
                    return this._projection === o.default.PROJ_PERSPECTIVE ? (r.vec3.set(t, (e.x - s) / l * 2 - 1, (e.y - a) / h * 2 - 1, .9999), r.vec3.transformMat4(t, t, f), this._node.getWorldPosition(d), r.vec3.lerp(t, d, t, (0, r.lerp)(this._near / this._far, 1, e.z))) : (r.vec3.set(t, (e.x - s) / l * 2 - 1, (e.y - a) / h * 2 - 1, 2 * e.z - 1), r.vec3.transformMat4(t, t, f)), t
                }, t.prototype.worldToScreen = function(t, e, i, n) {
                    this._calcMatrices(i, n);
                    var s = this._rect.x * i,
                        o = this._rect.y * n,
                        a = this._rect.w * i,
                        l = this._rect.h * n;
                    return r.vec3.transformMat4(t, e, _), t.x = s + .5 * (t.x + 1) * a, t.y = o + .5 * (t.y + 1) * l, t.z = .5 * t.z + .5, t
                }, t.prototype.worldMatrixToScreen = function(t, e, i, n) {
                    this._calcMatrices(i, n), r.mat4.mul(t, _, e);
                    var s = i / 2,
                        o = n / 2;
                    return r.mat4.identity(h), r.mat4.translate(h, h, r.vec3.set(d, s, o, 0)), r.mat4.scale(h, h, r.vec3.set(d, s, o, 1)), r.mat4.mul(t, h, t), t
                }, n(t, [{
                    key: "cullingMask",
                    get: function() {
                        return this._cullingMask
                    },
                    set: function(t) {
                        this._cullingMask = t
                    }
                }]), t
            })();
        i.default = m, e.exports = i.default
    }), {
        "../../core/geom-utils": 136,
        "../../core/vmath": 326,
        "../enums": 355
    }],
    381: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.default = void 0;
        var n = (function() {
                function t(t, e) {
                    for (var i = 0; i < e.length; i++) {
                        var n = e[i];
                        n.enumerable = n.enumerable || !1, n.configurable = !0, "value" in n && (n.writable = !0), Object.defineProperty(t, n.key, n)
                    }
                }
                return function(e, i, n) {
                    return i && t(e.prototype, i), n && t(e, n), e
                }
            })(),
            r = t("../../core/vmath"),
            s = a(t("../gfx")),
            o = a(t("../enums"));

        function a(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }

        function l(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }
        var h = r.vec3.create(0, 0, -1),
            c = r.mat4.create(),
            u = r.mat3.create(),
            _ = r.vec3.create(0, 0, 0);

        function f(t, e, i) {
            t._node.getWorldRT(e), r.mat4.invert(e, e), r.mat4.perspective(i, t._spotAngle * t._spotAngleScale, 1, t._shadowMinDepth, t._shadowMaxDepth)
        }

        function d(t, e, i) {
            t._node.getWorldRT(e), r.mat4.invert(e, e);
            var n = t._shadowFrustumSize / 2;
            r.mat4.ortho(i, -n, n, -n, n, t._shadowMinDepth, t._shadowMaxDepth)
        }

        function p(t, e, i) {
            t._node.getWorldRT(e), r.mat4.invert(e, e), r.mat4.perspective(i, (0, r.toRadian)(179), 1, t._shadowMinDepth, t._shadowMaxDepth)
        }
        var m = (function() {
            function t() {
                l(this, t), this._poolID = -1, this._node = null, this._type = o.default.LIGHT_DIRECTIONAL, this._color = r.color3.create(1, 1, 1), this._intensity = 1, this._range = 1, this._spotAngle = (0, r.toRadian)(60), this._spotExp = 1, this._directionUniform = new Float32Array(3), this._positionUniform = new Float32Array(3), this._colorUniform = new Float32Array([this._color.r * this._intensity, this._color.g * this._intensity, this._color.b * this._intensity]), this._spotUniform = new Float32Array([Math.cos(.5 * this._spotAngle), this._spotExp]), this._shadowType = o.default.SHADOW_NONE, this._shadowFrameBuffer = null, this._shadowMap = null, this._shadowMapDirty = !1, this._shadowDepthBuffer = null, this._shadowResolution = 1024, this._shadowBias = 5e-4, this._shadowDarkness = 1, this._shadowMinDepth = 1, this._shadowMaxDepth = 1e3, this._shadowDepthScale = 50, this._frustumEdgeFalloff = 0, this._viewProjMatrix = r.mat4.create(), this._spotAngleScale = 1, this._shadowFrustumSize = 50
            }
            return t.prototype.getNode = function() {
                return this._node
            }, t.prototype.setNode = function(t) {
                this._node = t
            }, t.prototype.setColor = function(t, e, i) {
                r.color3.set(this._color, t, e, i), this._colorUniform[0] = t * this._intensity, this._colorUniform[1] = e * this._intensity, this._colorUniform[2] = i * this._intensity
            }, t.prototype.setIntensity = function(t) {
                this._intensity = t, this._colorUniform[0] = t * this._color.r, this._colorUniform[1] = t * this._color.g, this._colorUniform[2] = t * this._color.b
            }, t.prototype.setType = function(t) {
                this._type = t
            }, t.prototype.setSpotAngle = function(t) {
                this._spotAngle = t, this._spotUniform[0] = Math.cos(.5 * this._spotAngle)
            }, t.prototype.setSpotExp = function(t) {
                this._spotExp = t, this._spotUniform[1] = t
            }, t.prototype.setRange = function(t) {
                this._range = t
            }, t.prototype.setShadowType = function(t) {
                this._shadowType === o.default.SHADOW_NONE && t !== o.default.SHADOW_NONE && (this._shadowMapDirty = !0), this._shadowType = t
            }, t.prototype.setShadowResolution = function(t) {
                this._shadowResolution !== t && (this._shadowMapDirty = !0), this._shadowResolution = t
            }, t.prototype.setShadowBias = function(t) {
                this._shadowBias = t
            }, t.prototype.setShadowDarkness = function(t) {
                this._shadowDarkness = t
            }, t.prototype.setShadowMinDepth = function(t) {
                this._shadowMinDepth = t
            }, t.prototype.setShadowMaxDepth = function(t) {
                this._shadowMaxDepth = t
            }, t.prototype.setShadowDepthScale = function(t) {
                this._shadowDepthScale = t
            }, t.prototype.setFrustumEdgeFalloff = function(t) {
                this._frustumEdgeFalloff = t
            }, t.prototype.setShadowFrustumSize = function(t) {
                this._shadowFrustumSize = t
            }, t.prototype.extractView = function(t, e) {
                switch (t._shadowLight = this, t._priority = -1, t._rect.x = 0, t._rect.y = 0, t._rect.w = this._shadowResolution, t._rect.h = this._shadowResolution, r.color4.set(t._color, 1, 1, 1, 1), t._depth = 1, t._stencil = 1, t._clearFlags = o.default.CLEAR_COLOR | o.default.CLEAR_DEPTH, t._stages = e, t._framebuffer = this._shadowFrameBuffer, this._type) {
                    case o.default.LIGHT_SPOT:
                        f(this, t._matView, t._matProj);
                        break;
                    case o.default.LIGHT_DIRECTIONAL:
                        d(this, t._matView, t._matProj);
                        break;
                    case o.default.LIGHT_POINT:
                        p(this, t._matView, t._matProj);
                        break;
                    case o.default.LIGHT_AMBIENT:
                        break;
                    default:
                        console.warn("shadow of this light type is not supported")
                }
                r.mat4.mul(t._matViewProj, t._matProj, t._matView), this._viewProjMatrix = t._matViewProj, r.mat4.invert(t._matInvViewProj, t._matViewProj), t._cullingMask = 4294967295
            }, t.prototype._updateLightPositionAndDirection = function() {
                this._node.getWorldMatrix(c), r.mat3.fromMat4(u, c), r.vec3.transformMat3(_, h, u), r.vec3.array(this._directionUniform, _);
                var t = this._positionUniform,
                    e = c.m;
                t[0] = e[12], t[1] = e[13], t[2] = e[14]
            }, t.prototype._generateShadowMap = function(t) {
                this._shadowMap = new s.default.Texture2D(t, {
                    width: this._shadowResolution,
                    height: this._shadowResolution,
                    format: s.default.TEXTURE_FMT_RGBA8,
                    wrapS: s.default.WRAP_CLAMP,
                    wrapT: s.default.WRAP_CLAMP
                }), this._shadowDepthBuffer = new s.default.RenderBuffer(t, s.default.RB_FMT_D16, this._shadowResolution, this._shadowResolution), this._shadowFrameBuffer = new s.default.FrameBuffer(t, this._shadowResolution, this._shadowResolution, {
                    colors: [this._shadowMap],
                    depth: this._shadowDepthBuffer
                })
            }, t.prototype._destroyShadowMap = function() {
                this._shadowMap && (this._shadowMap.destroy(), this._shadowDepthBuffer.destroy(), this._shadowFrameBuffer.destroy(), this._shadowMap = null, this._shadowDepthBuffer = null, this._shadowFrameBuffer = null)
            }, t.prototype.update = function(t) {
                this._updateLightPositionAndDirection(), this._shadowType === o.default.SHADOW_NONE ? this._destroyShadowMap() : this._shadowMapDirty && (this._destroyShadowMap(), this._generateShadowMap(t), this._shadowMapDirty = !1)
            }, n(t, [{
                key: "color",
                get: function() {
                    return this._color
                }
            }, {
                key: "intensity",
                get: function() {
                    return this._intensity
                }
            }, {
                key: "type",
                get: function() {
                    return this._type
                }
            }, {
                key: "spotAngle",
                get: function() {
                    return this._spotAngle
                }
            }, {
                key: "spotExp",
                get: function() {
                    return this._spotExp
                }
            }, {
                key: "range",
                get: function() {
                    return this._range
                }
            }, {
                key: "shadowType",
                get: function() {
                    return this._shadowType
                }
            }, {
                key: "shadowMap",
                get: function() {
                    return this._shadowMap
                }
            }, {
                key: "viewProjMatrix",
                get: function() {
                    return this._viewProjMatrix
                }
            }, {
                key: "shadowResolution",
                get: function() {
                    return this._shadowResolution
                }
            }, {
                key: "shadowBias",
                get: function() {
                    return this._shadowBias
                }
            }, {
                key: "shadowDarkness",
                get: function() {
                    return this._shadowDarkness
                }
            }, {
                key: "shadowMinDepth",
                get: function() {
                    return this._type === o.default.LIGHT_DIRECTIONAL ? 1 : this._shadowMinDepth
                }
            }, {
                key: "shadowMaxDepth",
                get: function() {
                    return this._type === o.default.LIGHT_DIRECTIONAL ? 1 : this._shadowMaxDepth
                }
            }, {
                key: "shadowDepthScale",
                get: function() {
                    return this._shadowDepthScale
                }
            }, {
                key: "frustumEdgeFalloff",
                get: function() {
                    return this._frustumEdgeFalloff
                }
            }, {
                key: "shadowFrustumSize",
                get: function() {
                    return this._shadowFrustumSize
                }
            }]), t
        })();
        i.default = m, e.exports = i.default
    }), {
        "../../core/vmath": 326,
        "../enums": 355,
        "../gfx": 360
    }],
    382: [(function(t, e, i) {
        "use strict";

        function n(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }
        i.__esModule = !0;
        var r = (function() {
            function t() {
                n(this, t), this._type = "default", this._poolID = -1, this._node = null, this._inputAssembler = null, this._effect = null, this._viewID = -1, this._cameraID = -1, this._userKey = -1, this._castShadow = !1, this._boundingShape = null, this._defines = [], this._uniforms = []
            }
            return t.prototype.setNode = function(t) {
                this._node = t
            }, t.prototype.setInputAssembler = function(t) {
                this._inputAssembler = t
            }, t.prototype.setEffect = function(t, e) {
                this._effect = t;
                var i = this._defines,
                    n = this._uniforms;
                i.length = 0, n.length = 0, t && (i.push(t._defines), n.push(t._properties)), e && (i.push(e._defines), n.push(e._properties))
            }, t.prototype.setUserKey = function(t) {
                this._userKey = t
            }, t.prototype.extractDrawItem = function(t) {
                t.model = this, t.node = this._node, t.ia = this._inputAssembler, t.effect = this._effect, t.defines = this._defines, t.dependencies = this._dependencies, t.uniforms = this._uniforms
            }, t
        })();
        i.default = r, e.exports = i.default
    }), {}],
    383: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0;
        var n = t("../memop");

        function r(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }
        var s = (function() {
            function t(e) {
                r(this, t), this._lights = new n.FixedArray(16), this._models = new n.FixedArray(16), this._cameras = new n.FixedArray(16), this._debugCamera = null, this._app = e, this._views = []
            }
            return t.prototype._add = function(t, e) {
                -1 === e._poolID && (t.push(e), e._poolID = t.length - 1)
            }, t.prototype._remove = function(t, e) {
                -1 !== e._poolID && (t.data[t.length - 1]._poolID = e._poolID, t.fastRemove(e._poolID), e._poolID = -1)
            }, t.prototype.reset = function() {
                for (var t = 0; t < this._models.length; ++t) {
                    this._models.data[t]._viewID = -1
                }
            }, t.prototype.setDebugCamera = function(t) {
                this._debugCamera = t
            }, t.prototype.getCameraCount = function() {
                return this._cameras.length
            }, t.prototype.getCamera = function(t) {
                return this._cameras.data[t]
            }, t.prototype.addCamera = function(t) {
                this._add(this._cameras, t)
            }, t.prototype.removeCamera = function(t) {
                this._remove(this._cameras, t)
            }, t.prototype.getModelCount = function() {
                return this._models.length
            }, t.prototype.getModel = function(t) {
                return this._models.data[t]
            }, t.prototype.addModel = function(t) {
                this._add(this._models, t)
            }, t.prototype.removeModel = function(t) {
                this._remove(this._models, t)
            }, t.prototype.getLightCount = function() {
                return this._lights.length
            }, t.prototype.getLight = function(t) {
                return this._lights.data[t]
            }, t.prototype.addLight = function(t) {
                this._add(this._lights, t)
            }, t.prototype.removeLight = function(t) {
                this._remove(this._lights, t)
            }, t.prototype.addView = function(t) {
                -1 === this._views.indexOf(t) && this._views.push(t)
            }, t.prototype.removeView = function(t) {
                var e = this._views.indexOf(t); - 1 !== e && this._views.splice(e, 1)
            }, t
        })();
        i.default = s, e.exports = i.default
    }), {
        "../memop": 372
    }],
    384: [(function(t, e, i) {
        "use strict";
        var n, r, s, o;
        i.__esModule = !0, i.getClassName = i.getInstanceCtor = i.getInstanceType = i.enums2default = i.ctor2enums = void 0, i.getInspectorProps = function(t) {
            var e = {
                type: t.type
            };
            Object.assign(e, t.inspector), e.defines = t.defines, e.value = m(e.type)(t.value);
            var i = y(e.type);
            e.typeName = v[i] || i, "cc.Texture2D" == e.typeName && (e.typeName = "cc.Asset", e.assetType = "cc.Texture2D");
            return e
        };
        var a = c(t("./enums")),
            l = t("../core/value-types"),
            h = c(t("../core/assets/CCTexture2D"));

        function c(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }
        var u = null;
        u = t("./gfx/texture-2d");
        var _ = cc.Object,
            f = ((n = {})[Boolean] = function(t) {
                return t || !1
            }, n[Number] = function(t) {
                return t ? ArrayBuffer.isView(t) ? t[0] : t : 0
            }, n[l.Vec2] = function(t) {
                return t ? cc.v2(t[0], t[1]) : cc.v2()
            }, n[l.Vec3] = function(t) {
                return t ? cc.v3(t[0], t[1], t[2]) : cc.v3()
            }, n[l.Vec4] = function(t) {
                return t ? cc.v4(t[0], t[1], t[2], t[3]) : cc.v4()
            }, n[l.Color] = function(t) {
                return t ? cc.color(255 * t[0], 255 * t[1], 255 * t[2], 255 * (t[3] || 1)) : cc.color()
            }, n[l.Mat4] = function(t) {
                return t ? cc.mat4(t[0], t[1], t[2], t[3], t[4], t[5], t[6], t[7], t[8], t[9], t[10], t[11], t[12], t[13], t[14], t[15]) : cc.mat4()
            }, n[h.default] = function() {
                return null
            }, n[_] = function() {
                return null
            }, n),
            d = ((r = {})[a.default.PARAM_INT] = Number, r[a.default.PARAM_INT2] = l.Vec2, r[a.default.PARAM_INT3] = l.Vec3, r[a.default.PARAM_INT4] = l.Vec4, r[a.default.PARAM_FLOAT] = Number, r[a.default.PARAM_FLOAT2] = l.Vec2, r[a.default.PARAM_FLOAT3] = l.Vec3, r[a.default.PARAM_FLOAT4] = l.Vec4, r[a.default.PARAM_MAT4] = l.Mat4, r[a.default.PARAM_TEXTURE_2D] = h.default, r.color = l.Color, r.number = Number, r.boolean = Boolean, r.default = _, r),
            p = (i.ctor2enums = ((s = {})[Number] = a.default.PARAM_FLOAT, s[l.Vec2] = a.default.PARAM_FLOAT2, s[l.Vec3] = a.default.PARAM_FLOAT3, s[l.Vec4] = a.default.PARAM_FLOAT4, s[l.Color] = a.default.PARAM_COLOR3, s[l.Color] = a.default.PARAM_COLOR4, s[l.Mat4] = a.default.PARAM_MAT4, s[h.default] = a.default.PARAM_TEXTURE_2D, s[u] = a.default.PARAM_TEXTURE_2D, s), i.enums2default = ((o = {})[a.default.PARAM_INT] = new Uint32Array([0]), o[a.default.PARAM_INT2] = new Uint32Array([0, 0]), o[a.default.PARAM_INT3] = new Uint32Array([0, 0, 0]), o[a.default.PARAM_INT4] = new Uint32Array([0, 0, 0, 0]), o[a.default.PARAM_FLOAT] = new Float32Array([0]), o[a.default.PARAM_FLOAT2] = new Float32Array([0, 0]), o[a.default.PARAM_FLOAT3] = new Float32Array([0, 0, 0]), o[a.default.PARAM_FLOAT4] = new Float32Array([0, 0, 0, 0]), o[a.default.PARAM_MAT4] = cc.mat4().m, o[a.default.PARAM_TEXTURE_2D] = null, o.number = 0, o.boolean = !1, o), i.getInstanceType = function(t) {
                return d[t] || d.default
            }),
            m = i.getInstanceCtor = function(t) {
                return f[p(t)]
            },
            y = i.getClassName = function(t) {
                return cc.js.getClassName(p(t))
            },
            v = {
                Number: "number",
                Boolean: "boolean"
            }
    }), {
        "../core/assets/CCTexture2D": 73,
        "../core/value-types": 315,
        "./enums": 355,
        "./gfx/texture-2d": 365
    }],
    385: [(function(t, e, i) {
        "use strict";
        var n = t("../compression/ZipUtils"),
            r = t("../compression/zlib.min"),
            s = t("../core/platform/js");

        function o(t) {
            if (t.length % 4 != 0) return null;
            for (var e = t.length / 4, i = window.Uint32Array ? new Uint32Array(e) : [], n = 0; n < e; n++) {
                var r = 4 * n;
                i[n] = t[r] + 256 * t[r + 1] + 65536 * t[r + 2] + t[r + 3] * (1 << 24)
            }
            return i
        }

        function a(t) {
            var e = cc.Label.HorizontalAlign;
            switch (t) {
                case "center":
                    return e.CENTER;
                case "right":
                    return e.RIGHT;
                default:
                    return e.LEFT
            }
        }

        function l(t) {
            var e = cc.Label.VerticalAlign;
            switch (t) {
                case "center":
                    return e.CENTER;
                case "bottom":
                    return e.BOTTOM;
                default:
                    return e.TOP
            }
        }

        function h(t) {
            if (!t) return cc.color(0, 0, 0, 255);
            if (8 === (t = -1 !== t.indexOf("#") ? t.substring(1) : t).length) {
                var e = parseInt(t.substr(0, 2), 16) || 255,
                    i = parseInt(t.substr(2, 2), 16) || 0,
                    n = parseInt(t.substr(4, 2), 16) || 0,
                    r = parseInt(t.substr(6, 2), 16) || 0;
                return cc.color(i, n, r, e)
            }
            var s = parseInt(t.substr(0, 2), 16) || 0,
                o = parseInt(t.substr(2, 2), 16) || 0,
                a = parseInt(t.substr(4, 2), 16) || 0;
            return cc.color(s, o, a, 255)
        }

        function c(t, e) {
            for (var i = [], n = t.getElementsByTagName("properties"), r = 0; r < n.length; ++r)
                for (var s = n[r].getElementsByTagName("property"), o = 0; o < s.length; ++o) i.push(s[o]);
            e = e || {};
            for (var a = 0; a < i.length; a++) {
                var l = i[a],
                    c = l.getAttribute("name"),
                    u = l.getAttribute("type") || "string",
                    _ = l.getAttribute("value");
                "int" === u ? _ = parseInt(_) : "float" === u ? _ = parseFloat(_) : "bool" === u ? _ = "true" === _ : "color" === u && (_ = h(_)), e[c] = _
            }
            return e
        }
        t("../core/platform/CCSAXParser"), cc.TMXLayerInfo = function() {
            this.properties = {}, this.name = "", this._layerSize = null, this._tiles = [], this.visible = !0, this._opacity = 0, this.ownTiles = !0, this._minGID = 1e5, this._maxGID = 0, this.offset = cc.v2(0, 0)
        }, cc.TMXLayerInfo.prototype = {
            constructor: cc.TMXLayerInfo,
            getProperties: function() {
                return this.properties
            },
            setProperties: function(t) {
                this.properties = t
            }
        }, cc.TMXImageLayerInfo = function() {
            this.name = "", this.visible = !0, this.width = 0, this.height = 0, this.offset = cc.v2(0, 0), this._opacity = 0, this._trans = new cc.Color(255, 255, 255, 255), this.sourceImage = null
        }, cc.TMXObjectGroupInfo = function() {
            this.properties = {}, this.name = "", this._objects = [], this.visible = !0, this._opacity = 0, this._color = new cc.Color(255, 255, 255, 255), this.offset = cc.v2(0, 0), this._draworder = "topdown"
        }, cc.TMXObjectGroupInfo.prototype = {
            constructor: cc.TMXObjectGroupInfo,
            getProperties: function() {
                return this.properties
            },
            setProperties: function(t) {
                this.properties = t
            }
        }, cc.TMXTilesetInfo = function() {
            this.name = "", this.firstGid = 0, this.spacing = 0, this.margin = 0, this.sourceImage = null, this.imageSize = cc.size(0, 0), this.tileOffset = cc.v2(0, 0), this._tileSize = cc.size(0, 0)
        }, cc.TMXTilesetInfo.prototype = {
            constructor: cc.TMXTilesetInfo,
            rectForGID: function(t, e) {
                var i = e || cc.rect(0, 0, 0, 0);
                i.width = this._tileSize.width, i.height = this._tileSize.height, t &= cc.TiledMap.TileFlag.FLIPPED_MASK, t -= parseInt(this.firstGid, 10);
                var n = parseInt((this.imageSize.width - 2 * this.margin + this.spacing) / (this._tileSize.width + this.spacing), 10);
                return i.x = parseInt(t % n * (this._tileSize.width + this.spacing) + this.margin, 10), i.y = parseInt(parseInt(t / n, 10) * (this._tileSize.height + this.spacing) + this.margin, 10), i
            }
        }, cc.TMXMapInfo = function(t, e, i, n) {
            this.properties = [], this.orientation = null, this.parentElement = null, this.parentGID = null, this.layerAttrs = 0, this.storingCharacters = !1, this.currentString = null, this.renderOrder = cc.TiledMap.RenderOrder.RightDown, this._supportVersion = [1, 2, 0], this._parser = new cc.SAXParser, this._objectGroups = [], this._allChildren = [], this._mapSize = cc.size(0, 0), this._tileSize = cc.size(0, 0), this._layers = [], this._tilesets = [], this._imageLayers = [], this._tileProperties = {}, this._tileAnimations = {}, this._tsxMap = null, this._textures = null, this._staggerAxis = null, this._staggerIndex = null, this._hexSideLength = 0, this._imageLayerTextures = null, this.initWithXML(t, e, i, n)
        }, cc.TMXMapInfo.prototype = {
            constructor: cc.TMXMapInfo,
            getOrientation: function() {
                return this.orientation
            },
            setOrientation: function(t) {
                this.orientation = t
            },
            getStaggerAxis: function() {
                return this._staggerAxis
            },
            setStaggerAxis: function(t) {
                this._staggerAxis = t
            },
            getStaggerIndex: function() {
                return this._staggerIndex
            },
            setStaggerIndex: function(t) {
                this._staggerIndex = t
            },
            getHexSideLength: function() {
                return this._hexSideLength
            },
            setHexSideLength: function(t) {
                this._hexSideLength = t
            },
            getMapSize: function() {
                return cc.size(this._mapSize.width, this._mapSize.height)
            },
            setMapSize: function(t) {
                this._mapSize.width = t.width, this._mapSize.height = t.height
            },
            _getMapWidth: function() {
                return this._mapSize.width
            },
            _setMapWidth: function(t) {
                this._mapSize.width = t
            },
            _getMapHeight: function() {
                return this._mapSize.height
            },
            _setMapHeight: function(t) {
                this._mapSize.height = t
            },
            getTileSize: function() {
                return cc.size(this._tileSize.width, this._tileSize.height)
            },
            setTileSize: function(t) {
                this._tileSize.width = t.width, this._tileSize.height = t.height
            },
            _getTileWidth: function() {
                return this._tileSize.width
            },
            _setTileWidth: function(t) {
                this._tileSize.width = t
            },
            _getTileHeight: function() {
                return this._tileSize.height
            },
            _setTileHeight: function(t) {
                this._tileSize.height = t
            },
            getLayers: function() {
                return this._layers
            },
            setLayers: function(t) {
                this._allChildren.push(t), this._layers.push(t)
            },
            getImageLayers: function() {
                return this._imageLayers
            },
            setImageLayers: function(t) {
                this._allChildren.push(t), this._imageLayers.push(t)
            },
            getTilesets: function() {
                return this._tilesets
            },
            setTilesets: function(t) {
                this._tilesets.push(t)
            },
            getObjectGroups: function() {
                return this._objectGroups
            },
            setObjectGroups: function(t) {
                this._allChildren.push(t), this._objectGroups.push(t)
            },
            getAllChildren: function() {
                return this._allChildren
            },
            getParentElement: function() {
                return this.parentElement
            },
            setParentElement: function(t) {
                this.parentElement = t
            },
            getParentGID: function() {
                return this.parentGID
            },
            setParentGID: function(t) {
                this.parentGID = t
            },
            getLayerAttribs: function() {
                return this.layerAttrs
            },
            setLayerAttribs: function(t) {
                this.layerAttrs = t
            },
            getStoringCharacters: function() {
                return this.storingCharacters
            },
            setStoringCharacters: function(t) {
                this.storingCharacters = t
            },
            getProperties: function() {
                return this.properties
            },
            setProperties: function(t) {
                this.properties = t
            },
            initWithXML: function(t, e, i, n) {
                return this._tilesets.length = 0, this._layers.length = 0, this._imageLayers.length = 0, this._tsxMap = e, this._textures = i, this._imageLayerTextures = n, this._objectGroups.length = 0, this._allChildren.length = 0, this.properties.length = 0, this._tileProperties = {}, this._tileAnimations = {}, this.currentString = "", this.storingCharacters = !1, this.layerAttrs = cc.TMXLayerInfo.ATTRIB_NONE, this.parentElement = cc.TiledMap.NONE, this.parseXMLString(t)
            },
            parseXMLString: function(t, e) {
                var i = void 0,
                    n = this._parser._parseXML(t).documentElement,
                    r = n.getAttribute("orientation"),
                    s = n.getAttribute("staggeraxis"),
                    o = n.getAttribute("staggerindex"),
                    a = n.getAttribute("hexsidelength"),
                    l = n.getAttribute("renderorder"),
                    h = n.getAttribute("version") || "1.0.0";
                if ("map" === n.nodeName) {
                    for (var u = h.split("."), _ = this._supportVersion, f = 0; f < _.length; f++) {
                        var d = parseInt(u[f]) || 0;
                        if (_[f] < d) {
                            cc.logID(7216, h);
                            break
                        }
                    }
                    "orthogonal" === r ? this.orientation = cc.TiledMap.Orientation.ORTHO : "isometric" === r ? this.orientation = cc.TiledMap.Orientation.ISO : "hexagonal" === r ? this.orientation = cc.TiledMap.Orientation.HEX : null !== r && cc.logID(7217, r), this.renderOrder = "right-up" === l ? cc.TiledMap.RenderOrder.RightUp : "left-up" === l ? cc.TiledMap.RenderOrder.LeftUp : "left-down" === l ? cc.TiledMap.RenderOrder.LeftDown : cc.TiledMap.RenderOrder.RightDown, "x" === s ? this.setStaggerAxis(cc.TiledMap.StaggerAxis.STAGGERAXIS_X) : "y" === s && this.setStaggerAxis(cc.TiledMap.StaggerAxis.STAGGERAXIS_Y), "odd" === o ? this.setStaggerIndex(cc.TiledMap.StaggerIndex.STAGGERINDEX_ODD) : "even" === o && this.setStaggerIndex(cc.TiledMap.StaggerIndex.STAGGERINDEX_EVEN), a && this.setHexSideLength(parseFloat(a));
                    var p = cc.size(0, 0);
                    p.width = parseFloat(n.getAttribute("width")), p.height = parseFloat(n.getAttribute("height")), this.setMapSize(p), (p = cc.size(0, 0)).width = parseFloat(n.getAttribute("tilewidth")), p.height = parseFloat(n.getAttribute("tileheight")), this.setTileSize(p), this.properties = c(n)
                }
                var m = n.getElementsByTagName("tileset");
                for ("map" !== n.nodeName && (m = []).push(n), i = 0; i < m.length; i++) {
                    var y = m[i],
                        v = y.getAttribute("source");
                    if (v) {
                        var g = parseInt(y.getAttribute("firstgid")),
                            x = this._tsxMap[v];
                        x && this.parseXMLString(x, g)
                    } else {
                        var b = y.getElementsByTagName("image"),
                            A = b.length > 1,
                            C = b[0],
                            T = C.getAttribute("source");
                        T.replace(/\\/g, "/");
                        var S = y.getElementsByTagName("tile"),
                            w = S && S.length || 1,
                            E = null,
                            M = y.getAttribute("name") || "",
                            D = parseInt(y.getAttribute("spacing")) || 0,
                            B = parseInt(y.getAttribute("margin")) || 0,
                            I = parseInt(e);
                        I || (I = parseInt(y.getAttribute("firstgid")) || 0);
                        var P = cc.size(0, 0);
                        P.width = parseFloat(y.getAttribute("tilewidth")), P.height = parseFloat(y.getAttribute("tileheight"));
                        var R = y.getElementsByTagName("tileoffset")[0],
                            O = cc.v2(0, 0);
                        R && (O.x = parseFloat(R.getAttribute("x")), O.y = parseFloat(R.getAttribute("y")));
                        for (var L = null, F = 0; F < w; F++)
                            if (L && !A || ((L = new cc.TMXTilesetInfo).name = M, L.firstGid = I, L.spacing = D, L.margin = B, L._tileSize = P, L.tileOffset = O, L.sourceImage = this._textures[T], L.sourceImage || cc.errorID(7221, T), this.setTilesets(L)), E = S && S[F]) {
                                this.parentGID = parseInt(I) + parseInt(E.getAttribute("id") || 0);
                                var N = E.getElementsByTagName("image");
                                if (N && N.length > 0) {
                                    var V = (C = N[0]).getAttribute("source");
                                    V.replace(/\\/g, "/"), L.sourceImage = this._textures[V], L.sourceImage || cc.errorID(7221, V);
                                    var k = cc.size(0, 0);
                                    k.width = parseFloat(C.getAttribute("width")), k.height = parseFloat(C.getAttribute("height")), L._tileSize = k, L.firstGid = this.parentGID
                                }
                                this._tileProperties[this.parentGID] = c(E);
                                var G = E.getElementsByTagName("animation");
                                if (G && G.length > 0) {
                                    var U = G[0].getElementsByTagName("frame"),
                                        z = {
                                            frames: [],
                                            dt: 0,
                                            frameIdx: 0
                                        };
                                    this._tileAnimations[this.parentGID] = z;
                                    for (var j = z.frames, W = 0; W < U.length; W++) {
                                        var H = U[W],
                                            X = parseInt(I) + parseInt(H.getAttribute("tileid")),
                                            Y = parseFloat(H.getAttribute("duration"));
                                        j.push({
                                            tileid: X,
                                            duration: Y / 1e3,
                                            grid: null
                                        })
                                    }
                                }
                            }
                    }
                }
                var q = n.childNodes;
                for (i = 0; i < q.length; i++) {
                    var J = q[i];
                    if (!this._shouldIgnoreNode(J)) {
                        if ("imagelayer" === J.nodeName) {
                            var Z = this._parseImageLayer(J);
                            Z && this.setImageLayers(Z)
                        }
                        if ("layer" === J.nodeName) {
                            var K = this._parseLayer(J);
                            this.setLayers(K)
                        }
                        if ("objectgroup" === J.nodeName) {
                            var Q = this._parseObjectGroup(J);
                            this.setObjectGroups(Q)
                        }
                    }
                }
                return n
            },
            _shouldIgnoreNode: function(t) {
                return 3 === t.nodeType || 8 === t.nodeType || 4 === t.nodeType
            },
            _parseImageLayer: function(t) {
                var e = t.getElementsByTagName("image");
                if (!e || 0 == e.length) return null;
                var i = new cc.TMXImageLayerInfo;
                i.name = t.getAttribute("name"), i.offset.x = parseFloat(t.getAttribute("offsetx")) || 0, i.offset.y = parseFloat(t.getAttribute("offsety")) || 0;
                var n = t.getAttribute("visible");
                i.visible = !("0" === n);
                var r = t.getAttribute("opacity") || 1;
                i.opacity = parseInt(255 * parseFloat(r)) || 255;
                var s = e[0],
                    o = s.getAttribute("source");
                return i.sourceImage = this._imageLayerTextures[o], i.width = parseInt(s.getAttribute("width")) || 0, i.height = parseInt(s.getAttribute("height")) || 0, i.trans = h(s.getAttribute("trans")), i.sourceImage ? i : (cc.errorID(7221, o), null)
            },
            _parseLayer: function(t) {
                var e = t.getElementsByTagName("data")[0],
                    i = new cc.TMXLayerInfo;
                i.name = t.getAttribute("name");
                var s = cc.size(0, 0);
                s.width = parseFloat(t.getAttribute("width")), s.height = parseFloat(t.getAttribute("height")), i._layerSize = s;
                var a = t.getAttribute("visible");
                i.visible = !("0" === a);
                var l = t.getAttribute("opacity") || 1;
                i._opacity = l ? parseInt(255 * parseFloat(l)) : 255, i.offset = cc.v2(parseFloat(t.getAttribute("offsetx")) || 0, parseFloat(t.getAttribute("offsety")) || 0);
                for (var h = "", u = 0; u < e.childNodes.length; u++) h += e.childNodes[u].nodeValue;
                h = h.trim();
                var _ = e.getAttribute("compression"),
                    f = e.getAttribute("encoding");
                if (_ && "gzip" !== _ && "zlib" !== _) return cc.logID(7218), null;
                var d = void 0;
                switch (_) {
                    case "gzip":
                        d = n.unzipBase64AsArray(h, 4);
                        break;
                    case "zlib":
                        d = o(new r.Inflate(n.Base64.decodeAsArray(h, 1)).decompress());
                        break;
                    case null:
                    case "":
                        if ("base64" === f) d = n.Base64.decodeAsArray(h, 4);
                        else if ("csv" === f) {
                            d = [];
                            for (var p = h.split(","), m = 0; m < p.length; m++) d.push(parseInt(p[m]))
                        } else {
                            var y = e.getElementsByTagName("tile");
                            d = [];
                            for (var v = 0; v < y.length; v++) d.push(parseInt(y[v].getAttribute("gid")))
                        }
                        break;
                    default:
                        this.layerAttrs === cc.TMXLayerInfo.ATTRIB_NONE && cc.logID(7219)
                }
                return d && (i._tiles = new Uint32Array(d)), i.properties = c(t), i
            },
            _parseObjectGroup: function(t) {
                var e = new cc.TMXObjectGroupInfo;
                e.name = t.getAttribute("name") || "", e.offset = cc.v2(parseFloat(t.getAttribute("offsetx")), parseFloat(t.getAttribute("offsety")));
                var i = t.getAttribute("opacity") || 1;
                e._opacity = i ? parseInt(255 * parseFloat(i)) : 255;
                var n = t.getAttribute("visible");
                n && 0 === parseInt(n) && (e.visible = !1);
                var r = t.getAttribute("color");
                r && e._color.fromHEX(r);
                var s = t.getAttribute("draworder");
                s && (e._draworder = s), e.setProperties(c(t));
                var o = t.getElementsByTagName("object");
                if (o)
                    for (var u = 0; u < o.length; u++) {
                        var _ = o[u],
                            f = {};
                        f.id = _.getAttribute("id") || 0, f.name = _.getAttribute("name") || "", f.width = parseFloat(_.getAttribute("width")) || 0, f.height = parseFloat(_.getAttribute("height")) || 0, f.x = parseFloat(_.getAttribute("x")) || 0, f.y = parseFloat(_.getAttribute("y")) || 0, f.rotation = parseFloat(_.getAttribute("rotation")) || 0, c(_, f);
                        var d = _.getAttribute("visible");
                        f.visible = !(d && 0 === parseInt(d));
                        var p = _.getElementsByTagName("text");
                        if (p && p.length > 0) {
                            var m = p[0];
                            f.type = cc.TiledMap.TMXObjectType.TEXT, f.wrap = "1" == m.getAttribute("wrap"), f.color = h(m.getAttribute("color")), f.halign = a(m.getAttribute("halign")), f.valign = l(m.getAttribute("valign")), f.pixelsize = parseInt(m.getAttribute("pixelsize")) || 16, f.text = m.childNodes[0].nodeValue
                        }
                        var y = _.getAttribute("gid");
                        y && (f.gid = parseInt(y), f.type = cc.TiledMap.TMXObjectType.IMAGE);
                        var v = _.getElementsByTagName("ellipse");
                        v && v.length > 0 && (f.type = cc.TiledMap.TMXObjectType.ELLIPSE);
                        var g = _.getElementsByTagName("polygon");
                        if (g && g.length > 0) {
                            f.type = cc.TiledMap.TMXObjectType.POLYGON;
                            var x = g[0].getAttribute("points");
                            x && (f.points = this._parsePointsString(x))
                        }
                        var b = _.getElementsByTagName("polyline");
                        if (b && b.length > 0) {
                            f.type = cc.TiledMap.TMXObjectType.POLYLINE;
                            var A = b[0].getAttribute("points");
                            A && (f.polylinePoints = this._parsePointsString(A))
                        }
                        f.type || (f.type = cc.TiledMap.TMXObjectType.RECT), e._objects.push(f)
                    }
                return e
            },
            _parsePointsString: function(t) {
                if (!t) return null;
                for (var e = [], i = t.split(" "), n = 0; n < i.length; n++) {
                    var r = i[n].split(",");
                    e.push({
                        x: parseFloat(r[0]),
                        y: parseFloat(r[1])
                    })
                }
                return e
            },
            setTileAnimations: function(t) {
                this._tileAnimations = t
            },
            getTileAnimations: function() {
                return this._tileAnimations
            },
            getTileProperties: function() {
                return this._tileProperties
            },
            setTileProperties: function(t) {
                this._tileProperties = t
            },
            getCurrentString: function() {
                return this.currentString
            },
            setCurrentString: function(t) {
                this.currentString = t
            }
        };
        var u = cc.TMXMapInfo.prototype;
        s.getset(u, "mapWidth", u._getMapWidth, u._setMapWidth), s.getset(u, "mapHeight", u._getMapHeight, u._setMapHeight), s.getset(u, "tileWidth", u._getTileWidth, u._setTileWidth), s.getset(u, "tileHeight", u._getTileHeight, u._setTileHeight), cc.TMXLayerInfo.ATTRIB_NONE = 1, cc.TMXLayerInfo.ATTRIB_BASE64 = 2, cc.TMXLayerInfo.ATTRIB_GZIP = 4, cc.TMXLayerInfo.ATTRIB_ZLIB = 8
    }), {
        "../compression/ZipUtils": 22,
        "../compression/zlib.min": 25,
        "../core/platform/CCSAXParser": 205,
        "../core/platform/js": 218
    }],
    386: [(function(t, e, i) {
        "use strict";
        var n = t("../core/vmath"),
            r = t("../core/components/CCRenderComponent"),
            s = t("../core/assets/material/CCMaterial"),
            o = t("../core/renderer/render-flow"),
            a = n.mat4.create(),
            l = n.vec2.create(),
            h = n.vec2.create(),
            c = {
                row: 0,
                col: 0
            },
            u = cc.Class({
                name: "cc.TiledUserNodeData",
                extends: cc.Component,
                ctor: function() {
                    this._index = -1, this._row = -1, this._col = -1, this._tiledLayer = null
                }
            }),
            _ = cc.Class({
                name: "cc.TiledLayer",
                extends: r,
                editor: {
                    inspector: "packages://inspector/inspectors/comps/tiled-layer.js"
                },
                ctor: function() {
                    this._userNodeGrid = {}, this._userNodeMap = {}, this._userNodeDirty = !1, this._tiledTiles = [], this._tilesetIndexArr = [], this._texIdToMatIndex = {}, this._viewPort = {
                        x: -1,
                        y: -1,
                        width: -1,
                        height: -1
                    }, this._cullingRect = {
                        leftDown: {
                            row: -1,
                            col: -1
                        },
                        rightTop: {
                            row: -1,
                            col: -1
                        }
                    }, this._cullingDirty = !0, this._rightTop = {
                        row: -1,
                        col: -1
                    }, this._layerInfo = null, this._mapInfo = null, this._topOffset = 0, this._downOffset = 0, this._leftOffset = 0, this._rightOffset = 0, this._tiles = [], this._vertices = [], this._verticesDirty = !0, this._layerName = "", this._layerOrientation = null, this._texGrids = null, this._textures = null, this._tilesets = null, this._leftDownToCenterX = 0, this._leftDownToCenterY = 0, this._hasTiledNodeGrid = !1, this._hasAniGrid = !1, this._animations = null, this._enableCulling = cc.macro.ENABLE_TILEDMAP_CULLING
                },
                _hasTiledNode: function() {
                    return this._hasTiledNodeGrid
                },
                _hasAnimation: function() {
                    return this._hasAniGrid
                },
                enableCulling: function(t) {
                    this._enableCulling != t && (this._enableCulling = t, this._cullingDirty = !0)
                },
                addUserNode: function(t) {
                    var e = t.getComponent(u);
                    return e ? (cc.warn("CCTiledLayer:addUserNode node has been added"), !1) : (e = t.addComponent(u), t.parent = this.node, t._renderFlag |= o.FLAG_BREAK_FLOW, this._userNodeMap[t._id] = e, e._row = -1, e._col = -1, e._tiledLayer = this, this._nodeLocalPosToLayerPos(t, l), this._positionToRowCol(l.x, l.y, c), this._addUserNodeToGrid(e, c), this._updateCullingOffsetByUserNode(t), t.on(cc.Node.EventType.POSITION_CHANGED, this._userNodePosChange, e), t.on(cc.Node.EventType.SIZE_CHANGED, this._userNodeSizeChange, e), !0)
                },
                removeUserNode: function(t) {
                    var e = t.getComponent(u);
                    return e ? (t.off(cc.Node.EventType.POSITION_CHANGED, this._userNodePosChange, e), t.off(cc.Node.EventType.SIZE_CHANGED, this._userNodeSizeChange, e), this._removeUserNodeFromGrid(e), delete this._userNodeMap[t._id], t._removeComponent(e), e.destroy(), t.removeFromParent(!0), t._renderFlag &= ~o.FLAG_BREAK_FLOW, !0) : (cc.warn("CCTiledLayer:removeUserNode node is not exist"), !1)
                },
                destroyUserNode: function(t) {
                    this.removeUserNode(t), t.destroy()
                },
                _nodeLocalPosToLayerPos: function(t, e) {
                    e.x = t.x + this._leftDownToCenterX, e.y = t.y + this._leftDownToCenterY
                },
                _getNodesByRowCol: function(t, e) {
                    var i = this._userNodeGrid[t];
                    return i ? i[e] : null
                },
                _getNodesCountByRow: function(t) {
                    var e = this._userNodeGrid[t];
                    return e ? e.count : 0
                },
                _updateAllUserNode: function() {
                    for (var t in this._userNodeGrid = {}, this._userNodeMap) {
                        var e = this._userNodeMap[t];
                        this._nodeLocalPosToLayerPos(e.node, l), this._positionToRowCol(l.x, l.y, c), this._addUserNodeToGrid(e, c), this._updateCullingOffsetByUserNode(e.node)
                    }
                },
                _updateCullingOffsetByUserNode: function(t) {
                    this._topOffset < t.height && (this._topOffset = t.height), this._downOffset < t.height && (this._downOffset = t.height), this._leftOffset < t.width && (this._leftOffset = t.width), this._rightOffset < t.width && (this._rightOffset = t.width)
                },
                _userNodeSizeChange: function() {
                    var t = this.node;
                    this._tiledLayer._updateCullingOffsetByUserNode(t)
                },
                _userNodePosChange: function() {
                    var t = this.node,
                        e = this._tiledLayer;
                    e._nodeLocalPosToLayerPos(t, l), e._positionToRowCol(l.x, l.y, c), c.row === this._row && c.col === this._col || (e._removeUserNodeFromGrid(this), e._addUserNodeToGrid(this, c))
                },
                _removeUserNodeFromGrid: function(t) {
                    var e = t._row,
                        i = t._col,
                        n = t._index,
                        r = this._userNodeGrid[e],
                        s = r && r[i];
                    s && (r.count--, s.count--, s.list[n] = null, s.count <= 0 && (s.list.length = 0, s.count = 0)), t._row = -1, t._col = -1, t._index = -1, this._userNodeDirty = !0
                },
                _isInLayer: function(t, e) {
                    return t >= 0 && e >= 0 && t <= this._rightTop.row && e <= this._rightTop.col
                },
                _addUserNodeToGrid: function(t, e) {
                    var i = e.row,
                        n = e.col;
                    if (this._isInLayer(i, n)) {
                        var r = this._userNodeGrid[i] = this._userNodeGrid[i] || {
                                count: 0
                            },
                            s = r[n] = r[n] || {
                                count: 0,
                                list: []
                            };
                        t._row = i, t._col = n, t._index = s.list.length, r.count++, s.count++, s.list.push(t)
                    } else t._row = -1, t._col = -1, t._index = -1;
                    this._userNodeDirty = !0
                },
                _isUserNodeDirty: function() {
                    return this._userNodeDirty
                },
                _setUserNodeDirty: function(t) {
                    this._userNodeDirty = t
                },
                onEnable: function() {
                    this._super(), this.node.on(cc.Node.EventType.ANCHOR_CHANGED, this._syncAnchorPoint, this), this._activateMaterial()
                },
                onDisable: function() {
                    this._super(), this.node.off(cc.Node.EventType.ANCHOR_CHANGED, this._syncAnchorPoint, this)
                },
                _syncAnchorPoint: function() {
                    var t = this.node;
                    this._leftDownToCenterX = t.width * t.anchorX * t.scaleX, this._leftDownToCenterY = t.height * t.anchorY * t.scaleY, this._cullingDirty = !0
                },
                onDestroy: function() {
                    this._super(), this._buffer && (this._buffer.destroy(), this._buffer = null), this._renderDataList = null
                },
                getLayerName: function() {
                    return this._layerName
                },
                setLayerName: function(t) {
                    this._layerName = t
                },
                getProperty: function(t) {
                    return this._properties[t]
                },
                getPositionAt: function(t, e) {
                    var i = void 0;
                    void 0 !== e ? (i = Math.floor(t), e = Math.floor(e)) : (i = Math.floor(t.x), e = Math.floor(t.y));
                    var n = void 0;
                    switch (this._layerOrientation) {
                        case cc.TiledMap.Orientation.ORTHO:
                            n = this._positionForOrthoAt(i, e);
                            break;
                        case cc.TiledMap.Orientation.ISO:
                            n = this._positionForIsoAt(i, e);
                            break;
                        case cc.TiledMap.Orientation.HEX:
                            n = this._positionForHexAt(i, e)
                    }
                    return n
                },
                _isInvalidPosition: function(t, e) {
                    if (t && "object" == typeof t) {
                        var i = t;
                        e = i.y, t = i.x
                    }
                    return t >= this._layerSize.width || e >= this._layerSize.height || t < 0 || e < 0
                },
                _positionForIsoAt: function(t, e) {
                    return cc.v2(this._mapTileSize.width / 2 * (this._layerSize.width + t - e - 1), this._mapTileSize.height / 2 * (2 * this._layerSize.height - t - e - 2))
                },
                _positionForOrthoAt: function(t, e) {
                    return cc.v2(t * this._mapTileSize.width, (this._layerSize.height - e - 1) * this._mapTileSize.height)
                },
                _positionForHexAt: function(t, e) {
                    var i = this._mapTileSize.width,
                        n = this._mapTileSize.height,
                        r = this._layerSize.height,
                        s = Math.floor(t) + Math.floor(e) * this._layerSize.width,
                        o = this._tiles[s],
                        a = this._texGrids[o].tileset.tileOffset,
                        l = this.node.width / 2,
                        h = this.node.height / 2,
                        c = this._staggerIndex === cc.TiledMap.StaggerIndex.STAGGERINDEX_ODD ? 1 : -1,
                        u = 0,
                        _ = 0,
                        f = 0,
                        d = 0,
                        p = 0,
                        m = 0;
                    switch (this._staggerAxis) {
                        case cc.TiledMap.StaggerAxis.STAGGERAXIS_Y:
                            f = 0, d = this._staggerIndex === cc.TiledMap.StaggerIndex.STAGGERINDEX_ODD ? 0 : i / 2, e % 2 == 1 && (f = i / 2 * c), u = t * i + f + d + a.x - l, _ = (r - e - 1) * (n - (n - this._hexSideLength) / 2) - a.y - h;
                            break;
                        case cc.TiledMap.StaggerAxis.STAGGERAXIS_X:
                            p = 0, m = this._staggerIndex === cc.TiledMap.StaggerIndex.STAGGERINDEX_ODD ? n / 2 : 0, t % 2 == 1 && (p = n / 2 * -c), u = t * (i - (i - this._hexSideLength) / 2) + a.x - l, _ = (r - e - 1) * n + p + m - a.y - h
                    }
                    return cc.v2(u, _)
                },
                setTileGIDAt: function(t, e, i, n) {
                    if (void 0 === e) throw new Error("cc.TiledLayer.setTileGIDAt(): pos should be non-null");
                    var r = void 0;
                    if (void 0 === n && e instanceof cc.Vec2 ? (r = e, n = i) : r = cc.v2(e, i), r.x = Math.floor(r.x), r.y = Math.floor(r.y), this._isInvalidPosition(r)) throw new Error("cc.TiledLayer.setTileGIDAt(): invalid position");
                    if (this._tiles && this._tilesets && 0 != this._tilesets.length)
                        if (0 !== t && t < this._tilesets[0].firstGid) cc.logID(7239, t);
                        else {
                            n = n || 0;
                            var s = this.getTileFlagsAt(r);
                            if (this.getTileGIDAt(r) !== t || s !== n) {
                                var o = (t | n) >>> 0;
                                this._updateTileForGID(o, r)
                            }
                        }
                    else cc.logID(7238)
                },
                _updateTileForGID: function(t, e) {
                    if (0 === t || this._texGrids[t]) {
                        var i = 0 | e.x + e.y * this._layerSize.width;
                        i < this._tiles.length && (this._tiles[i] = t, this._cullingDirty = !0)
                    }
                },
                getTileGIDAt: function(t, e) {
                    if (void 0 === t) throw new Error("cc.TiledLayer.getTileGIDAt(): pos should be non-null");
                    var i = t;
                    if (void 0 === e && (i = t.x, e = t.y), this._isInvalidPosition(i, e)) throw new Error("cc.TiledLayer.getTileGIDAt(): invalid position");
                    if (!this._tiles) return cc.logID(7237), null;
                    var n = Math.floor(i) + Math.floor(e) * this._layerSize.width;
                    return (this._tiles[n] & cc.TiledMap.TileFlag.FLIPPED_MASK) >>> 0
                },
                getTileFlagsAt: function(t, e) {
                    if (!t) throw new Error("TiledLayer.getTileFlagsAt: pos should be non-null");
                    if (void 0 !== e && (t = cc.v2(t, e)), this._isInvalidPosition(t)) throw new Error("TiledLayer.getTileFlagsAt: invalid position");
                    if (!this._tiles) return cc.logID(7240), null;
                    var i = Math.floor(t.x) + Math.floor(t.y) * this._layerSize.width;
                    return (this._tiles[i] & cc.TiledMap.TileFlag.FLIPPED_ALL) >>> 0
                },
                _setCullingDirty: function(t) {
                    this._cullingDirty = t
                },
                _isCullingDirty: function() {
                    return this._cullingDirty
                },
                _updateViewPort: function(t, e, i, n) {
                    if (this._viewPort.width !== i || this._viewPort.height !== n || this._viewPort.x !== t || this._viewPort.y !== e) {
                        this._viewPort.x = t, this._viewPort.y = e, this._viewPort.width = i, this._viewPort.height = n;
                        var r = 1;
                        this._layerOrientation === cc.TiledMap.Orientation.ISO && (r = 2);
                        var s = this._viewPort.x - this._offset.x + this._leftDownToCenterX,
                            o = this._viewPort.y - this._offset.y + this._leftDownToCenterY,
                            a = s - this._leftOffset,
                            l = o - this._downOffset,
                            h = s + i + this._rightOffset,
                            u = o + n + this._topOffset,
                            _ = this._cullingRect.leftDown,
                            f = this._cullingRect.rightTop;
                        a < 0 && (a = 0), l < 0 && (l = 0), this._positionToRowCol(a, l, c), c.row -= r, c.col -= r, c.row = c.row > 0 ? c.row : 0, c.col = c.col > 0 ? c.col : 0, c.row === _.row && c.col === _.col || (_.row = c.row, _.col = c.col, this._cullingDirty = !0), h < 0 || u < 0 ? (c.row = -1, c.col = -1) : (this._positionToRowCol(h, u, c), c.row++, c.col++), c.row > this._rightTop.row && (c.row = this._rightTop.row), c.col > this._rightTop.col && (c.col = this._rightTop.col), c.row === f.row && c.col === f.col || (f.row = c.row, f.col = c.col, this._cullingDirty = !0)
                    }
                },
                _positionToRowCol: function(t, e, i) {
                    var n = cc.TiledMap,
                        r = n.Orientation,
                        s = n.StaggerAxis,
                        o = this._mapTileSize.width,
                        a = this._mapTileSize.height,
                        l = .5 * o,
                        h = .5 * a,
                        c = 0,
                        u = 0,
                        _ = 0,
                        f = 0,
                        d = this._staggerAxis;
                    this._layerSize.width;
                    switch (this._layerOrientation) {
                        case r.ORTHO:
                            u = Math.floor(t / o), c = Math.floor(e / a);
                            break;
                        case r.ISO:
                            u = Math.floor(t / l), c = Math.floor(e / h);
                            break;
                        case r.HEX:
                            d === s.STAGGERAXIS_Y ? (_ = (c = Math.floor(e / (a - this._diffY1))) % 2 == 1 ? l * this._odd_even : 0, u = Math.floor((t - _) / o)) : (f = (u = Math.floor(t / (o - this._diffX1))) % 2 == 1 ? h * -this._odd_even : 0, c = Math.floor((e - f) / a))
                    }
                    return i.row = c, i.col = u, i
                },
                _updateCulling: function() {
                    if (this._enableCulling) {
                        this.node._updateWorldMatrix(), n.mat4.invert(a, this.node._worldMatrix);
                        var t = cc.visibleRect,
                            e = cc.Camera.findCamera(this.node);
                        e && (l.x = 0, l.y = 0, h.x = l.x + t.width, h.y = l.y + t.height, e.getScreenToWorldPoint(l, l), e.getScreenToWorldPoint(h, h), n.vec2.transformMat4(l, l, a), n.vec2.transformMat4(h, h, a), this._updateViewPort(l.x, l.y, h.x - l.x, h.y - l.y))
                    }
                },
                getLayerOrientation: function() {
                    return this._layerOrientation
                },
                getProperties: function() {
                    return this._properties
                },
                _updateVertices: function() {
                    var t = cc.TiledMap,
                        e = t.TileFlag.FLIPPED_MASK,
                        i = t.StaggerAxis,
                        n = t.Orientation,
                        r = this._vertices;
                    r.length = 0;
                    var s = this._layerOrientation,
                        o = this._tiles;
                    if (o) {
                        var a = this._rightTop;
                        a.row = -1, a.col = -1;
                        var l = this._mapTileSize.width,
                            h = this._mapTileSize.height,
                            c = .5 * l,
                            u = .5 * h,
                            _ = this._layerSize.height,
                            f = this._layerSize.width,
                            d = this._texGrids,
                            p = 0,
                            m = void 0,
                            y = void 0,
                            v = void 0,
                            g = void 0,
                            x = void 0,
                            b = void 0,
                            A = void 0;
                        s === n.HEX && (g = this._staggerAxis, x = this._diffX1, b = this._diffY1, A = this._odd_even);
                        var C = 0,
                            T = 0,
                            S = null,
                            w = 0;
                        this._topOffset = 0, this._downOffset = 0, this._leftOffset = 0, this._rightOffset = 0, this._hasAniGrid = !1;
                        for (var E = 0, M = 0, D = 0, B = 0, I = 0; I < _; ++I) {
                            for (var P = 0; P < f; ++P) {
                                var R = p + P;
                                if (m = d[w = (o[R] & e) >>> 0], this._animations[w] && (this._hasAniGrid = !0), m) {
                                    switch (s) {
                                        case n.ORTHO:
                                            y = (C = P) * l, v = (T = _ - I - 1) * h;
                                            break;
                                        case n.ISO:
                                            y = c * (C = _ + P - I - 1), v = u * (T = _ + f - P - I - 2);
                                            break;
                                        case n.HEX:
                                            y = P * (l - x) + (g === i.STAGGERAXIS_Y && I % 2 == 1 ? c * A : 0), v = (_ - I - 1) * (h - b) + (g === i.STAGGERAXIS_X && P % 2 == 1 ? u * -A : 0), C = P, T = _ - I - 1
                                    }
                                    var O = r[T] = r[T] || {
                                            minCol: 0,
                                            maxCol: 0
                                        },
                                        L = O[C] = O[C] || {};
                                    O.minCol > C && (O.minCol = C), O.maxCol < C && (O.maxCol = C), a.row < T && (a.row = T), a.col < C && (a.col = C), S = m.tileset.tileOffset, y += this._offset.x + S.x, v += this._offset.y - S.y, E = (E = -S.y + m.tileset._tileSize.height - h) < 0 ? 0 : E, M = S.y < 0 ? 0 : S.y, D = -S.x < 0 ? 0 : -S.x, B = (B = S.x + m.tileset._tileSize.width - l) < 0 ? 0 : B, this._rightOffset < D && (this._rightOffset = D), this._leftOffset < B && (this._leftOffset = B), this._topOffset < M && (this._topOffset = M), this._downOffset < E && (this._downOffset = E), L.left = y, L.bottom = v, L.index = R
                                }
                            }
                            p += f
                        }
                        this._verticesDirty = !1
                    }
                },
                getTiledTileAt: function(t, e, i) {
                    if (this._isInvalidPosition(t, e)) throw new Error("TiledLayer.getTiledTileAt: invalid position");
                    if (!this._tiles) return cc.logID(7236), null;
                    var n = Math.floor(t) + Math.floor(e) * this._layerSize.width,
                        r = this._tiledTiles[n];
                    if (!r && i) {
                        var s = new cc.Node;
                        return (r = s.addComponent(cc.TiledTile))._x = t, r._y = e, r._layer = this, r._updateInfo(), s.parent = this.node, r
                    }
                    return r
                },
                setTiledTileAt: function(t, e, i) {
                    if (this._isInvalidPosition(t, e)) throw new Error("TiledLayer.setTiledTileAt: invalid position");
                    if (!this._tiles) return cc.logID(7236), null;
                    var n = Math.floor(t) + Math.floor(e) * this._layerSize.width;
                    return this._tiledTiles[n] = i, this._cullingDirty = !0, this._hasTiledNodeGrid = !!i || this._tiledTiles.some((function(t, e) {
                        return !!t
                    })), i
                },
                getTexture: function(t) {
                    return t = t || 0, this._textures && t >= 0 && this._textures.length > t ? this._textures[t] : null
                },
                getTextures: function() {
                    return this._textures
                },
                setTexture: function(t) {
                    this.setTextures([t])
                },
                setTextures: function(t) {
                    this._textures = t, this._activateMaterial()
                },
                getLayerSize: function() {
                    return this._layerSize
                },
                getMapTileSize: function() {
                    return this._mapTileSize
                },
                getTileSet: function(t) {
                    return t = t || 0, this._tilesets && t >= 0 && this._tilesets.length > t ? this._tilesets[t] : null
                },
                getTileSets: function() {
                    return this._tilesets
                },
                setTileSet: function(t) {
                    this.setTileSets([t])
                },
                setTileSets: function(t) {
                    this._tilesets = t;
                    for (var e = this._textures = [], i = this._texGrids = [], n = 0; n < t.length; n++) {
                        var r = t[n];
                        r && (e[n] = r.sourceImage)
                    }
                    cc.TiledMap.loadAllTextures(e, function() {
                        for (var e = 0, n = t.length; e < n; ++e) {
                            var r = t[e];
                            r && cc.TiledMap.fillTextureGrids(r, i, e)
                        }
                        this._prepareToRender()
                    }.bind(this))
                },
                _traverseAllGrid: function() {
                    var t = this._tiles,
                        e = this._texGrids,
                        i = this._tilesetIndexArr,
                        n = {},
                        r = cc.TiledMap.TileFlag.FLIPPED_MASK;
                    i.length = 0;
                    for (var s = 0; s < t.length; s++) {
                        var o = t[s];
                        if (0 !== o) {
                            var a = e[o = (o & r) >>> 0];
                            if (a) {
                                var l = a.texId;
                                n[l] || (n[l] = !0, i.push(l))
                            } else cc.error("CCTiledLayer:_traverseAllGrid grid is null, gid is:", o)
                        }
                    }
                },
                _init: function(t, e, i, n, r) {
                    this._cullingDirty = !0, this._layerInfo = t, this._mapInfo = e;
                    var s = t._layerSize;
                    if (this._layerName = t.name, this._tiles = t._tiles, this._properties = t.properties, this._layerSize = s, this._minGID = t._minGID, this._maxGID = t._maxGID, this._opacity = t._opacity, this._renderOrder = e.renderOrder, this._staggerAxis = e.getStaggerAxis(), this._staggerIndex = e.getStaggerIndex(), this._hexSideLength = e.getHexSideLength(), this._animations = e.getTileAnimations(), this._tilesets = i, this._textures = n, this._texGrids = r, this._layerOrientation = e.orientation, this._mapTileSize = e.getTileSize(), this._layerOrientation === cc.TiledMap.Orientation.HEX) {
                        var o = cc.TiledMap,
                            a = o.StaggerAxis,
                            l = o.StaggerIndex,
                            h = this._mapTileSize.width,
                            c = this._mapTileSize.height,
                            u = 0,
                            _ = 0;
                        this._odd_even = this._staggerIndex === l.STAGGERINDEX_ODD ? 1 : -1, this._staggerAxis === a.STAGGERAXIS_X ? (this._diffX1 = (h - this._hexSideLength) / 2, this._diffY1 = 0, _ = c * (this._layerSize.height + .5), u = (h + this._hexSideLength) * Math.floor(this._layerSize.width / 2) + h * (this._layerSize.width % 2)) : (this._diffX1 = 0, this._diffY1 = (c - this._hexSideLength) / 2, u = h * (this._layerSize.width + .5), _ = (c + this._hexSideLength) * Math.floor(this._layerSize.height / 2) + c * (this._layerSize.height % 2)), this.node.setContentSize(u, _)
                    } else this.node.setContentSize(this._layerSize.width * this._mapTileSize.width, this._layerSize.height * this._mapTileSize.height);
                    this._offset = cc.v2(t.offset.x, -t.offset.y), this._useAutomaticVertexZ = !1, this._vertexZvalue = 0, this._syncAnchorPoint(), this._prepareToRender()
                },
                _prepareToRender: function() {
                    this._updateVertices(), this._traverseAllGrid(), this._updateAllUserNode(), this._activateMaterial()
                },
                _activateMaterial: function() {
                    var t = this._tilesetIndexArr;
                    if (0 !== t.length) {
                        for (var e = this._texIdToMatIndex = {}, i = this._textures, n = 0; n < t.length; n++) {
                            var r = t[n],
                                o = i[r],
                                a = this.sharedMaterials[n];
                            (a = a ? s.getInstantiatedMaterial(a, this) : s.getInstantiatedBuiltinMaterial("2d-sprite", this)).define("USE_TEXTURE", !0), a.define("CC_USE_MODEL", !0), a.setProperty("texture", o), this.setMaterial(n, a), e[r] = n
                        }
                        this.markForUpdateRenderData(!0), this.markForRender(!0)
                    } else this.disableRender()
                }
            });
        cc.TiledLayer = e.exports = _
    }), {
        "../core/assets/material/CCMaterial": 75,
        "../core/components/CCRenderComponent": 106,
        "../core/renderer/render-flow": 248,
        "../core/vmath": 326
    }],
    387: [(function(t, e, i) {
        "use strict";
        t("./CCTMXXMLParser"), t("./CCTiledMapAsset"), t("./CCTiledLayer"), t("./CCTiledTile"), t("./CCTiledObjectGroup");
        var n = cc.Enum({
                ORTHO: 0,
                HEX: 1,
                ISO: 2
            }),
            r = cc.Enum({
                NONE: 0,
                MAP: 1,
                LAYER: 2,
                OBJECTGROUP: 3,
                OBJECT: 4,
                TILE: 5
            }),
            s = cc.Enum({
                HORIZONTAL: 2147483648,
                VERTICAL: 1073741824,
                DIAGONAL: 536870912,
                FLIPPED_ALL: 4026531840,
                FLIPPED_MASK: 268435455
            }),
            o = cc.Enum({
                STAGGERAXIS_X: 0,
                STAGGERAXIS_Y: 1
            }),
            a = cc.Enum({
                STAGGERINDEX_ODD: 0,
                STAGGERINDEX_EVEN: 1
            }),
            l = cc.Enum({
                RightDown: 0,
                RightUp: 1,
                LeftDown: 2,
                LeftUp: 3
            }),
            h = cc.Enum({
                RECT: 0,
                ELLIPSE: 1,
                POLYGON: 2,
                POLYLINE: 3,
                IMAGE: 4,
                TEXT: 5
            }),
            c = cc.Class({
                name: "cc.TiledMap",
                extends: cc.Component,
                editor: !1,
                ctor: function() {
                    this._texGrids = [], this._textures = [], this._tilesets = [], this._animations = [], this._imageLayers = [], this._layers = [], this._groups = [], this._images = [], this._properties = [], this._tileProperties = [], this._mapSize = cc.size(0, 0), this._tileSize = cc.size(0, 0)
                },
                statics: {
                    Orientation: n,
                    Property: r,
                    TileFlag: s,
                    StaggerAxis: o,
                    StaggerIndex: a,
                    TMXObjectType: h,
                    RenderOrder: l
                },
                properties: {
                    _tmxFile: {
                        default: null,
                        type: cc.TiledMapAsset
                    },
                    tmxAsset: {
                        get: function() {
                            return this._tmxFile
                        },
                        set: function(t, e) {
                            this._tmxFile !== t && (this._tmxFile = t, this._applyFile())
                        },
                        type: cc.TiledMapAsset
                    }
                },
                getMapSize: function() {
                    return this._mapSize
                },
                getTileSize: function() {
                    return this._tileSize
                },
                getMapOrientation: function() {
                    return this._mapOrientation
                },
                getObjectGroups: function() {
                    return this._groups
                },
                getObjectGroup: function(t) {
                    for (var e = this._groups, i = 0, n = e.length; i < n; i++) {
                        var r = e[i];
                        if (r && r.getGroupName() === t) return r
                    }
                    return null
                },
                enableCulling: function(t) {
                    for (var e = this._layers, i = 0; i < e.length; ++i) e[i].enableCulling(t)
                },
                getProperties: function() {
                    return this._properties
                },
                getLayers: function() {
                    return this._layers
                },
                getLayer: function(t) {
                    for (var e = this._layers, i = 0, n = e.length; i < n; i++) {
                        var r = e[i];
                        if (r && r.getLayerName() === t) return r
                    }
                    return null
                },
                _changeLayer: function(t, e) {
                    for (var i = this._layers, n = 0, r = i.length; n < r; n++) {
                        var s = i[n];
                        if (s && s.getLayerName() === t) return void(i[n] = e)
                    }
                },
                getProperty: function(t) {
                    return this._properties[t.toString()]
                },
                getPropertiesForGID: function(t) {
                    return this._tileProperties[t]
                },
                __preload: function() {
                    this._tmxFile && this._applyFile()
                },
                onEnable: function() {
                    this.node.on(cc.Node.EventType.ANCHOR_CHANGED, this._syncAnchorPoint, this)
                },
                onDisable: function() {
                    this.node.off(cc.Node.EventType.ANCHOR_CHANGED, this._syncAnchorPoint, this)
                },
                _applyFile: function() {
                    var t = this._tmxFile;
                    if (t) {
                        for (var e = t.textures, i = t.textureNames, n = {}, r = 0; r < e.length; ++r) n[i[r]] = e[r];
                        var s = {};
                        e = t.imageLayerTextures, i = t.imageLayerTextureNames;
                        for (var o = 0; o < e.length; ++o) s[i[o]] = e[o];
                        for (var a = t.tsxFileNames, l = t.tsxFiles, h = {}, c = 0; c < a.length; ++c) a[c].length > 0 && (h[a[c]] = l[c].text);
                        var u = new cc.TMXMapInfo(t.tmxXmlStr, h, n, s),
                            _ = u.getTilesets();
                        _ && 0 !== _.length || cc.logID(7241), this._buildWithMapInfo(u)
                    } else this._releaseMapInfo()
                },
                _releaseMapInfo: function() {
                    for (var t = this._layers, e = 0, i = t.length; e < i; e++) t[e].node.removeFromParent(!0), t[e].node.destroy();
                    t.length = 0;
                    for (var n = this._groups, r = 0, s = n.length; r < s; r++) n[r].node.removeFromParent(!0), n[r].node.destroy();
                    n.length = 0;
                    for (var o = this._images, a = 0, l = o.length; a < l; a++) o[a].removeFromParent(!0), o[a].destroy();
                    o.length = 0
                },
                _syncAnchorPoint: function() {
                    var t = this.node.getAnchorPoint(),
                        e = this.node.width * t.x,
                        i = this.node.height * (1 - t.y),
                        n = void 0,
                        r = void 0;
                    for (n = 0, r = this._layers.length; n < r; n++) {
                        this._layers[n].node.setAnchorPoint(t)
                    }
                    for (n = 0, r = this._groups.length; n < r; n++) {
                        var s = this._groups[n],
                            o = s.node;
                        o.anchorX = .5, o.anchorY = .5, o.x = s._offset.x - e + o.width * o.anchorX, o.y = s._offset.y + i - o.height * o.anchorY
                    }
                    for (n = 0, r = this._images.length; n < r; n++) {
                        var a = this._images[n];
                        a.anchorX = .5, a.anchorY = .5, a.x = a._offset.x - e + a.width * a.anchorX, a.y = a._offset.y + i - a.height * a.anchorY
                    }
                },
                _fillAniGrids: function(t, e) {
                    for (var i in e) {
                        var n = e[i];
                        if (n)
                            for (var r = n.frames, s = 0; s < r.length; s++) {
                                var o = r[s];
                                o.grid = t[o.tileid]
                            }
                    }
                },
                _buildLayerAndGroup: function() {
                    var t = this._tilesets,
                        e = this._texGrids,
                        i = this._animations;
                    e.length = 0;
                    for (var n = 0, r = t.length; n < r; ++n) {
                        var s = t[n];
                        s && cc.TiledMap.fillTextureGrids(s, e, n)
                    }
                    this._fillAniGrids(e, i);
                    for (var o = this._layers, a = this._groups, l = this._images, h = {}, c = 0, u = o.length; c < u; c++) h[o[c].node._name] = !0;
                    for (var _ = 0, f = a.length; _ < f; _++) h[a[_].node._name] = !0;
                    for (var d = 0, p = l.length; d < p; d++) h[l[d]._name] = !0;
                    o = this._layers = [], a = this._groups = [], l = this._images = [];
                    var m = this._mapInfo,
                        y = this.node,
                        v = m.getAllChildren(),
                        g = this._textures,
                        x = 0,
                        b = 0;
                    if (v && v.length > 0)
                        for (var A = 0, C = v.length; A < C; A++) {
                            var T = v[A],
                                S = T.name,
                                w = this.node.getChildByName(S);
                            if (h[S] = !1, w || ((w = new cc.Node).name = S, y.addChild(w)), w.setSiblingIndex(A), w.active = T.visible, T instanceof cc.TMXLayerInfo) {
                                var E = w.getComponent(cc.TiledLayer);
                                E || (E = w.addComponent(cc.TiledLayer)), E._init(T, m, t, g, e), T.ownTiles = !1, o.push(E)
                            } else if (T instanceof cc.TMXObjectGroupInfo) {
                                var M = w.getComponent(cc.TiledObjectGroup);
                                M || (M = w.addComponent(cc.TiledObjectGroup)), M._init(T, m, e), a.push(M)
                            } else if (T instanceof cc.TMXImageLayerInfo) {
                                var D = T.sourceImage;
                                w.opacity = T.opacity, w.layerInfo = T, w._offset = cc.v2(T.offset.x, -T.offset.y);
                                var B = w.getComponent(cc.Sprite);
                                B || (B = w.addComponent(cc.Sprite)), B.spriteFrame = new cc.SpriteFrame, B.spriteFrame.setTexture(D), w.width = D.width, w.height = D.height, l.push(w)
                            }
                            x = Math.max(x, w.width), b = Math.max(b, w.height)
                        }
                    for (var I = y.children, P = 0, R = I.length; P < R; P++) {
                        var O = I[P];
                        h[O._name] && O.destroy()
                    }
                    this.node.width = x, this.node.height = b, this._syncAnchorPoint()
                },
                _buildWithMapInfo: function(t) {
                    this._mapInfo = t, this._mapSize = t.getMapSize(), this._tileSize = t.getTileSize(), this._mapOrientation = t.orientation, this._properties = t.properties, this._tileProperties = t.getTileProperties(), this._imageLayers = t.getImageLayers(), this._animations = t.getTileAnimations(), this._tilesets = t.getTilesets();
                    var e = this._tilesets;
                    this._textures.length = 0;
                    for (var i = [], n = 0, r = e.length; n < r; ++n) {
                        var s = e[n];
                        s && s.sourceImage && (this._textures[n] = s.sourceImage, i.push(s.sourceImage))
                    }
                    for (var o = 0; o < this._imageLayers.length; o++) {
                        var a = this._imageLayers[o];
                        a && a.sourceImage && i.push(a.sourceImage)
                    }
                    cc.TiledMap.loadAllTextures(i, function() {
                        this._buildLayerAndGroup()
                    }.bind(this))
                },
                update: function(t) {
                    var e = this._animations,
                        i = this._texGrids;
                    for (var n in e) {
                        var r = e[n],
                            s = r.frames,
                            o = s[r.frameIdx];
                        r.dt += t, o.duration < r.dt && (r.dt = 0, r.frameIdx++, r.frameIdx >= s.length && (r.frameIdx = 0), o = s[r.frameIdx]), i[n] = o.grid
                    }
                }
            });
        cc.TiledMap = e.exports = c, cc.TiledMap.loadAllTextures = function(t, e) {
            var i = t.length;
            if (0 !== i)
                for (var n = 0, r = function() {
                        ++n >= i && e()
                    }, s = 0; s < i; s++) {
                    var o = t[s];
                    o.loaded ? r() : o.once("load", (function() {
                        r()
                    }))
                } else e()
        }, cc.TiledMap.fillTextureGrids = function(t, e, i) {
            var n = t.sourceImage;
            t.imageSize.width && t.imageSize.height || (t.imageSize.width = n.width, t.imageSize.height = n.height);
            var r = t._tileSize.width,
                s = t._tileSize.height,
                o = n.width,
                a = n.height,
                l = t.spacing,
                h = t.margin,
                c = Math.floor((o - 2 * h + l) / (r + l)),
                u = Math.floor((a - 2 * h + l) / (s + l)) * c,
                _ = t.firstGid,
                f = null,
                d = !!e[_],
                p = cc.macro.FIX_ARTIFACTS_BY_STRECHING_TEXEL_TMX ? .5 : 0;
            u <= 0 && (u = 1);
            for (var m = t.firstGid + u; _ < m && (d && !e[_] && (d = !1), d || !e[_]); ++_) f = {
                texId: i,
                tileset: t,
                x: 0,
                y: 0,
                width: r,
                height: s,
                t: 0,
                l: 0,
                r: 0,
                b: 0,
                gid: _
            }, t.rectForGID(_, f), f.x += p, f.y += p, f.width -= 2 * p, f.height -= 2 * p, f.t = f.y / a, f.l = f.x / o, f.r = (f.x + f.width) / o, f.b = (f.y + f.height) / a, e[_] = f
        }, cc.js.obsolete(cc.TiledMap.prototype, "cc.TiledMap.tmxFile", "tmxAsset", !0), cc.js.get(cc.TiledMap.prototype, "mapLoaded", (function() {
            return cc.errorID(7203), []
        }), !1)
    }), {
        "./CCTMXXMLParser": 385,
        "./CCTiledLayer": 386,
        "./CCTiledMapAsset": 388,
        "./CCTiledObjectGroup": 390,
        "./CCTiledTile": 391
    }],
    388: [(function(t, e, i) {
        "use strict";
        var n = cc.Class({
            name: "cc.TiledMapAsset",
            extends: cc.Asset,
            properties: {
                tmxXmlStr: "",
                textures: {
                    default: [],
                    type: [cc.Texture2D]
                },
                textureNames: [cc.String],
                imageLayerTextures: {
                    default: [],
                    type: [cc.Texture2D]
                },
                imageLayerTextureNames: [cc.String],
                tsxFiles: [cc.TextAsset],
                tsxFileNames: [cc.String]
            },
            statics: {
                preventDeferredLoadDependents: !0
            },
            createNode: !1
        });
        cc.TiledMapAsset = n, e.exports = n
    }), {}],
    389: [(function(t, e, i) {
        "use strict";
        var n = (function(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        })(t("../renderer/core/input-assembler"));
        var r = cc.Class({
            name: "cc.TiledMapRenderDataList",
            ctor: function() {
                this._dataList = [], this._offset = 0
            },
            _pushRenderData: function() {
                var t = {};
                t.ia = new n.default, t.nodesRenderList = [], this._dataList.push(t)
            },
            popRenderData: function(t) {
                this._offset >= this._dataList.length && this._pushRenderData();
                var e = this._dataList[this._offset];
                e.nodesRenderList.length = 0;
                var i = e.ia;
                return i._vertexBuffer = t._vb, i._indexBuffer = t._ib, i._start = t.indiceOffset, i._count = 0, this._offset++, e
            },
            pushNodesList: function(t, e) {
                t.nodesRenderList.push(e)
            },
            reset: function() {
                this._offset = 0
            }
        });
        cc.TiledMapRenderDataList = e.exports = r
    }), {
        "../renderer/core/input-assembler": 350
    }],
    390: [(function(t, e, i) {
        "use strict";
        var n = cc.Class({
            name: "cc.TiledObjectGroup",
            extends: cc.Component,
            getPositionOffset: function() {
                return this._positionOffset
            },
            getProperties: function() {
                this._properties
            },
            getGroupName: function() {
                return this._groupName
            },
            getProperty: function(t) {
                return this._properties[t.toString()]
            },
            getObject: function(t) {
                for (var e = 0, i = this._objects.length; e < i; e++) {
                    var n = this._objects[e];
                    if (n && n.name === t) return n
                }
                return null
            },
            getObjects: function() {
                return this._objects
            },
            _init: function(t, e, i) {
                var n = cc.TiledMap,
                    r = n.TMXObjectType,
                    s = n.Orientation,
                    o = n.StaggerAxis,
                    a = n.TileFlag.FLIPPED_MASK;
                this._groupName = t.name, this._positionOffset = t.offset, this._mapInfo = e, this._properties = t.getProperties(), this._offset = cc.v2(t.offset.x, -t.offset.y), this._opacity = t._opacity;
                var l = e._mapSize,
                    h = e._tileSize,
                    c = 0,
                    u = 0;
                e.orientation === s.HEX ? e.getStaggerAxis() === o.STAGGERAXIS_X ? (u = h.height * (l.height + .5), c = (h.width + e.getHexSideLength()) * Math.floor(l.width / 2) + h.width * (l.width % 2)) : (c = h.width * (l.width + .5), u = (h.height + e.getHexSideLength()) * Math.floor(l.height / 2) + h.height * (l.height % 2)) : (c = l.width * h.width, u = l.height * h.height), this.node.setContentSize(c, u);
                for (var _ = c * this.node.anchorX, f = u * (1 - this.node.anchorY), d = t._objects, p = {}, m = 0, y = d.length - 1, v = d.length; m < v; m++, y--) {
                    var g = d[m],
                        x = g.type;
                    g.offset = cc.v2(g.x, g.y);
                    var b = g.points || g.polylinePoints;
                    if (b)
                        for (var A = 0; A < b.length; A++) b[A].y *= -1;
                    if (s.ISO !== e.orientation) g.y = u - g.y;
                    else {
                        var C = g.x / h.width * 2,
                            T = g.y / h.height;
                        g.x = h.width / 2 * (l.width + C - T), g.y = h.height / 2 * (2 * l.height - C - T)
                    }
                    if (x === r.TEXT) {
                        var S = "text" + g.id;
                        p[S] = !0;
                        var w = this.node.getChildByName(S);
                        w || (w = new cc.Node), w.anchorX = 0, w.anchorY = 1, w.angle = -g.rotation, w.x = g.x - _, w.y = g.y - f, w.name = S, w.parent = this.node, w.color = g.color, w.opacity = this._opacity, w.setSiblingIndex(y);
                        var E = w.getComponent(cc.Label);
                        E || (E = w.addComponent(cc.Label)), E.overflow = cc.Label.Overflow.SHRINK, E.lineHeight = g.height, E.string = g.text, E.horizontalAlign = g.halign, E.verticalAlign = g.valign, E.fontSize = g.pixelsize, w.width = g.width, w.height = g.height
                    }
                    if (x === r.IMAGE) {
                        var M = i[(g.gid & a) >>> 0];
                        if (!M) continue;
                        var D = M.tileset,
                            B = "img" + g.id;
                        p[B] = !0;
                        var I = this.node.getChildByName(B);
                        I instanceof cc.PrivateNode && (I.removeFromParent(), I.destroy(), I = null), I || (I = new cc.Node), s.ISO == e.orientation ? (I.anchorX = .5, I.anchorY = 0) : (I.anchorX = 0, I.anchorY = 0), I.angle = -g.rotation, I.x = g.x - _ + D.tileOffset.x, I.y = g.y - f + D.tileOffset.y, I.name = B, I.parent = this.node, I.opacity = this._opacity, I.setSiblingIndex(y);
                        var P = I.getComponent(cc.Sprite);
                        P || (P = I.addComponent(cc.Sprite));
                        var R = new cc.SpriteFrame;
                        R.setTexture(M.tileset.sourceImage, cc.rect(M)), P.spriteFrame = R, I.width = g.width, I.height = g.height
                    }
                }
                this._objects = d;
                for (var O = this.node.children, L = /^img\d+$/, F = /^text\d+$/, N = 0, V = O.length; N < V; N++) {
                    var k = O[N],
                        G = k._name,
                        U = L.test(G);
                    (U = U || F.test(G)) && !p[G] && k.destroy()
                }
            }
        });
        cc.TiledObjectGroup = e.exports = n
    }), {}],
    391: [(function(t, e, i) {
        "use strict";
        var n = cc.Class({
            name: "cc.TiledTile",
            extends: cc.Component,
            editor: !1,
            ctor: function() {
                this._layer = null
            },
            properties: {
                _x: 0,
                _y: 0,
                x: {
                    get: function() {
                        return this._x
                    },
                    set: function(t) {
                        t !== this._x && (this._layer && this._layer._isInvalidPosition(t, this._y) ? cc.warn("Invalid x, the valid value is between [%s] ~ [%s]", 0, this._layer._layerSize.width) : (this._resetTile(), this._x = t, this._updateInfo()))
                    },
                    type: cc.Integer
                },
                y: {
                    get: function() {
                        return this._y
                    },
                    set: function(t) {
                        t !== this._y && (this._layer && this._layer._isInvalidPosition(this._x, t) ? cc.warn("Invalid y, the valid value is between [%s] ~ [%s]", 0, this._layer._layerSize.height) : (this._resetTile(), this._y = t, this._updateInfo()))
                    },
                    type: cc.Integer
                },
                gid: {
                    get: function() {
                        return this._layer ? this._layer.getTileGIDAt(this._x, this._y) : 0
                    },
                    set: function(t) {
                        this._layer && this._layer.setTileGIDAt(t, this._x, this._y)
                    },
                    type: cc.Integer
                }
            },
            onEnable: function() {
                var t = this.node.parent;
                this._layer = t.getComponent(cc.TiledLayer), this._resetTile(), this._updateInfo()
            },
            onDisable: function() {
                this._resetTile()
            },
            _resetTile: function() {
                this._layer && this._layer.getTiledTileAt(this._x, this._y) === this && this._layer.setTiledTileAt(this._x, this._y, null)
            },
            _updateInfo: function() {
                if (this._layer) {
                    var t = this._x,
                        e = this._y;
                    this._layer.getTiledTileAt(t, e) ? cc.warn("There is already a TiledTile at [%s, %s]", t, e) : (this.node.setPosition(this._layer.getPositionAt(t, e)), this._layer.setTiledTileAt(t, e, this))
                }
            }
        });
        cc.TiledTile = e.exports = n
    }), {}],
    392: [(function(t, e, i) {
        "use strict";
        t("./CCTiledMap"), t("./CCTiledMapRenderDataList"), t("./tiledmap-buffer"), t("./tmx-layer-assembler")
    }), {
        "./CCTiledMap": 387,
        "./CCTiledMapRenderDataList": 389,
        "./tiledmap-buffer": 393,
        "./tmx-layer-assembler": 394
    }],
    393: [(function(t, e, i) {
        "use strict";
        var n = cc.Class({
            name: "cc.TiledMapBuffer",
            extends: t("../core/renderer/webgl/quad-buffer"),
            _updateOffset: function() {
                var t = this._offsetInfo;
                t.vertexOffset = this.vertexOffset, t.indiceOffset = this.indiceOffset, t.byteOffset = this.byteOffset
            },
            adjust: function(t, e) {
                this.vertexOffset += t, this.indiceOffset += e, this.indiceStart = this.indiceOffset, this.byteOffset = this.byteOffset + t * this._vertexBytes, this._dirty = !0
            }
        });
        cc.TiledMapBuffer = e.exports = n
    }), {
        "../core/renderer/webgl/quad-buffer": 285
    }],
    394: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.default = void 0;
        var n = (function(t) {
                return t && t.__esModule ? t : {
                    default: t
                }
            })(t("../core/renderer/assembler")),
            r = t("../core/vmath");

        function s(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }

        function o(t, e) {
            if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
            return !e || "object" != typeof e && "function" != typeof e ? t : e
        }

        function a(t, e) {
            if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e);
            t.prototype = Object.create(e && e.prototype, {
                constructor: {
                    value: t,
                    enumerable: !1,
                    writable: !0,
                    configurable: !0
                }
            }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e)
        }
        var l = t("./CCTiledLayer"),
            h = t("./CCTiledMap"),
            c = h.TileFlag,
            u = c.FLIPPED_MASK,
            _ = t("../core/renderer/"),
            f = t("../core/renderer/webgl/vertex-format").vfmtPosUvColor,
            d = parseInt(10922.5),
            p = h.RenderOrder,
            m = t("../core/renderer/render-flow"),
            y = r.mat4.create(),
            v = r.vec3.create(),
            g = {
                row: 0,
                col: 0
            },
            x = {
                x: 0,
                y: 0
            },
            b = {
                x: 0,
                y: 0
            },
            A = {
                x: 0,
                y: 0
            },
            C = {
                x: 0,
                y: 0
            },
            T = null,
            S = null,
            w = 0,
            E = 0,
            M = 0,
            D = 0,
            B = null,
            I = null,
            P = null,
            R = null,
            O = null,
            L = null,
            F = null,
            N = null;

        function V(t) {
            t._updateLocalMatrix(), r.mat4.mul(t._worldMatrix, B, t._matrix), t._renderFlag &= ~(m.FLAG_TRANSFORM | m.FLAG_BREAK_FLOW), m.visitRootNode(t), t._renderFlag |= m.FLAG_BREAK_FLOW
        }

        function k() {
            0 !== S._count && (I.material = T.material, I.node = L.node, I._flushIA(T.ia), w >= d ? (R.uploadData(), R.switchBuffer(), F = R._vData, N = R._uintVData, T = P.popRenderData(R), S = T.ia, E = 0, w = 0) : (T = P.popRenderData(R), S = T.ia), T.material = O)
        }

        function G(t, e) {
            var i = L._getNodesByRowCol(t, e);
            if (i && 0 != i.count) {
                var n = i.list,
                    r = 0,
                    s = 0;
                for (k(), I.worldMatDirty++; r < i.count;) {
                    var o = n[s];
                    s++, o && (V(o.node), r !== s && (n[r] = o, o._index = r), r++)
                }
                n.length = r, I.worldMatDirty--, P.pushNodesList(T, n), I._flush(), I.node = L.node
            }
        }

        function U(t, e) {
            x.x = t.l, x.y = t.t, b.x = t.r, b.y = t.t, A.x = t.l, A.y = t.b, C.x = t.r, C.y = t.b;
            var i = null;
            (e & c.DIAGONAL) >>> 0 && (i = b, b = A, A = i), (e & c.HORIZONTAL) >>> 0 && (i = x, x = b, b = i, i = A, A = C, C = i), (e & c.VERTICAL) >>> 0 && (i = x, x = A, A = i, i = b, b = C, C = i)
        }
        var z = (function(t) {
            function e() {
                return s(this, e), o(this, t.apply(this, arguments))
            }
            return a(e, t), e.prototype.updateRenderData = function(t) {
                t._renderDataList || (t._buffer = new cc.TiledMapBuffer(_._handle, f), t._renderDataList = new cc.TiledMapRenderDataList)
            }, e.prototype.fillBuffers = function(t, e) {
                if (0 !== t._vertices.length) {
                    t._updateCulling();
                    var i = t.node;
                    if (M = t._leftDownToCenterX, D = t._leftDownToCenterY, B = i._worldMatrix, I = e, L = t, P = t._renderDataList, R = t._buffer, t._isCullingDirty() || t._isUserNodeDirty() || t._hasAnimation() || t._hasTiledNode()) {
                        R.reset();
                        var n = void 0,
                            r = void 0;
                        if (t._enableCulling) {
                            var s = t._cullingRect;
                            n = s.leftDown, r = s.rightTop
                        } else n = g, r = t._rightTop;
                        var o = (r.row - n.row + 1) * (r.col - n.col + 1);
                        switch (o > d && (o = d), R.request(4 * o, 6 * o), t._renderOrder) {
                            case p.RightDown:
                                this.traverseGrids(n, r, -1, 1);
                                break;
                            case p.LeftDown:
                                this.traverseGrids(n, r, -1, -1);
                                break;
                            case p.RightUp:
                                this.traverseGrids(n, r, 1, 1);
                                break;
                            case p.LeftUp:
                                this.traverseGrids(n, r, 1, -1)
                        }
                        t._setCullingDirty(!1), t._setUserNodeDirty(!1)
                    } else {
                        for (var a = null, l = null, h = null, c = 0; c < P._offset; c++) {
                            if ((l = (a = P._dataList[c]).nodesRenderList).length > 0) {
                                e.worldMatDirty++;
                                for (var u = 0; u < l.length; u++)
                                    if (h = l[u])
                                        for (var _ = 0; _ < h.length; _++) {
                                            var f = h[_];
                                            f && V(f.node)
                                        }
                                e.worldMatDirty--, e._flush()
                            }
                            a.ia._count > 0 && (e.material = a.material, e.node = i, e._flushIA(a.ia))
                        }
                    }
                    T = null, S = null, B = null, I = null, P = null, R = null, O = null, L = null, F = null, N = null
                }
            }, e.prototype.traverseGrids = function(t, e, i, n) {
                if (P.reset(), !(e.row < 0 || e.col < 0)) {
                    T = P.popRenderData(R), S = T.ia, F = R._vData, N = R._uintVData, w = 0, E = 0, O = null;
                    var r = L.node._color._val,
                        s = L._tiledTiles,
                        o = L._texGrids,
                        a = L._tiles,
                        l = L._texIdToMatIndex,
                        h = L.sharedMaterials,
                        c = L._vertices,
                        _ = void 0,
                        f = void 0,
                        p = void 0,
                        m = void 0,
                        y = void 0,
                        v = void 0,
                        g = void 0,
                        B = null,
                        V = 0,
                        z = 0,
                        j = 0,
                        W = 0,
                        H = 0,
                        X = null,
                        Y = -1,
                        q = void 0,
                        J = 0,
                        Z = !0;
                    for (-1 == i ? (m = e.row, y = t.row) : (m = t.row, y = e.row);
                        (y - m) * i >= 0; m += i)
                        for (_ = c[m], Z = 0 == (J = L._getNodesCountByRow(m)) && void 0 != _, 1 == n ? (f = Z && t.col < _.minCol ? _.minCol : t.col, p = Z && e.col > _.maxCol ? _.maxCol : e.col) : (f = Z && e.col > _.maxCol ? _.maxCol : e.col, p = Z && t.col < _.minCol ? _.minCol : t.col);
                            (p - f) * n >= 0; f += n)(v = _ && _[f]) ? (B = o[((V = a[v.index]) & u) >>> 0]) && (Y !== B.texId && (-1 !== Y && k(), q = l[Y = B.texId], O = h[q], T.material = O), O && (z = v.left - M, j = v.bottom - D, W = z + (g = B.tileset._tileSize).width, H = j + g.height, (X = s[v.index]) ? this.fillByTiledNode(X.node, F, N, z, W, H, j) : (F[E] = z, F[E + 1] = H, N[E + 4] = r, F[E + 5] = z, F[E + 6] = j, N[E + 9] = r, F[E + 10] = W, F[E + 11] = H, N[E + 14] = r, F[E + 15] = W, F[E + 16] = j, N[E + 19] = r), U(B, V), F[E + 2] = x.x, F[E + 3] = x.y, F[E + 7] = A.x, F[E + 8] = A.y, F[E + 12] = b.x, F[E + 13] = b.y, F[E + 17] = C.x, F[E + 18] = C.y, E += 20, R.adjust(4, 6), S._count += 6, w++, J > 0 && G(m, f), w >= d && k())) : J > 0 && G(m, f);
                    R.uploadData(), S._count > 0 && (I.material = T.material, I.node = L.node, I._flushIA(T.ia))
                }
            }, e.prototype.fillByTiledNode = function(t, e, i, n, s, o, a) {
                t._updateLocalMatrix(), r.mat4.copy(y, t._matrix), r.vec3.set(v, -(n + M), -(a + D), 0), r.mat4.translate(y, y, v);
                var l = y.m,
                    h = l[0],
                    c = l[1],
                    u = l[4],
                    _ = l[5],
                    f = l[12],
                    d = l[13],
                    p = t._color._val;
                e[E] = n * h + o * u + f, e[E + 1] = n * c + o * _ + d, i[E + 4] = p, e[E + 5] = n * h + a * u + f, e[E + 6] = n * c + a * _ + d, i[E + 9] = p, e[E + 10] = s * h + o * u + f, e[E + 11] = s * c + o * _ + d, i[E + 14] = p, e[E + 15] = s * h + a * u + f, e[E + 16] = s * c + a * _ + d, i[E + 19] = p
            }, e
        })(n.default);
        i.default = z, n.default.register(l, z), e.exports = i.default
    }), {
        "../core/renderer/": 247,
        "../core/renderer/assembler": 227,
        "../core/renderer/render-flow": 248,
        "../core/renderer/webgl/vertex-format": 288,
        "../core/vmath": 326,
        "./CCTiledLayer": 386,
        "./CCTiledMap": 387
    }],
    395: [(function(t, e, i) {
        "use strict";
        var n = t("./video-player-impl"),
            r = n.EventType,
            s = cc.Enum({
                REMOTE: 0,
                LOCAL: 1
            }),
            o = cc.Class({
                name: "cc.VideoPlayer",
                extends: cc.Component,
                editor: !1,
                properties: {
                    _resourceType: s.REMOTE,
                    resourceType: {
                        tooltip: !1,
                        type: s,
                        set: function(t) {
                            this._resourceType = t, this._updateVideoSource()
                        },
                        get: function() {
                            return this._resourceType
                        }
                    },
                    _remoteURL: "",
                    remoteURL: {
                        tooltip: !1,
                        type: cc.String,
                        set: function(t) {
                            this._remoteURL = t, this._updateVideoSource()
                        },
                        get: function() {
                            return this._remoteURL
                        }
                    },
                    _clip: {
                        default: null,
                        type: cc.Asset
                    },
                    clip: {
                        tooltip: !1,
                        get: function() {
                            return this._clip
                        },
                        set: function(t) {
                            this._clip = t, this._updateVideoSource()
                        },
                        type: cc.Asset
                    },
                    currentTime: {
                        tooltip: !1,
                        type: cc.Float,
                        set: function(t) {
                            this._impl && this._impl.seekTo(t)
                        },
                        get: function() {
                            return this._impl ? this._impl.currentTime() : -1
                        }
                    },
                    _volume: 1,
                    volume: {
                        get: function() {
                            return this._volume
                        },
                        set: function(t) {
                            this._volume = t, this.isPlaying() && !this._mute && this._syncVolume()
                        },
                        range: [0, 1],
                        type: cc.Float,
                        tooltip: !1
                    },
                    _mute: !1,
                    mute: {
                        get: function() {
                            return this._mute
                        },
                        set: function(t) {
                            this._mute = t, this._syncVolume()
                        },
                        tooltip: !1
                    },
                    keepAspectRatio: {
                        tooltip: !1,
                        default: !0,
                        type: cc.Boolean,
                        notify: function() {
                            this._impl && this._impl.setKeepAspectRatioEnabled(this.keepAspectRatio)
                        }
                    },
                    _isFullscreen: {
                        default: !1,
                        formerlySerializedAs: "_N$isFullscreen"
                    },
                    isFullscreen: {
                        get: function() {
                            return this._isFullscreen = this._impl && this._impl.isFullScreenEnabled(), this._isFullscreen
                        },
                        set: function(t) {
                            this._isFullscreen = t, this._impl && this._impl.setFullScreenEnabled(t)
                        },
                        animatable: !1,
                        tooltip: !1
                    },
                    videoPlayerEvent: {
                        default: [],
                        type: cc.Component.EventHandler
                    }
                },
                statics: {
                    EventType: r,
                    ResourceType: s,
                    Impl: n
                },
                ctor: function() {
                    this._impl = new n
                },
                _syncVolume: function() {
                    var t = this._impl;
                    if (t) {
                        var e = this._mute ? 0 : this._volume;
                        t.setVolume(e)
                    }
                },
                _updateVideoSource: function() {
                    var t = "";
                    this.resourceType === s.REMOTE ? t = this.remoteURL : this._clip && (t = this._clip.nativeUrl || ""), t && cc.loader.md5Pipe && (t = cc.loader.md5Pipe.transformURL(t)), this._impl.setURL(t, this._mute || 0 === this._volume)
                },
                onLoad: function() {
                    var t = this._impl;
                    t && (t.createDomElementIfNeeded(this._mute || 0 === this._volume), this._updateVideoSource(), t.seekTo(this.currentTime), t.setKeepAspectRatioEnabled(this.keepAspectRatio), t.setFullScreenEnabled(this._isFullscreen), this.pause(), t.setEventListener(r.PLAYING, this.onPlaying.bind(this)), t.setEventListener(r.PAUSED, this.onPasued.bind(this)), t.setEventListener(r.STOPPED, this.onStopped.bind(this)), t.setEventListener(r.COMPLETED, this.onCompleted.bind(this)), t.setEventListener(r.META_LOADED, this.onMetaLoaded.bind(this)), t.setEventListener(r.CLICKED, this.onClicked.bind(this)), t.setEventListener(r.READY_TO_PLAY, this.onReadyToPlay.bind(this)))
                },
                onRestore: function() {
                    this._impl || (this._impl = new n)
                },
                onEnable: function() {
                    this._impl && this._impl.enable()
                },
                onDisable: function() {
                    this._impl && this._impl.disable()
                },
                onDestroy: function() {
                    this._impl && (this._impl.destroy(), this._impl = null)
                },
                update: function(t) {
                    this._impl && this._impl.updateMatrix(this.node)
                },
                onReadyToPlay: function() {
                    cc.Component.EventHandler.emitEvents(this.videoPlayerEvent, this, r.READY_TO_PLAY), this.node.emit("ready-to-play", this)
                },
                onMetaLoaded: function() {
                    cc.Component.EventHandler.emitEvents(this.videoPlayerEvent, this, r.META_LOADED), this.node.emit("meta-loaded", this)
                },
                onClicked: function() {
                    cc.Component.EventHandler.emitEvents(this.videoPlayerEvent, this, r.CLICKED), this.node.emit("clicked", this)
                },
                onPlaying: function() {
                    cc.Component.EventHandler.emitEvents(this.videoPlayerEvent, this, r.PLAYING), this.node.emit("playing", this)
                },
                onPasued: function() {
                    cc.Component.EventHandler.emitEvents(this.videoPlayerEvent, this, r.PAUSED), this.node.emit("paused", this)
                },
                onStopped: function() {
                    cc.Component.EventHandler.emitEvents(this.videoPlayerEvent, this, r.STOPPED), this.node.emit("stopped", this)
                },
                onCompleted: function() {
                    cc.Component.EventHandler.emitEvents(this.videoPlayerEvent, this, r.COMPLETED), this.node.emit("completed", this)
                },
                play: function() {
                    this._impl && (this._syncVolume(), this._impl.play())
                },
                resume: function() {
                    this._impl && (this._syncVolume(), this._impl.resume())
                },
                pause: function() {
                    this._impl && this._impl.pause()
                },
                stop: function() {
                    this._impl && this._impl.stop()
                },
                getDuration: function() {
                    return this._impl ? this._impl.duration() : -1
                },
                isPlaying: function() {
                    return !!this._impl && this._impl.isPlaying()
                }
            });
        cc.VideoPlayer = e.exports = o
    }), {
        "./video-player-impl": 396
    }],
    396: [(function(t, e, i) {
        "use strict";
        var n = t("../core/vmath"),
            r = t("../core/platform/utils"),
            s = t("../core/platform/CCSys"),
            o = {
                HAVE_NOTHING: 0,
                HAVE_METADATA: 1,
                HAVE_CURRENT_DATA: 2,
                HAVE_FUTURE_DATA: 3,
                HAVE_ENOUGH_DATA: 4
            },
            a = n.mat4.create(),
            l = cc.Class({
                name: "VideoPlayerImpl",
                ctor: function() {
                    this._EventList = {}, this._video = null, this._url = "", this._waitingFullscreen = !1, this._fullScreenEnabled = !1, this._loadedmeta = !1, this._loaded = !1, this._visible = !1, this._playing = !1, this._ignorePause = !1, this._forceUpdate = !1, this._m00 = 0, this._m01 = 0, this._m04 = 0, this._m05 = 0, this._m12 = 0, this._m13 = 0, this._w = 0, this._h = 0, this.__eventListeners = {}
                },
                _bindEvent: function() {
                    var t = this._video,
                        e = this,
                        i = this.__eventListeners;
                    i.loadedmetadata = function() {
                        e._loadedmeta = !0, e._forceUpdate = !0, e._waitingFullscreen && (e._waitingFullscreen = !1, e._toggleFullscreen(!0)), e._dispatchEvent(l.EventType.META_LOADED)
                    }, i.ended = function() {
                        e._video === t && (e._playing = !1, e._dispatchEvent(l.EventType.COMPLETED))
                    }, i.play = function() {
                        e._video === t && (e._playing = !0, e._updateVisibility(), e._dispatchEvent(l.EventType.PLAYING))
                    }, i.pause = function() {
                        e._video === t && (e._playing = !1, e._ignorePause || e._dispatchEvent(l.EventType.PAUSED))
                    }, i.click = function() {
                        e._dispatchEvent(l.EventType.CLICKED)
                    }, t.addEventListener("loadedmetadata", i.loadedmetadata), t.addEventListener("ended", i.ended), t.addEventListener("play", i.play), t.addEventListener("pause", i.pause), t.addEventListener("click", i.click), i.onCanPlay = function() {
                        if (!e._loaded && !e._playing) {
                            var t = e._video;
                            t.readyState !== o.HAVE_ENOUGH_DATA && t.readyState !== o.HAVE_METADATA || (t.currentTime = 0, e._loaded = !0, e._forceUpdate = !0, e._dispatchEvent(l.EventType.READY_TO_PLAY), e._updateVisibility())
                        }
                    }, t.addEventListener("canplay", i.onCanPlay), t.addEventListener("canplaythrough", i.onCanPlay), t.addEventListener("suspend", i.onCanPlay)
                },
                _updateVisibility: function() {
                    var t = this._video;
                    t && (this._visible ? t.style.visibility = "visible" : (t.style.visibility = "hidden", t.pause(), this._playing = !1))
                },
                _updateSize: function(t, e) {
                    var i = this._video;
                    i && (i.style.width = t + "px", i.style.height = e + "px")
                },
                _createDom: function(t) {
                    var e = document.createElement("video");
                    e.style.position = "absolute", e.style.bottom = "0px", e.style.left = "0px", e.className = "cocosVideo", e.setAttribute("preload", "auto"), e.setAttribute("webkit-playsinline", ""), e.setAttribute("x5-playsinline", ""), e.setAttribute("playsinline", ""), t && e.setAttribute("muted", ""), this._video = e, cc.game.container.appendChild(e)
                },
                createDomElementIfNeeded: function(t) {
                    this._video || this._createDom(t)
                },
                removeDom: function() {
                    var t = this._video;
                    if (t) {
                        r.contains(cc.game.container, t) && cc.game.container.removeChild(t);
                        var e = this.__eventListeners;
                        t.removeEventListener("loadedmetadata", e.loadedmetadata), t.removeEventListener("ended", e.ended), t.removeEventListener("play", e.play), t.removeEventListener("pause", e.pause), t.removeEventListener("click", e.click), t.removeEventListener("canplay", e.onCanPlay), t.removeEventListener("canplaythrough", e.onCanPlay), t.removeEventListener("suspend", e.onCanPlay), e.loadedmetadata = null, e.ended = null, e.play = null, e.pause = null, e.click = null, e.onCanPlay = null
                    }
                    this._video = null, this._url = ""
                },
                setURL: function(t, e) {
                    var i, n = void 0;
                    if (this._url !== t) {
                        this._url = t, this.removeDom(), this.createDomElementIfNeeded(e), this._bindEvent();
                        var r = this._video;
                        r.style.visibility = "hidden", this._loaded = !1, this._playing = !1, this._loadedmeta = !1, (n = document.createElement("source")).src = t, r.appendChild(n), i = cc.path.extname(t);
                        for (var s = l._polyfill, o = 0; o < s.canPlayType.length; o++) i !== s.canPlayType[o] && ((n = document.createElement("source")).src = t.replace(i, s.canPlayType[o]), r.appendChild(n))
                    }
                },
                getURL: function() {
                    return this._url
                },
                play: function() {
                    var t = this._video;
                    if (t && this._visible && !this._playing)
                        if (l._polyfill.autoplayAfterOperation) {
                            setTimeout((function() {
                                t.play()
                            }), 20)
                        } else t.play()
                },
                pause: function() {
                    var t = this._video;
                    this._playing && t && t.pause()
                },
                resume: function() {
                    this.play()
                },
                stop: function() {
                    var t = this._video;
                    t && this._visible && (this._ignorePause = !0, t.currentTime = 0, t.pause(), setTimeout(function() {
                        this._dispatchEvent(l.EventType.STOPPED), this._ignorePause = !1
                    }.bind(this), 0))
                },
                setVolume: function(t) {
                    var e = this._video;
                    e && (e.volume = t)
                },
                seekTo: function(t) {
                    var e = this._video;
                    if (e) {
                        if (this._loaded) e.currentTime = t;
                        else {
                            e.addEventListener(l._polyfill.event, (function i() {
                                e.currentTime = t, e.removeEventListener(l._polyfill.event, i)
                            }))
                        }
                        l._polyfill.autoplayAfterOperation && this.isPlaying() && setTimeout((function() {
                            e.play()
                        }), 20)
                    }
                },
                isPlaying: function() {
                    var t = this._video;
                    return l._polyfill.autoplayAfterOperation && this._playing && setTimeout((function() {
                        t.play()
                    }), 20), this._playing
                },
                duration: function() {
                    var t = this._video,
                        e = -1;
                    return t ? (e = t.duration, e <= 0 && cc.logID(7702), e) : e
                },
                currentTime: function() {
                    var t = this._video;
                    return t ? t.currentTime : -1
                },
                setKeepAspectRatioEnabled: function() {
                    cc.logID(7700)
                },
                isKeepAspectRatioEnabled: function() {
                    return !0
                },
                _toggleFullscreen: function(t) {
                    var e = this,
                        i = this._video;
                    i && (t ? (s.browserType === s.BROWSER_TYPE_IE && (i.style.transform = ""), cc.screen.requestFullScreen(i, (function(t) {
                        var n = s.browserType === s.BROWSER_TYPE_IE ? document.msFullscreenElement : document.fullscreenElement;
                        e._fullScreenEnabled = n === i
                    }), (function(t) {
                        e._fullScreenEnabled = !1
                    }))) : cc.screen.fullScreen() && cc.screen.exitFullScreen(i))
                },
                setFullScreenEnabled: function(t) {
                    !this._loadedmeta && t ? this._waitingFullscreen = !0 : this._toggleFullscreen(t)
                },
                isFullScreenEnabled: function() {
                    return this._fullScreenEnabled
                },
                setEventListener: function(t, e) {
                    this._EventList[t] = e
                },
                removeEventListener: function(t) {
                    this._EventList[t] = null
                },
                _dispatchEvent: function(t) {
                    var e = this._EventList[t];
                    e && e.call(this, this, this._video.src)
                },
                onPlayEvent: function() {
                    this._EventList[l.EventType.PLAYING].call(this, this, this._video.src)
                },
                enable: function() {
                    var t = l.elements; - 1 === t.indexOf(this) && t.push(this), this.setVisible(!0)
                },
                disable: function() {
                    var t = l.elements,
                        e = t.indexOf(this); - 1 !== e && t.splice(e, 1), this.setVisible(!1)
                },
                destroy: function() {
                    this.disable(), this.removeDom()
                },
                setVisible: function(t) {
                    this._visible !== t && (this._visible = !!t, this._updateVisibility())
                },
                updateMatrix: function(t) {
                    if (this._video && this._visible && !this._fullScreenEnabled) {
                        t.getWorldMatrix(a);
                        var e = cc.Camera._findRendererCamera(t);
                        e && e.worldMatrixToScreen(a, a, cc.game.canvas.width, cc.game.canvas.height);
                        var i = a.m;
                        if (this._forceUpdate || this._m00 !== i[0] || this._m01 !== i[1] || this._m04 !== i[4] || this._m05 !== i[5] || this._m12 !== i[12] || this._m13 !== i[13] || this._w !== t._contentSize.width || this._h !== t._contentSize.height) {
                            this._m00 = i[0], this._m01 = i[1], this._m04 = i[4], this._m05 = i[5], this._m12 = i[12], this._m13 = i[13], this._w = t._contentSize.width, this._h = t._contentSize.height;
                            var n = cc.view._devicePixelRatio,
                                r = 1 / n,
                                s = 1 / n,
                                o = cc.game.container,
                                h = i[0] * r,
                                c = i[1],
                                u = i[4],
                                _ = i[5] * s,
                                f = o && o.style.paddingLeft ? parseInt(o.style.paddingLeft) : 0,
                                d = o && o.style.paddingBottom ? parseInt(o.style.paddingBottom) : 0,
                                p = void 0,
                                m = void 0;
                            l._polyfill.zoomInvalid ? (this._updateSize(this._w * h, this._h * _), h = 1, _ = 1, p = this._w * r, m = this._h * s) : (p = this._w * r, m = this._h * s, this._updateSize(this._w, this._h));
                            var y = p * i[0] * t._anchorPoint.x,
                                v = m * i[5] * t._anchorPoint.y,
                                g = "matrix(" + h + "," + -c + "," + -u + "," + _ + "," + (i[12] * r - y + f) + "," + -(i[13] * s - v + d) + ")";
                            this._video.style.transform = g, this._video.style["-webkit-transform"] = g, this._video.style["transform-origin"] = "0px 100% 0px", this._video.style["-webkit-transform-origin"] = "0px 100% 0px", this._forceUpdate = !1
                        }
                    }
                }
            });
        l.EventType = {
            PLAYING: 0,
            PAUSED: 1,
            STOPPED: 2,
            COMPLETED: 3,
            META_LOADED: 4,
            CLICKED: 5,
            READY_TO_PLAY: 6
        }, l.elements = [], l.pauseElements = [], cc.game.on(cc.game.EVENT_HIDE, (function() {
            for (var t, e = l.elements, i = 0; i < e.length; i++)(t = e[i]).isPlaying() && (t.pause(), l.pauseElements.push(t))
        })), cc.game.on(cc.game.EVENT_SHOW, (function() {
            for (var t = l.pauseElements, e = t.pop(); e;) e.play(), e = t.pop()
        })), l._polyfill = {
            devicePixelRatio: !1,
            event: "canplay",
            canPlayType: []
        };
        var h = document.createElement("video");
        h.canPlayType && (h.canPlayType("video/ogg") && (l._polyfill.canPlayType.push(".ogg"), l._polyfill.canPlayType.push(".ogv")), h.canPlayType("video/mp4") && l._polyfill.canPlayType.push(".mp4"), h.canPlayType("video/webm") && l._polyfill.canPlayType.push(".webm")), s.browserType === s.BROWSER_TYPE_FIREFOX && (l._polyfill.autoplayAfterOperation = !0), s.OS_ANDROID !== s.os || s.browserType !== s.BROWSER_TYPE_SOUGOU && s.browserType !== s.BROWSER_TYPE_360 || (l._polyfill.zoomInvalid = !0);
        var c = document.createElement("style");
        c.innerHTML = ".cocosVideo:-moz-full-screen{transform:matrix(1,0,0,1,0,0) !important;}.cocosVideo:full-screen{transform:matrix(1,0,0,1,0,0) !important;}.cocosVideo:-webkit-full-screen{transform:matrix(1,0,0,1,0,0) !important;}", document.head.appendChild(c), e.exports = l
    }), {
        "../core/platform/CCSys": 207,
        "../core/platform/utils": 222,
        "../core/vmath": 326
    }],
    397: [(function(t, e, i) {
        "use strict";
        var n = t("./webview-impl"),
            r = n.EventType;

        function s() {}
        var o = cc.Class({
            name: "cc.WebView",
            extends: cc.Component,
            editor: !1,
            properties: {
                _useOriginalSize: !0,
                _url: "",
                url: {
                    type: cc.String,
                    tooltip: !1,
                    get: function() {
                        return this._url
                    },
                    set: function(t) {
                        this._url = t;
                        var e = this._impl;
                        e && e.loadURL(t)
                    }
                },
                webviewEvents: {
                    default: [],
                    type: cc.Component.EventHandler
                }
            },
            statics: {
                EventType: r,
                Impl: n
            },
            ctor: function() {
                this._impl = new o.Impl
            },
            onRestore: function() {
                this._impl || (this._impl = new o.Impl)
            },
            onEnable: function() {
                var t = this._impl;
                t.createDomElementIfNeeded(this.node.width, this.node.height), t.setEventListener(r.LOADED, this._onWebViewLoaded.bind(this)), t.setEventListener(r.LOADING, this._onWebViewLoading.bind(this)), t.setEventListener(r.ERROR, this._onWebViewLoadError.bind(this)), t.loadURL(this._url), t.setVisible(!0)
            },
            onDisable: function() {
                var t = this._impl;
                t.setVisible(!1), t.setEventListener(r.LOADED, s), t.setEventListener(r.LOADING, s), t.setEventListener(r.ERROR, s)
            },
            onDestroy: function() {
                this._impl && (this._impl.destroy(), this._impl = null)
            },
            update: function(t) {
                this._impl && this._impl.updateMatrix(this.node)
            },
            _onWebViewLoaded: function() {
                cc.Component.EventHandler.emitEvents(this.webviewEvents, this, r.LOADED), this.node.emit("loaded", this)
            },
            _onWebViewLoading: function() {
                return cc.Component.EventHandler.emitEvents(this.webviewEvents, this, r.LOADING), this.node.emit("loading", this), !0
            },
            _onWebViewLoadError: function() {
                cc.Component.EventHandler.emitEvents(this.webviewEvents, this, r.ERROR), this.node.emit("error", this)
            },
            setJavascriptInterfaceScheme: function(t) {
                this._impl && this._impl.setJavascriptInterfaceScheme(t)
            },
            setOnJSCallback: function(t) {
                this._impl && this._impl.setOnJSCallback(t)
            },
            evaluateJS: function(t) {
                this._impl && this._impl.evaluateJS(t)
            }
        });
        cc.WebView = e.exports = o
    }), {
        "./webview-impl": 398
    }],
    398: [(function(t, e, i) {
        "use strict";
        var n = t("../core/vmath"),
            r = t("../core/platform/utils"),
            s = t("../core/platform/CCSys"),
            o = n.mat4.create(),
            a = cc.Class({
                name: "WebViewImpl",
                ctor: function() {
                    this._EventList = {}, this._visible = !1, this._parent = null, this._div = null, this._iframe = null, this._listener = null, this._forceUpdate = !1, this._m00 = 0, this._m01 = 0, this._m04 = 0, this._m05 = 0, this._m12 = 0, this._m13 = 0, this._w = 0, this._h = 0, this.__eventListeners = {}
                },
                _updateVisibility: function() {
                    if (this._div) {
                        var t = this._div;
                        this._visible ? t.style.visibility = "visible" : t.style.visibility = "hidden"
                    }
                },
                _updateSize: function(t, e) {
                    var i = this._div;
                    i && (i.style.width = t + "px", i.style.height = e + "px")
                },
                _initEvent: function() {
                    var t = this._iframe;
                    if (t) {
                        var e = this.__eventListeners,
                            i = this;
                        e.load = function() {
                            i._forceUpdate = !0, i._dispatchEvent(a.EventType.LOADED)
                        }, e.error = function() {
                            i._dispatchEvent(a.EventType.ERROR)
                        }, t.addEventListener("load", e.load), t.addEventListener("error", e.error)
                    }
                },
                _initStyle: function() {
                    if (this._div) {
                        var t = this._div;
                        t.style.position = "absolute", t.style.bottom = "0px", t.style.left = "0px"
                    }
                },
                _setOpacity: function(t) {
                    var e = this._iframe;
                    e && e.style && (e.style.opacity = t / 255)
                },
                _createDom: function(t, e) {
                    a._polyfill.enableDiv ? (this._div = document.createElement("div"), this._div.style["-webkit-overflow"] = "auto", this._div.style["-webkit-overflow-scrolling"] = "touch", this._iframe = document.createElement("iframe"), this._div.appendChild(this._iframe), this._iframe.style.width = "100%", this._iframe.style.height = "100%") : this._div = this._iframe = document.createElement("iframe"), a._polyfill.enableBG && (this._div.style.background = "#FFF"), this._div.style.background = "#FFF", this._div.style.height = e + "px", this._div.style.width = t + "px", this._div.style.overflow = "scroll", this._iframe.style.border = "none", cc.game.container.appendChild(this._div), this._updateVisibility()
                },
                _createNativeControl: function(t, e) {
                    this._createDom(t, e), this._initStyle(), this._initEvent()
                },
                createDomElementIfNeeded: function(t, e) {
                    this._div ? this._updateSize(t, e) : this._createNativeControl(t, e)
                },
                removeDom: function() {
                    var t = this._div;
                    t && (r.contains(cc.game.container, t) && cc.game.container.removeChild(t), this._div = null);
                    var e = this._iframe;
                    if (e) {
                        var i = this.__eventListeners;
                        e.removeEventListener("load", i.load), e.removeEventListener("error", i.error), i.load = null, i.error = null, this._iframe = null
                    }
                },
                setOnJSCallback: function(t) {},
                setJavascriptInterfaceScheme: function(t) {},
                loadData: function(t, e, i, n) {},
                loadHTMLString: function(t, e) {},
                loadURL: function(t) {
                    var e = this._iframe;
                    if (e) {
                        e.src = t;
                        var i = this;
                        e.addEventListener("load", (function t() {
                            i._loaded = !0, i._updateVisibility(), e.removeEventListener("load", t)
                        })), this._dispatchEvent(a.EventType.LOADING)
                    }
                },
                stopLoading: function() {
                    cc.logID(7800)
                },
                reload: function() {
                    var t = this._iframe;
                    if (t) {
                        var e = t.contentWindow;
                        e && e.location && e.location.reload()
                    }
                },
                canGoBack: function() {
                    return cc.logID(7801), !0
                },
                canGoForward: function() {
                    return cc.logID(7802), !0
                },
                goBack: function() {
                    try {
                        if (a._polyfill.closeHistory) return cc.logID(7803);
                        var t = this._iframe;
                        if (t) {
                            var e = t.contentWindow;
                            e && e.location && e.history.back.call(e)
                        }
                    } catch (t) {
                        cc.log(t)
                    }
                },
                goForward: function() {
                    try {
                        if (a._polyfill.closeHistory) return cc.logID(7804);
                        var t = this._iframe;
                        if (t) {
                            var e = t.contentWindow;
                            e && e.location && e.history.forward.call(e)
                        }
                    } catch (t) {
                        cc.log(t)
                    }
                },
                evaluateJS: function(t) {
                    var e = this._iframe;
                    if (e) {
                        var i = e.contentWindow;
                        try {
                            i.eval(t), this._dispatchEvent(a.EventType.JS_EVALUATED)
                        } catch (t) {
                            console.error(t)
                        }
                    }
                },
                setScalesPageToFit: function() {
                    cc.logID(7805)
                },
                setEventListener: function(t, e) {
                    this._EventList[t] = e
                },
                removeEventListener: function(t) {
                    this._EventList[t] = null
                },
                _dispatchEvent: function(t) {
                    var e = this._EventList[t];
                    e && e.call(this, this, this._iframe.src)
                },
                _createRenderCmd: function() {
                    return new a.RenderCmd(this)
                },
                destroy: function() {
                    this.removeDom()
                },
                setVisible: function(t) {
                    this._visible !== t && (this._visible = !!t, this._updateVisibility())
                },
                updateMatrix: function(t) {
                    if (this._div && this._visible) {
                        t.getWorldMatrix(o);
                        var e = cc.Camera._findRendererCamera(t);
                        e && e.worldMatrixToScreen(o, o, cc.game.canvas.width, cc.game.canvas.height);
                        var i = o.m;
                        if (this._forceUpdate || this._m00 !== i[0] || this._m01 !== i[1] || this._m04 !== i[4] || this._m05 !== i[5] || this._m12 !== i[12] || this._m13 !== i[13] || this._w !== t._contentSize.width || this._h !== t._contentSize.height) {
                            this._m00 = i[0], this._m01 = i[1], this._m04 = i[4], this._m05 = i[5], this._m12 = i[12], this._m13 = i[13], this._w = t._contentSize.width, this._h = t._contentSize.height;
                            var n = cc.view._devicePixelRatio,
                                r = 1 / n,
                                s = 1 / n,
                                a = cc.game.container,
                                l = i[0] * r,
                                h = i[1],
                                c = i[4],
                                u = i[5] * s,
                                _ = a && a.style.paddingLeft ? parseInt(a.style.paddingLeft) : 0,
                                f = a && a.style.paddingBottom ? parseInt(a.style.paddingBottom) : 0;
                            this._updateSize(this._w, this._h);
                            var d = this._w * r,
                                p = this._h * s,
                                m = d * i[0] * t._anchorPoint.x,
                                y = p * i[5] * t._anchorPoint.y,
                                v = "matrix(" + l + "," + -h + "," + -c + "," + u + "," + (i[12] * r - m + _) + "," + -(i[13] * s - y + f) + ")";
                            this._div.style.transform = v, this._div.style["-webkit-transform"] = v, this._div.style["transform-origin"] = "0px 100% 0px", this._div.style["-webkit-transform-origin"] = "0px 100% 0px", this._setOpacity(t.opacity), this._forceUpdate = !1
                        }
                    }
                }
            });
        a.EventType = {
            LOADING: 0,
            LOADED: 1,
            ERROR: 2,
            JS_EVALUATED: 3
        };
        var l = a._polyfill = {
            devicePixelRatio: !1,
            enableDiv: !1
        };
        s.os === s.OS_IOS && (l.enableDiv = !0), s.isMobile ? s.browserType === s.BROWSER_TYPE_FIREFOX && (l.enableBG = !0) : s.browserType === s.BROWSER_TYPE_IE && (l.closeHistory = !0), e.exports = a
    }), {
        "../core/platform/CCSys": 207,
        "../core/platform/utils": 222,
        "../core/vmath": 326
    }],
    399: [(function(t, e, i) {
        "use strict";
        t("./cocos2d/core"), t("./cocos2d/animation"), t("./cocos2d/particle"), t("./cocos2d/tilemap"), t("./cocos2d/videoplayer/CCVideoPlayer"), t("./cocos2d/webview/CCWebView"), t("./cocos2d/core/components/CCStudioComponent"), t("./extensions/ccpool/CCNodePool"), t("./cocos2d/actions"), t("./extensions/spine"), t("./extensions/dragonbones"), t("./cocos2d/deprecated")
    }), {
        "./cocos2d/actions": 7,
        "./cocos2d/animation": 16,
        "./cocos2d/core": 144,
        "./cocos2d/core/components/CCStudioComponent": 112,
        "./cocos2d/deprecated": 337,
        "./cocos2d/particle": 343,
        "./cocos2d/particle/CCParticleAsset": 340,
        "./cocos2d/tilemap": 392,
        "./cocos2d/tilemap/CCTiledMapAsset": 388,
        "./cocos2d/videoplayer/CCVideoPlayer": 395,
        "./cocos2d/webview/CCWebView": 397,
        "./extensions/ccpool/CCNodePool": 400,
        "./extensions/dragonbones": 409,
        "./extensions/spine": 413
    }],
    400: [(function(t, e, i) {
        "use strict";
        cc.NodePool = function(t) {
            this.poolHandlerComp = t, this._pool = []
        }, cc.NodePool.prototype = {
            constructor: cc.NodePool,
            size: function() {
                return this._pool.length
            },
            clear: function() {
                for (var t = this._pool.length, e = 0; e < t; ++e) this._pool[e].destroy();
                this._pool.length = 0
            },
            put: function(t) {
                if (t && -1 === this._pool.indexOf(t)) {
                    t.removeFromParent(!1);
                    var e = this.poolHandlerComp ? t.getComponent(this.poolHandlerComp) : null;
                    e && e.unuse && e.unuse(), this._pool.push(t)
                }
            },
            get: function() {
                var t = this._pool.length - 1;
                if (t < 0) return null;
                var e = this._pool[t];
                this._pool.length = t;
                var i = this.poolHandlerComp ? e.getComponent(this.poolHandlerComp) : null;
                return i && i.reuse && i.reuse.apply(i, arguments), e
            }
        }, e.exports = cc.NodePool
    }), {}],
    401: [(function(t, e, i) {
        "use strict";
        var n = [],
            r = [],
            s = 0,
            o = 0,
            a = null,
            l = null,
            h = 0,
            c = 0,
            u = 0,
            _ = 0,
            f = null,
            d = void 0,
            p = void 0,
            m = cc.Class({
                ctor: function() {
                    this._inited = !1, this._invalid = !0, this.frames = [], this.totalTime = 0, this.isCompleted = !1, this._frameIdx = -1, this._armatureInfo = null, this._animationName = null, this._tempSegments = null, this._tempColors = null
                },
                init: function(t, e) {
                    this._inited = !0, this._armatureInfo = t, this._animationName = e
                },
                clear: function() {
                    this._inited = !1;
                    for (var t = 0, e = this.frames.length; t < e; t++) {
                        this.frames[t].segments.length = 0
                    }
                    this.invalidAllFrame()
                },
                begin: function() {
                    if (this._invalid) {
                        var t = this._armatureInfo,
                            e = t.curAnimationCache;
                        e && e != this && e.updateToFrame(), t.armature.animation.play(this._animationName, 1), t.curAnimationCache = this, this._invalid = !1, this._frameIdx = -1, this.totalTime = 0, this.isCompleted = !1
                    }
                },
                end: function() {
                    this._needToUpdate() || (this._armatureInfo.curAnimationCache = null, this.frames.length = this._frameIdx + 1, this.isCompleted = !0)
                },
                _needToUpdate: function(t) {
                    return !this._armatureInfo.armature.animation.isCompleted && this.totalTime < 30 && (void 0 == t || this._frameIdx < t)
                },
                updateToFrame: function(t) {
                    if (this._inited && (this.begin(), this._needToUpdate(t))) {
                        var e = this._armatureInfo.armature;
                        do {
                            e.advanceTime(1 / 60), this._frameIdx++, this._updateFrame(e, this._frameIdx), this.totalTime += 1 / 60
                        } while (this._needToUpdate(t));
                        this.end()
                    }
                },
                isInited: function() {
                    return this._inited
                },
                isInvalid: function() {
                    return this._invalid
                },
                invalidAllFrame: function() {
                    this.isCompleted = !1, this._invalid = !0
                },
                updateAllFrame: function() {
                    this.invalidAllFrame(), this.updateToFrame()
                },
                _updateFrame: function(t, e) {
                    o = 0, s = 0, 0, a = null, l = null, h = 0, c = 0, u = 0, _ = 0, f = null, this.frames[e] = this.frames[e] || {
                        segments: [],
                        colors: [],
                        vertices: null,
                        uintVert: null,
                        indices: null
                    };
                    var i = this.frames[e],
                        d = this._tempSegments = i.segments,
                        p = this._tempColors = i.colors;
                    this._traverseArmature(t, 1), _ > 0 && (p[_ - 1].vfOffset = o), p.length = _;
                    var m = u - 1;
                    if (m >= 0)
                        if (c > 0) {
                            var y = d[m];
                            y.indexCount = c, y.vfCount = 5 * h, y.vertexCount = h, d.length = u
                        } else d.length = u - 1;
                    if (0 !== d.length) {
                        var v = i.vertices,
                            g = i.uintVert;
                        (!v || v.length < o) && (v = i.vertices = new Float32Array(o), g = i.uintVert = new Uint32Array(v.buffer));
                        for (var x = 0, b = 0; x < o;) v[x++] = n[b++], v[x++] = n[b++], v[x++] = n[b++], v[x++] = n[b++], g[x++] = n[b++];
                        var A = i.indices;
                        (!A || A.length < s) && (A = i.indices = new Uint16Array(s));
                        for (var C = 0; C < s; C++) A[C] = r[C];
                        i.vertices = v, i.uintVert = g, i.indices = A
                    }
                },
                _traverseArmature: function(t, e) {
                    for (var i = this._tempColors, m = this._tempSegments, y = n, v = r, g = void 0, x = void 0, b = t._slots, A = void 0, C = void 0, T = void 0, S = void 0, w = void 0, E = void 0, M = void 0, D = 0, B = b.length; D < B; D++)
                        if ((A = b[D])._visible && A._displayData)
                            if (A.updateWorldMatrix(), T = A._color, A.childArmature) this._traverseArmature(A.childArmature, e * T.a / 255);
                            else if (w = A.getTexture()) {
                        a === w.url && l === A._blendMode || (a = w.url, l = A._blendMode, (E = u - 1) >= 0 && (c > 0 ? ((M = m[E]).indexCount = c, M.vertexCount = h, M.vfCount = 5 * h) : u--), m[u] = {
                            tex: w,
                            blendMode: A._blendMode,
                            indexCount: 0,
                            vertexCount: 0,
                            vfCount: 0
                        }, u++, c = 0, h = 0), S = (T.a * e << 24 >>> 0) + (T.b << 16) + (T.g << 8) + T.r, f !== S && (f = S, _ > 0 && (i[_ - 1].vfOffset = o), i[_++] = {
                            r: T.r,
                            g: T.g,
                            b: T.b,
                            a: T.a * e,
                            vfOffset: 0
                        }), g = A._localVertices, x = A._indices, C = A._worldMatrix.m;
                        for (var I = 0, P = g.length; I < P;) d = g[I++], p = g[I++], y[o++] = d * C[0] + p * C[4] + C[12], y[o++] = d * C[1] + p * C[5] + C[13], y[o++] = g[I++], y[o++] = g[I++], y[o++] = S;
                        for (var R = 0, O = x.length; R < O; R++) v[s++] = h + x[R];
                        o / 5, c += x.length, h += g.length / 4
                    }
                }
            }),
            y = cc.Class({
                ctor: function() {
                    this._animationPool = {}, this._armatureCache = {}
                },
                dispose: function() {
                    for (var t in this._armatureCache) {
                        var e = this._armatureCache[t];
                        if (e) {
                            var i = e.armature;
                            i && i.dispose()
                        }
                    }
                    this._armatureCache = null, this._animationPool = null
                },
                _removeArmature: function(t) {
                    var e = this._armatureCache[t],
                        i = e.animationsCache;
                    for (var n in i) {
                        var r = i[n];
                        r && (this._animationPool[t + "#" + n] = r, r.clear())
                    }
                    var s = e.armature;
                    s && s.dispose(), delete this._armatureCache[t]
                },
                resetArmature: function(t) {
                    for (var e in this._armatureCache) - 1 != e.indexOf(t) && this._removeArmature(e)
                },
                getArmatureCache: function(t, e, i) {
                    var n = this._armatureCache[e],
                        r = void 0;
                    if (n) r = n.armature;
                    else {
                        var s = dragonBones.CCFactory.getInstance().buildArmatureDisplay(t, e, "", i);
                        if (!s || !s._armature) return;
                        if (r = s._armature, !y.canCache(r)) return void r.dispose();
                        this._armatureCache[e] = {
                            armature: r,
                            animationsCache: {},
                            curAnimationCache: null
                        }
                    }
                    return r
                },
                getAnimationCache: function(t, e) {
                    var i = this._armatureCache[t];
                    return i ? i.animationsCache[e] : null
                },
                initAnimationCache: function(t, e) {
                    if (!e) return null;
                    var i = this._armatureCache[t],
                        n = i && i.armature;
                    if (!n) return null;
                    if (!n.animation.hasAnimation(e)) return null;
                    var r = i.animationsCache,
                        s = r[e];
                    if (!s) {
                        var o = t + "#" + e;
                        (s = this._animationPool[o]) ? delete this._animationPool[o]: s = new m, s.init(i, e), r[e] = s
                    }
                    return s
                },
                invalidAnimationCache: function(t) {
                    var e = this._armatureCache[t];
                    if (!(e && e.armature)) return null;
                    var i = e.animationsCache;
                    for (var n in i) {
                        i[n].invalidAllFrame()
                    }
                },
                updateAnimationCache: function(t, e) {
                    if (e) {
                        var i = this.initAnimationCache(t, e);
                        if (!i) return;
                        i.updateAllFrame()
                    } else {
                        var n = this._armatureCache[t];
                        if (!(n && n.armature)) return null;
                        var r = n.animationsCache;
                        for (var s in r) {
                            r[s].updateAllFrame()
                        }
                    }
                }
            });
        y.FrameTime = 1 / 60, y.sharedCache = new y, y.canCache = function(t) {
            for (var e = t._slots, i = 0, n = e.length; i < n; i++) {
                if (e[i].childArmature) return !1
            }
            return !0
        }, e.exports = y
    }), {}],
    402: [(function(t, e, i) {
        "use strict";
        var n = t("../../cocos2d/core/components/CCRenderComponent"),
            r = t("../../cocos2d/core/assets/material/CCMaterial"),
            s = t("../../cocos2d/core/event/event-target"),
            o = (t("../../cocos2d/core/CCNode"), t("../../cocos2d/core/graphics/graphics")),
            a = t("./ArmatureCache"),
            l = cc.Enum({
                default: -1
            }),
            h = cc.Enum({
                "<None>": 0
            }),
            c = (cc.Enum({
                REALTIME: 0
            }), cc.Enum({
                REALTIME: 0,
                SHARED_CACHE: 1,
                PRIVATE_CACHE: 2
            }));
        var u = cc.Class({
            name: "dragonBones.ArmatureDisplay",
            extends: n,
            editor: !1,
            statics: {
                AnimationCacheMode: c
            },
            properties: {
                _factory: {
                    default: null,
                    type: dragonBones.CCFactory,
                    serializable: !1
                },
                dragonAsset: {
                    default: null,
                    type: dragonBones.DragonBonesAsset,
                    notify: function() {
                        this._refresh()
                    },
                    tooltip: !1
                },
                dragonAtlasAsset: {
                    default: null,
                    type: dragonBones.DragonBonesAtlasAsset,
                    notify: function() {
                        this._parseDragonAtlasAsset(), this._refresh(), this._activateMaterial()
                    },
                    tooltip: !1
                },
                _armatureName: "",
                armatureName: {
                    get: function() {
                        return this._armatureName
                    },
                    set: function(t) {
                        this._armatureName = t;
                        var e = this.getAnimationNames(this._armatureName);
                        (!this.animationName || e.indexOf(this.animationName) < 0) && (this.animationName = ""), this._armature && !this.isAnimationCached() && this._factory._dragonBones.clock.remove(this._armature), this._refresh(), this._armature && !this.isAnimationCached() && this._factory._dragonBones.clock.add(this._armature)
                    },
                    visible: !1
                },
                _animationName: "",
                animationName: {
                    get: function() {
                        return this._animationName
                    },
                    set: function(t) {
                        this._animationName = t
                    },
                    visible: !1
                },
                _defaultArmatureIndex: {
                    default: 0,
                    notify: function() {
                        var t = "";
                        if (this.dragonAsset) {
                            var e = void 0;
                            if (this.dragonAsset && (e = this.dragonAsset.getArmatureEnum()), !e) return cc.errorID(7400, this.name);
                            t = e[this._defaultArmatureIndex]
                        }
                        void 0 !== t ? this.armatureName = t : cc.errorID(7401, this.name)
                    },
                    type: l,
                    visible: !0,
                    editorOnly: !0,
                    animatable: !1,
                    displayName: "Armature",
                    tooltip: !1
                },
                _animationIndex: {
                    default: 0,
                    notify: function() {
                        if (0 !== this._animationIndex) {
                            var t = void 0;
                            if (this.dragonAsset && (t = this.dragonAsset.getAnimsEnum(this.armatureName)), t) {
                                var e = t[this._animationIndex];
                                void 0 !== e ? this.playAnimation(e, this.playTimes) : cc.errorID(7402, this.name)
                            }
                        } else this.animationName = ""
                    },
                    type: h,
                    visible: !0,
                    editorOnly: !0,
                    displayName: "Animation",
                    tooltip: !1
                },
                _preCacheMode: -1,
                _cacheMode: c.REALTIME,
                _defaultCacheMode: {
                    default: 0,
                    type: c,
                    notify: function() {
                        this.setAnimationCacheMode(this._defaultCacheMode)
                    },
                    editorOnly: !0,
                    visible: !0,
                    animatable: !1,
                    displayName: "Animation Cache Mode",
                    tooltip: !1
                },
                timeScale: {
                    default: 1,
                    notify: function() {
                        this._armature && !this.isAnimationCached() && (this._armature.animation.timeScale = this.timeScale)
                    },
                    tooltip: !1
                },
                playTimes: {
                    default: -1,
                    tooltip: !1
                },
                premultipliedAlpha: {
                    default: !1,
                    tooltip: !1
                },
                debugBones: {
                    default: !1,
                    notify: function() {
                        this._updateDebugDraw()
                    },
                    tooltip: !1
                },
                enableBatch: {
                    default: !1,
                    notify: function() {
                        this._updateBatch()
                    },
                    tooltip: !1
                },
                _armatureKey: "",
                _accTime: 0,
                _playCount: 0,
                _frameCache: null,
                _curFrame: null,
                _playing: !1,
                _armatureCache: null
            },
            ctor: function() {
                this._eventTarget = new s, this._materialCache = {}, this._inited = !1, this._factory = dragonBones.CCFactory.getInstance()
            },
            onLoad: function() {
                for (var t = this.node.children, e = 0, i = t.length; e < i; e++) {
                    var n = t[e];
                    0 === (n._name && n._name.search("CHILD_ARMATURE-")) && n.destroy()
                }
            },
            _updateBatch: function() {
                var t = this.getMaterial(0);
                t && t.define("CC_USE_MODEL", !this.enableBatch);
                var e = this._materialCache;
                for (var i in e) {
                    var n = e[i];
                    n && n.define("CC_USE_MODEL", !this.enableBatch)
                }
            },
            setMaterial: function(t, e) {
                this._super(t, e), this._materialCache = {}
            },
            __preload: function() {
                this._resetAssembler(), this._init()
            },
            _init: function() {
                if (!this._inited) {
                    this._inited = !0, this._parseDragonAtlasAsset(), this._refresh(), this._activateMaterial();
                    for (var t = this.node.children, e = 0, i = t.length; e < i; e++) {
                        var n = t[e];
                        n && "DEBUG_DRAW_NODE" === n._name && n.destroy()
                    }
                    this._updateDebugDraw()
                }
            },
            getArmatureKey: function() {
                return this._armatureKey
            },
            setAnimationCacheMode: function(t) {
                this._preCacheMode !== t && (this._cacheMode = t, this._buildArmature())
            },
            isAnimationCached: function() {
                return this._cacheMode !== c.REALTIME
            },
            onEnable: function() {
                this._super(), this._armature && !this.isAnimationCached() && this._factory._dragonBones.clock.add(this._armature), this._activateMaterial()
            },
            onDisable: function() {
                this._super(), this._armature && !this.isAnimationCached() && this._factory._dragonBones.clock.remove(this._armature)
            },
            _emitCacheCompleteEvent: function() {
                this._eventTarget.emit(dragonBones.EventObject.LOOP_COMPLETE), this._eventTarget.emit(dragonBones.EventObject.COMPLETE)
            },
            update: function(t) {
                if (this.isAnimationCached() && this._frameCache) {
                    var e = this._frameCache;
                    if (e.isInited()) {
                        var i = e.frames;
                        if (this._playing) {
                            var n = a.FrameTime;
                            0 == this._accTime && 0 == this._playCount && this._eventTarget.emit(dragonBones.EventObject.START);
                            var r = dragonBones.timeScale;
                            this._accTime += t * this.timeScale * r;
                            var s = Math.floor(this._accTime / n);
                            if (e.isCompleted || e.updateToFrame(s), e.isCompleted && s >= i.length) {
                                if (this._playCount++, this.playTimes > 0 && this._playCount >= this.playTimes) return this._curFrame = i[i.length - 1], this._accTime = 0, this._playing = !1, this._playCount = 0, void this._emitCacheCompleteEvent();
                                this._accTime = 0, s = 0, this._emitCacheCompleteEvent()
                            }
                            this._curFrame = i[s]
                        } else e.isInvalid() && (e.updateToFrame(), this._curFrame = i[i.length - 1])
                    }
                }
            },
            onDestroy: function() {
                this._super(), this._inited = !1, this._cacheMode === c.PRIVATE_CACHE ? (this._armatureCache.dispose(), this._armatureCache = null, this._armature = null) : this._cacheMode === c.SHARED_CACHE ? (this._armatureCache = null, this._armature = null) : this._armature && (this._armature.dispose(), this._armature = null)
            },
            _updateDebugDraw: function() {
                if (this.debugBones) {
                    if (!this._debugDraw) {
                        var t = new cc.PrivateNode;
                        t.name = "DEBUG_DRAW_NODE";
                        var e = t.addComponent(o);
                        e.lineWidth = 1, e.strokeColor = cc.color(255, 0, 0, 255), this._debugDraw = e
                    }
                    this._debugDraw.node.parent = this.node
                } else this._debugDraw && (this._debugDraw.node.parent = null)
            },
            _activateMaterial: function() {
                var t = this.dragonAtlasAsset && this.dragonAtlasAsset.texture;
                if (t) {
                    if (!t.loaded) return this.disableRender(), void t.once("load", this._activateMaterial, this);
                    var e = this.sharedMaterials[0];
                    (e = e ? r.getInstantiatedMaterial(e, this) : r.getInstantiatedBuiltinMaterial("2d-sprite", this)).define("CC_USE_MODEL", !0), e.define("USE_TEXTURE", !0), e.setProperty("texture", t), this.setMaterial(0, e), this._prepareToRender()
                } else this.disableRender()
            },
            _prepareToRender: function() {
                this.node && this.node._renderComponent == this && this.markForRender(!0)
            },
            _buildArmature: function() {
                if (this.dragonAsset && this.dragonAtlasAsset && this.armatureName) {
                    this._armature && (this._preCacheMode === c.PRIVATE_CACHE ? this._armatureCache.dispose() : this._preCacheMode === c.REALTIME && this._armature.dispose(), this._armatureCache = null, this._armature = null, this._displayProxy = null, this._frameCache = null, this._curFrame = null, this._playing = !1, this._preCacheMode = null), this._cacheMode === c.SHARED_CACHE ? this._armatureCache = a.sharedCache : this._cacheMode === c.PRIVATE_CACHE && (this._armatureCache = new a);
                    var t = this.dragonAtlasAsset._uuid;
                    if (this._armatureKey = this.dragonAsset.init(this._factory, t), this.isAnimationCached() && (this._armature = this._armatureCache.getArmatureCache(this.armatureName, this._armatureKey, t), this._armature || (this._cacheMode = c.REALTIME)), this._preCacheMode = this._cacheMode, this._cacheMode === c.REALTIME) {
                        if (this._displayProxy = this._factory.buildArmatureDisplay(this.armatureName, this._armatureKey, "", t), !this._displayProxy) return;
                        this._displayProxy._ccNode = this.node, this._displayProxy.setEventTarget(this._eventTarget), this._armature = this._displayProxy._armature, this._armature.animation.timeScale = this.timeScale
                    }
                    this._cacheMode !== c.REALTIME && this.debugBones && cc.warn("Debug bones is invalid in cached mode"), this._updateBatch(), this.animationName && this.playAnimation(this.animationName, this.playTimes)
                }
            },
            _parseDragonAtlasAsset: function() {
                this.dragonAtlasAsset && this.dragonAtlasAsset.init(this._factory)
            },
            _refresh: function() {
                this._buildArmature()
            },
            _updateCacheModeEnum: !1,
            _updateAnimEnum: !1,
            _updateArmatureEnum: !1,
            playAnimation: function(t, e) {
                if (this.playTimes = void 0 === e ? -1 : e, this.animationName = t, this.isAnimationCached()) {
                    var i = this._armatureCache.getAnimationCache(this._armatureKey, t);
                    i || (i = this._armatureCache.initAnimationCache(this._armatureKey, t)), i && (this._accTime = 0, this._playCount = 0, this._frameCache = i, this._frameCache.updateToFrame(0), this._playing = !0, this._curFrame = this._frameCache.frames[0])
                } else if (this._armature) return this._armature.animation.play(t, this.playTimes)
            },
            updateAnimationCache: function(t) {
                this.isAnimationCached() && this._armatureCache.updateAnimationCache(this._armatureKey, t)
            },
            invalidAnimationCache: function() {
                this.isAnimationCached() && this._armatureCache.invalidAnimationCache(this._armatureKey)
            },
            getArmatureNames: function() {
                var t = this._factory.getDragonBonesData(this._armatureKey);
                return t && t.armatureNames || []
            },
            getAnimationNames: function(t) {
                var e = [],
                    i = this._factory.getDragonBonesData(this._armatureKey);
                if (i) {
                    var n = i.getArmature(t);
                    if (n)
                        for (var r in n.animations) n.animations.hasOwnProperty(r) && e.push(r)
                }
                return e
            },
            on: function(t, e, i) {
                this.addEventListener(t, e, i)
            },
            off: function(t, e, i) {
                this.removeEventListener(t, e, i)
            },
            once: function(t, e, i) {
                this._eventTarget.once(t, e, i)
            },
            addEventListener: function(t, e, i) {
                this._eventTarget.on(t, e, i)
            },
            removeEventListener: function(t, e, i) {
                this._eventTarget.off(t, e, i)
            },
            buildArmature: function(t, e) {
                return this._factory.createArmatureNode(this, t, e)
            },
            armature: function() {
                return this._armature
            }
        });
        e.exports = dragonBones.ArmatureDisplay = u
    }), {
        "../../cocos2d/core/CCNode": 52,
        "../../cocos2d/core/assets/material/CCMaterial": 75,
        "../../cocos2d/core/components/CCRenderComponent": 106,
        "../../cocos2d/core/event/event-target": 131,
        "../../cocos2d/core/graphics/graphics": 140,
        "./ArmatureCache": 401
    }],
    403: [(function(t, e, i) {
        "use strict";
        var n = t("../../cocos2d/core/event/event-target");
        dragonBones.CCArmatureDisplay = cc.Class({
            name: "dragonBones.CCArmatureDisplay",
            properties: {
                node: {
                    get: function() {
                        return this
                    }
                }
            },
            ctor: function() {
                this._eventTarget = new n
            },
            setEventTarget: function(t) {
                this._eventTarget = t
            },
            getRootDisplay: function() {
                var t, e = this._armature._parent;
                if (!e) return this;
                for (; e;) t = e, e = e._armature._parent;
                return t._armature.getDisplay()
            },
            convertToRootSpace: function(t) {
                var e = this._armature._parent;
                if (!e) return t;
                e.updateWorldMatrix();
                var i = e._worldMatrix.m,
                    n = cc.v2(0, 0);
                return n.x = t.x * i[0] + t.y * i[4] + i[12], n.y = t.x * i[1] + t.y * i[5] + i[13], n
            },
            convertToWorldSpace: function(t) {
                var e = this.convertToRootSpace(t);
                return this.getRootNode().convertToWorldSpace(e)
            },
            getRootNode: function() {
                var t = this.getRootDisplay();
                return t && t._ccNode
            },
            dbInit: function(t) {
                this._armature = t
            },
            dbClear: function() {
                this._armature = null
            },
            dbUpdate: function() {},
            advanceTimeBySelf: function(t) {
                this.shouldAdvanced = !!t
            },
            hasDBEventListener: function(t) {
                return this._eventTarget.hasEventListener(t)
            },
            addDBEventListener: function(t, e, i) {
                this._eventTarget.on(t, e, i)
            },
            removeDBEventListener: function(t, e, i) {
                this._eventTarget.off(t, e, i)
            },
            dispatchDBEvent: function(t, e) {
                this._eventTarget.emit(t, e)
            }
        })
    }), {
        "../../cocos2d/core/event/event-target": 131
    }],
    404: [(function(t, e, i) {
        "use strict";
        var n = dragonBones.BaseObject,
            r = dragonBones.BaseFactory,
            s = dragonBones.CCFactory = cc.Class({
                name: "dragonBones.CCFactory",
                extends: r,
                statics: {
                    _factory: null,
                    getInstance: function() {
                        return s._factory || (s._factory = new s), s._factory
                    }
                },
                ctor: function() {
                    var t = new dragonBones.CCArmatureDisplay;
                    this._dragonBones = new dragonBones.DragonBones(t), cc.director._scheduler && (cc.game.on(cc.game.EVENT_RESTART, this.initUpdate, this), this.initUpdate())
                },
                initUpdate: function(t) {
                    cc.director._scheduler.enableForTarget(this), cc.director._scheduler.scheduleUpdate(this, cc.Scheduler.PRIORITY_SYSTEM, !1)
                },
                update: function(t) {
                    this._dragonBones.advanceTime(t)
                },
                getDragonBonesDataByRawData: function(t) {
                    return (t instanceof ArrayBuffer ? r._binaryParser : this._dataParser).parseDragonBonesData(t, 1)
                },
                buildArmatureDisplay: function(t, e, i, n) {
                    var r = this.buildArmature(t, e, i, n);
                    return r && r._display
                },
                createArmatureNode: function(t, e, i) {
                    var n = (i = i || new cc.Node).getComponent(dragonBones.ArmatureDisplay);
                    return n || (n = i.addComponent(dragonBones.ArmatureDisplay)), i.name = e, n._armatureName = e, n._N$dragonAsset = t.dragonAsset, n._N$dragonAtlasAsset = t.dragonAtlasAsset, n._init(), n
                },
                _buildTextureAtlasData: function(t, e) {
                    return t ? t.renderTexture = e : t = n.borrowObject(dragonBones.CCTextureAtlasData), t
                },
                _sortSlots: function() {
                    for (var t = this._slots, e = [], i = 0, n = t.length; i < n; i++) {
                        for (var r = t[i], s = r._zOrder, o = !1, a = e.length - 1; a >= 0; a--)
                            if (s >= e[a]._zOrder) {
                                e.splice(a + 1, 0, r), o = !0;
                                break
                            }
                        o || e.splice(0, 0, r)
                    }
                    this._slots = e
                },
                _buildArmature: function(t) {
                    var e = n.borrowObject(dragonBones.Armature);
                    e._skinData = t.skin, e._animation = n.borrowObject(dragonBones.Animation), e._animation._armature = e, e._animation.animations = t.armature.animations, e._isChildArmature = !1;
                    var i = new dragonBones.CCArmatureDisplay;
                    return e.init(t.armature, i, i, this._dragonBones), e
                },
                _buildSlot: function(t, e, i) {
                    var r = n.borrowObject(dragonBones.CCSlot),
                        s = r;
                    return r.init(e, i, s, s), r
                },
                getDragonBonesDataByUUID: function(t) {
                    for (var e in this._dragonBonesDataMap)
                        if (-1 != e.indexOf(t)) return this._dragonBonesDataMap[e];
                    return null
                },
                removeDragonBonesDataByUUID: function(t, e) {
                    for (var i in void 0 === e && (e = !0), this._dragonBonesDataMap) - 1 !== i.indexOf(t) && (e && this._dragonBones.bufferObject(this._dragonBonesDataMap[i]), delete this._dragonBonesDataMap[i])
                }
            })
    }), {}],
    405: [(function(t, e, i) {
        "use strict";
        var n = t("../../cocos2d/core/vmath"),
            r = dragonBones.BinaryOffset,
            s = dragonBones.BoneType;
        dragonBones.CCSlot = cc.Class({
            name: "dragonBones.CCSlot",
            extends: dragonBones.Slot,
            ctor: function() {
                this._localVertices = [], this._indices = [], this._matrix = n.mat4.create(), this._worldMatrix = n.mat4.create(), this._worldMatrixDirty = !0, this._visible = !1, this._color = cc.color()
            },
            _onClear: function() {
                this._super(), this._localVertices.length = 0, this._indices.length = 0, n.mat4.identity(this._matrix), n.mat4.identity(this._worldMatrix), this._worldMatrixDirty = !0, this._color = cc.color(), this._visible = !1
            },
            statics: {
                toString: function() {
                    return "[class dragonBones.CCSlot]"
                }
            },
            _onUpdateDisplay: function() {},
            _initDisplay: function(t) {},
            _addDisplay: function() {
                this._visible = !0
            },
            _replaceDisplay: function(t) {},
            _removeDisplay: function() {
                this._visible = !1
            },
            _disposeDisplay: function(t) {},
            _updateVisible: function() {
                this._visible = this.parent._visible
            },
            _updateZOrder: function() {},
            _updateBlendMode: function() {
                if (this._childArmature)
                    for (var t = this._childArmature.getSlots(), e = 0, i = t.length; e < i; e++) {
                        var n = t[e];
                        n._blendMode = this._blendMode, n._updateBlendMode()
                    }
            },
            _updateColor: function() {
                var t = this._color;
                t.r = 255 * this._colorTransform.redMultiplier, t.g = 255 * this._colorTransform.greenMultiplier, t.b = 255 * this._colorTransform.blueMultiplier, t.a = 255 * this._colorTransform.alphaMultiplier
            },
            getTexture: function() {
                return this._textureData && this._textureData.spriteFrame && this._textureData.spriteFrame.getTexture()
            },
            _updateFrame: function() {
                this._indices.length = 0;
                var t = this._indices,
                    e = this._localVertices,
                    i = 0,
                    n = 0,
                    s = this._textureData;
                if (this._display && !(this._displayIndex < 0) && s && s.spriteFrame) {
                    var o = s.spriteFrame.getTexture(),
                        a = o.width,
                        l = o.height,
                        h = s.region,
                        c = null !== this._deformVertices && this._display === this._meshDisplay ? this._deformVertices.verticesData : null;
                    if (c) {
                        var u = c.data,
                            _ = u.intArray,
                            f = u.floatArray,
                            d = _[c.offset + r.MeshVertexCount],
                            p = _[c.offset + r.MeshTriangleCount],
                            m = _[c.offset + r.MeshFloatOffset];
                        m < 0 && (m += 65536);
                        for (var y = m + 2 * d, v = this._armature._armatureData.scale, g = 0, x = 2 * d; g < x; g += 2) e[n++] = f[m + g] * v, e[n++] = -f[m + g + 1] * v, c.rotated ? (e[n++] = (h.x + (1 - f[y + g]) * h.width) / a, e[n++] = (h.y + f[y + g + 1] * h.height) / l) : (e[n++] = (h.x + f[y + g] * h.width) / a, e[n++] = (h.y + f[y + g + 1] * h.height) / l);
                        for (var b = 0; b < 3 * p; ++b) t[i++] = _[c.offset + r.MeshVertexIndices + b];
                        e.length = n, t.length = i, !!c.weight && this._identityTransform()
                    } else {
                        var A = h.x / a,
                            C = (h.y + h.height) / l,
                            T = (h.x + h.width) / a,
                            S = h.y / l;
                        e[n++] = 0, e[n++] = 0, e[n++] = A, e[n++] = C, e[n++] = h.width, e[n++] = 0, e[n++] = T, e[n++] = C, e[n++] = 0, e[n++] = h.height, e[n++] = A, e[n++] = S, e[n++] = h.width, e[n++] = h.height, e[n++] = T, e[n++] = S, t[0] = 0, t[1] = 1, t[2] = 2, t[3] = 1, t[4] = 3, t[5] = 2, e.length = n, t.length = 6
                    }
                    this._visibleDirty = !0, this._blendModeDirty = !0, this._colorDirty = !0
                }
            },
            _updateMesh: function() {
                var t = this._armature._armatureData.scale,
                    e = this._deformVertices.vertices,
                    i = this._deformVertices.bones,
                    n = this._deformVertices.verticesData,
                    o = n.weight,
                    a = e.length > 0 && n.inheritDeform,
                    l = this._localVertices;
                if (o) {
                    var h = n.data,
                        c = h.intArray,
                        u = h.floatArray,
                        _ = c[n.offset + r.MeshVertexCount],
                        f = c[o.offset + r.WeigthFloatOffset];
                    f < 0 && (f += 65536);
                    for (var d = 0, p = o.offset + r.WeigthBoneIndices + i.length, m = f, y = 0, v = 0; d < _; d++, v += 4) {
                        for (var g = c[p++], x = 0, b = 0, A = 0; A < g; ++A) {
                            var C = i[c[p++]];
                            if (null !== C) {
                                var T = C.globalTransformMatrix,
                                    S = u[m++],
                                    w = u[m++] * t,
                                    E = u[m++] * t;
                                a && (w += e[y++], E += e[y++]), x += (T.a * w + T.c * E + T.tx) * S, b += (T.b * w + T.d * E + T.ty) * S
                            }
                        }
                        l[v] = x, l[v + 1] = -b
                    }
                } else if (a) {
                    var M = this._parent._boneData.type !== s.Bone,
                        D = n.data,
                        B = D.intArray,
                        I = D.floatArray,
                        P = B[n.offset + r.MeshVertexCount],
                        R = B[n.offset + r.MeshFloatOffset];
                    R < 0 && (R += 65536);
                    for (var O = 0, L = P, F = 0; O < L; O++, F += 4) {
                        var N = I[R + 2 * O] * t + e[2 * O],
                            V = I[R + 2 * O + 1] * t + e[2 * O + 1];
                        if (M) {
                            var k = this._parent._getGlobalTransformMatrix(N, V);
                            l[F] = k.a * N + k.c * V + k.tx, l[F + 1] = -k.b * N + k.d * V + k.ty
                        } else l[F] = N, l[F + 1] = -V
                    }
                }
                o && this._identityTransform()
            },
            _identityTransform: function() {
                var t = this._matrix.m;
                t[0] = 1, t[1] = 0, t[4] = -0, t[5] = -1, t[12] = 0, t[13] = 0, this._worldMatrixDirty = !0
            },
            _updateTransform: function() {
                var t = this._matrix.m;
                t[0] = this.globalTransformMatrix.a, t[1] = this.globalTransformMatrix.b, t[4] = -this.globalTransformMatrix.c, t[5] = -this.globalTransformMatrix.d, this._childArmature ? (t[12] = this.globalTransformMatrix.tx, t[13] = this.globalTransformMatrix.ty) : (t[12] = this.globalTransformMatrix.tx - (this.globalTransformMatrix.a * this._pivotX - this.globalTransformMatrix.c * this._pivotY), t[13] = this.globalTransformMatrix.ty - (this.globalTransformMatrix.b * this._pivotX - this.globalTransformMatrix.d * this._pivotY)), this._worldMatrixDirty = !0
            },
            updateWorldMatrix: function() {
                if (this._armature) {
                    var t = this._armature._parent;
                    if (t && t.updateWorldMatrix(), this._worldMatrixDirty) {
                        this.calculWorldMatrix();
                        var e = this.childArmature;
                        if (!e) return;
                        for (var i = e.getSlots(), n = 0, r = i.length; n < r; n++) {
                            var s = i[n];
                            s && (s._worldMatrixDirty = !0)
                        }
                    }
                }
            },
            _mulMat: function(t, e, i) {
                var n = e.m,
                    r = i.m,
                    s = t.m,
                    o = n[0],
                    a = n[1],
                    l = n[4],
                    h = n[5],
                    c = n[12],
                    u = n[13],
                    _ = r[0],
                    f = r[1],
                    d = r[4],
                    p = r[5],
                    m = r[12],
                    y = r[13];
                0 !== a || 0 !== l ? (s[0] = _ * o + f * l, s[1] = _ * a + f * h, s[4] = d * o + p * l, s[5] = d * a + p * h, s[12] = o * m + l * y + c, s[13] = a * m + h * y + u) : (s[0] = _ * o, s[1] = f * h, s[4] = d * o, s[5] = p * h, s[12] = o * m + c, s[13] = h * y + u)
            },
            calculWorldMatrix: function() {
                var t = this._armature._parent;
                t ? this._mulMat(this._worldMatrix, t._worldMatrix, this._matrix) : n.mat4.copy(this._worldMatrix, this._matrix), this._worldMatrixDirty = !1
            }
        })
    }), {
        "../../cocos2d/core/vmath": 326
    }],
    406: [(function(t, e, i) {
        "use strict";
        dragonBones.CCTextureAtlasData = cc.Class({
            extends: dragonBones.TextureAtlasData,
            name: "dragonBones.CCTextureAtlasData",
            properties: {
                _renderTexture: {
                    default: null,
                    serializable: !1
                },
                renderTexture: {
                    get: function() {
                        return this._renderTexture
                    },
                    set: function(t) {
                        if (this._renderTexture = t, t)
                            for (var e in this.textures) {
                                var i = this.textures[e];
                                if (!i.spriteFrame) {
                                    var n = null;
                                    n = i.rotated ? cc.rect(i.region.x, i.region.y, i.region.height, i.region.width) : cc.rect(i.region.x, i.region.y, i.region.width, i.region.height);
                                    var r = cc.v2(0, 0),
                                        s = cc.size(n.width, n.height);
                                    i.spriteFrame = new cc.SpriteFrame, i.spriteFrame.setTexture(t, n, !1, r, s)
                                }
                            } else
                                for (var o in this.textures) {
                                    this.textures[o].spriteFrame = null
                                }
                    }
                }
            },
            statics: {
                toString: function() {
                    return "[class dragonBones.CCTextureAtlasData]"
                }
            },
            _onClear: function() {
                dragonBones.TextureAtlasData.prototype._onClear.call(this), this.renderTexture = null
            },
            createTexture: function() {
                return dragonBones.BaseObject.borrowObject(dragonBones.CCTextureData)
            }
        }), dragonBones.CCTextureData = cc.Class({
            extends: dragonBones.TextureData,
            name: "dragonBones.CCTextureData",
            properties: {
                spriteFrame: {
                    default: null,
                    serializable: !1
                }
            },
            statics: {
                toString: function() {
                    return "[class dragonBones.CCTextureData]"
                }
            },
            _onClear: function() {
                dragonBones.TextureData.prototype._onClear.call(this), this.spriteFrame = null
            }
        })
    }), {}],
    407: [(function(t, e, i) {
        "use strict";
        var n = t("./ArmatureCache").sharedCache,
            r = cc.Class({
                name: "dragonBones.DragonBonesAsset",
                extends: cc.Asset,
                ctor: function() {
                    this.reset()
                },
                properties: {
                    _dragonBonesJson: "",
                    dragonBonesJson: {
                        get: function() {
                            return this._dragonBonesJson
                        },
                        set: function(t) {
                            this._dragonBonesJson = t, this._dragonBonesJsonData = JSON.parse(t), this.reset()
                        }
                    },
                    _nativeAsset: {
                        get: function() {
                            return this._buffer
                        },
                        set: function(t) {
                            this._buffer = t.buffer || t, this.reset()
                        },
                        override: !0
                    }
                },
                statics: {
                    preventDeferredLoadDependents: !0
                },
                createNode: !1,
                reset: function() {
                    this._clear()
                },
                init: function(t, e) {
                    this._factory = t, !this._dragonBonesJsonData && this.dragonBonesJson && (this._dragonBonesJsonData = JSON.parse(this.dragonBonesJson));
                    var i = null;
                    if (i = this._dragonBonesJsonData ? this._dragonBonesJsonData : this._nativeAsset, !this._uuid) {
                        var n = this._factory.getDragonBonesDataByRawData(i);
                        n ? this._uuid = n.name : cc.warn("dragonbones name is empty")
                    }
                    var r = this._uuid + "#" + e;
                    return this._factory.getDragonBonesData(r) ? r : (this._factory.parseDragonBonesData(i, r), r)
                },
                getArmatureEnum: !1,
                getAnimsEnum: !1,
                _clear: function() {
                    this._factory && (n.resetArmature(this._uuid), this._factory.removeDragonBonesDataByUUID(this._uuid, !0))
                },
                destroy: function() {
                    this._clear(), this._super()
                }
            });
        dragonBones.DragonBonesAsset = e.exports = r
    }), {
        "./ArmatureCache": 401
    }],
    408: [(function(t, e, i) {
        "use strict";
        var n = t("./ArmatureCache").sharedCache,
            r = cc.Class({
                name: "dragonBones.DragonBonesAtlasAsset",
                extends: cc.Asset,
                ctor: function() {
                    this._clear()
                },
                properties: {
                    _atlasJson: "",
                    atlasJson: {
                        get: function() {
                            return this._atlasJson
                        },
                        set: function(t) {
                            this._atlasJson = t, this._atlasJsonData = JSON.parse(this.atlasJson), this._clear()
                        }
                    },
                    _texture: {
                        default: null,
                        type: cc.Texture2D,
                        formerlySerializedAs: "texture"
                    },
                    texture: {
                        get: function() {
                            return this._texture
                        },
                        set: function(t) {
                            this._texture = t, this._clear()
                        }
                    },
                    _textureAtlasData: null
                },
                statics: {
                    preventDeferredLoadDependents: !0
                },
                createNode: !1,
                init: function(t) {
                    this._factory = t, this._atlasJsonData || (this._atlasJsonData = JSON.parse(this.atlasJson));
                    var e = this._atlasJsonData;
                    this._uuid = this._uuid || e.name, this._textureAtlasData ? t.addTextureAtlasData(this._textureAtlasData, this._uuid) : this._textureAtlasData = t.parseTextureAtlasData(e, this.texture, this._uuid)
                },
                _clear: function() {
                    this._factory && (n.resetArmature(this._uuid), this._factory.removeTextureAtlasData(this._uuid, !0), this._factory.removeDragonBonesDataByUUID(this._uuid, !0)), this._textureAtlasData = null
                },
                destroy: function() {
                    this._clear(), this._super()
                }
            });
        dragonBones.DragonBonesAtlasAsset = e.exports = r
    }), {
        "./ArmatureCache": 401
    }],
    409: [(function(t, e, i) {
        "use strict";
        var n = "undefined" == typeof window ? global : window;
        n.dragonBones = t("./lib/dragonBones"), void 0 !== n.dragonBones && (dragonBones._timeScale = 1, Object.defineProperty(dragonBones, "timeScale", {
            get: function() {
                return this._timeScale
            },
            set: function(t) {
                this._timeScale = t, this.CCFactory.getInstance()._dragonBones.clock.timeScale = t
            },
            configurable: !0
        }), dragonBones.DisplayType = {
            Image: 0,
            Armature: 1,
            Mesh: 2
        }, dragonBones.ArmatureType = {
            Armature: 0,
            MovieClip: 1,
            Stage: 2
        }, dragonBones.ExtensionType = {
            FFD: 0,
            AdjustColor: 10,
            BevelFilter: 11,
            BlurFilter: 12,
            DropShadowFilter: 13,
            GlowFilter: 14,
            GradientBevelFilter: 15,
            GradientGlowFilter: 16
        }, dragonBones.EventType = {
            Frame: 0,
            Sound: 1
        }, dragonBones.ActionType = {
            Play: 0,
            Stop: 1,
            GotoAndPlay: 2,
            GotoAndStop: 3,
            FadeIn: 4,
            FadeOut: 5
        }, dragonBones.AnimationFadeOutMode = {
            None: 0,
            SameLayer: 1,
            SameGroup: 2,
            SameLayerAndGroup: 3,
            All: 4
        }, dragonBones.BinaryOffset = {
            WeigthBoneCount: 0,
            WeigthFloatOffset: 1,
            WeigthBoneIndices: 2,
            MeshVertexCount: 0,
            MeshTriangleCount: 1,
            MeshFloatOffset: 2,
            MeshWeightOffset: 3,
            MeshVertexIndices: 4,
            TimelineScale: 0,
            TimelineOffset: 1,
            TimelineKeyFrameCount: 2,
            TimelineFrameValueCount: 3,
            TimelineFrameValueOffset: 4,
            TimelineFrameOffset: 5,
            FramePosition: 0,
            FrameTweenType: 1,
            FrameTweenEasingOrCurveSampleCount: 2,
            FrameCurveSamples: 3,
            DeformMeshOffset: 0,
            DeformCount: 1,
            DeformValueCount: 2,
            DeformValueOffset: 3,
            DeformFloatOffset: 4
        }, dragonBones.BoneType = {
            Bone: 0,
            Surface: 1
        }, t("./CCFactory"), t("./CCSlot"), t("./CCTextureData"), t("./CCArmatureDisplay"), t("./ArmatureCache"), t("./DragonBonesAsset"), t("./DragonBonesAtlasAsset"), t("./ArmatureDisplay"), t("./webgl-assembler"))
    }), {
        "./ArmatureCache": 401,
        "./ArmatureDisplay": 402,
        "./CCArmatureDisplay": 403,
        "./CCFactory": 404,
        "./CCSlot": 405,
        "./CCTextureData": 406,
        "./DragonBonesAsset": 407,
        "./DragonBonesAtlasAsset": 408,
        "./lib/dragonBones": 410,
        "./webgl-assembler": 411
    }],
    410: [(function(t, e, i) {
        "use strict";
        var n = (function() {
            var t = Object.setPrototypeOf || {
                __proto__: []
            }
            instanceof Array && function(t, e) {
                t.__proto__ = e
            } || function(t, e) {
                for (var i in e) e.hasOwnProperty(i) && (t[i] = e[i])
            }
        })();
        r || (r = {}), (function(t) {
            var e = (function() {
                function e(i) {
                    this._clock = new t.WorldClock, this._events = [], this._objects = [], this._eventManager = null, this._eventManager = i, console.info("DragonBones: " + e.VERSION + "\nWebsite: http://dragonbones.com/\nSource and Demo: https://github.com/DragonBones/")
                }
                return e.prototype.advanceTime = function(e) {
                    if (this._objects.length > 0) {
                        for (var i = 0, n = this._objects; i < n.length; i++) {
                            n[i].returnToPool()
                        }
                        this._objects.length = 0
                    }
                    if (this._clock.advanceTime(e), this._events.length > 0) {
                        for (var r = 0; r < this._events.length; ++r) {
                            var s = this._events[r],
                                o = s.armature;
                            null !== o._armatureData && (o.eventDispatcher.dispatchDBEvent(s.type, s), s.type === t.EventObject.SOUND_EVENT && this._eventManager.dispatchDBEvent(s.type, s)), this.bufferObject(s)
                        }
                        this._events.length = 0
                    }
                }, e.prototype.bufferEvent = function(t) {
                    this._events.indexOf(t) < 0 && this._events.push(t)
                }, e.prototype.bufferObject = function(t) {
                    this._objects.indexOf(t) < 0 && this._objects.push(t)
                }, Object.defineProperty(e.prototype, "clock", {
                    get: function() {
                        return this._clock
                    },
                    enumerable: !0,
                    configurable: !0
                }), Object.defineProperty(e.prototype, "eventManager", {
                    get: function() {
                        return this._eventManager
                    },
                    enumerable: !0,
                    configurable: !0
                }), e.VERSION = "5.6.300", e.yDown = !1, e.debug = !1, e.debugDraw = !1, e.webAssembly = !1, e
            })();
            t.DragonBones = e
        })(r || (r = {})), console.warn || (console.warn = function() {}), console.assert || (console.assert = function() {}), Date.now || (Date.now = function() {
            return (new Date).getTime()
        });
        var r;
        n = function(t, e) {
            function i() {
                this.constructor = t
            }
            for (var n in e) e.hasOwnProperty(n) && (t[n] = e[n]);
            i.prototype = e.prototype, t.prototype = new i
        };
        (function(t) {
            var e = (function() {
                function t() {
                    this.hashCode = t._hashCode++, this._isInPool = !1
                }
                return t._returnObject = function(e) {
                    var i = String(e.constructor),
                        n = i in t._maxCountMap ? t._maxCountMap[i] : t._defaultMaxCount,
                        r = t._poolsMap[i] = t._poolsMap[i] || [];
                    r.length < n && (e._isInPool ? console.warn("The object is already in the pool.") : (e._isInPool = !0, r.push(e)))
                }, t.toString = function() {
                    throw new Error
                }, t.setMaxCount = function(e, i) {
                    if ((i < 0 || i != i) && (i = 0), null !== e) null !== (r = (n = String(e)) in t._poolsMap ? t._poolsMap[n] : null) && r.length > i && (r.length = i), t._maxCountMap[n] = i;
                    else
                        for (var n in t._defaultMaxCount = i, t._poolsMap) {
                            var r;
                            (r = t._poolsMap[n]).length > i && (r.length = i), n in t._maxCountMap && (t._maxCountMap[n] = i)
                        }
                }, t.clearPool = function(e) {
                    if (void 0 === e && (e = null), null !== e) {
                        var i = String(e);
                        null !== (r = i in t._poolsMap ? t._poolsMap[i] : null) && r.length > 0 && (r.length = 0)
                    } else
                        for (var n in t._poolsMap) {
                            var r;
                            (r = t._poolsMap[n]).length = 0
                        }
                }, t.borrowObject = function(e) {
                    var i = String(e),
                        n = i in t._poolsMap ? t._poolsMap[i] : null;
                    if (null !== n && n.length > 0) {
                        var r = n.pop();
                        return r._isInPool = !1, r
                    }
                    var s = new e;
                    return s._onClear(), s
                }, t.prototype.returnToPool = function() {
                    this._onClear(), t._returnObject(this)
                }, t._hashCode = 0, t._defaultMaxCount = 3e3, t._maxCountMap = {}, t._poolsMap = {}, t
            })();
            t.BaseObject = e
        })(r || (r = {})), (function(t) {
            var e = (function() {
                function t(t, e, i, n, r, s) {
                    void 0 === t && (t = 1), void 0 === e && (e = 0), void 0 === i && (i = 0), void 0 === n && (n = 1), void 0 === r && (r = 0), void 0 === s && (s = 0), this.a = t, this.b = e, this.c = i, this.d = n, this.tx = r, this.ty = s
                }
                return t.prototype.toString = function() {
                    return "[object dragonBones.Matrix] a:" + this.a + " b:" + this.b + " c:" + this.c + " d:" + this.d + " tx:" + this.tx + " ty:" + this.ty
                }, t.prototype.copyFrom = function(t) {
                    return this.a = t.a, this.b = t.b, this.c = t.c, this.d = t.d, this.tx = t.tx, this.ty = t.ty, this
                }, t.prototype.copyFromArray = function(t, e) {
                    return void 0 === e && (e = 0), this.a = t[e], this.b = t[e + 1], this.c = t[e + 2], this.d = t[e + 3], this.tx = t[e + 4], this.ty = t[e + 5], this
                }, t.prototype.identity = function() {
                    return this.a = this.d = 1, this.b = this.c = 0, this.tx = this.ty = 0, this
                }, t.prototype.concat = function(t) {
                    var e = this.a * t.a,
                        i = 0,
                        n = 0,
                        r = this.d * t.d,
                        s = this.tx * t.a + t.tx,
                        o = this.ty * t.d + t.ty;
                    return 0 === this.b && 0 === this.c || (e += this.b * t.c, i += this.b * t.d, n += this.c * t.a, r += this.c * t.b), 0 === t.b && 0 === t.c || (i += this.a * t.b, n += this.d * t.c, s += this.ty * t.c, o += this.tx * t.b), this.a = e, this.b = i, this.c = n, this.d = r, this.tx = s, this.ty = o, this
                }, t.prototype.invert = function() {
                    var t = this.a,
                        e = this.b,
                        i = this.c,
                        n = this.d,
                        r = this.tx,
                        s = this.ty;
                    if (0 === e && 0 === i) return this.b = this.c = 0, 0 === t || 0 === n ? this.a = this.b = this.tx = this.ty = 0 : (t = this.a = 1 / t, n = this.d = 1 / n, this.tx = -t * r, this.ty = -n * s), this;
                    var o = t * n - e * i;
                    if (0 === o) return this.a = this.d = 1, this.b = this.c = 0, this.tx = this.ty = 0, this;
                    o = 1 / o;
                    var a = this.a = n * o;
                    return e = this.b = -e * o, i = this.c = -i * o, n = this.d = t * o, this.tx = -(a * r + i * s), this.ty = -(e * r + n * s), this
                }, t.prototype.transformPoint = function(t, e, i, n) {
                    void 0 === n && (n = !1), i.x = this.a * t + this.c * e, i.y = this.b * t + this.d * e, n || (i.x += this.tx, i.y += this.ty)
                }, t.prototype.transformRectangle = function(t, e) {
                    void 0 === e && (e = !1);
                    var i = this.a,
                        n = this.b,
                        r = this.c,
                        s = this.d,
                        o = e ? 0 : this.tx,
                        a = e ? 0 : this.ty,
                        l = t.x,
                        h = t.y,
                        c = l + t.width,
                        u = h + t.height,
                        _ = i * l + r * h + o,
                        f = n * l + s * h + a,
                        d = i * c + r * h + o,
                        p = n * c + s * h + a,
                        m = i * c + r * u + o,
                        y = n * c + s * u + a,
                        v = i * l + r * u + o,
                        g = n * l + s * u + a,
                        x = 0;
                    _ > d && (x = _, _ = d, d = x), m > v && (x = m, m = v, v = x), t.x = Math.floor(_ < m ? _ : m), t.width = Math.ceil((d > v ? d : v) - t.x), f > p && (x = f, f = p, p = x), y > g && (x = y, y = g, g = x), t.y = Math.floor(f < y ? f : y), t.height = Math.ceil((p > g ? p : g) - t.y)
                }, t
            })();
            t.Matrix = e
        })(r || (r = {})), (function(t) {
            var e = (function() {
                function t(t, e, i, n, r, s) {
                    void 0 === t && (t = 0), void 0 === e && (e = 0), void 0 === i && (i = 0), void 0 === n && (n = 0), void 0 === r && (r = 1), void 0 === s && (s = 1), this.x = t, this.y = e, this.skew = i, this.rotation = n, this.scaleX = r, this.scaleY = s
                }
                return t.normalizeRadian = function(t) {
                    return t = (t + Math.PI) % (2 * Math.PI), t += t > 0 ? -Math.PI : Math.PI
                }, t.prototype.toString = function() {
                    return "[object dragonBones.Transform] x:" + this.x + " y:" + this.y + " skewX:" + 180 * this.skew / Math.PI + " skewY:" + 180 * this.rotation / Math.PI + " scaleX:" + this.scaleX + " scaleY:" + this.scaleY
                }, t.prototype.copyFrom = function(t) {
                    return this.x = t.x, this.y = t.y, this.skew = t.skew, this.rotation = t.rotation, this.scaleX = t.scaleX, this.scaleY = t.scaleY, this
                }, t.prototype.identity = function() {
                    return this.x = this.y = 0, this.skew = this.rotation = 0, this.scaleX = this.scaleY = 1, this
                }, t.prototype.add = function(t) {
                    return this.x += t.x, this.y += t.y, this.skew += t.skew, this.rotation += t.rotation, this.scaleX *= t.scaleX, this.scaleY *= t.scaleY, this
                }, t.prototype.minus = function(t) {
                    return this.x -= t.x, this.y -= t.y, this.skew -= t.skew, this.rotation -= t.rotation, this.scaleX /= t.scaleX, this.scaleY /= t.scaleY, this
                }, t.prototype.fromMatrix = function(e) {
                    var i = this.scaleX,
                        n = this.scaleY,
                        r = t.PI_Q;
                    this.x = e.tx, this.y = e.ty, this.rotation = Math.atan(e.b / e.a);
                    var s = Math.atan(-e.c / e.d);
                    return this.scaleX = this.rotation > -r && this.rotation < r ? e.a / Math.cos(this.rotation) : e.b / Math.sin(this.rotation), this.scaleY = s > -r && s < r ? e.d / Math.cos(s) : -e.c / Math.sin(s), i >= 0 && this.scaleX < 0 && (this.scaleX = -this.scaleX, this.rotation = this.rotation - Math.PI), n >= 0 && this.scaleY < 0 && (this.scaleY = -this.scaleY, s -= Math.PI), this.skew = s - this.rotation, this
                }, t.prototype.toMatrix = function(t) {
                    return 0 === this.rotation ? (t.a = 1, t.b = 0) : (t.a = Math.cos(this.rotation), t.b = Math.sin(this.rotation)), 0 === this.skew ? (t.c = -t.b, t.d = t.a) : (t.c = -Math.sin(this.skew + this.rotation), t.d = Math.cos(this.skew + this.rotation)), 1 !== this.scaleX && (t.a *= this.scaleX, t.b *= this.scaleX), 1 !== this.scaleY && (t.c *= this.scaleY, t.d *= this.scaleY), t.tx = this.x, t.ty = this.y, this
                }, t.PI = Math.PI, t.PI_D = 2 * Math.PI, t.PI_H = Math.PI / 2, t.PI_Q = Math.PI / 4, t.RAD_DEG = 180 / Math.PI, t.DEG_RAD = Math.PI / 180, t
            })();
            t.Transform = e
        })(r || (r = {})), (function(t) {
            var e = (function() {
                function t(t, e, i, n, r, s, o, a) {
                    void 0 === t && (t = 1), void 0 === e && (e = 1), void 0 === i && (i = 1), void 0 === n && (n = 1), void 0 === r && (r = 0), void 0 === s && (s = 0), void 0 === o && (o = 0), void 0 === a && (a = 0), this.alphaMultiplier = t, this.redMultiplier = e, this.greenMultiplier = i, this.blueMultiplier = n, this.alphaOffset = r, this.redOffset = s, this.greenOffset = o, this.blueOffset = a
                }
                return t.prototype.copyFrom = function(t) {
                    this.alphaMultiplier = t.alphaMultiplier, this.redMultiplier = t.redMultiplier, this.greenMultiplier = t.greenMultiplier, this.blueMultiplier = t.blueMultiplier, this.alphaOffset = t.alphaOffset, this.redOffset = t.redOffset, this.greenOffset = t.greenOffset, this.blueOffset = t.blueOffset
                }, t.prototype.identity = function() {
                    this.alphaMultiplier = this.redMultiplier = this.greenMultiplier = this.blueMultiplier = 1, this.alphaOffset = this.redOffset = this.greenOffset = this.blueOffset = 0
                }, t
            })();
            t.ColorTransform = e
        })(r || (r = {})), (function(t) {
            var e = (function() {
                function t(t, e) {
                    void 0 === t && (t = 0), void 0 === e && (e = 0), this.x = t, this.y = e
                }
                return t.prototype.copyFrom = function(t) {
                    this.x = t.x, this.y = t.y
                }, t.prototype.clear = function() {
                    this.x = this.y = 0
                }, t
            })();
            t.Point = e
        })(r || (r = {})), (function(t) {
            var e = (function() {
                function t(t, e, i, n) {
                    void 0 === t && (t = 0), void 0 === e && (e = 0), void 0 === i && (i = 0), void 0 === n && (n = 0), this.x = t, this.y = e, this.width = i, this.height = n
                }
                return t.prototype.copyFrom = function(t) {
                    this.x = t.x, this.y = t.y, this.width = t.width, this.height = t.height
                }, t.prototype.clear = function() {
                    this.x = this.y = 0, this.width = this.height = 0
                }, t
            })();
            t.Rectangle = e
        })(r || (r = {})), (function(t) {
            var e = (function(t) {
                function e() {
                    var e = null !== t && t.apply(this, arguments) || this;
                    return e.ints = [], e.floats = [], e.strings = [], e
                }
                return n(e, t), e.toString = function() {
                    return "[class dragonBones.UserData]"
                }, e.prototype._onClear = function() {
                    this.ints.length = 0, this.floats.length = 0, this.strings.length = 0
                }, e.prototype.addInt = function(t) {
                    this.ints.push(t)
                }, e.prototype.addFloat = function(t) {
                    this.floats.push(t)
                }, e.prototype.addString = function(t) {
                    this.strings.push(t)
                }, e.prototype.getInt = function(t) {
                    return void 0 === t && (t = 0), t >= 0 && t < this.ints.length ? this.ints[t] : 0
                }, e.prototype.getFloat = function(t) {
                    return void 0 === t && (t = 0), t >= 0 && t < this.floats.length ? this.floats[t] : 0
                }, e.prototype.getString = function(t) {
                    return void 0 === t && (t = 0), t >= 0 && t < this.strings.length ? this.strings[t] : ""
                }, e
            })(t.BaseObject);
            t.UserData = e;
            var i = (function(t) {
                function e() {
                    var e = null !== t && t.apply(this, arguments) || this;
                    return e.data = null, e
                }
                return n(e, t), e.toString = function() {
                    return "[class dragonBones.ActionData]"
                }, e.prototype._onClear = function() {
                    null !== this.data && this.data.returnToPool(), this.type = 0, this.name = "", this.bone = null, this.slot = null, this.data = null
                }, e
            })(t.BaseObject);
            t.ActionData = i
        })(r || (r = {})), (function(t) {
            var e = (function(t) {
                function e() {
                    var e = null !== t && t.apply(this, arguments) || this;
                    return e.frameIndices = [], e.cachedFrames = [], e.armatureNames = [], e.armatures = {}, e.userData = null, e
                }
                return n(e, t), e.toString = function() {
                    return "[class dragonBones.DragonBonesData]"
                }, e.prototype._onClear = function() {
                    for (var t in this.armatures) this.armatures[t].returnToPool(), delete this.armatures[t];
                    null !== this.userData && this.userData.returnToPool(), this.autoSearch = !1, this.frameRate = 0, this.version = "", this.name = "", this.stage = null, this.frameIndices.length = 0, this.cachedFrames.length = 0, this.armatureNames.length = 0, this.binary = null, this.intArray = null, this.floatArray = null, this.frameIntArray = null, this.frameFloatArray = null, this.frameArray = null, this.timelineArray = null, this.userData = null
                }, e.prototype.addArmature = function(t) {
                    t.name in this.armatures ? console.warn("Same armature: " + t.name) : (t.parent = this, this.armatures[t.name] = t, this.armatureNames.push(t.name))
                }, e.prototype.getArmature = function(t) {
                    return t in this.armatures ? this.armatures[t] : null
                }, e.prototype.dispose = function() {
                    console.warn("\u5df2\u5e9f\u5f03"), this.returnToPool()
                }, e
            })(t.BaseObject);
            t.DragonBonesData = e
        })(r || (r = {})), (function(t) {
            var e = (function(e) {
                function i() {
                    var i = null !== e && e.apply(this, arguments) || this;
                    return i.aabb = new t.Rectangle, i.animationNames = [], i.sortedBones = [], i.sortedSlots = [], i.defaultActions = [], i.actions = [], i.bones = {}, i.slots = {}, i.constraints = {}, i.skins = {}, i.animations = {}, i.canvas = null, i.userData = null, i
                }
                return n(i, e), i.toString = function() {
                    return "[class dragonBones.ArmatureData]"
                }, i.prototype._onClear = function() {
                    for (var t = 0, e = this.defaultActions; t < e.length; t++) {
                        e[t].returnToPool()
                    }
                    for (var i = 0, n = this.actions; i < n.length; i++) {
                        n[i].returnToPool()
                    }
                    for (var r in this.bones) this.bones[r].returnToPool(), delete this.bones[r];
                    for (var r in this.slots) this.slots[r].returnToPool(), delete this.slots[r];
                    for (var r in this.constraints) this.constraints[r].returnToPool(), delete this.constraints[r];
                    for (var r in this.skins) this.skins[r].returnToPool(), delete this.skins[r];
                    for (var r in this.animations) this.animations[r].returnToPool(), delete this.animations[r];
                    null !== this.canvas && this.canvas.returnToPool(), null !== this.userData && this.userData.returnToPool(), this.type = 0, this.frameRate = 0, this.cacheFrameRate = 0, this.scale = 1, this.name = "", this.aabb.clear(), this.animationNames.length = 0, this.sortedBones.length = 0, this.sortedSlots.length = 0, this.defaultActions.length = 0, this.actions.length = 0, this.defaultSkin = null, this.defaultAnimation = null, this.canvas = null, this.userData = null, this.parent = null
                }, i.prototype.sortBones = function() {
                    var t = this.sortedBones.length;
                    if (!(t <= 0)) {
                        var e = this.sortedBones.concat(),
                            i = 0,
                            n = 0;
                        for (this.sortedBones.length = 0; n < t;) {
                            var r = e[i++];
                            if (i >= t && (i = 0), !(this.sortedBones.indexOf(r) >= 0)) {
                                var s = !1;
                                for (var o in this.constraints) {
                                    var a = this.constraints[o];
                                    if (a.root === r && this.sortedBones.indexOf(a.target) < 0) {
                                        s = !0;
                                        break
                                    }
                                }
                                s || null !== r.parent && this.sortedBones.indexOf(r.parent) < 0 || (this.sortedBones.push(r), n++)
                            }
                        }
                    }
                }, i.prototype.cacheFrames = function(t) {
                    if (!(this.cacheFrameRate > 0))
                        for (var e in this.cacheFrameRate = t, this.animations) this.animations[e].cacheFrames(this.cacheFrameRate)
                }, i.prototype.setCacheFrame = function(t, e) {
                    var i = this.parent.cachedFrames,
                        n = i.length;
                    return i.length += 10, i[n] = t.a, i[n + 1] = t.b, i[n + 2] = t.c, i[n + 3] = t.d, i[n + 4] = t.tx, i[n + 5] = t.ty, i[n + 6] = e.rotation, i[n + 7] = e.skew, i[n + 8] = e.scaleX, i[n + 9] = e.scaleY, n
                }, i.prototype.getCacheFrame = function(t, e, i) {
                    var n = this.parent.cachedFrames;
                    t.a = n[i], t.b = n[i + 1], t.c = n[i + 2], t.d = n[i + 3], t.tx = n[i + 4], t.ty = n[i + 5], e.rotation = n[i + 6], e.skew = n[i + 7], e.scaleX = n[i + 8], e.scaleY = n[i + 9], e.x = t.tx, e.y = t.ty
                }, i.prototype.addBone = function(t) {
                    t.name in this.bones ? console.warn("Same bone: " + t.name) : (this.bones[t.name] = t, this.sortedBones.push(t))
                }, i.prototype.addSlot = function(t) {
                    t.name in this.slots ? console.warn("Same slot: " + t.name) : (this.slots[t.name] = t, this.sortedSlots.push(t))
                }, i.prototype.addConstraint = function(t) {
                    t.name in this.constraints ? console.warn("Same constraint: " + t.name) : this.constraints[t.name] = t
                }, i.prototype.addSkin = function(t) {
                    t.name in this.skins ? console.warn("Same skin: " + t.name) : (t.parent = this, this.skins[t.name] = t, null === this.defaultSkin && (this.defaultSkin = t), "default" === t.name && (this.defaultSkin = t))
                }, i.prototype.addAnimation = function(t) {
                    t.name in this.animations ? console.warn("Same animation: " + t.name) : (t.parent = this, this.animations[t.name] = t, this.animationNames.push(t.name), null === this.defaultAnimation && (this.defaultAnimation = t))
                }, i.prototype.addAction = function(t, e) {
                    e ? this.defaultActions.push(t) : this.actions.push(t)
                }, i.prototype.getBone = function(t) {
                    return t in this.bones ? this.bones[t] : null
                }, i.prototype.getSlot = function(t) {
                    return t in this.slots ? this.slots[t] : null
                }, i.prototype.getConstraint = function(t) {
                    return t in this.constraints ? this.constraints[t] : null
                }, i.prototype.getSkin = function(t) {
                    return t in this.skins ? this.skins[t] : null
                }, i.prototype.getMesh = function(t, e, i) {
                    var n = this.getSkin(t);
                    return null === n ? null : n.getDisplay(e, i)
                }, i.prototype.getAnimation = function(t) {
                    return t in this.animations ? this.animations[t] : null
                }, i
            })(t.BaseObject);
            t.ArmatureData = e;
            var i = (function(e) {
                function i() {
                    var i = null !== e && e.apply(this, arguments) || this;
                    return i.transform = new t.Transform, i.userData = null, i
                }
                return n(i, e), i.toString = function() {
                    return "[class dragonBones.BoneData]"
                }, i.prototype._onClear = function() {
                    null !== this.userData && this.userData.returnToPool(), this.inheritTranslation = !1, this.inheritRotation = !1, this.inheritScale = !1, this.inheritReflection = !1, this.type = 0, this.length = 0, this.name = "", this.transform.identity(), this.userData = null, this.parent = null
                }, i
            })(t.BaseObject);
            t.BoneData = i;
            var r = (function(t) {
                function e() {
                    var e = null !== t && t.apply(this, arguments) || this;
                    return e.vertices = [], e
                }
                return n(e, t), e.toString = function() {
                    return "[class dragonBones.SurfaceData]"
                }, e.prototype._onClear = function() {
                    t.prototype._onClear.call(this), this.type = 1, this.segmentX = 0, this.segmentY = 0, this.vertices.length = 0
                }, e
            })(i);
            t.SurfaceData = r;
            var s = (function(e) {
                function i() {
                    var t = null !== e && e.apply(this, arguments) || this;
                    return t.color = null, t.userData = null, t
                }
                return n(i, e), i.createColor = function() {
                    return new t.ColorTransform
                }, i.toString = function() {
                    return "[class dragonBones.SlotData]"
                }, i.prototype._onClear = function() {
                    null !== this.userData && this.userData.returnToPool(), this.blendMode = 0, this.displayIndex = 0, this.zOrder = 0, this.name = "", this.color = null, this.userData = null, this.parent = null
                }, i.DEFAULT_COLOR = new t.ColorTransform, i
            })(t.BaseObject);
            t.SlotData = s
        })(r || (r = {})), (function(t) {
            var e = (function(t) {
                function e() {
                    return null !== t && t.apply(this, arguments) || this
                }
                return n(e, t), e.prototype._onClear = function() {
                    this.order = 0, this.name = "", this.type = 0, this.target = null, this.root = null, this.bone = null
                }, e
            })(t.BaseObject);
            t.ConstraintData = e;
            var i = (function(t) {
                function e() {
                    return null !== t && t.apply(this, arguments) || this
                }
                return n(e, t), e.toString = function() {
                    return "[class dragonBones.IKConstraintData]"
                }, e.prototype._onClear = function() {
                    t.prototype._onClear.call(this), this.scaleEnabled = !1, this.bendPositive = !1, this.weight = 1
                }, e
            })(e);
            t.IKConstraintData = i;
            var r = (function(t) {
                function e() {
                    var e = null !== t && t.apply(this, arguments) || this;
                    return e.bones = [], e
                }
                return n(e, t), e.toString = function() {
                    return "[class dragonBones.PathConstraintData]"
                }, e.prototype._onClear = function() {
                    t.prototype._onClear.call(this), this.pathSlot = null, this.pathDisplayData = null, this.bones.length = 0, this.positionMode = 0, this.spacingMode = 1, this.rotateMode = 1, this.position = 0, this.spacing = 0, this.rotateOffset = 0, this.rotateMix = 0, this.translateMix = 0
                }, e.prototype.AddBone = function(t) {
                    this.bones.push(t)
                }, e
            })(e);
            t.PathConstraintData = r
        })(r || (r = {})), (function(t) {
            var e = (function(t) {
                function e() {
                    return null !== t && t.apply(this, arguments) || this
                }
                return n(e, t), e.toString = function() {
                    return "[class dragonBones.CanvasData]"
                }, e.prototype._onClear = function() {
                    this.hasBackground = !1, this.color = 0, this.x = 0, this.y = 0, this.width = 0, this.height = 0
                }, e
            })(t.BaseObject);
            t.CanvasData = e
        })(r || (r = {})), (function(t) {
            var e = (function(t) {
                function e() {
                    var e = null !== t && t.apply(this, arguments) || this;
                    return e.displays = {}, e
                }
                return n(e, t), e.toString = function() {
                    return "[class dragonBones.SkinData]"
                }, e.prototype._onClear = function() {
                    for (var t in this.displays) {
                        for (var e = 0, i = this.displays[t]; e < i.length; e++) {
                            var n = i[e];
                            null !== n && n.returnToPool()
                        }
                        delete this.displays[t]
                    }
                    this.name = "", this.parent = null
                }, e.prototype.addDisplay = function(t, e) {
                    t in this.displays || (this.displays[t] = []), null !== e && (e.parent = this), this.displays[t].push(e)
                }, e.prototype.getDisplay = function(t, e) {
                    var i = this.getDisplays(t);
                    if (null !== i)
                        for (var n = 0, r = i; n < r.length; n++) {
                            var s = r[n];
                            if (null !== s && s.name === e) return s
                        }
                    return null
                }, e.prototype.getDisplays = function(t) {
                    return t in this.displays ? this.displays[t] : null
                }, e
            })(t.BaseObject);
            t.SkinData = e
        })(r || (r = {})), (function(t) {
            var e = (function() {
                function t() {
                    this.weight = null
                }
                return t.prototype.clear = function() {
                    this.isShared || null === this.weight || this.weight.returnToPool(), this.isShared = !1, this.inheritDeform = !1, this.offset = 0, this.data = null, this.weight = null
                }, t.prototype.shareFrom = function(t) {
                    this.isShared = !0, this.offset = t.offset, this.weight = t.weight
                }, t
            })();
            t.VerticesData = e;
            var i = (function(e) {
                function i() {
                    var i = null !== e && e.apply(this, arguments) || this;
                    return i.transform = new t.Transform, i
                }
                return n(i, e), i.prototype._onClear = function() {
                    this.name = "", this.path = "", this.transform.identity(), this.parent = null
                }, i
            })(t.BaseObject);
            t.DisplayData = i;
            var r = (function(e) {
                function i() {
                    var i = null !== e && e.apply(this, arguments) || this;
                    return i.pivot = new t.Point, i
                }
                return n(i, e), i.toString = function() {
                    return "[class dragonBones.ImageDisplayData]"
                }, i.prototype._onClear = function() {
                    e.prototype._onClear.call(this), this.type = 0, this.pivot.clear(), this.texture = null
                }, i
            })(i);
            t.ImageDisplayData = r;
            var s = (function(t) {
                function e() {
                    var e = null !== t && t.apply(this, arguments) || this;
                    return e.actions = [], e
                }
                return n(e, t), e.toString = function() {
                    return "[class dragonBones.ArmatureDisplayData]"
                }, e.prototype._onClear = function() {
                    t.prototype._onClear.call(this);
                    for (var e = 0, i = this.actions; e < i.length; e++) {
                        i[e].returnToPool()
                    }
                    this.type = 1, this.inheritAnimation = !1, this.actions.length = 0, this.armature = null
                }, e.prototype.addAction = function(t) {
                    this.actions.push(t)
                }, e
            })(i);
            t.ArmatureDisplayData = s;
            var o = (function(t) {
                function i() {
                    var i = null !== t && t.apply(this, arguments) || this;
                    return i.vertices = new e, i
                }
                return n(i, t), i.toString = function() {
                    return "[class dragonBones.MeshDisplayData]"
                }, i.prototype._onClear = function() {
                    t.prototype._onClear.call(this), this.type = 2, this.vertices.clear(), this.texture = null
                }, i
            })(i);
            t.MeshDisplayData = o;
            var a = (function(t) {
                function e() {
                    var e = null !== t && t.apply(this, arguments) || this;
                    return e.boundingBox = null, e
                }
                return n(e, t), e.toString = function() {
                    return "[class dragonBones.BoundingBoxDisplayData]"
                }, e.prototype._onClear = function() {
                    t.prototype._onClear.call(this), null !== this.boundingBox && this.boundingBox.returnToPool(), this.type = 3, this.boundingBox = null
                }, e
            })(i);
            t.BoundingBoxDisplayData = a;
            var l = (function(t) {
                function i() {
                    var i = null !== t && t.apply(this, arguments) || this;
                    return i.vertices = new e, i.curveLengths = [], i
                }
                return n(i, t), i.toString = function() {
                    return "[class dragonBones.PathDisplayData]"
                }, i.prototype._onClear = function() {
                    t.prototype._onClear.call(this), this.type = 4, this.closed = !1, this.constantSpeed = !1, this.vertices.clear(), this.curveLengths.length = 0
                }, i
            })(i);
            t.PathDisplayData = l;
            var h = (function(t) {
                function e() {
                    var e = null !== t && t.apply(this, arguments) || this;
                    return e.bones = [], e
                }
                return n(e, t), e.toString = function() {
                    return "[class dragonBones.WeightData]"
                }, e.prototype._onClear = function() {
                    this.count = 0, this.offset = 0, this.bones.length = 0
                }, e.prototype.addBone = function(t) {
                    this.bones.push(t)
                }, e
            })(t.BaseObject);
            t.WeightData = h
        })(r || (r = {})), (function(t) {
            var e = (function(t) {
                function e() {
                    return null !== t && t.apply(this, arguments) || this
                }
                return n(e, t), e.prototype._onClear = function() {
                    this.color = 0, this.width = 0, this.height = 0
                }, e
            })(t.BaseObject);
            t.BoundingBoxData = e;
            var i = (function(t) {
                function e() {
                    return null !== t && t.apply(this, arguments) || this
                }
                return n(e, t), e.toString = function() {
                    return "[class dragonBones.RectangleBoundingBoxData]"
                }, e._computeOutCode = function(t, e, i, n, r, s) {
                    var o = 0;
                    return t < i ? o |= 1 : t > r && (o |= 2), e < n ? o |= 4 : e > s && (o |= 8), o
                }, e.rectangleIntersectsSegment = function(t, i, n, r, s, o, a, l, h, c, u) {
                    void 0 === h && (h = null), void 0 === c && (c = null), void 0 === u && (u = null);
                    var _ = t > s && t < a && i > o && i < l,
                        f = n > s && n < a && r > o && r < l;
                    if (_ && f) return -1;
                    for (var d = 0, p = e._computeOutCode(t, i, s, o, a, l), m = e._computeOutCode(n, r, s, o, a, l);;) {
                        if (0 == (p | m)) {
                            d = 2;
                            break
                        }
                        if (0 != (p & m)) break;
                        var y = 0,
                            v = 0,
                            g = 0,
                            x = 0 !== p ? p : m;
                        0 != (4 & x) ? (y = t + (n - t) * (o - i) / (r - i), v = o, null !== u && (g = .5 * -Math.PI)) : 0 != (8 & x) ? (y = t + (n - t) * (l - i) / (r - i), v = l, null !== u && (g = .5 * Math.PI)) : 0 != (2 & x) ? (v = i + (r - i) * (a - t) / (n - t), y = a, null !== u && (g = 0)) : 0 != (1 & x) && (v = i + (r - i) * (s - t) / (n - t), y = s, null !== u && (g = Math.PI)), x === p ? (t = y, i = v, p = e._computeOutCode(t, i, s, o, a, l), null !== u && (u.x = g)) : (n = y, r = v, m = e._computeOutCode(n, r, s, o, a, l), null !== u && (u.y = g))
                    }
                    return d && (_ ? (d = 2, null !== h && (h.x = n, h.y = r), null !== c && (c.x = n, c.y = n), null !== u && (u.x = u.y + Math.PI)) : f ? (d = 1, null !== h && (h.x = t, h.y = i), null !== c && (c.x = t, c.y = i), null !== u && (u.y = u.x + Math.PI)) : (d = 3, null !== h && (h.x = t, h.y = i), null !== c && (c.x = n, c.y = r))), d
                }, e.prototype._onClear = function() {
                    t.prototype._onClear.call(this), this.type = 0
                }, e.prototype.containsPoint = function(t, e) {
                    var i = .5 * this.width;
                    if (t >= -i && t <= i) {
                        var n = .5 * this.height;
                        if (e >= -n && e <= n) return !0
                    }
                    return !1
                }, e.prototype.intersectsSegment = function(t, i, n, r, s, o, a) {
                    void 0 === s && (s = null), void 0 === o && (o = null), void 0 === a && (a = null);
                    var l = .5 * this.width,
                        h = .5 * this.height;
                    return e.rectangleIntersectsSegment(t, i, n, r, -l, -h, l, h, s, o, a)
                }, e
            })(e);
            t.RectangleBoundingBoxData = i;
            var r = (function(t) {
                function e() {
                    return null !== t && t.apply(this, arguments) || this
                }
                return n(e, t), e.toString = function() {
                    return "[class dragonBones.EllipseData]"
                }, e.ellipseIntersectsSegment = function(t, e, i, n, r, s, o, a, l, h, c) {
                    void 0 === l && (l = null), void 0 === h && (h = null), void 0 === c && (c = null);
                    var u = o / a,
                        _ = u * u,
                        f = i - t,
                        d = (n *= u) - (e *= u),
                        p = Math.sqrt(f * f + d * d),
                        m = f / p,
                        y = d / p,
                        v = (r - t) * m + (s - e) * y,
                        g = o * o,
                        x = g - (t * t + e * e) + v * v,
                        b = 0;
                    if (x >= 0) {
                        var A = Math.sqrt(x),
                            C = v - A,
                            T = v + A,
                            S = C < 0 ? -1 : C <= p ? 0 : 1,
                            w = T < 0 ? -1 : T <= p ? 0 : 1,
                            E = S * w;
                        if (E < 0) return -1;
                        0 === E && (-1 === S ? (b = 2, i = t + T * m, n = (e + T * y) / u, null !== l && (l.x = i, l.y = n), null !== h && (h.x = i, h.y = n), null !== c && (c.x = Math.atan2(n / g * _, i / g), c.y = c.x + Math.PI)) : 1 === w ? (b = 1, t += C * m, e = (e + C * y) / u, null !== l && (l.x = t, l.y = e), null !== h && (h.x = t, h.y = e), null !== c && (c.x = Math.atan2(e / g * _, t / g), c.y = c.x + Math.PI)) : (b = 3, null !== l && (l.x = t + C * m, l.y = (e + C * y) / u, null !== c && (c.x = Math.atan2(l.y / g * _, l.x / g))), null !== h && (h.x = t + T * m, h.y = (e + T * y) / u, null !== c && (c.y = Math.atan2(h.y / g * _, h.x / g)))))
                    }
                    return b
                }, e.prototype._onClear = function() {
                    t.prototype._onClear.call(this), this.type = 1
                }, e.prototype.containsPoint = function(t, e) {
                    var i = .5 * this.width;
                    if (t >= -i && t <= i) {
                        var n = .5 * this.height;
                        if (e >= -n && e <= n) return e *= i / n, Math.sqrt(t * t + e * e) <= i
                    }
                    return !1
                }, e.prototype.intersectsSegment = function(t, i, n, r, s, o, a) {
                    return void 0 === s && (s = null), void 0 === o && (o = null), void 0 === a && (a = null), e.ellipseIntersectsSegment(t, i, n, r, 0, 0, .5 * this.width, .5 * this.height, s, o, a)
                }, e
            })(e);
            t.EllipseBoundingBoxData = r;
            var s = (function(t) {
                function e() {
                    var e = null !== t && t.apply(this, arguments) || this;
                    return e.vertices = [], e
                }
                return n(e, t), e.toString = function() {
                    return "[class dragonBones.PolygonBoundingBoxData]"
                }, e.polygonIntersectsSegment = function(t, e, i, n, r, s, o, a) {
                    void 0 === s && (s = null), void 0 === o && (o = null), void 0 === a && (a = null), t === i && (t = i + 1e-6), e === n && (e = n + 1e-6);
                    for (var l = r.length, h = t - i, c = e - n, u = t * n - e * i, _ = 0, f = r[l - 2], d = r[l - 1], p = 0, m = 0, y = 0, v = 0, g = 0, x = 0, b = 0; b < l; b += 2) {
                        var A = r[b],
                            C = r[b + 1];
                        f === A && (f = A + 1e-4), d === C && (d = C + 1e-4);
                        var T = f - A,
                            S = d - C,
                            w = f * C - d * A,
                            E = h * S - c * T,
                            M = (u * T - h * w) / E;
                        if ((M >= f && M <= A || M >= A && M <= f) && (0 === h || M >= t && M <= i || M >= i && M <= t)) {
                            var D = (u * S - c * w) / E;
                            if ((D >= d && D <= C || D >= C && D <= d) && (0 === c || D >= e && D <= n || D >= n && D <= e)) {
                                if (null === o) {
                                    y = M, v = D, g = M, x = D, _++, null !== a && (a.x = Math.atan2(C - d, A - f) - .5 * Math.PI, a.y = a.x);
                                    break
                                }
                                var B = M - t;
                                B < 0 && (B = -B), 0 === _ ? (p = B, m = B, y = M, v = D, g = M, x = D, null !== a && (a.x = Math.atan2(C - d, A - f) - .5 * Math.PI, a.y = a.x)) : (B < p && (p = B, y = M, v = D, null !== a && (a.x = Math.atan2(C - d, A - f) - .5 * Math.PI)), B > m && (m = B, g = M, x = D, null !== a && (a.y = Math.atan2(C - d, A - f) - .5 * Math.PI))), _++
                            }
                        }
                        f = A, d = C
                    }
                    return 1 === _ ? (null !== s && (s.x = y, s.y = v), null !== o && (o.x = y, o.y = v), null !== a && (a.y = a.x + Math.PI)) : _ > 1 && (_++, null !== s && (s.x = y, s.y = v), null !== o && (o.x = g, o.y = x)), _
                }, e.prototype._onClear = function() {
                    t.prototype._onClear.call(this), this.type = 2, this.x = 0, this.y = 0, this.vertices.length = 0
                }, e.prototype.containsPoint = function(t, e) {
                    var i = !1;
                    if (t >= this.x && t <= this.width && e >= this.y && e <= this.height)
                        for (var n = 0, r = this.vertices.length, s = r - 2; n < r; n += 2) {
                            var o = this.vertices[s + 1],
                                a = this.vertices[n + 1];
                            if (a < e && o >= e || o < e && a >= e) {
                                var l = this.vertices[s],
                                    h = this.vertices[n];
                                (e - a) * (l - h) / (o - a) + h < t && (i = !i)
                            }
                            s = n
                        }
                    return i
                }, e.prototype.intersectsSegment = function(t, n, r, s, o, a, l) {
                    void 0 === o && (o = null), void 0 === a && (a = null), void 0 === l && (l = null);
                    var h = 0;
                    return 0 !== i.rectangleIntersectsSegment(t, n, r, s, this.x, this.y, this.x + this.width, this.y + this.height, null, null, null) && (h = e.polygonIntersectsSegment(t, n, r, s, this.vertices, o, a, l)), h
                }, e
            })(e);
            t.PolygonBoundingBoxData = s
        })(r || (r = {})), (function(t) {
            var e = (function(t) {
                function e() {
                    var e = null !== t && t.apply(this, arguments) || this;
                    return e.cachedFrames = [], e.boneTimelines = {}, e.surfaceTimelines = {}, e.slotTimelines = {}, e.constraintTimelines = {}, e.animationTimelines = {}, e.boneCachedFrameIndices = {}, e.slotCachedFrameIndices = {}, e.actionTimeline = null, e.zOrderTimeline = null, e
                }
                return n(e, t), e.toString = function() {
                    return "[class dragonBones.AnimationData]"
                }, e.prototype._onClear = function() {
                    for (var t in this.boneTimelines) {
                        for (var e = 0, i = this.boneTimelines[t]; e < i.length; e++) {
                            i[e].returnToPool()
                        }
                        delete this.boneTimelines[t]
                    }
                    for (var t in this.surfaceTimelines) {
                        for (var n = 0, r = this.surfaceTimelines[t]; n < r.length; n++) {
                            r[n].returnToPool()
                        }
                        delete this.surfaceTimelines[t]
                    }
                    for (var t in this.slotTimelines) {
                        for (var s = 0, o = this.slotTimelines[t]; s < o.length; s++) {
                            o[s].returnToPool()
                        }
                        delete this.slotTimelines[t]
                    }
                    for (var t in this.constraintTimelines) {
                        for (var a = 0, l = this.constraintTimelines[t]; a < l.length; a++) {
                            l[a].returnToPool()
                        }
                        delete this.constraintTimelines[t]
                    }
                    for (var t in this.animationTimelines) {
                        for (var h = 0, c = this.animationTimelines[t]; h < c.length; h++) {
                            c[h].returnToPool()
                        }
                        delete this.animationTimelines[t]
                    }
                    for (var t in this.boneCachedFrameIndices) delete this.boneCachedFrameIndices[t];
                    for (var t in this.slotCachedFrameIndices) delete this.slotCachedFrameIndices[t];
                    null !== this.actionTimeline && this.actionTimeline.returnToPool(), null !== this.zOrderTimeline && this.zOrderTimeline.returnToPool(), this.frameIntOffset = 0, this.frameFloatOffset = 0, this.frameOffset = 0, this.frameCount = 0, this.playTimes = 0, this.duration = 0, this.scale = 1, this.fadeInTime = 0, this.cacheFrameRate = 0, this.name = "", this.cachedFrames.length = 0, this.actionTimeline = null, this.zOrderTimeline = null, this.parent = null
                }, e.prototype.cacheFrames = function(t) {
                    if (!(this.cacheFrameRate > 0)) {
                        this.cacheFrameRate = Math.max(Math.ceil(t * this.scale), 1);
                        var e = Math.ceil(this.cacheFrameRate * this.duration) + 1;
                        this.cachedFrames.length = e;
                        for (var i = 0, n = this.cacheFrames.length; i < n; ++i) this.cachedFrames[i] = !1;
                        for (var r = 0, s = this.parent.sortedBones; r < s.length; r++) {
                            var o = s[r];
                            for (i = 0, n = (h = new Array(e)).length; i < n; ++i) h[i] = -1;
                            this.boneCachedFrameIndices[o.name] = h
                        }
                        for (var a = 0, l = this.parent.sortedSlots; a < l.length; a++) {
                            var h, c = l[a];
                            for (i = 0, n = (h = new Array(e)).length; i < n; ++i) h[i] = -1;
                            this.slotCachedFrameIndices[c.name] = h
                        }
                    }
                }, e.prototype.addBoneTimeline = function(t, e) {
                    var i = t.name in this.boneTimelines ? this.boneTimelines[t.name] : this.boneTimelines[t.name] = [];
                    i.indexOf(e) < 0 && i.push(e)
                }, e.prototype.addSurfaceTimeline = function(t, e) {
                    var i = t.name in this.surfaceTimelines ? this.surfaceTimelines[t.name] : this.surfaceTimelines[t.name] = [];
                    i.indexOf(e) < 0 && i.push(e)
                }, e.prototype.addSlotTimeline = function(t, e) {
                    var i = t.name in this.slotTimelines ? this.slotTimelines[t.name] : this.slotTimelines[t.name] = [];
                    i.indexOf(e) < 0 && i.push(e)
                }, e.prototype.addConstraintTimeline = function(t, e) {
                    var i = t.name in this.constraintTimelines ? this.constraintTimelines[t.name] : this.constraintTimelines[t.name] = [];
                    i.indexOf(e) < 0 && i.push(e)
                }, e.prototype.addAnimationTimeline = function(t, e) {
                    var i = t in this.animationTimelines ? this.animationTimelines[t] : this.animationTimelines[t] = [];
                    i.indexOf(e) < 0 && i.push(e)
                }, e.prototype.getBoneTimelines = function(t) {
                    return t in this.boneTimelines ? this.boneTimelines[t] : null
                }, e.prototype.getSurfaceTimelines = function(t) {
                    return t in this.surfaceTimelines ? this.surfaceTimelines[t] : null
                }, e.prototype.getSlotTimelines = function(t) {
                    return t in this.slotTimelines ? this.slotTimelines[t] : null
                }, e.prototype.getConstraintTimelines = function(t) {
                    return t in this.constraintTimelines ? this.constraintTimelines[t] : null
                }, e.prototype.getAnimationTimelines = function(t) {
                    return t in this.animationTimelines ? this.animationTimelines[t] : null
                }, e.prototype.getBoneCachedFrameIndices = function(t) {
                    return t in this.boneCachedFrameIndices ? this.boneCachedFrameIndices[t] : null
                }, e.prototype.getSlotCachedFrameIndices = function(t) {
                    return t in this.slotCachedFrameIndices ? this.slotCachedFrameIndices[t] : null
                }, e
            })(t.BaseObject);
            t.AnimationData = e;
            var i = (function(t) {
                function e() {
                    return null !== t && t.apply(this, arguments) || this
                }
                return n(e, t), e.toString = function() {
                    return "[class dragonBones.TimelineData]"
                }, e.prototype._onClear = function() {
                    this.type = 10, this.offset = 0, this.frameIndicesOffset = -1
                }, e
            })(t.BaseObject);
            t.TimelineData = i
        })(r || (r = {})), (function(t) {
            var e = (function(t) {
                function e() {
                    var e = null !== t && t.apply(this, arguments) || this;
                    return e.boneMask = [], e
                }
                return n(e, t), e.toString = function() {
                    return "[class dragonBones.AnimationConfig]"
                }, e.prototype._onClear = function() {
                    this.pauseFadeOut = !0, this.fadeOutMode = 4, this.fadeOutTweenType = 1, this.fadeOutTime = -1, this.actionEnabled = !0, this.additiveBlending = !1, this.displayControl = !0, this.pauseFadeIn = !0, this.resetToPose = !0, this.fadeInTweenType = 1, this.playTimes = -1, this.layer = 0, this.position = 0, this.duration = -1, this.timeScale = -100, this.weight = 1, this.fadeInTime = -1, this.autoFadeOutTime = -1, this.name = "", this.animation = "", this.group = "", this.boneMask.length = 0
                }, e.prototype.clear = function() {
                    this._onClear()
                }, e.prototype.copyFrom = function(t) {
                    this.pauseFadeOut = t.pauseFadeOut, this.fadeOutMode = t.fadeOutMode, this.autoFadeOutTime = t.autoFadeOutTime, this.fadeOutTweenType = t.fadeOutTweenType, this.actionEnabled = t.actionEnabled, this.additiveBlending = t.additiveBlending, this.displayControl = t.displayControl, this.pauseFadeIn = t.pauseFadeIn, this.resetToPose = t.resetToPose, this.playTimes = t.playTimes, this.layer = t.layer, this.position = t.position, this.duration = t.duration, this.timeScale = t.timeScale, this.fadeInTime = t.fadeInTime, this.fadeOutTime = t.fadeOutTime, this.fadeInTweenType = t.fadeInTweenType, this.weight = t.weight, this.name = t.name, this.animation = t.animation, this.group = t.group, this.boneMask.length = t.boneMask.length;
                    for (var e = 0, i = this.boneMask.length; e < i; ++e) this.boneMask[e] = t.boneMask[e]
                }, e.prototype.containsBoneMask = function(t) {
                    return 0 === this.boneMask.length || this.boneMask.indexOf(t) >= 0
                }, e.prototype.addBoneMask = function(t, e, i) {
                    void 0 === i && (i = !0);
                    var n = t.getBone(e);
                    if (null !== n && (this.boneMask.indexOf(e) < 0 && this.boneMask.push(e), i))
                        for (var r = 0, s = t.getBones(); r < s.length; r++) {
                            var o = s[r];
                            this.boneMask.indexOf(o.name) < 0 && n.contains(o) && this.boneMask.push(o.name)
                        }
                }, e.prototype.removeBoneMask = function(t, e, i) {
                    void 0 === i && (i = !0);
                    var n = this.boneMask.indexOf(e);
                    if (n >= 0 && this.boneMask.splice(n, 1), i) {
                        var r = t.getBone(e);
                        if (null !== r)
                            if (this.boneMask.length > 0)
                                for (var s = 0, o = t.getBones(); s < o.length; s++) {
                                    var a = o[s],
                                        l = this.boneMask.indexOf(a.name);
                                    l >= 0 && r.contains(a) && this.boneMask.splice(l, 1)
                                } else
                                    for (var h = 0, c = t.getBones(); h < c.length; h++) {
                                        (a = c[h]) !== r && (r.contains(a) || this.boneMask.push(a.name))
                                    }
                    }
                }, e
            })(t.BaseObject);
            t.AnimationConfig = e
        })(r || (r = {})), (function(t) {
            var e = (function(t) {
                function e() {
                    var e = null !== t && t.apply(this, arguments) || this;
                    return e.textures = {}, e
                }
                return n(e, t), e.prototype._onClear = function() {
                    for (var t in this.textures) this.textures[t].returnToPool(), delete this.textures[t];
                    this.autoSearch = !1, this.width = 0, this.height = 0, this.scale = 1, this.name = "", this.imagePath = ""
                }, e.prototype.copyFrom = function(t) {
                    for (var e in this.autoSearch = t.autoSearch, this.scale = t.scale, this.width = t.width, this.height = t.height, this.name = t.name, this.imagePath = t.imagePath, this.textures) this.textures[e].returnToPool(), delete this.textures[e];
                    for (var e in t.textures) {
                        var i = this.createTexture();
                        i.copyFrom(t.textures[e]), this.textures[e] = i
                    }
                }, e.prototype.addTexture = function(t) {
                    t.name in this.textures ? console.warn("Same texture: " + t.name) : (t.parent = this, this.textures[t.name] = t)
                }, e.prototype.getTexture = function(t) {
                    return t in this.textures ? this.textures[t] : null
                }, e
            })(t.BaseObject);
            t.TextureAtlasData = e;
            var i = (function(e) {
                function i() {
                    var i = null !== e && e.apply(this, arguments) || this;
                    return i.region = new t.Rectangle, i.frame = null, i
                }
                return n(i, e), i.createRectangle = function() {
                    return new t.Rectangle
                }, i.prototype._onClear = function() {
                    this.rotated = !1, this.name = "", this.region.clear(), this.parent = null, this.frame = null
                }, i.prototype.copyFrom = function(t) {
                    this.rotated = t.rotated, this.name = t.name, this.region.copyFrom(t.region), this.parent = t.parent, null === this.frame && null !== t.frame ? this.frame = i.createRectangle() : null !== this.frame && null === t.frame && (this.frame = null), null !== this.frame && null !== t.frame && this.frame.copyFrom(t.frame)
                }, i
            })(t.BaseObject);
            t.TextureData = i
        })(r || (r = {})), (function(t) {
            var e = (function(t) {
                function e() {
                    var e = null !== t && t.apply(this, arguments) || this;
                    return e.vertices = [], e.bones = [], e
                }
                return n(e, t), e.toString = function() {
                    return "[class dragonBones.DeformVertices]"
                }, e.prototype._onClear = function() {
                    this.verticesDirty = !1, this.vertices.length = 0, this.bones.length = 0, this.verticesData = null
                }, e.prototype.init = function(t, e) {
                    if (this.verticesData = t, null !== this.verticesData) {
                        var i = 0;
                        i = null !== this.verticesData.weight ? 2 * this.verticesData.weight.count : 2 * this.verticesData.data.intArray[this.verticesData.offset + 0], this.verticesDirty = !0, this.vertices.length = i, this.bones.length = 0;
                        for (var n = 0, r = this.vertices.length; n < r; ++n) this.vertices[n] = 0;
                        if (null !== this.verticesData.weight)
                            for (n = 0, r = this.verticesData.weight.bones.length; n < r; ++n) {
                                var s = e.getBone(this.verticesData.weight.bones[n].name);
                                this.bones.push(s)
                            }
                    } else this.verticesDirty = !1, this.vertices.length = 0, this.bones.length = 0, this.verticesData = null
                }, e.prototype.isBonesUpdate = function() {
                    for (var t = 0, e = this.bones; t < e.length; t++) {
                        var i = e[t];
                        if (null !== i && i._childrenTransformDirty) return !0
                    }
                    return !1
                }, e
            })(t.BaseObject);
            t.DeformVertices = e
        })(r || (r = {})), (function(t) {
            var e = (function(e) {
                function i() {
                    var t = null !== e && e.apply(this, arguments) || this;
                    return t._bones = [], t._slots = [], t._constraints = [], t._actions = [], t._animation = null, t._proxy = null, t._replaceTextureAtlasData = null, t._clock = null, t
                }
                return n(i, e), i.toString = function() {
                    return "[class dragonBones.Armature]"
                }, i._onSortSlots = function(t, e) {
                    return t._zOrder > e._zOrder ? 1 : -1
                }, i.prototype._onClear = function() {
                    null !== this._clock && this._clock.remove(this);
                    for (var t = 0, e = this._bones; t < e.length; t++) {
                        e[t].returnToPool()
                    }
                    for (var i = 0, n = this._slots; i < n.length; i++) {
                        n[i].returnToPool()
                    }
                    for (var r = 0, s = this._constraints; r < s.length; r++) {
                        s[r].returnToPool()
                    }
                    for (var o = 0, a = this._actions; o < a.length; o++) {
                        a[o].returnToPool()
                    }
                    null !== this._animation && this._animation.returnToPool(), null !== this._proxy && this._proxy.dbClear(), null !== this._replaceTextureAtlasData && this._replaceTextureAtlasData.returnToPool(), this.inheritAnimation = !0, this.userData = null, this._lockUpdate = !1, this._slotsDirty = !0, this._zOrderDirty = !1, this._flipX = !1, this._flipY = !1, this._cacheFrameIndex = -1, this._bones.length = 0, this._slots.length = 0, this._constraints.length = 0, this._actions.length = 0, this._armatureData = null, this._animation = null, this._proxy = null, this._display = null, this._replaceTextureAtlasData = null, this._replacedTexture = null, this._dragonBones = null, this._clock = null, this._parent = null
                }, i.prototype._sortZOrder = function(t, e) {
                    var i = this._armatureData.sortedSlots,
                        n = null === t;
                    if (this._zOrderDirty || !n) {
                        for (var r = 0, s = i.length; r < s; ++r) {
                            var o = n ? r : t[e + r];
                            if (!(o < 0 || o >= s)) {
                                var a = i[o],
                                    l = this.getSlot(a.name);
                                null !== l && l._setZorder(r)
                            }
                        }
                        this._slotsDirty = !0, this._zOrderDirty = !n
                    }
                }, i.prototype._addBone = function(t) {
                    this._bones.indexOf(t) < 0 && this._bones.push(t)
                }, i.prototype._addSlot = function(t) {
                    this._slots.indexOf(t) < 0 && this._slots.push(t)
                }, i.prototype._addConstraint = function(t) {
                    this._constraints.indexOf(t) < 0 && this._constraints.push(t)
                }, i.prototype._bufferAction = function(t, e) {
                    this._actions.indexOf(t) < 0 && (e ? this._actions.push(t) : this._actions.unshift(t))
                }, i.prototype.dispose = function() {
                    null !== this._armatureData && (this._lockUpdate = !0, this._dragonBones.bufferObject(this))
                }, i.prototype.init = function(e, i, n, r) {
                    null === this._armatureData && (this._armatureData = e, this._animation = t.BaseObject.borrowObject(t.Animation), this._proxy = i, this._display = n, this._dragonBones = r, this._proxy.dbInit(this), this._animation.init(this), this._animation.animations = this._armatureData.animations)
                }, i.prototype.advanceTime = function(t) {
                    if (!this._lockUpdate)
                        if (null !== this._armatureData)
                            if (null !== this._armatureData.parent) {
                                var e = this._cacheFrameIndex;
                                if (this._animation.advanceTime(t), this._slotsDirty && (this._slotsDirty = !1, this._slots.sort(i._onSortSlots)), this._cacheFrameIndex < 0 || this._cacheFrameIndex !== e) {
                                    var n = 0,
                                        r = 0;
                                    for (n = 0, r = this._bones.length; n < r; ++n) this._bones[n].update(this._cacheFrameIndex);
                                    for (n = 0, r = this._slots.length; n < r; ++n) this._slots[n].update(this._cacheFrameIndex)
                                }
                                if (this._actions.length > 0) {
                                    this._lockUpdate = !0;
                                    for (var s = 0, o = this._actions; s < o.length; s++) {
                                        var a = o[s],
                                            l = a.actionData;
                                        if (null !== l)
                                            if (0 === l.type)
                                                if (null !== a.slot) null !== (u = a.slot.childArmature) && u.animation.fadeIn(l.name);
                                                else if (null !== a.bone)
                                            for (var h = 0, c = this.getSlots(); h < c.length; h++) {
                                                var u, _ = c[h];
                                                if (_.parent === a.bone) null !== (u = _.childArmature) && u.animation.fadeIn(l.name)
                                            } else this._animation.fadeIn(l.name);
                                        a.returnToPool()
                                    }
                                    this._actions.length = 0, this._lockUpdate = !1
                                }
                                this._proxy.dbUpdate()
                            } else console.warn("The armature data has been disposed.\nPlease make sure dispose armature before call factory.clear().");
                    else console.warn("The armature has been disposed.")
                }, i.prototype.invalidUpdate = function(t, e) {
                    if (void 0 === t && (t = null), void 0 === e && (e = !1), null !== t && t.length > 0) {
                        if (null !== (o = this.getBone(t)) && (o.invalidUpdate(), e))
                            for (var i = 0, n = this._slots; i < n.length; i++) {
                                (h = n[i]).parent === o && h.invalidUpdate()
                            }
                    } else {
                        for (var r = 0, s = this._bones; r < s.length; r++) {
                            var o;
                            (o = s[r]).invalidUpdate()
                        }
                        if (e)
                            for (var a = 0, l = this._slots; a < l.length; a++) {
                                var h;
                                (h = l[a]).invalidUpdate()
                            }
                    }
                }, i.prototype.containsPoint = function(t, e) {
                    for (var i = 0, n = this._slots; i < n.length; i++) {
                        var r = n[i];
                        if (r.containsPoint(t, e)) return r
                    }
                    return null
                }, i.prototype.intersectsSegment = function(t, e, i, n, r, s, o) {
                    void 0 === r && (r = null), void 0 === s && (s = null), void 0 === o && (o = null);
                    for (var a = t === i, l = 0, h = 0, c = 0, u = 0, _ = 0, f = 0, d = 0, p = 0, m = null, y = null, v = 0, g = this._slots; v < g.length; v++) {
                        var x = g[v];
                        if (x.intersectsSegment(t, e, i, n, r, s, o) > 0) {
                            if (null === r && null === s) {
                                m = x;
                                break
                            }
                            var b;
                            null !== r && ((b = a ? r.y - e : r.x - t) < 0 && (b = -b), (null === m || b < l) && (l = b, c = r.x, u = r.y, m = x, o && (d = o.x))), null !== s && ((b = s.x - t) < 0 && (b = -b), (null === y || b > h) && (h = b, _ = s.x, f = s.y, y = x, null !== o && (p = o.y)))
                        }
                    }
                    return null !== m && null !== r && (r.x = c, r.y = u, null !== o && (o.x = d)), null !== y && null !== s && (s.x = _, s.y = f, null !== o && (o.y = p)), m
                }, i.prototype.getBone = function(t) {
                    for (var e = 0, i = this._bones; e < i.length; e++) {
                        var n = i[e];
                        if (n.name === t) return n
                    }
                    return null
                }, i.prototype.getBoneByDisplay = function(t) {
                    var e = this.getSlotByDisplay(t);
                    return null !== e ? e.parent : null
                }, i.prototype.getSlot = function(t) {
                    for (var e = 0, i = this._slots; e < i.length; e++) {
                        var n = i[e];
                        if (n.name === t) return n
                    }
                    return null
                }, i.prototype.getSlotByDisplay = function(t) {
                    if (null !== t)
                        for (var e = 0, i = this._slots; e < i.length; e++) {
                            var n = i[e];
                            if (n.display === t) return n
                        }
                    return null
                }, i.prototype.getBones = function() {
                    return this._bones
                }, i.prototype.getSlots = function() {
                    return this._slots
                }, Object.defineProperty(i.prototype, "flipX", {
                    get: function() {
                        return this._flipX
                    },
                    set: function(t) {
                        this._flipX !== t && (this._flipX = t, this.invalidUpdate())
                    },
                    enumerable: !0,
                    configurable: !0
                }), Object.defineProperty(i.prototype, "flipY", {
                    get: function() {
                        return this._flipY
                    },
                    set: function(t) {
                        this._flipY !== t && (this._flipY = t, this.invalidUpdate())
                    },
                    enumerable: !0,
                    configurable: !0
                }), Object.defineProperty(i.prototype, "cacheFrameRate", {
                    get: function() {
                        return this._armatureData.cacheFrameRate
                    },
                    set: function(t) {
                        if (this._armatureData.cacheFrameRate !== t) {
                            this._armatureData.cacheFrames(t);
                            for (var e = 0, i = this._slots; e < i.length; e++) {
                                var n = i[e].childArmature;
                                null !== n && (n.cacheFrameRate = t)
                            }
                        }
                    },
                    enumerable: !0,
                    configurable: !0
                }), Object.defineProperty(i.prototype, "name", {
                    get: function() {
                        return this._armatureData.name
                    },
                    enumerable: !0,
                    configurable: !0
                }), Object.defineProperty(i.prototype, "armatureData", {
                    get: function() {
                        return this._armatureData
                    },
                    enumerable: !0,
                    configurable: !0
                }), Object.defineProperty(i.prototype, "animation", {
                    get: function() {
                        return this._animation
                    },
                    enumerable: !0,
                    configurable: !0
                }), Object.defineProperty(i.prototype, "proxy", {
                    get: function() {
                        return this._proxy
                    },
                    enumerable: !0,
                    configurable: !0
                }), Object.defineProperty(i.prototype, "eventDispatcher", {
                    get: function() {
                        return this._proxy
                    },
                    enumerable: !0,
                    configurable: !0
                }), Object.defineProperty(i.prototype, "display", {
                    get: function() {
                        return this._display
                    },
                    enumerable: !0,
                    configurable: !0
                }), Object.defineProperty(i.prototype, "replacedTexture", {
                    get: function() {
                        return this._replacedTexture
                    },
                    set: function(t) {
                        if (this._replacedTexture !== t) {
                            null !== this._replaceTextureAtlasData && (this._replaceTextureAtlasData.returnToPool(), this._replaceTextureAtlasData = null), this._replacedTexture = t;
                            for (var e = 0, i = this._slots; e < i.length; e++) {
                                var n = i[e];
                                n.invalidUpdate(), n.update(-1)
                            }
                        }
                    },
                    enumerable: !0,
                    configurable: !0
                }), Object.defineProperty(i.prototype, "clock", {
                    get: function() {
                        return this._clock
                    },
                    set: function(t) {
                        if (this._clock !== t) {
                            null !== this._clock && this._clock.remove(this), this._clock = t, this._clock && this._clock.add(this);
                            for (var e = 0, i = this._slots; e < i.length; e++) {
                                var n = i[e].childArmature;
                                null !== n && (n.clock = this._clock)
                            }
                        }
                    },
                    enumerable: !0,
                    configurable: !0
                }), Object.defineProperty(i.prototype, "parent", {
                    get: function() {
                        return this._parent
                    },
                    enumerable: !0,
                    configurable: !0
                }), i.prototype.replaceTexture = function(t) {
                    this.replacedTexture = t
                }, i.prototype.hasEventListener = function(t) {
                    return this._proxy.hasDBEventListener(t)
                }, i.prototype.addEventListener = function(t, e, i) {
                    this._proxy.addDBEventListener(t, e, i)
                }, i.prototype.removeEventListener = function(t, e, i) {
                    this._proxy.removeDBEventListener(t, e, i)
                }, i.prototype.enableAnimationCache = function(t) {
                    console.warn("Deprecated."), this.cacheFrameRate = t
                }, i.prototype.getDisplay = function() {
                    return this._display
                }, i
            })(t.BaseObject);
            t.Armature = e
        })(r || (r = {})), (function(t) {
            var e = (function(e) {
                function i() {
                    var i = null !== e && e.apply(this, arguments) || this;
                    return i.globalTransformMatrix = new t.Matrix, i.global = new t.Transform, i.offset = new t.Transform, i
                }
                return n(i, e), i.prototype._onClear = function() {
                    this.globalTransformMatrix.identity(), this.global.identity(), this.offset.identity(), this.origin = null, this.userData = null, this._globalDirty = !1, this._armature = null
                }, i.prototype.updateGlobalTransform = function() {
                    this._globalDirty && (this._globalDirty = !1, this.global.fromMatrix(this.globalTransformMatrix))
                }, Object.defineProperty(i.prototype, "armature", {
                    get: function() {
                        return this._armature
                    },
                    enumerable: !0,
                    configurable: !0
                }), i._helpMatrix = new t.Matrix, i._helpTransform = new t.Transform, i._helpPoint = new t.Point, i
            })(t.BaseObject);
            t.TransformObject = e
        })(r || (r = {})), (function(t) {
            var e = (function(e) {
                function i() {
                    var i = null !== e && e.apply(this, arguments) || this;
                    return i.animationPose = new t.Transform, i._blendState = new t.BlendState, i
                }
                return n(i, e), i.toString = function() {
                    return "[class dragonBones.Bone]"
                }, i.prototype._onClear = function() {
                    e.prototype._onClear.call(this), this.offsetMode = 1, this.animationPose.identity(), this._transformDirty = !1, this._childrenTransformDirty = !1, this._localDirty = !0, this._hasConstraint = !1, this._visible = !0, this._cachedFrameIndex = -1, this._blendState.clear(), this._boneData = null, this._parent = null, this._cachedFrameIndices = null
                }, i.prototype._updateGlobalTransformMatrix = function(e) {
                    var i = this._boneData,
                        n = this.global,
                        r = this.globalTransformMatrix,
                        s = this.origin,
                        o = this.offset,
                        a = this.animationPose,
                        l = this._parent,
                        h = this._armature.flipX,
                        c = this._armature.flipY === t.DragonBones.yDown,
                        u = null !== l,
                        _ = 0;
                    if (1 === this.offsetMode ? null !== s ? (n.x = s.x + o.x + a.x, n.scaleX = s.scaleX * o.scaleX * a.scaleX, n.scaleY = s.scaleY * o.scaleY * a.scaleY, t.DragonBones.yDown ? (n.y = s.y + o.y + a.y, n.skew = s.skew + o.skew + a.skew, n.rotation = s.rotation + o.rotation + a.rotation) : (n.y = s.y - o.y + a.y, n.skew = s.skew - o.skew + a.skew, n.rotation = s.rotation - o.rotation + a.rotation)) : (n.copyFrom(o), t.DragonBones.yDown || (n.y = -n.y, n.skew = -n.skew, n.rotation = -n.rotation), n.add(a)) : 0 === this.offsetMode ? null !== s ? n.copyFrom(s).add(a) : n.copyFrom(a) : (u = !1, n.copyFrom(o), t.DragonBones.yDown || (n.y = -n.y, n.skew = -n.skew, n.rotation = -n.rotation)), u) {
                        var f = 0 === l._boneData.type ? l.globalTransformMatrix : l._getGlobalTransformMatrix(n.x, n.y);
                        if (i.inheritScale) i.inheritRotation || (l.updateGlobalTransform(), _ = h && c ? n.rotation - (l.global.rotation + Math.PI) : h ? n.rotation + l.global.rotation + Math.PI : c ? n.rotation + l.global.rotation : n.rotation - l.global.rotation, n.rotation = _), n.toMatrix(r), r.concat(f), i.inheritTranslation ? (n.x = r.tx, n.y = r.ty) : (r.tx = n.x, r.ty = n.y), e ? n.fromMatrix(r) : this._globalDirty = !0;
                        else {
                            if (i.inheritTranslation) {
                                var d = n.x,
                                    p = n.y;
                                n.x = f.a * d + f.c * p + f.tx, n.y = f.b * d + f.d * p + f.ty
                            } else h && (n.x = -n.x), c && (n.y = -n.y);
                            i.inheritRotation ? (l.updateGlobalTransform(), _ = l.global.scaleX < 0 ? n.rotation + l.global.rotation + Math.PI : n.rotation + l.global.rotation, f.a * f.d - f.b * f.c < 0 && (_ -= 2 * n.rotation, (h !== c || i.inheritReflection) && (n.skew += Math.PI), t.DragonBones.yDown || (n.skew = -n.skew)), n.rotation = _) : (h || c) && (h && c ? _ = n.rotation + Math.PI : (_ = h ? Math.PI - n.rotation : -n.rotation, n.skew += Math.PI), n.rotation = _), n.toMatrix(r)
                        }
                    } else(h || c) && (h && (n.x = -n.x), c && (n.y = -n.y), h && c ? _ = n.rotation + Math.PI : (_ = h ? Math.PI - n.rotation : -n.rotation, n.skew += Math.PI), n.rotation = _), n.toMatrix(r)
                }, i.prototype.init = function(t, e) {
                    null === this._boneData && (this._boneData = t, this._armature = e, null !== this._boneData.parent && (this._parent = this._armature.getBone(this._boneData.parent.name)), this._armature._addBone(this), this.origin = this._boneData.transform)
                }, i.prototype.update = function(t) {
                    if (this._blendState.dirty = !1, t >= 0 && null !== this._cachedFrameIndices) {
                        var e = this._cachedFrameIndices[t];
                        if (e >= 0 && this._cachedFrameIndex === e) this._transformDirty = !1;
                        else if (e >= 0) this._transformDirty = !0, this._cachedFrameIndex = e;
                        else {
                            if (this._hasConstraint)
                                for (var i = 0, n = this._armature._constraints; i < n.length; i++) {
                                    (o = n[i])._root === this && o.update()
                                }
                            this._transformDirty || null !== this._parent && this._parent._childrenTransformDirty ? (this._transformDirty = !0, this._cachedFrameIndex = -1) : this._cachedFrameIndex >= 0 ? (this._transformDirty = !1, this._cachedFrameIndices[t] = this._cachedFrameIndex) : (this._transformDirty = !0, this._cachedFrameIndex = -1)
                        }
                    } else {
                        if (this._hasConstraint)
                            for (var r = 0, s = this._armature._constraints; r < s.length; r++) {
                                var o;
                                (o = s[r])._root === this && o.update()
                            }(this._transformDirty || null !== this._parent && this._parent._childrenTransformDirty) && (t = -1, this._transformDirty = !0, this._cachedFrameIndex = -1)
                    }
                    if (this._transformDirty)
                        if (this._transformDirty = !1, this._childrenTransformDirty = !0, this._cachedFrameIndex < 0) {
                            var a = t >= 0;
                            this._localDirty && this._updateGlobalTransformMatrix(a), a && null !== this._cachedFrameIndices && (this._cachedFrameIndex = this._cachedFrameIndices[t] = this._armature._armatureData.setCacheFrame(this.globalTransformMatrix, this.global))
                        } else this._armature._armatureData.getCacheFrame(this.globalTransformMatrix, this.global, this._cachedFrameIndex);
                    else this._childrenTransformDirty && (this._childrenTransformDirty = !1);
                    this._localDirty = !0
                }, i.prototype.updateByConstraint = function() {
                    this._localDirty && (this._localDirty = !1, (this._transformDirty || null !== this._parent && this._parent._childrenTransformDirty) && this._updateGlobalTransformMatrix(!0), this._transformDirty = !0)
                }, i.prototype.invalidUpdate = function() {
                    this._transformDirty = !0
                }, i.prototype.contains = function(t) {
                    if (t === this) return !1;
                    for (var e = t; e !== this && null !== e;) e = e.parent;
                    return e === this
                }, Object.defineProperty(i.prototype, "boneData", {
                    get: function() {
                        return this._boneData
                    },
                    enumerable: !0,
                    configurable: !0
                }), Object.defineProperty(i.prototype, "visible", {
                    get: function() {
                        return this._visible
                    },
                    set: function(t) {
                        if (this._visible !== t) {
                            this._visible = t;
                            for (var e = 0, i = this._armature.getSlots(); e < i.length; e++) {
                                var n = i[e];
                                n.parent === this && n._updateVisible()
                            }
                        }
                    },
                    enumerable: !0,
                    configurable: !0
                }), Object.defineProperty(i.prototype, "name", {
                    get: function() {
                        return this._boneData.name
                    },
                    enumerable: !0,
                    configurable: !0
                }), Object.defineProperty(i.prototype, "parent", {
                    get: function() {
                        return this._parent
                    },
                    enumerable: !0,
                    configurable: !0
                }), i.prototype.getBones = function() {
                    console.warn("Deprecated.");
                    for (var t = new Array, e = 0, i = this._armature.getBones(); e < i.length; e++) {
                        var n = i[e];
                        n.parent === this && t.push(n)
                    }
                    return t
                }, i.prototype.getSlots = function() {
                    console.warn("Deprecated.");
                    for (var t = new Array, e = 0, i = this._armature.getSlots(); e < i.length; e++) {
                        var n = i[e];
                        n.parent === this && t.push(n)
                    }
                    return t
                }, Object.defineProperty(i.prototype, "slot", {
                    get: function() {
                        console.warn("Deprecated.");
                        for (var t = 0, e = this._armature.getSlots(); t < e.length; t++) {
                            var i = e[t];
                            if (i.parent === this) return i
                        }
                        return null
                    },
                    enumerable: !0,
                    configurable: !0
                }), i
            })(t.TransformObject);
            t.Bone = e
        })(r || (r = {})), (function(t) {
            var e = (function(t) {
                function e() {
                    var e = null !== t && t.apply(this, arguments) || this;
                    return e._vertices = [], e._deformVertices = [], e._hullCache = [], e._matrixCahce = [], e
                }
                return n(e, t), e.toString = function() {
                    return "[class dragonBones.Surface]"
                }, e.prototype._onClear = function() {
                    t.prototype._onClear.call(this), this._dX = 0, this._dY = 0, this._k = 0, this._kX = 0, this._kY = 0, this._vertices.length = 0, this._deformVertices.length = 0, this._matrixCahce.length = 0, this._hullCache.length = 0
                }, e.prototype._getAffineTransform = function(t, e, i, n, r, s, o, a, l, h, c, u, _) {
                    var f = o - r,
                        d = a - s,
                        p = l - r,
                        m = h - s;
                    c.rotation = Math.atan2(d, f), c.skew = Math.atan2(m, p) - .5 * Math.PI - c.rotation, _ && (c.rotation += Math.PI), c.scaleX = Math.sqrt(f * f + d * d) / i, c.scaleY = Math.sqrt(p * p + m * m) / n, c.toMatrix(u), c.x = u.tx = r - (u.a * t + u.c * e), c.y = u.ty = s - (u.b * t + u.d * e)
                }, e.prototype._updateVertices = function() {
                    var t = this._boneData.vertices,
                        e = this._vertices,
                        i = this._deformVertices;
                    if (null !== this._parent)
                        if (1 === this._parent._boneData.type)
                            for (var n = 0, r = t.length; n < r; n += 2) {
                                var s = t[n] + i[n],
                                    o = t[n + 1] + i[n],
                                    a = this._parent._getGlobalTransformMatrix(s, o);
                                e[n] = a.a * s + a.c * o + a.tx, e[n + 1] = a.b * s + a.d * o + a.ty
                            } else {
                                var l = this._parent.globalTransformMatrix;
                                for (n = 0, r = t.length; n < r; n += 2) {
                                    s = t[n] + i[n], o = t[n + 1] + i[n + 1];
                                    e[n] = l.a * s + l.c * o + l.tx, e[n + 1] = l.b * s + l.d * o + l.ty
                                }
                            } else
                                for (n = 0, r = t.length; n < r; n += 2) e[n] = t[n] + i[n], e[n + 1] = t[n + 1] + i[n + 1]
                }, e.prototype._updateGlobalTransformMatrix = function(t) {
                    var e = 2 * this._boneData.segmentX,
                        i = this._vertices.length - 2,
                        n = this._vertices[0],
                        r = this._vertices[1],
                        s = this._vertices[e],
                        o = this._vertices[e + 1],
                        a = this._vertices[i],
                        l = this._vertices[i + 1],
                        h = this._vertices[i - e],
                        c = this._vertices[i - e + 1],
                        u = n + .5 * (a - n),
                        _ = r + .5 * (l - r),
                        f = u + .5 * (s + .5 * (h - s) - u),
                        d = _ + .5 * (o + .5 * (c - o) - _),
                        p = s + .5 * (a - s),
                        m = o + .5 * (l - o),
                        y = h + .5 * (a - h),
                        v = c + .5 * (l - c);
                    this._globalDirty = !1, this._getAffineTransform(0, 0, 200, 200, f, d, p, m, y, v, this.global, this.globalTransformMatrix, !1)
                }, e.prototype._getGlobalTransformMatrix = function(t, i) {
                    var n = 1e3;
                    if (t < -n || n < t || i < -n || n < i) return this.globalTransformMatrix;
                    var r = !1,
                        s = 200,
                        o = this._boneData,
                        a = o.segmentX,
                        l = o.segmentY,
                        h = 2 * o.segmentX,
                        c = this._dX,
                        u = this._dY,
                        _ = Math.floor((t + s) / c),
                        f = Math.floor((i + s) / u),
                        d = 0,
                        p = _ * c - s,
                        m = f * u - s,
                        y = this._matrixCahce,
                        v = e._helpMatrix;
                    if (t < -s) {
                        if (i < -s || i >= s) return this.globalTransformMatrix;
                        if (d = 7 * (2 * (a * (l + 1) + 2 * a + l + f) + ((r = i > this._kX * (t + s) + m) ? 1 : 0)), this._matrixCahce[d] > 0) v.copyFromArray(y, d + 1);
                        else {
                            var g = f * (h + 2),
                                x = this._hullCache[4],
                                b = this._hullCache[5],
                                A = this._hullCache[2] - (l - f) * x,
                                C = this._hullCache[3] - (l - f) * b,
                                T = this._vertices;
                            r ? this._getAffineTransform(-s, m + u, 800, u, T[g + h + 2], T[g + h + 3], A + x, C + b, T[g], T[g + 1], e._helpTransform, v, !0) : this._getAffineTransform(-n, m, 800, u, A, C, T[g], T[g + 1], A + x, C + b, e._helpTransform, v, !1), y[d] = 1, y[d + 1] = v.a, y[d + 2] = v.b, y[d + 3] = v.c, y[d + 4] = v.d, y[d + 5] = v.tx, y[d + 6] = v.ty
                        }
                    } else if (t >= s) {
                        if (i < -s || i >= s) return this.globalTransformMatrix;
                        if (d = 7 * (2 * (a * (l + 1) + a + f) + ((r = i > this._kX * (t - n) + m) ? 1 : 0)), this._matrixCahce[d] > 0) v.copyFromArray(y, d + 1);
                        else {
                            g = (f + 1) * (h + 2) - 2, x = this._hullCache[4], b = this._hullCache[5], A = this._hullCache[0] + f * x, C = this._hullCache[1] + f * b, T = this._vertices;
                            r ? this._getAffineTransform(n, m + u, 800, u, A + x, C + b, T[g + h + 2], T[g + h + 3], A, C, e._helpTransform, v, !0) : this._getAffineTransform(s, m, 800, u, T[g], T[g + 1], A, C, T[g + h + 2], T[g + h + 3], e._helpTransform, v, !1), y[d] = 1, y[d + 1] = v.a, y[d + 2] = v.b, y[d + 3] = v.c, y[d + 4] = v.d, y[d + 5] = v.tx, y[d + 6] = v.ty
                        }
                    } else if (i < -s) {
                        if (t < -s || t >= s) return this.globalTransformMatrix;
                        if (d = 7 * (a * (l + 1) + 2 * _ + ((r = i > this._kY * (t - p - c) - n) ? 1 : 0)), this._matrixCahce[d] > 0) v.copyFromArray(y, d + 1);
                        else {
                            g = 2 * _, x = this._hullCache[10], b = this._hullCache[11], A = this._hullCache[8] + _ * x, C = this._hullCache[9] + _ * b, T = this._vertices;
                            r ? this._getAffineTransform(p + c, -s, c, 800, T[g + 2], T[g + 3], T[g], T[g + 1], A + x, C + b, e._helpTransform, v, !0) : this._getAffineTransform(p, -n, c, 800, A, C, A + x, C + b, T[g], T[g + 1], e._helpTransform, v, !1), y[d] = 1, y[d + 1] = v.a, y[d + 2] = v.b, y[d + 3] = v.c, y[d + 4] = v.d, y[d + 5] = v.tx, y[d + 6] = v.ty
                        }
                    } else if (i >= s) {
                        if (t < -s || t >= s) return this.globalTransformMatrix;
                        if (d = 7 * (2 * (a * (l + 1) + a + l + f) + ((r = i > this._kY * (t - p - c) + s) ? 1 : 0)), this._matrixCahce[d] > 0) v.copyFromArray(y, d + 1);
                        else {
                            g = l * (h + 2) + 2 * _, x = this._hullCache[10], b = this._hullCache[11], A = this._hullCache[6] - (a - _) * x, C = this._hullCache[7] - (a - _) * b, T = this._vertices;
                            r ? this._getAffineTransform(p + c, n, c, 800, A + x, C + b, A, C, T[g + 2], T[g + 3], e._helpTransform, v, !0) : this._getAffineTransform(p, s, c, 800, T[g], T[g + 1], T[g + 2], T[g + 3], A, C, e._helpTransform, v, !1), y[d] = 1, y[d + 1] = v.a, y[d + 2] = v.b, y[d + 3] = v.c, y[d + 4] = v.d, y[d + 5] = v.tx, y[d + 6] = v.ty
                        }
                    } else if (d = 7 * (2 * (a * f + _) + ((r = i > this._k * (t - p - c) + m) ? 1 : 0)), this._matrixCahce[d] > 0) v.copyFromArray(y, d + 1);
                    else {
                        g = 2 * _ + f * (h + 2), T = this._vertices;
                        r ? this._getAffineTransform(p + c, m + u, c, u, T[g + h + 4], T[g + h + 5], T[g + h + 2], T[g + h + 3], T[g + 2], T[g + 3], e._helpTransform, v, !0) : this._getAffineTransform(p, m, c, u, T[g], T[g + 1], T[g + 2], T[g + 3], T[g + h + 2], T[g + h + 3], e._helpTransform, v, !1), y[d] = 1, y[d + 1] = v.a, y[d + 2] = v.b, y[d + 3] = v.c, y[d + 4] = v.d, y[d + 5] = v.tx, y[d + 6] = v.ty
                    }
                    return v
                }, e.prototype.init = function(e, i) {
                    if (null === this._boneData) {
                        t.prototype.init.call(this, e, i);
                        var n = e.segmentX,
                            r = e.segmentY,
                            s = e.vertices.length;
                        this._dX = 400 / n, this._dY = 400 / r, this._k = -this._dY / this._dX, this._kX = -this._dY / 800, this._kY = -800 / this._dX, this._vertices.length = s, this._deformVertices.length = s, this._matrixCahce.length = 2 * (n * r + 2 * n + 2 * r) * 7, this._hullCache.length = 10;
                        for (var o = 0; o < s; ++o) this._deformVertices[o] = 0
                    }
                }, e.prototype.update = function(t) {
                    if (this._blendState.dirty = !1, t >= 0 && null !== this._cachedFrameIndices) {
                        var i = this._cachedFrameIndices[t];
                        if (i >= 0 && this._cachedFrameIndex === i) this._transformDirty = !1;
                        else if (i >= 0) this._transformDirty = !0, this._cachedFrameIndex = i;
                        else {
                            if (this._hasConstraint)
                                for (var n = 0, r = this._armature._constraints; n < r.length; n++) {
                                    (a = r[n])._root === this && a.update()
                                }
                            this._transformDirty || null !== this._parent && this._parent._childrenTransformDirty ? (this._transformDirty = !0, this._cachedFrameIndex = -1) : this._cachedFrameIndex >= 0 ? (this._transformDirty = !1, this._cachedFrameIndices[t] = this._cachedFrameIndex) : (this._transformDirty = !0, this._cachedFrameIndex = -1)
                        }
                    } else {
                        if (this._hasConstraint)
                            for (var s = 0, o = this._armature._constraints; s < o.length; s++) {
                                var a;
                                (a = o[s])._root === this && a.update()
                            }(this._transformDirty || null !== this._parent && this._parent._childrenTransformDirty) && (t = -1, this._transformDirty = !0, this._cachedFrameIndex = -1)
                    }
                    if (this._transformDirty) {
                        this._transformDirty = !1, this._childrenTransformDirty = !0;
                        for (var l = 0, h = this._matrixCahce.length; l < h; l += 7) this._matrixCahce[l] = -1;
                        if (this._updateVertices(), this._cachedFrameIndex < 0) {
                            var c = t >= 0;
                            this._localDirty && this._updateGlobalTransformMatrix(c), c && null !== this._cachedFrameIndices && (this._cachedFrameIndex = this._cachedFrameIndices[t] = this._armature._armatureData.setCacheFrame(this.globalTransformMatrix, this.global))
                        } else this._armature._armatureData.getCacheFrame(this.globalTransformMatrix, this.global, this._cachedFrameIndex);
                        var u = 2 * this.global.x,
                            _ = 2 * this.global.y,
                            f = e._helpPoint;
                        this.globalTransformMatrix.transformPoint(1e3, -200, f), this._hullCache[0] = f.x, this._hullCache[1] = f.y, this._hullCache[2] = u - f.x, this._hullCache[3] = _ - f.y, this.globalTransformMatrix.transformPoint(0, this._dY, f, !0), this._hullCache[4] = f.x, this._hullCache[5] = f.y, this.globalTransformMatrix.transformPoint(200, 1e3, f), this._hullCache[6] = f.x, this._hullCache[7] = f.y, this._hullCache[8] = u - f.x, this._hullCache[9] = _ - f.y, this.globalTransformMatrix.transformPoint(this._dX, 0, f, !0), this._hullCache[10] = f.x, this._hullCache[11] = f.y
                    } else this._childrenTransformDirty && (this._childrenTransformDirty = !1);
                    this._localDirty = !0
                }, e
            })(t.Bone);
            t.Surface = e
        })(r || (r = {})), (function(t) {
            var e = (function(e) {
                function i() {
                    var i = null !== e && e.apply(this, arguments) || this;
                    return i._localMatrix = new t.Matrix, i._colorTransform = new t.ColorTransform, i._displayDatas = [], i._displayList = [], i._deformVertices = null, i._rawDisplay = null, i._meshDisplay = null, i
                }
                return n(i, e), i.prototype._onClear = function() {
                    e.prototype._onClear.call(this);
                    for (var i = [], n = 0, r = this._displayList; n < r.length; n++) {
                        null !== (a = r[n]) && a !== this._rawDisplay && a !== this._meshDisplay && i.indexOf(a) < 0 && i.push(a)
                    }
                    for (var s = 0, o = i; s < o.length; s++) {
                        var a;
                        (a = o[s]) instanceof t.Armature ? a.dispose() : this._disposeDisplay(a, !0)
                    }
                    null !== this._deformVertices && this._deformVertices.returnToPool(), null !== this._meshDisplay && this._meshDisplay !== this._rawDisplay && this._disposeDisplay(this._meshDisplay, !1), null !== this._rawDisplay && this._disposeDisplay(this._rawDisplay, !1), this.displayController = null, this._displayDirty = !1, this._zOrderDirty = !1, this._blendModeDirty = !1, this._colorDirty = !1, this._transformDirty = !1, this._visible = !0, this._blendMode = 0, this._displayIndex = -1, this._animationDisplayIndex = -1, this._zOrder = 0, this._cachedFrameIndex = -1, this._pivotX = 0, this._pivotY = 0, this._localMatrix.identity(), this._colorTransform.identity(), this._displayList.length = 0, this._displayDatas.length = 0, this._slotData = null, this._rawDisplayDatas = null, this._displayData = null, this._boundingBoxData = null, this._textureData = null, this._deformVertices = null, this._rawDisplay = null, this._meshDisplay = null, this._display = null, this._childArmature = null, this._parent = null, this._cachedFrameIndices = null
                }, i.prototype._getDefaultRawDisplayData = function(t) {
                    var e = this._armature._armatureData.defaultSkin;
                    if (null !== e) {
                        var i = e.getDisplays(this._slotData.name);
                        if (null !== i) return t < i.length ? i[t] : null
                    }
                    return null
                }, i.prototype._updateDisplayData = function() {
                    var e = this._displayData,
                        n = null !== this._deformVertices ? this._deformVertices.verticesData : null,
                        r = this._textureData,
                        s = null,
                        o = null;
                    if (this._displayData = null, this._boundingBoxData = null, this._textureData = null, this._displayIndex >= 0 && (null !== this._rawDisplayDatas && (s = this._displayIndex < this._rawDisplayDatas.length ? this._rawDisplayDatas[this._displayIndex] : null), null === s && (s = this._getDefaultRawDisplayData(this._displayIndex)), this._displayIndex < this._displayDatas.length && (this._displayData = this._displayDatas[this._displayIndex])), null !== this._displayData && (2 === this._displayData.type ? o = this._displayData.vertices : 4 === this._displayData.type ? o = this._displayData.vertices : null !== s && (2 === s.type ? o = s.vertices : 4 === s.type && (o = s.vertices)), 3 === this._displayData.type ? this._boundingBoxData = this._displayData.boundingBox : null !== s && 3 === s.type && (this._boundingBoxData = s.boundingBox), 0 === this._displayData.type ? this._textureData = this._displayData.texture : 2 === this._displayData.type && (this._textureData = this._displayData.texture)), this._displayData !== e || o !== n || this._textureData !== r) {
                        if (null === o && null !== this._textureData) {
                            var a = this._displayData,
                                l = this._textureData.parent.scale * this._armature._armatureData.scale,
                                h = this._textureData.frame;
                            this._pivotX = a.pivot.x, this._pivotY = a.pivot.y;
                            var c = null !== h ? h : this._textureData.region,
                                u = c.width,
                                _ = c.height;
                            this._textureData.rotated && null === h && (u = c.height, _ = c.width), this._pivotX *= u * l, this._pivotY *= _ * l, null !== h && (this._pivotX += h.x * l, this._pivotY += h.y * l), null !== this._displayData && null !== s && this._displayData !== s && (s.transform.toMatrix(i._helpMatrix), i._helpMatrix.invert(), i._helpMatrix.transformPoint(0, 0, i._helpPoint), this._pivotX -= i._helpPoint.x, this._pivotY -= i._helpPoint.y, this._displayData.transform.toMatrix(i._helpMatrix), i._helpMatrix.invert(), i._helpMatrix.transformPoint(0, 0, i._helpPoint), this._pivotX += i._helpPoint.x, this._pivotY += i._helpPoint.y), t.DragonBones.yDown || (this._pivotY = (this._textureData.rotated ? this._textureData.region.width : this._textureData.region.height) * l - this._pivotY)
                        } else this._pivotX = 0, this._pivotY = 0;
                        null !== s ? this.origin = s.transform : null !== this._displayData ? this.origin = this._displayData.transform : this.origin = null, o !== n ? (null === this._deformVertices && (this._deformVertices = t.BaseObject.borrowObject(t.DeformVertices)), this._deformVertices.init(o, this._armature)) : null !== this._deformVertices && this._textureData !== r && (this._deformVertices.verticesDirty = !0), this._displayDirty = !0, this._transformDirty = !0
                    }
                }, i.prototype._updateDisplay = function() {
                    var e = null !== this._display ? this._display : this._rawDisplay,
                        i = this._childArmature;
                    this._displayIndex >= 0 && this._displayIndex < this._displayList.length ? (this._display = this._displayList[this._displayIndex], null !== this._display && this._display instanceof t.Armature ? (this._childArmature = this._display, this._display = this._childArmature.display) : this._childArmature = null) : (this._display = null, this._childArmature = null);
                    var n = null !== this._display ? this._display : this._rawDisplay;
                    if (n !== e && (this._onUpdateDisplay(), this._replaceDisplay(e), this._transformDirty = !0, this._visibleDirty = !0, this._blendModeDirty = !0, this._colorDirty = !0), n !== this._rawDisplay && n !== this._meshDisplay || this._updateFrame(), this._childArmature !== i && (null !== i && (i._parent = null, i.clock = null, i.inheritAnimation && i.animation.reset()), null !== this._childArmature && (this._childArmature._parent = this, this._childArmature.clock = this._armature.clock, this._childArmature.inheritAnimation))) {
                        if (0 === this._childArmature.cacheFrameRate) {
                            var r = this._armature.cacheFrameRate;
                            0 !== r && (this._childArmature.cacheFrameRate = r)
                        }
                        var s = null;
                        if (null !== this._displayData && 1 === this._displayData.type) s = this._displayData.actions;
                        else if (this._displayIndex >= 0 && null !== this._rawDisplayDatas) {
                            var o = this._displayIndex < this._rawDisplayDatas.length ? this._rawDisplayDatas[this._displayIndex] : null;
                            null === o && (o = this._getDefaultRawDisplayData(this._displayIndex)), null !== o && 1 === o.type && (s = o.actions)
                        }
                        if (null !== s && s.length > 0)
                            for (var a = 0, l = s; a < l.length; a++) {
                                var h = l[a],
                                    c = t.BaseObject.borrowObject(t.EventObject);
                                t.EventObject.actionDataToInstance(h, c, this._armature), c.slot = this, this._armature._bufferAction(c, !1)
                            } else this._childArmature.animation.play()
                    }
                }, i.prototype._updateGlobalTransformMatrix = function(t) {
                    var e = 0 === this._parent._boneData.type ? this._parent.globalTransformMatrix : this._parent._getGlobalTransformMatrix(this.global.x, this.global.y);
                    this.globalTransformMatrix.copyFrom(this._localMatrix), this.globalTransformMatrix.concat(e), t ? this.global.fromMatrix(this.globalTransformMatrix) : this._globalDirty = !0
                }, i.prototype._setDisplayIndex = function(t, e) {
                    if (void 0 === e && (e = !1), e) {
                        if (this._animationDisplayIndex === t) return !1;
                        this._animationDisplayIndex = t
                    }
                    return this._displayIndex !== t && (this._displayIndex = t, this._displayDirty = !0, this._updateDisplayData(), this._displayDirty)
                }, i.prototype._setZorder = function(t) {
                    return this._zOrder, this._zOrder = t, this._zOrderDirty = !0, this._zOrderDirty
                }, i.prototype._setColor = function(t) {
                    return this._colorTransform.copyFrom(t), this._colorDirty = !0, this._colorDirty
                }, i.prototype._setDisplayList = function(e) {
                    if (null !== e && e.length > 0) {
                        this._displayList.length !== e.length && (this._displayList.length = e.length);
                        for (var i = 0, n = e.length; i < n; ++i) {
                            var r = e[i];
                            null !== r && r !== this._rawDisplay && r !== this._meshDisplay && !(r instanceof t.Armature) && this._displayList.indexOf(r) < 0 && this._initDisplay(r, !0), this._displayList[i] = r
                        }
                    } else this._displayList.length > 0 && (this._displayList.length = 0);
                    return this._displayIndex >= 0 && this._displayIndex < this._displayList.length ? this._displayDirty = this._display !== this._displayList[this._displayIndex] : this._displayDirty = null !== this._display, this._updateDisplayData(), this._displayDirty
                }, i.prototype.init = function(t, e, i, n) {
                    if (null === this._slotData) {
                        this._slotData = t, this._isFromCache = !1, this._visibleDirty = !0, this._blendModeDirty = !0, this._colorDirty = !0, this._blendMode = this._slotData.blendMode, this._zOrder = this._slotData.zOrder, this._colorTransform.copyFrom(this._slotData.color), this._rawDisplay = i, this._meshDisplay = n, this._armature = e;
                        var r = this._armature.getBone(this._slotData.parent.name);
                        null !== r && (this._parent = r), this._armature._addSlot(this), this._initDisplay(this._rawDisplay, !1), this._rawDisplay !== this._meshDisplay && this._initDisplay(this._meshDisplay, !1), this._onUpdateDisplay(), this._addDisplay()
                    }
                }, i.prototype.update = function(t) {
                    if (this._isFromCache = !1, this._displayDirty && (this._displayDirty = !1, this._updateDisplay(), this._transformDirty && (null !== this.origin ? this.global.copyFrom(this.origin).add(this.offset).toMatrix(this._localMatrix) : this.global.copyFrom(this.offset).toMatrix(this._localMatrix))), this._zOrderDirty && (this._zOrderDirty = !1, this._updateZOrder()), t >= 0 && null !== this._cachedFrameIndices) {
                        var e = this._cachedFrameIndices[t];
                        e >= 0 && this._cachedFrameIndex === e ? this._transformDirty = !1 : e >= 0 ? (this._transformDirty = !0, this._cachedFrameIndex = e) : this._transformDirty || this._parent._childrenTransformDirty ? (this._transformDirty = !0, this._cachedFrameIndex = -1) : this._cachedFrameIndex >= 0 ? (this._transformDirty = !1, this._cachedFrameIndices[t] = this._cachedFrameIndex) : (this._transformDirty = !0, this._cachedFrameIndex = -1)
                    } else(this._transformDirty || this._parent._childrenTransformDirty) && (t = -1, this._transformDirty = !0, this._cachedFrameIndex = -1);
                    if (null !== this._display) {
                        if (this._visibleDirty && (this._visibleDirty = !1, this._updateVisible()), this._blendModeDirty && (this._blendModeDirty = !1, this._updateBlendMode()), this._colorDirty && (this._colorDirty = !1, this._updateColor()), null !== this._deformVertices && null !== this._deformVertices.verticesData && this._display === this._meshDisplay) {
                            var i = null !== this._deformVertices.verticesData.weight,
                                n = 0 !== this._parent._boneData.type;
                            if ((this._deformVertices.verticesDirty || i && this._deformVertices.isBonesUpdate() || n && this._parent._childrenTransformDirty) && (this._deformVertices.verticesDirty = !1, this._updateMesh()), i || n) return
                        }
                        if (this._transformDirty) {
                            if (this._transformDirty = !1, this._cachedFrameIndex < 0) {
                                var r = t >= 0;
                                this._updateGlobalTransformMatrix(r), r && null !== this._cachedFrameIndices && (this._cachedFrameIndex = this._cachedFrameIndices[t] = this._armature._armatureData.setCacheFrame(this.globalTransformMatrix, this.global))
                            } else this._isFromCache = !0, this._armature._armatureData.getCacheFrame(this.globalTransformMatrix, this.global, this._cachedFrameIndex);
                            this._updateTransform()
                        }
                    }
                }, i.prototype.updateTransformAndMatrix = function() {
                    this._transformDirty && (this._transformDirty = !1, this._updateGlobalTransformMatrix(!1))
                }, i.prototype.replaceDisplayData = function(t, e) {
                    if (void 0 === e && (e = -1), e < 0 && (e = this._displayIndex < 0 ? 0 : this._displayIndex), this._displayDatas.length <= e) {
                        this._displayDatas.length = e + 1;
                        for (var i = 0, n = this._displayDatas.length; i < n; ++i) this._displayDatas[i] || (this._displayDatas[i] = null)
                    }
                    this._displayDatas[e] = t
                }, i.prototype.containsPoint = function(t, e) {
                    return null !== this._boundingBoxData && (this.updateTransformAndMatrix(), i._helpMatrix.copyFrom(this.globalTransformMatrix), i._helpMatrix.invert(), i._helpMatrix.transformPoint(t, e, i._helpPoint), this._boundingBoxData.containsPoint(i._helpPoint.x, i._helpPoint.y))
                }, i.prototype.intersectsSegment = function(t, e, n, r, s, o, a) {
                    if (void 0 === s && (s = null), void 0 === o && (o = null), void 0 === a && (a = null), null === this._boundingBoxData) return 0;
                    this.updateTransformAndMatrix(), i._helpMatrix.copyFrom(this.globalTransformMatrix), i._helpMatrix.invert(), i._helpMatrix.transformPoint(t, e, i._helpPoint), t = i._helpPoint.x, e = i._helpPoint.y, i._helpMatrix.transformPoint(n, r, i._helpPoint), n = i._helpPoint.x, r = i._helpPoint.y;
                    var l = this._boundingBoxData.intersectsSegment(t, e, n, r, s, o, a);
                    return l > 0 && (1 === l || 2 === l ? null !== s ? (this.globalTransformMatrix.transformPoint(s.x, s.y, s), null !== o && (o.x = s.x, o.y = s.y)) : null !== o && this.globalTransformMatrix.transformPoint(o.x, o.y, o) : (null !== s && this.globalTransformMatrix.transformPoint(s.x, s.y, s), null !== o && this.globalTransformMatrix.transformPoint(o.x, o.y, o)), null !== a && (this.globalTransformMatrix.transformPoint(Math.cos(a.x), Math.sin(a.x), i._helpPoint, !0), a.x = Math.atan2(i._helpPoint.y, i._helpPoint.x), this.globalTransformMatrix.transformPoint(Math.cos(a.y), Math.sin(a.y), i._helpPoint, !0), a.y = Math.atan2(i._helpPoint.y, i._helpPoint.x))), l
                }, i.prototype.invalidUpdate = function() {
                    this._displayDirty = !0, this._transformDirty = !0
                }, Object.defineProperty(i.prototype, "visible", {
                    get: function() {
                        return this._visible
                    },
                    set: function(t) {
                        this._visible !== t && (this._visible = t, this._updateVisible())
                    },
                    enumerable: !0,
                    configurable: !0
                }), Object.defineProperty(i.prototype, "displayIndex", {
                    get: function() {
                        return this._displayIndex
                    },
                    set: function(t) {
                        this._setDisplayIndex(t) && this.update(-1)
                    },
                    enumerable: !0,
                    configurable: !0
                }), Object.defineProperty(i.prototype, "name", {
                    get: function() {
                        return this._slotData.name
                    },
                    enumerable: !0,
                    configurable: !0
                }), Object.defineProperty(i.prototype, "displayList", {
                    get: function() {
                        return this._displayList.concat()
                    },
                    set: function(e) {
                        var i = this._displayList.concat(),
                            n = new Array;
                        this._setDisplayList(e) && this.update(-1);
                        for (var r = 0, s = i; r < s.length; r++) {
                            null !== (l = s[r]) && l !== this._rawDisplay && l !== this._meshDisplay && this._displayList.indexOf(l) < 0 && n.indexOf(l) < 0 && n.push(l)
                        }
                        for (var o = 0, a = n; o < a.length; o++) {
                            var l;
                            (l = a[o]) instanceof t.Armature || this._disposeDisplay(l, !0)
                        }
                    },
                    enumerable: !0,
                    configurable: !0
                }), Object.defineProperty(i.prototype, "slotData", {
                    get: function() {
                        return this._slotData
                    },
                    enumerable: !0,
                    configurable: !0
                }), Object.defineProperty(i.prototype, "rawDisplayDatas", {
                    get: function() {
                        return this._rawDisplayDatas
                    },
                    set: function(t) {
                        if (this._rawDisplayDatas !== t)
                            if (this._displayDirty = !0, this._rawDisplayDatas = t, null !== this._rawDisplayDatas) {
                                this._displayDatas.length = this._rawDisplayDatas.length;
                                for (var e = 0, i = this._displayDatas.length; e < i; ++e) {
                                    var n = this._rawDisplayDatas[e];
                                    null === n && (n = this._getDefaultRawDisplayData(e)), this._displayDatas[e] = n
                                }
                            } else this._displayDatas.length = 0
                    },
                    enumerable: !0,
                    configurable: !0
                }), Object.defineProperty(i.prototype, "displayData", {
                    get: function() {
                        return this._displayData
                    },
                    enumerable: !0,
                    configurable: !0
                }), Object.defineProperty(i.prototype, "boundingBoxData", {
                    get: function() {
                        return this._boundingBoxData
                    },
                    enumerable: !0,
                    configurable: !0
                }), Object.defineProperty(i.prototype, "rawDisplay", {
                    get: function() {
                        return this._rawDisplay
                    },
                    enumerable: !0,
                    configurable: !0
                }), Object.defineProperty(i.prototype, "meshDisplay", {
                    get: function() {
                        return this._meshDisplay
                    },
                    enumerable: !0,
                    configurable: !0
                }), Object.defineProperty(i.prototype, "display", {
                    get: function() {
                        return this._display
                    },
                    set: function(t) {
                        if (this._display !== t) {
                            var e = this._displayList.length;
                            if (this._displayIndex < 0 && 0 === e && (this._displayIndex = 0), !(this._displayIndex < 0)) {
                                var i = this.displayList;
                                e <= this._displayIndex && (i.length = this._displayIndex + 1), i[this._displayIndex] = t, this.displayList = i
                            }
                        }
                    },
                    enumerable: !0,
                    configurable: !0
                }), Object.defineProperty(i.prototype, "childArmature", {
                    get: function() {
                        return this._childArmature
                    },
                    set: function(t) {
                        this._childArmature !== t && (this.display = t)
                    },
                    enumerable: !0,
                    configurable: !0
                }), Object.defineProperty(i.prototype, "parent", {
                    get: function() {
                        return this._parent
                    },
                    enumerable: !0,
                    configurable: !0
                }), i.prototype.getDisplay = function() {
                    return this._display
                }, i.prototype.setDisplay = function(t) {
                    this.display = t
                }, i
            })(t.TransformObject);
            t.Slot = e
        })(r || (r = {})), (function(t) {
            var e = (function(e) {
                function i() {
                    return null !== e && e.apply(this, arguments) || this
                }
                return n(i, e), i.prototype._onClear = function() {
                    this._armature = null, this._target = null, this._root = null, this._bone = null
                }, Object.defineProperty(i.prototype, "name", {
                    get: function() {
                        return this._constraintData.name
                    },
                    enumerable: !0,
                    configurable: !0
                }), i._helpMatrix = new t.Matrix, i._helpTransform = new t.Transform, i._helpPoint = new t.Point, i
            })(t.BaseObject);
            t.Constraint = e;
            var i = (function(e) {
                function i() {
                    return null !== e && e.apply(this, arguments) || this
                }
                return n(i, e), i.toString = function() {
                    return "[class dragonBones.IKConstraint]"
                }, i.prototype._onClear = function() {
                    e.prototype._onClear.call(this), this._scaleEnabled = !1, this._bendPositive = !1, this._weight = 1, this._constraintData = null
                }, i.prototype._computeA = function() {
                    var e = this._target.global,
                        i = this._root.global,
                        n = this._root.globalTransformMatrix,
                        r = Math.atan2(e.y - i.y, e.x - i.x);
                    i.scaleX < 0 && (r += Math.PI), i.rotation += t.Transform.normalizeRadian(r - i.rotation) * this._weight, i.toMatrix(n)
                }, i.prototype._computeB = function() {
                    var e = this._bone._boneData.length,
                        i = this._root,
                        n = this._target.global,
                        r = i.global,
                        s = this._bone.global,
                        o = this._bone.globalTransformMatrix,
                        a = o.a * e,
                        l = o.b * e,
                        h = a * a + l * l,
                        c = Math.sqrt(h),
                        u = s.x - r.x,
                        _ = s.y - r.y,
                        f = u * u + _ * _,
                        d = Math.sqrt(f),
                        p = s.rotation,
                        m = r.rotation,
                        y = Math.atan2(_, u),
                        v = (u = n.x - r.x) * u + (_ = n.y - r.y) * _,
                        g = Math.sqrt(v),
                        x = 0;
                    if (c + d <= g || g + c <= d || g + d <= c) x = Math.atan2(n.y - r.y, n.x - r.x), c + d <= g || d < c && (x += Math.PI);
                    else {
                        var b = (f - h + v) / (2 * v),
                            A = Math.sqrt(f - b * b * v) / g,
                            C = r.x + u * b,
                            T = r.y + _ * b,
                            S = -_ * A,
                            w = u * A,
                            E = !1,
                            M = i.parent;
                        if (null !== M) {
                            var D = M.globalTransformMatrix;
                            E = D.a * D.d - D.b * D.c < 0
                        }
                        E !== this._bendPositive ? (s.x = C - S, s.y = T - w) : (s.x = C + S, s.y = T + w), x = Math.atan2(s.y - r.y, s.x - r.x)
                    }
                    var B = t.Transform.normalizeRadian(x - y);
                    r.rotation = m + B * this._weight, r.toMatrix(i.globalTransformMatrix);
                    var I = y + B * this._weight;
                    s.x = r.x + Math.cos(I) * d, s.y = r.y + Math.sin(I) * d;
                    var P = Math.atan2(n.y - s.y, n.x - s.x);
                    s.scaleX < 0 && (P += Math.PI), s.rotation = r.rotation + p - m + t.Transform.normalizeRadian(P - B - p) * this._weight, s.toMatrix(o)
                }, i.prototype.init = function(t, e) {
                    if (null === this._constraintData) {
                        this._constraintData = t, this._armature = e, this._target = this._armature.getBone(this._constraintData.target.name), this._root = this._armature.getBone(this._constraintData.root.name), this._bone = null !== this._constraintData.bone ? this._armature.getBone(this._constraintData.bone.name) : null;
                        var i = this._constraintData;
                        this._scaleEnabled = i.scaleEnabled, this._bendPositive = i.bendPositive, this._weight = i.weight, this._root._hasConstraint = !0
                    }
                }, i.prototype.update = function() {
                    this._root.updateByConstraint(), null !== this._bone ? (this._bone.updateByConstraint(), this._computeB()) : this._computeA()
                }, i.prototype.invalidUpdate = function() {
                    this._root.invalidUpdate(), null !== this._bone && this._bone.invalidUpdate()
                }, i
            })(e);
            t.IKConstraint = i;
            var r = (function(e) {
                function i() {
                    var t = null !== e && e.apply(this, arguments) || this;
                    return t._bones = [], t._spaces = [], t._positions = [], t._curves = [], t._boneLengths = [], t._pathGlobalVertices = [], t._segments = [10], t
                }
                return n(i, e), i.toString = function() {
                    return "[class dragonBones.PathConstraint]"
                }, i.prototype._onClear = function() {
                    e.prototype._onClear.call(this), this.dirty = !1, this.pathOffset = 0, this.position = 0, this.spacing = 0, this.rotateOffset = 0, this.rotateMix = 1, this.translateMix = 1, this._pathSlot = null, this._bones.length = 0, this._spaces.length = 0, this._positions.length = 0, this._curves.length = 0, this._boneLengths.length = 0, this._pathGlobalVertices.length = 0
                }, i.prototype._updatePathVertices = function(t) {
                    var e = this._armature,
                        i = e.armatureData.parent,
                        n = e.armatureData.scale,
                        r = i.intArray,
                        s = i.floatArray,
                        o = t.offset,
                        a = r[o + 0],
                        l = r[o + 2];
                    this._pathGlobalVertices.length = 2 * a;
                    var h = t.weight;
                    if (null !== h)
                        for (var c = this._pathSlot._deformVertices.bones, u = h.bones.length, _ = h.offset, f = r[_ + 1], d = _ + 2 + u, p = (T = 0, 0); T < a; T++) {
                            for (var m = 0, y = 0, v = 0, g = r[d++]; v < g; v++) {
                                var x = c[r[d++]];
                                if (null !== x) {
                                    x.updateByConstraint();
                                    C = x.globalTransformMatrix;
                                    var b = s[f++];
                                    w = s[f++] * n, E = s[f++] * n;
                                    m += (C.a * w + C.c * E + C.tx) * b, y += (C.b * w + C.d * E + C.ty) * b
                                }
                            }
                            this._pathGlobalVertices[p++] = m, this._pathGlobalVertices[p++] = y
                        } else {
                            var A = this._pathSlot.parent;
                            A.updateByConstraint();
                            for (var C = A.globalTransformMatrix, T = 0, S = l; T < a; T += 2) {
                                var w = s[S++] * n,
                                    E = s[S++] * n,
                                    M = C.a * w + C.c * E + C.tx,
                                    D = C.b * w + C.d * E + C.ty;
                                this._pathGlobalVertices[T] = M, this._pathGlobalVertices[T + 1] = D
                            }
                        }
                }, i.prototype._computeVertices = function(t, e, i, n) {
                    for (var r = i, s = t; r < e; r += 2) n[r] = this._pathGlobalVertices[s++], n[r + 1] = this._pathGlobalVertices[s++]
                }, i.prototype._computeBezierCurve = function(t, e, i, n, r) {
                    var s = this._armature.armatureData.parent.intArray[t.vertices.offset + 0],
                        o = this._positions,
                        a = this._spaces,
                        l = t.closed,
                        h = Array(),
                        c = 2 * s,
                        u = c / 6,
                        _ = -1,
                        f = this.position;
                    o.length = 3 * e + 2;
                    var d = 0;
                    if (t.constantSpeed) {
                        l ? (c += 2, h.length = s, this._computeVertices(2, c - 4, 0, h), this._computeVertices(0, 2, c - 4, h), h[c - 2] = h[0], h[c - 1] = h[1]) : (u--, c -= 4, h.length = c, this._computeVertices(2, c, 0, h));
                        var p = new Array(u);
                        d = 0;
                        for (var m, y, v, g, x, b, A, C, T = h[0], S = h[1], w = 0, E = 0, M = 0, D = 0, B = 0, I = 0, P = (z = 0, 2); z < u; z++, P += 6) w = h[P], E = h[P + 1], M = h[P + 2], D = h[P + 3], B = h[P + 4], I = h[P + 5], x = 2 * (m = .1875 * (T - 2 * w + M)) + (v = .09375 * (3 * (w - M) - T + B)), b = 2 * (y = .1875 * (S - 2 * E + D)) + (g = .09375 * (3 * (E - D) - S + I)), A = .75 * (w - T) + m + .16666667 * v, C = .75 * (E - S) + y + .16666667 * g, d += Math.sqrt(A * A + C * C), A += x, C += b, x += v, b += g, d += Math.sqrt(A * A + C * C), A += x, C += b, d += Math.sqrt(A * A + C * C), A += x + v, C += b + g, d += Math.sqrt(A * A + C * C), p[z] = d, T = B, S = I;
                        if (n && (f *= d), r)
                            for (z = 0; z < e; z++) a[z] *= d;
                        for (var R = this._segments, O = 0, L = (z = 0, j = 0, W = 0, 0); z < e; z++, j += 3) {
                            var F = f += a[z];
                            if (l)(F %= d) < 0 && (F += d), W = 0;
                            else {
                                if (F < 0) continue;
                                if (F > d) continue
                            }
                            for (;; W++) {
                                var N = p[W];
                                if (!(F > N)) {
                                    if (0 === W) F /= N;
                                    else F = (F - (G = p[W - 1])) / (N - G);
                                    break
                                }
                            }
                            if (W !== _) {
                                _ = W;
                                var V = 6 * W;
                                for (T = h[V], S = h[V + 1], w = h[V + 2], E = h[V + 3], M = h[V + 4], D = h[V + 5], B = h[V + 6], I = h[V + 7], x = 2 * (m = .03 * (T - 2 * w + M)) + (v = .006 * (3 * (w - M) - T + B)), b = 2 * (y = .03 * (S - 2 * E + D)) + (g = .006 * (3 * (E - D) - S + I)), A = .3 * (w - T) + m + .16666667 * v, C = .3 * (E - S) + y + .16666667 * g, O = Math.sqrt(A * A + C * C), R[0] = O, V = 1; V < 8; V++) A += x, C += b, x += v, b += g, O += Math.sqrt(A * A + C * C), R[V] = O;
                                A += x, C += b, O += Math.sqrt(A * A + C * C), R[8] = O, A += x + v, C += b + g, O += Math.sqrt(A * A + C * C), R[9] = O, L = 0
                            }
                            for (F *= O;; L++) {
                                var k = R[L];
                                if (!(F > k)) {
                                    var G;
                                    if (0 === L) F /= k;
                                    else F = L + (F - (G = R[L - 1])) / (k - G);
                                    break
                                }
                            }
                            this.addCurvePosition(.1 * F, T, S, w, E, M, D, B, I, o, j, i)
                        }
                    } else {
                        var U = t.curveLengths;
                        if (d = U[u -= l ? 1 : 2], n && (f *= d), r)
                            for (var z = 0; z < e; z++) a[z] *= d;
                        h.length = 8;
                        for (var z = 0, j = 0, W = 0; z < e; z++, j += 3) {
                            if (f += a[z], l)(f %= d) < 0 && (f += d), W = 0;
                            else {
                                if (f < 0) continue;
                                if (f > d) continue
                            }
                            for (var H = 0;; W++) {
                                var X = U[W];
                                if (!(f > X)) {
                                    if (0 === W) H = f / X;
                                    else {
                                        var Y = U[W - 1];
                                        H = (f - Y) / (X - Y)
                                    }
                                    break
                                }
                            }
                            W !== _ && (_ = W, l && W === u ? (this._computeVertices(c - 4, 4, 0, h), this._computeVertices(0, 4, 4, h)) : this._computeVertices(6 * W + 2, 8, 0, h)), this.addCurvePosition(H, h[0], h[1], h[2], h[3], h[4], h[5], h[6], h[7], o, j, i)
                        }
                    }
                }, i.prototype.addCurvePosition = function(t, e, i, n, r, s, o, a, l, h, c, u) {
                    if (0 === t) return h[c] = e, h[c + 1] = i, void(h[c + 2] = 0);
                    if (1 === t) return h[c] = a, h[c + 1] = l, void(h[c + 2] = 0);
                    var _ = 1 - t,
                        f = _ * _,
                        d = t * t,
                        p = f * _,
                        m = f * t * 3,
                        y = _ * d * 3,
                        v = t * d,
                        g = p * e + m * n + y * s + v * a,
                        x = p * i + m * r + y * o + v * l;
                    h[c] = g, h[c + 1] = x, h[c + 2] = u ? Math.atan2(x - (p * i + m * r + y * o), g - (p * e + m * n + y * s)) : 0
                }, i.prototype.init = function(t, e) {
                    this._constraintData = t, this._armature = e;
                    var i = t;
                    this.pathOffset = i.pathDisplayData.vertices.offset, this.position = i.position, this.spacing = i.spacing, this.rotateOffset = i.rotateOffset, this.rotateMix = i.rotateMix, this.translateMix = i.translateMix, this._root = this._armature.getBone(i.root.name), this._target = this._armature.getBone(i.target.name), this._pathSlot = this._armature.getSlot(i.pathSlot.name);
                    for (var n = 0, r = i.bones.length; n < r; n++) {
                        var s = this._armature.getBone(i.bones[n].name);
                        null !== s && this._bones.push(s)
                    }
                    2 === i.rotateMode && (this._boneLengths.length = this._bones.length), this._root._hasConstraint = !0
                }, i.prototype.update = function() {
                    var e = this._pathSlot;
                    if (null !== e._deformVertices && null !== e._deformVertices.verticesData && e._deformVertices.verticesData.offset === this.pathOffset) {
                        var i = this._constraintData,
                            n = e._displayData,
                            r = !1,
                            s = e._deformVertices;
                        if (this._root._childrenTransformDirty ? (this._updatePathVertices(n.vertices), r = !0) : null !== s && (s.verticesDirty || s.isBonesUpdate()) && (this._updatePathVertices(n.vertices), s.verticesDirty = !1, r = !0), r || this.dirty) {
                            var o = i.positionMode,
                                a = i.spacingMode,
                                l = i.rotateMode,
                                h = this._bones,
                                c = 0 === a,
                                u = 2 === l,
                                _ = 0 === l,
                                f = h.length,
                                d = _ ? f : f + 1,
                                p = this.spacing,
                                m = this._spaces;
                            if (m.length = d, u || c) {
                                m[0] = 0;
                                for (var y = 0, v = d - 1; y < v; y++) {
                                    (I = h[y]).updateByConstraint();
                                    var g = I._boneData.length,
                                        x = g * (P = I.globalTransformMatrix).a,
                                        b = g * P.b,
                                        A = Math.sqrt(x * x + b * b);
                                    u && (this._boneLengths[y] = A), m[y + 1] = (g + p) * A / g
                                }
                            } else
                                for (y = 0; y < d; y++) m[y] = p;
                            this._computeBezierCurve(n, d, _, 1 === o, 2 === a);
                            var C, T = this._positions,
                                S = this.rotateOffset,
                                w = T[0],
                                E = T[1];
                            if (0 === S) C = 1 === l;
                            else if (C = !1, null !== (I = e.parent)) S *= (P = I.globalTransformMatrix).a * P.d - P.b * P.c > 0 ? t.Transform.DEG_RAD : -t.Transform.DEG_RAD;
                            for (var M = this.rotateMix, D = this.translateMix, B = (y = 0, 3); y < f; y++, B += 3) {
                                var I, P;
                                (I = h[y]).updateByConstraint(), (P = I.globalTransformMatrix).tx += (w - P.tx) * D, P.ty += (E - P.ty) * D;
                                var R = (x = T[B]) - w,
                                    O = (b = T[B + 1]) - E;
                                if (u) {
                                    var L = this._boneLengths[y],
                                        F = (Math.sqrt(R * R + O * O) / L - 1) * M + 1;
                                    P.a *= F, P.b *= F
                                }
                                if (w = x, E = b, M > 0) {
                                    var N = P.a,
                                        V = P.b,
                                        k = P.c,
                                        G = P.d,
                                        U = void 0,
                                        z = void 0,
                                        j = void 0;
                                    if (U = _ ? T[B - 1] : Math.atan2(O, R), U -= Math.atan2(V, N), C) {
                                        z = Math.cos(U), j = Math.sin(U);
                                        var W = I._boneData.length;
                                        w += (W * (z * N - j * V) - R) * M, E += (W * (j * N + z * V) - O) * M
                                    } else U += S;
                                    U > t.Transform.PI ? U -= t.Transform.PI_D : U < -t.Transform.PI && (U += t.Transform.PI_D), U *= M, z = Math.cos(U), j = Math.sin(U), P.a = z * N - j * V, P.b = j * N + z * V, P.c = z * k - j * G, P.d = j * k + z * G
                                }
                                I.global.fromMatrix(P)
                            }
                            this.dirty = !1
                        }
                    }
                }, i.prototype.invalidUpdate = function() {}, i
            })(e);
            t.PathConstraint = r
        })(r || (r = {})), (function(t) {
            var e = (function() {
                function t(t) {
                    void 0 === t && (t = 0), this.time = 0, this.timeScale = 1, this._systemTime = 0, this._animatebles = [], this._clock = null, this.time = t, this._systemTime = .001 * (new Date).getTime()
                }
                return t.prototype.advanceTime = function(t) {
                    t != t && (t = 0);
                    var e = .001 * Date.now();
                    if (t < 0 && (t = e - this._systemTime), this._systemTime = e, 1 !== this.timeScale && (t *= this.timeScale), 0 !== t) {
                        t < 0 ? this.time -= t : this.time += t;
                        for (var i = 0, n = 0, r = this._animatebles.length; i < r; ++i) {
                            var s = this._animatebles[i];
                            null !== s ? (n > 0 && (this._animatebles[i - n] = s, this._animatebles[i] = null), s.advanceTime(t)) : n++
                        }
                        if (n > 0) {
                            for (r = this._animatebles.length; i < r; ++i) {
                                var o = this._animatebles[i];
                                null !== o ? this._animatebles[i - n] = o : n++
                            }
                            this._animatebles.length -= n
                        }
                    }
                }, t.prototype.contains = function(t) {
                    if (t === this) return !1;
                    for (var e = t; e !== this && null !== e;) e = e.clock;
                    return e === this
                }, t.prototype.add = function(t) {
                    this._animatebles.indexOf(t) < 0 && (this._animatebles.push(t), t.clock = this)
                }, t.prototype.remove = function(t) {
                    var e = this._animatebles.indexOf(t);
                    e >= 0 && (this._animatebles[e] = null, t.clock = null)
                }, t.prototype.clear = function() {
                    for (var t = 0, e = this._animatebles; t < e.length; t++) {
                        var i = e[t];
                        null !== i && (i.clock = null)
                    }
                }, Object.defineProperty(t.prototype, "clock", {
                    get: function() {
                        return this._clock
                    },
                    set: function(t) {
                        this._clock !== t && (null !== this._clock && this._clock.remove(this), this._clock = t, null !== this._clock && this._clock.add(this))
                    },
                    enumerable: !0,
                    configurable: !0
                }), t.clock = new t, t
            })();
            t.WorldClock = e
        })(r || (r = {})), (function(t) {
            var e = (function(e) {
                function i() {
                    var t = null !== e && e.apply(this, arguments) || this;
                    return t._animationNames = [], t._animationStates = [], t._animations = {}, t._animationConfig = null, t
                }
                return n(i, e), i.toString = function() {
                    return "[class dragonBones.Animation]"
                }, i.prototype._onClear = function() {
                    for (var t = 0, e = this._animationStates; t < e.length; t++) {
                        e[t].returnToPool()
                    }
                    for (var i in this._animations) delete this._animations[i];
                    null !== this._animationConfig && this._animationConfig.returnToPool(), this.timeScale = 1, this._lockUpdate = !1, this._animationDirty = !1, this._inheritTimeScale = 1, this._animationNames.length = 0, this._animationStates.length = 0, this._armature = null, this._animationConfig = null, this._lastAnimationState = null
                }, i.prototype._fadeOut = function(t) {
                    switch (t.fadeOutMode) {
                        case 1:
                            for (var e = 0, i = this._animationStates; e < i.length; e++) {
                                null === (h = i[e])._parent && (h.layer === t.layer && h.fadeOut(t.fadeOutTime, t.pauseFadeOut))
                            }
                            break;
                        case 2:
                            for (var n = 0, r = this._animationStates; n < r.length; n++) {
                                null === (h = r[n])._parent && (h.group === t.group && h.fadeOut(t.fadeOutTime, t.pauseFadeOut))
                            }
                            break;
                        case 3:
                            for (var s = 0, o = this._animationStates; s < o.length; s++) {
                                null === (h = o[s])._parent && (h.layer === t.layer && h.group === t.group && h.fadeOut(t.fadeOutTime, t.pauseFadeOut))
                            }
                            break;
                        case 4:
                            for (var a = 0, l = this._animationStates; a < l.length; a++) {
                                var h;
                                null === (h = l[a])._parent && h.fadeOut(t.fadeOutTime, t.pauseFadeOut)
                            }
                    }
                }, i.prototype.init = function(e) {
                    null === this._armature && (this._armature = e, this._animationConfig = t.BaseObject.borrowObject(t.AnimationConfig))
                }, i.prototype.advanceTime = function(t) {
                    t < 0 && (t = -t), this._armature.inheritAnimation && null !== this._armature._parent ? this._inheritTimeScale = this._armature._parent._armature.animation._inheritTimeScale * this.timeScale : this._inheritTimeScale = this.timeScale, 1 !== this._inheritTimeScale && (t *= this._inheritTimeScale);
                    var e = this._animationStates.length;
                    if (1 === e)
                        if ((d = this._animationStates[0])._fadeState > 0 && d._subFadeState > 0) this._armature._dragonBones.bufferObject(d), this._animationStates.length = 0, this._lastAnimationState = null;
                        else {
                            var i = d._animationData,
                                n = i.cacheFrameRate;
                            if (this._animationDirty && n > 0) {
                                this._animationDirty = !1;
                                for (var r = 0, s = this._armature.getBones(); r < s.length; r++) {
                                    var o = s[r];
                                    o._cachedFrameIndices = i.getBoneCachedFrameIndices(o.name)
                                }
                                for (var a = 0, l = this._armature.getSlots(); a < l.length; a++) {
                                    var h = l[a],
                                        c = h.rawDisplayDatas;
                                    if (null !== c && c.length > 0) {
                                        var u = c[0];
                                        if (null !== u && u.parent === this._armature.armatureData.defaultSkin) {
                                            h._cachedFrameIndices = i.getSlotCachedFrameIndices(h.name);
                                            continue
                                        }
                                    }
                                    h._cachedFrameIndices = null
                                }
                            }
                            d.advanceTime(t, n)
                        }
                    else if (e > 1) {
                        for (var _ = 0, f = 0; _ < e; ++_) {
                            var d;
                            (d = this._animationStates[_])._fadeState > 0 && d._subFadeState > 0 ? (f++, this._armature._dragonBones.bufferObject(d), this._animationDirty = !0, this._lastAnimationState === d && (this._lastAnimationState = null)) : (f > 0 && (this._animationStates[_ - f] = d), d.advanceTime(t, 0)), _ === e - 1 && f > 0 && (this._animationStates.length -= f, null === this._lastAnimationState && this._animationStates.length > 0 && (this._lastAnimationState = this._animationStates[this._animationStates.length - 1]))
                        }
                        this._armature._cacheFrameIndex = -1
                    } else this._armature._cacheFrameIndex = -1
                }, i.prototype.reset = function() {
                    for (var t = 0, e = this._animationStates; t < e.length; t++) {
                        e[t].returnToPool()
                    }
                    this._animationDirty = !1, this._animationConfig.clear(), this._animationStates.length = 0, this._lastAnimationState = null
                }, i.prototype.stop = function(t) {
                    if (void 0 === t && (t = null), null !== t) null !== (n = this.getState(t)) && n.stop();
                    else
                        for (var e = 0, i = this._animationStates; e < i.length; e++) {
                            var n;
                            (n = i[e]).stop()
                        }
                }, i.prototype.playConfig = function(e) {
                    var i = e.animation;
                    if (!(i in this._animations)) return console.warn("Non-existent animation.\n", "DragonBones name: " + this._armature.armatureData.parent.name, "Armature name: " + this._armature.name, "Animation name: " + i), null;
                    var n = this._animations[i];
                    if (5 === e.fadeOutMode)
                        for (var r = 0, s = this._animationStates; r < s.length; r++) {
                            var o = s[r];
                            if (o._animationData === n) return o
                        }
                    0 === this._animationStates.length ? e.fadeInTime = 0 : e.fadeInTime < 0 && (e.fadeInTime = n.fadeInTime), e.fadeOutTime < 0 && (e.fadeOutTime = e.fadeInTime), e.timeScale <= -100 && (e.timeScale = 1 / n.scale), n.frameCount > 1 ? (e.position < 0 ? (e.position %= n.duration, e.position = n.duration - e.position) : e.position === n.duration ? e.position -= 1e-6 : e.position > n.duration && (e.position %= n.duration), e.duration > 0 && e.position + e.duration > n.duration && (e.duration = n.duration - e.position), e.playTimes < 0 && (e.playTimes = n.playTimes)) : (e.playTimes = 1, e.position = 0, e.duration > 0 && (e.duration = 0)), 0 === e.duration && (e.duration = -1), this._fadeOut(e);
                    var a = t.BaseObject.borrowObject(t.AnimationState);
                    if (a.init(this._armature, n, e), this._animationDirty = !0, this._armature._cacheFrameIndex = -1, this._animationStates.length > 0) {
                        for (var l = !1, h = 0, c = this._animationStates.length; h < c; ++h) {
                            if (a.layer > this._animationStates[h].layer) {
                                l = !0, this._animationStates.splice(h, 0, a);
                                break
                            }
                            if (h !== c - 1 && a.layer > this._animationStates[h + 1].layer) {
                                l = !0, this._animationStates.splice(h + 1, 0, a);
                                break
                            }
                        }
                        l || this._animationStates.push(a)
                    } else this._animationStates.push(a);
                    for (var u = 0, _ = this._armature.getSlots(); u < _.length; u++) {
                        var f = _[u].childArmature;
                        null !== f && f.inheritAnimation && f.animation.hasAnimation(i) && null === f.animation.getState(i) && f.animation.fadeIn(i)
                    }
                    var d = !1;
                    for (var p in n.animationTimelines) {
                        this._lockUpdate || (d = !0, this._lockUpdate = !0);
                        var m = this.fadeIn(p, e.fadeInTime, 1, a.layer, null, 0);
                        null !== m && (m.resetToPose = !1, m._parent = a, m.stop())
                    }
                    return d && (this._lockUpdate = !1), this._lockUpdate || (e.fadeInTime <= 0 && this._armature.advanceTime(0), this._lastAnimationState = a), a
                }, i.prototype.play = function(t, e) {
                    if (void 0 === t && (t = null), void 0 === e && (e = -1), this._animationConfig.clear(), this._animationConfig.resetToPose = !0, this._animationConfig.playTimes = e, this._animationConfig.fadeInTime = 0, this._animationConfig.animation = null !== t ? t : "", null !== t && t.length > 0) this.playConfig(this._animationConfig);
                    else if (null === this._lastAnimationState) {
                        var i = this._armature.armatureData.defaultAnimation;
                        null !== i && (this._animationConfig.animation = i.name, this.playConfig(this._animationConfig))
                    } else this._lastAnimationState.isPlaying || this._lastAnimationState.isCompleted ? (this._animationConfig.animation = this._lastAnimationState.name, this.playConfig(this._animationConfig)) : this._lastAnimationState.play();
                    return this._lastAnimationState
                }, i.prototype.fadeIn = function(t, e, i, n, r, s) {
                    return void 0 === e && (e = -1), void 0 === i && (i = -1), void 0 === n && (n = 0), void 0 === r && (r = null), void 0 === s && (s = 3), this._animationConfig.clear(), this._animationConfig.fadeOutMode = s, this._animationConfig.playTimes = i, this._animationConfig.layer = n, this._animationConfig.fadeInTime = e, this._animationConfig.animation = t, this._animationConfig.group = null !== r ? r : "", this.playConfig(this._animationConfig)
                }, i.prototype.gotoAndPlayByTime = function(t, e, i) {
                    return void 0 === e && (e = 0), void 0 === i && (i = -1), this._animationConfig.clear(), this._animationConfig.resetToPose = !0, this._animationConfig.playTimes = i, this._animationConfig.position = e, this._animationConfig.fadeInTime = 0, this._animationConfig.animation = t, this.playConfig(this._animationConfig)
                }, i.prototype.gotoAndPlayByFrame = function(t, e, i) {
                    void 0 === e && (e = 0), void 0 === i && (i = -1), this._animationConfig.clear(), this._animationConfig.resetToPose = !0, this._animationConfig.playTimes = i, this._animationConfig.fadeInTime = 0, this._animationConfig.animation = t;
                    var n = t in this._animations ? this._animations[t] : null;
                    return null !== n && (this._animationConfig.position = n.duration * e / n.frameCount), this.playConfig(this._animationConfig)
                }, i.prototype.gotoAndPlayByProgress = function(t, e, i) {
                    void 0 === e && (e = 0), void 0 === i && (i = -1), this._animationConfig.clear(), this._animationConfig.resetToPose = !0, this._animationConfig.playTimes = i, this._animationConfig.fadeInTime = 0, this._animationConfig.animation = t;
                    var n = t in this._animations ? this._animations[t] : null;
                    return null !== n && (this._animationConfig.position = n.duration * (e > 0 ? e : 0)), this.playConfig(this._animationConfig)
                }, i.prototype.gotoAndStopByTime = function(t, e) {
                    void 0 === e && (e = 0);
                    var i = this.gotoAndPlayByTime(t, e, 1);
                    return null !== i && i.stop(), i
                }, i.prototype.gotoAndStopByFrame = function(t, e) {
                    void 0 === e && (e = 0);
                    var i = this.gotoAndPlayByFrame(t, e, 1);
                    return null !== i && i.stop(), i
                }, i.prototype.gotoAndStopByProgress = function(t, e) {
                    void 0 === e && (e = 0);
                    var i = this.gotoAndPlayByProgress(t, e, 1);
                    return null !== i && i.stop(), i
                }, i.prototype.getState = function(t) {
                    for (var e = this._animationStates.length; e--;) {
                        var i = this._animationStates[e];
                        if (i.name === t) return i
                    }
                    return null
                }, i.prototype.hasAnimation = function(t) {
                    return t in this._animations
                }, i.prototype.getStates = function() {
                    return this._animationStates
                }, Object.defineProperty(i.prototype, "isPlaying", {
                    get: function() {
                        for (var t = 0, e = this._animationStates; t < e.length; t++) {
                            if (e[t].isPlaying) return !0
                        }
                        return !1
                    },
                    enumerable: !0,
                    configurable: !0
                }), Object.defineProperty(i.prototype, "isCompleted", {
                    get: function() {
                        for (var t = 0, e = this._animationStates; t < e.length; t++) {
                            if (!e[t].isCompleted) return !1
                        }
                        return this._animationStates.length > 0
                    },
                    enumerable: !0,
                    configurable: !0
                }), Object.defineProperty(i.prototype, "lastAnimationName", {
                    get: function() {
                        return null !== this._lastAnimationState ? this._lastAnimationState.name : ""
                    },
                    enumerable: !0,
                    configurable: !0
                }), Object.defineProperty(i.prototype, "animationNames", {
                    get: function() {
                        return this._animationNames
                    },
                    enumerable: !0,
                    configurable: !0
                }), Object.defineProperty(i.prototype, "animations", {
                    get: function() {
                        return this._animations
                    },
                    set: function(t) {
                        if (this._animations !== t) {
                            for (var e in this._animationNames.length = 0, this._animations) delete this._animations[e];
                            for (var e in t) this._animationNames.push(e), this._animations[e] = t[e]
                        }
                    },
                    enumerable: !0,
                    configurable: !0
                }), Object.defineProperty(i.prototype, "animationConfig", {
                    get: function() {
                        return this._animationConfig.clear(), this._animationConfig
                    },
                    enumerable: !0,
                    configurable: !0
                }), Object.defineProperty(i.prototype, "lastAnimationState", {
                    get: function() {
                        return this._lastAnimationState
                    },
                    enumerable: !0,
                    configurable: !0
                }), i.prototype.gotoAndPlay = function(t, e, i, n, r, s, o, a, l) {
                    void 0 === e && (e = -1), void 0 === i && (i = -1), void 0 === n && (n = -1), void 0 === r && (r = 0), void 0 === s && (s = null), void 0 === o && (o = 3), void 0 === a && (a = !0), void 0 === l && (l = !0), console.warn("Deprecated."), this._animationConfig.clear(), this._animationConfig.resetToPose = !0, this._animationConfig.fadeOutMode = o, this._animationConfig.playTimes = n, this._animationConfig.layer = r, this._animationConfig.fadeInTime = e, this._animationConfig.animation = t, this._animationConfig.group = null !== s ? s : "";
                    var h = this._animations[t];
                    return h && i > 0 && (this._animationConfig.timeScale = h.duration / i), this.playConfig(this._animationConfig)
                }, i.prototype.gotoAndStop = function(t, e) {
                    return void 0 === e && (e = 0), console.warn("Deprecated."), this.gotoAndStopByTime(t, e)
                }, Object.defineProperty(i.prototype, "animationList", {
                    get: function() {
                        return console.warn("Deprecated."), this._animationNames
                    },
                    enumerable: !0,
                    configurable: !0
                }), Object.defineProperty(i.prototype, "animationDataList", {
                    get: function() {
                        console.warn("Deprecated.");
                        for (var t = [], e = 0, i = this._animationNames.length; e < i; ++e) t.push(this._animations[this._animationNames[e]]);
                        return t
                    },
                    enumerable: !0,
                    configurable: !0
                }), i
            })(t.BaseObject);
            t.Animation = e
        })(r || (r = {})), (function(t) {
            var e = (function(e) {
                function s() {
                    var t = null !== e && e.apply(this, arguments) || this;
                    return t._blendState = new r, t._boneMask = [], t._boneTimelines = [], t._surfaceTimelines = [], t._slotTimelines = [], t._constraintTimelines = [], t._animationTimelines = [], t._poseTimelines = [], t._bonePoses = {}, t._actionTimeline = null, t._zOrderTimeline = null, t._parent = null, t
                }
                return n(s, e), s.toString = function() {
                    return "[class dragonBones.AnimationState]"
                }, s.prototype._onClear = function() {
                    for (var t = 0, e = this._boneTimelines; t < e.length; t++) {
                        e[t].returnToPool()
                    }
                    for (var i = 0, n = this._surfaceTimelines; i < n.length; i++) {
                        n[i].returnToPool()
                    }
                    for (var r = 0, s = this._slotTimelines; r < s.length; r++) {
                        s[r].returnToPool()
                    }
                    for (var o = 0, a = this._constraintTimelines; o < a.length; o++) {
                        a[o].returnToPool()
                    }
                    for (var l = 0, h = this._animationTimelines; l < h.length; l++) {
                        h[l].returnToPool()
                    }
                    for (var c in this._bonePoses) this._bonePoses[c].returnToPool(), delete this._bonePoses[c];
                    null !== this._actionTimeline && this._actionTimeline.returnToPool(), null !== this._zOrderTimeline && this._zOrderTimeline.returnToPool(), this.actionEnabled = !1, this.additiveBlending = !1, this.displayControl = !1, this.resetToPose = !1, this.playTimes = 1, this.layer = 0, this.timeScale = 1, this.weight = 1, this.autoFadeOutTime = 0, this.fadeTotalTime = 0, this.name = "", this.group = "", this._timelineDirty = 2, this._playheadState = 0, this._fadeState = -1, this._subFadeState = -1, this._position = 0, this._duration = 0, this._fadeTime = 0, this._time = 0, this._fadeProgress = 0, this._weightResult = 0, this._blendState.clear(), this._boneMask.length = 0, this._boneTimelines.length = 0, this._surfaceTimelines.length = 0, this._slotTimelines.length = 0, this._constraintTimelines.length = 0, this._animationTimelines.length = 0, this._poseTimelines.length = 0, this._animationData = null, this._armature = null, this._actionTimeline = null, this._zOrderTimeline = null, this._parent = null
                }, s.prototype._updateTimelines = function() {
                    for (var e = 0, i = this._armature._constraints; e < i.length; e++) {
                        var n = i[e];
                        if (null !== (l = this._animationData.getConstraintTimelines(n.name)))
                            for (var r = 0, s = l; r < s.length; r++) {
                                switch ((_ = s[r]).type) {
                                    case 30:
                                        (f = t.BaseObject.borrowObject(t.IKConstraintTimelineState)).constraint = n, f.init(this._armature, this, _), this._constraintTimelines.push(f)
                                }
                            } else if (this.resetToPose) {
                                (f = t.BaseObject.borrowObject(t.IKConstraintTimelineState)).constraint = n, f.init(this._armature, this, null), this._constraintTimelines.push(f), this._poseTimelines.push(f)
                            }
                    }
                    for (var o = 0, a = this._armature.animation.getStates(); o < a.length; o++) {
                        var l, h = a[o];
                        if (h._parent === this)
                            if (null !== (l = this._animationData.getAnimationTimelines(h.name)))
                                for (var c = 0, u = l; c < u.length; c++) {
                                    var _;
                                    switch ((_ = u[c]).type) {
                                        case 40:
                                            var f;
                                            (f = t.BaseObject.borrowObject(t.AnimationTimelineState)).animationState = h, f.init(this._armature, this, _), this._animationTimelines.push(f)
                                    }
                                }
                    }
                }, s.prototype._updateBoneAndSlotTimelines = function() {
                    for (var e = {}, n = 0, r = this._boneTimelines; n < r.length; n++) {
                        (l = (v = r[n]).bone.name) in e || (e[l] = []), e[l].push(v)
                    }
                    for (var s = 0, o = this._armature.getBones(); s < o.length; s++) {
                        var a = o[s],
                            l = a.name;
                        if (this.containsBoneMask(l))
                            if (l in e) delete e[l];
                            else if (0 === a._boneData.type) {
                            var h = this._animationData.getBoneTimelines(l),
                                c = l in this._bonePoses ? this._bonePoses[l] : this._bonePoses[l] = t.BaseObject.borrowObject(i);
                            if (null !== h)
                                for (var u = 0, _ = h; u < _.length; u++) {
                                    switch ((I = _[u]).type) {
                                        case 10:
                                            (v = t.BaseObject.borrowObject(t.BoneAllTimelineState)).bone = a, v.bonePose = c, v.init(this._armature, this, I), this._boneTimelines.push(v);
                                            break;
                                        case 11:
                                            (v = t.BaseObject.borrowObject(t.BoneTranslateTimelineState)).bone = a, v.bonePose = c, v.init(this._armature, this, I), this._boneTimelines.push(v);
                                            break;
                                        case 12:
                                            (v = t.BaseObject.borrowObject(t.BoneRotateTimelineState)).bone = a, v.bonePose = c, v.init(this._armature, this, I), this._boneTimelines.push(v);
                                            break;
                                        case 13:
                                            (v = t.BaseObject.borrowObject(t.BoneScaleTimelineState)).bone = a, v.bonePose = c, v.init(this._armature, this, I), this._boneTimelines.push(v)
                                    }
                                } else if (this.resetToPose) {
                                    (v = t.BaseObject.borrowObject(t.BoneAllTimelineState)).bone = a, v.bonePose = c, v.init(this._armature, this, null), this._boneTimelines.push(v), this._poseTimelines.push(v)
                                }
                        } else if (1 === a._boneData.type) {
                            if (null !== (h = this._animationData.getSurfaceTimelines(l)))
                                for (var f = 0, d = h; f < d.length; f++) {
                                    switch ((I = d[f]).type) {
                                        case 50:
                                            (v = t.BaseObject.borrowObject(t.SurfaceTimelineState)).surface = a, v.init(this._armature, this, I), this._surfaceTimelines.push(v)
                                    }
                                } else if (this.resetToPose) {
                                    (v = t.BaseObject.borrowObject(t.SurfaceTimelineState)).surface = a, v.init(this._armature, this, null), this._surfaceTimelines.push(v), this._poseTimelines.push(v)
                                }
                        }
                    }
                    for (var p in e)
                        for (var m = 0, y = e[p]; m < y.length; m++) {
                            var v = y[m];
                            this._boneTimelines.splice(this._boneTimelines.indexOf(v), 1), v.returnToPool()
                        }
                    for (var g = {}, x = [], b = 0, A = this._slotTimelines; b < A.length; b++) {
                        (l = (v = A[b]).slot.name) in g || (g[l] = []), g[l].push(v)
                    }
                    for (var C = 0, T = this._armature.getSlots(); C < T.length; C++) {
                        var S = T[C],
                            w = S.parent.name;
                        if (this.containsBoneMask(w)) {
                            l = S.name, h = this._animationData.getSlotTimelines(l);
                            if (l in g) delete g[l];
                            else {
                                var E = !1,
                                    M = !1;
                                if (x.length = 0, null !== h)
                                    for (var D = 0, B = h; D < B.length; D++) {
                                        var I;
                                        switch ((I = B[D]).type) {
                                            case 20:
                                                (v = t.BaseObject.borrowObject(t.SlotDislayTimelineState)).slot = S, v.init(this._armature, this, I), this._slotTimelines.push(v), E = !0;
                                                break;
                                            case 21:
                                                (v = t.BaseObject.borrowObject(t.SlotColorTimelineState)).slot = S, v.init(this._armature, this, I), this._slotTimelines.push(v), M = !0;
                                                break;
                                            case 22:
                                                (v = t.BaseObject.borrowObject(t.DeformTimelineState)).slot = S, v.init(this._armature, this, I), this._slotTimelines.push(v), x.push(v.vertexOffset)
                                        }
                                    }
                                if (this.resetToPose) {
                                    if (!E)(v = t.BaseObject.borrowObject(t.SlotDislayTimelineState)).slot = S, v.init(this._armature, this, null), this._slotTimelines.push(v), this._poseTimelines.push(v);
                                    if (!M)(v = t.BaseObject.borrowObject(t.SlotColorTimelineState)).slot = S, v.init(this._armature, this, null), this._slotTimelines.push(v), this._poseTimelines.push(v);
                                    if (null !== S.rawDisplayDatas)
                                        for (var P = 0, R = S.rawDisplayDatas; P < R.length; P++) {
                                            var O = R[P];
                                            if (null !== O && 2 === O.type) {
                                                var L = O.vertices.offset;
                                                if (x.indexOf(L) < 0)(v = t.BaseObject.borrowObject(t.DeformTimelineState)).vertexOffset = L, v.slot = S, v.init(this._armature, this, null), this._slotTimelines.push(v), this._poseTimelines.push(v)
                                            }
                                        }
                                }
                            }
                        }
                    }
                    for (var p in g)
                        for (var F = 0, N = g[p]; F < N.length; F++) {
                            v = N[F];
                            this._slotTimelines.splice(this._slotTimelines.indexOf(v), 1), v.returnToPool()
                        }
                }, s.prototype._advanceFadeTime = function(e) {
                    var i = this._fadeState > 0;
                    if (this._subFadeState < 0) {
                        this._subFadeState = 0;
                        var n = i ? t.EventObject.FADE_OUT : t.EventObject.FADE_IN;
                        if (this._armature.eventDispatcher.hasDBEventListener(n))(r = t.BaseObject.borrowObject(t.EventObject)).type = n, r.armature = this._armature, r.animationState = this, this._armature._dragonBones.bufferEvent(r)
                    }
                    if (e < 0 && (e = -e), this._fadeTime += e, this._fadeTime >= this.fadeTotalTime ? (this._subFadeState = 1, this._fadeProgress = i ? 0 : 1) : this._fadeTime > 0 ? this._fadeProgress = i ? 1 - this._fadeTime / this.fadeTotalTime : this._fadeTime / this.fadeTotalTime : this._fadeProgress = i ? 1 : 0, this._subFadeState > 0) {
                        i || (this._playheadState |= 1, this._fadeState = 0);
                        var r;
                        n = i ? t.EventObject.FADE_OUT_COMPLETE : t.EventObject.FADE_IN_COMPLETE;
                        if (this._armature.eventDispatcher.hasDBEventListener(n))(r = t.BaseObject.borrowObject(t.EventObject)).type = n, r.armature = this._armature, r.animationState = this, this._armature._dragonBones.bufferEvent(r)
                    }
                }, s.prototype.init = function(e, i, n) {
                    if (null === this._armature) {
                        if (this._armature = e, this._animationData = i, this.resetToPose = n.resetToPose, this.additiveBlending = n.additiveBlending, this.displayControl = n.displayControl, this.actionEnabled = n.actionEnabled, this.layer = n.layer, this.playTimes = n.playTimes, this.timeScale = n.timeScale, this.fadeTotalTime = n.fadeInTime, this.autoFadeOutTime = n.autoFadeOutTime, this.weight = n.weight, this.name = n.name.length > 0 ? n.name : n.animation, this.group = n.group, n.pauseFadeIn ? this._playheadState = 2 : this._playheadState = 3, n.duration < 0 ? (this._position = 0, this._duration = this._animationData.duration, 0 !== n.position ? this.timeScale >= 0 ? this._time = n.position : this._time = n.position - this._duration : this._time = 0) : (this._position = n.position, this._duration = n.duration, this._time = 0), this.timeScale < 0 && 0 === this._time && (this._time = -1e-6), this.fadeTotalTime <= 0 && (this._fadeProgress = .999999), n.boneMask.length > 0) {
                            this._boneMask.length = n.boneMask.length;
                            for (var r = 0, s = this._boneMask.length; r < s; ++r) this._boneMask[r] = n.boneMask[r]
                        }
                        this._actionTimeline = t.BaseObject.borrowObject(t.ActionTimelineState), this._actionTimeline.init(this._armature, this, this._animationData.actionTimeline), this._actionTimeline.currentTime = this._time, this._actionTimeline.currentTime < 0 && (this._actionTimeline.currentTime = this._duration - this._actionTimeline.currentTime), null !== this._animationData.zOrderTimeline && (this._zOrderTimeline = t.BaseObject.borrowObject(t.ZOrderTimelineState), this._zOrderTimeline.init(this._armature, this, this._animationData.zOrderTimeline))
                    }
                }, s.prototype.advanceTime = function(e, i) {
                    if (this._blendState.dirty = !1, 0 === this._fadeState && 0 === this._subFadeState || this._advanceFadeTime(e), 3 === this._playheadState && (1 !== this.timeScale && (e *= this.timeScale), this._time += e), 0 !== this._timelineDirty && (2 === this._timelineDirty && this._updateTimelines(), this._timelineDirty = 0, this._updateBoneAndSlotTimelines()), 0 !== this.weight) {
                        var n = 0 === this._fadeState && i > 0,
                            r = !0,
                            s = !0,
                            o = this._time;
                        if (this._weightResult = this.weight * this._fadeProgress, null !== this._parent && (this._weightResult *= this._parent._weightResult / this._parent._fadeProgress), this._actionTimeline.playState <= 0 && this._actionTimeline.update(o), n) {
                            var a = 2 * i;
                            this._actionTimeline.currentTime = Math.floor(this._actionTimeline.currentTime * a) / a
                        }
                        if (null !== this._zOrderTimeline && this._zOrderTimeline.playState <= 0 && this._zOrderTimeline.update(o), n) {
                            var l = Math.floor(this._actionTimeline.currentTime * i);
                            this._armature._cacheFrameIndex === l ? (r = !1, s = !1) : (this._armature._cacheFrameIndex = l, this._animationData.cachedFrames[l] ? s = !1 : this._animationData.cachedFrames[l] = !0)
                        }
                        if (r) {
                            if (s)
                                for (var h = 0, c = this._boneTimelines.length; h < c; ++h) {
                                    if ((p = this._boneTimelines[h]).playState <= 0 && p.update(o), h === c - 1 || p.bone !== this._boneTimelines[h + 1].bone) 0 !== (u = p.bone._blendState.update(this._weightResult, this.layer)) && p.blend(u)
                                }
                            for (h = 0, c = this._surfaceTimelines.length; h < c; ++h) {
                                var u = (p = this._surfaceTimelines[h]).surface._blendState.update(this._weightResult, this.layer);
                                p.playState <= 0 && p.update(o), 0 !== u && p.blend(u)
                            }
                            if (this.displayControl)
                                for (h = 0, c = this._slotTimelines.length; h < c; ++h) {
                                    var _ = (p = this._slotTimelines[h]).slot.displayController;
                                    null !== _ && _ !== this.name && _ !== this.group || p.playState <= 0 && p.update(o)
                                }
                            for (h = 0, c = this._constraintTimelines.length; h < c; ++h) {
                                (p = this._constraintTimelines[h]).playState <= 0 && p.update(o)
                            }
                            for (h = 0, c = this._animationTimelines.length; h < c; ++h) {
                                u = (p = this._animationTimelines[h]).animationState._blendState.update(this._weightResult, this.layer);
                                p.playState <= 0 && p.update(o), 0 !== u && p.blend(u)
                            }
                        }
                        if (0 === this._fadeState) {
                            if (this._subFadeState > 0 && (this._subFadeState = 0, this._poseTimelines.length > 0)) {
                                for (var f = 0, d = this._poseTimelines; f < d.length; f++) {
                                    var p;
                                    (p = d[f]) instanceof t.BoneTimelineState ? this._boneTimelines.splice(this._boneTimelines.indexOf(p), 1) : p instanceof t.SurfaceTimelineState ? this._surfaceTimelines.splice(this._surfaceTimelines.indexOf(p), 1) : p instanceof t.SlotTimelineState ? this._slotTimelines.splice(this._slotTimelines.indexOf(p), 1) : p instanceof t.ConstraintTimelineState && this._constraintTimelines.splice(this._constraintTimelines.indexOf(p), 1), p.returnToPool()
                                }
                                this._poseTimelines.length = 0
                            }
                            this._actionTimeline.playState > 0 && this.autoFadeOutTime >= 0 && this.fadeOut(this.autoFadeOutTime)
                        }
                    }
                }, s.prototype.play = function() {
                    this._playheadState = 3
                }, s.prototype.stop = function() {
                    this._playheadState &= 1
                }, s.prototype.fadeOut = function(t, e) {
                    if (void 0 === e && (e = !0), t < 0 && (t = 0), e && (this._playheadState &= 2), this._fadeState > 0) {
                        if (t > this.fadeTotalTime - this._fadeTime) return
                    } else {
                        this._fadeState = 1, this._subFadeState = -1, (t <= 0 || this._fadeProgress <= 0) && (this._fadeProgress = 1e-6);
                        for (var i = 0, n = this._boneTimelines; i < n.length; i++) {
                            (_ = n[i]).fadeOut()
                        }
                        for (var r = 0, s = this._surfaceTimelines; r < s.length; r++) {
                            (_ = s[r]).fadeOut()
                        }
                        for (var o = 0, a = this._slotTimelines; o < a.length; o++) {
                            (_ = a[o]).fadeOut()
                        }
                        for (var l = 0, h = this._constraintTimelines; l < h.length; l++) {
                            (_ = h[l]).fadeOut()
                        }
                        for (var c = 0, u = this._animationTimelines; c < u.length; c++) {
                            var _;
                            (_ = u[c]).animationState.fadeOut(t, e), _.fadeOut()
                        }
                    }
                    this.displayControl = !1, this.fadeTotalTime = this._fadeProgress > 1e-6 ? t / this._fadeProgress : 0, this._fadeTime = this.fadeTotalTime * (1 - this._fadeProgress)
                }, s.prototype.containsBoneMask = function(t) {
                    return 0 === this._boneMask.length || this._boneMask.indexOf(t) >= 0
                }, s.prototype.addBoneMask = function(t, e) {
                    void 0 === e && (e = !0);
                    var i = this._armature.getBone(t);
                    if (null !== i) {
                        if (this._boneMask.indexOf(t) < 0 && this._boneMask.push(t), e)
                            for (var n = 0, r = this._armature.getBones(); n < r.length; n++) {
                                var s = r[n];
                                this._boneMask.indexOf(s.name) < 0 && i.contains(s) && this._boneMask.push(s.name)
                            }
                        this._timelineDirty = 1
                    }
                }, s.prototype.removeBoneMask = function(t, e) {
                    void 0 === e && (e = !0);
                    var i = this._boneMask.indexOf(t);
                    if (i >= 0 && this._boneMask.splice(i, 1), e) {
                        var n = this._armature.getBone(t);
                        if (null !== n) {
                            var r = this._armature.getBones();
                            if (this._boneMask.length > 0)
                                for (var s = 0, o = r; s < o.length; s++) {
                                    var a = o[s],
                                        l = this._boneMask.indexOf(a.name);
                                    l >= 0 && n.contains(a) && this._boneMask.splice(l, 1)
                                } else
                                    for (var h = 0, c = r; h < c.length; h++) {
                                        (a = c[h]) !== n && (n.contains(a) || this._boneMask.push(a.name))
                                    }
                        }
                    }
                    this._timelineDirty = 1
                }, s.prototype.removeAllBoneMask = function() {
                    this._boneMask.length = 0, this._timelineDirty = 1
                }, Object.defineProperty(s.prototype, "isFadeIn", {
                    get: function() {
                        return this._fadeState < 0
                    },
                    enumerable: !0,
                    configurable: !0
                }), Object.defineProperty(s.prototype, "isFadeOut", {
                    get: function() {
                        return this._fadeState > 0
                    },
                    enumerable: !0,
                    configurable: !0
                }), Object.defineProperty(s.prototype, "isFadeComplete", {
                    get: function() {
                        return 0 === this._fadeState
                    },
                    enumerable: !0,
                    configurable: !0
                }), Object.defineProperty(s.prototype, "isPlaying", {
                    get: function() {
                        return 0 != (2 & this._playheadState) && this._actionTimeline.playState <= 0
                    },
                    enumerable: !0,
                    configurable: !0
                }), Object.defineProperty(s.prototype, "isCompleted", {
                    get: function() {
                        return this._actionTimeline.playState > 0
                    },
                    enumerable: !0,
                    configurable: !0
                }), Object.defineProperty(s.prototype, "currentPlayTimes", {
                    get: function() {
                        return this._actionTimeline.currentPlayTimes
                    },
                    enumerable: !0,
                    configurable: !0
                }), Object.defineProperty(s.prototype, "totalTime", {
                    get: function() {
                        return this._duration
                    },
                    enumerable: !0,
                    configurable: !0
                }), Object.defineProperty(s.prototype, "currentTime", {
                    get: function() {
                        return this._actionTimeline.currentTime
                    },
                    set: function(t) {
                        var e = this._actionTimeline.currentPlayTimes - (this._actionTimeline.playState > 0 ? 1 : 0);
                        if ((t < 0 || this._duration < t) && (t = t % this._duration + e * this._duration) < 0 && (t += this._duration), this.playTimes > 0 && e === this.playTimes - 1 && t === this._duration && (t = this._duration - 1e-6), this._time !== t) {
                            this._time = t, this._actionTimeline.setCurrentTime(this._time), null !== this._zOrderTimeline && (this._zOrderTimeline.playState = -1);
                            for (var i = 0, n = this._boneTimelines; i < n.length; i++) {
                                n[i].playState = -1
                            }
                            for (var r = 0, s = this._slotTimelines; r < s.length; r++) {
                                s[r].playState = -1
                            }
                        }
                    },
                    enumerable: !0,
                    configurable: !0
                }), Object.defineProperty(s.prototype, "animationData", {
                    get: function() {
                        return this._animationData
                    },
                    enumerable: !0,
                    configurable: !0
                }), s
            })(t.BaseObject);
            t.AnimationState = e;
            var i = (function(e) {
                function i() {
                    var i = null !== e && e.apply(this, arguments) || this;
                    return i.current = new t.Transform, i.delta = new t.Transform, i.result = new t.Transform, i
                }
                return n(i, e), i.toString = function() {
                    return "[class dragonBones.BonePose]"
                }, i.prototype._onClear = function() {
                    this.current.identity(), this.delta.identity(), this.result.identity()
                }, i
            })(t.BaseObject);
            t.BonePose = i;
            var r = (function() {
                function t() {}
                return t.prototype.update = function(t, e) {
                    if (this.dirty) {
                        if (!(this.leftWeight > 0)) return 0;
                        if (this.layer !== e) {
                            if (this.layerWeight >= this.leftWeight) return this.leftWeight = 0, 0;
                            this.layer = e, this.leftWeight -= this.layerWeight, this.layerWeight = 0
                        }
                        return t *= this.leftWeight, this.layerWeight += t, this.blendWeight = t, 2
                    }
                    return this.dirty = !0, this.layer = e, this.layerWeight = t, this.leftWeight = 1, this.blendWeight = t, 1
                }, t.prototype.clear = function() {
                    this.dirty = !1, this.layer = 0, this.leftWeight = 0, this.layerWeight = 0, this.blendWeight = 0
                }, t
            })();
            t.BlendState = r
        })(r || (r = {})), (function(t) {
            var e = (function(t) {
                function e() {
                    return null !== t && t.apply(this, arguments) || this
                }
                return n(e, t), e.prototype._onClear = function() {
                    this.playState = -1, this.currentPlayTimes = -1, this.currentTime = -1, this._tweenState = 0, this._frameRate = 0, this._frameValueOffset = 0, this._frameCount = 0, this._frameOffset = 0, this._frameIndex = -1, this._frameRateR = 0, this._position = 0, this._duration = 0, this._timeScale = 1, this._timeOffset = 0, this._dragonBonesData = null, this._animationData = null, this._timelineData = null, this._armature = null, this._animationState = null, this._actionTimeline = null, this._frameArray = null, this._frameIntArray = null, this._frameFloatArray = null, this._timelineArray = null, this._frameIndices = null
                }, e.prototype._setCurrentTime = function(t) {
                    var e = this.playState,
                        i = this.currentPlayTimes,
                        n = this.currentTime;
                    if (null !== this._actionTimeline && this._frameCount <= 1) this.playState = this._actionTimeline.playState >= 0 ? 1 : -1, this.currentPlayTimes = 1, this.currentTime = this._actionTimeline.currentTime;
                    else if (null === this._actionTimeline || 1 !== this._timeScale || 0 !== this._timeOffset) {
                        var r = this._animationState.playTimes,
                            s = r * this._duration;
                        t *= this._timeScale, 0 !== this._timeOffset && (t += this._timeOffset * this._animationData.duration), r > 0 && (t >= s || t <= -s) ? (this.playState <= 0 && 3 === this._animationState._playheadState && (this.playState = 1), this.currentPlayTimes = r, this.currentTime = t < 0 ? 0 : this._duration + 1e-6) : (0 !== this.playState && 3 === this._animationState._playheadState && (this.playState = 0), t < 0 ? (t = -t, this.currentPlayTimes = Math.floor(t / this._duration), this.currentTime = this._duration - t % this._duration) : (this.currentPlayTimes = Math.floor(t / this._duration), this.currentTime = t % this._duration)), this.currentTime += this._position
                    } else this.playState = this._actionTimeline.playState, this.currentPlayTimes = this._actionTimeline.currentPlayTimes, this.currentTime = this._actionTimeline.currentTime;
                    return (this.currentPlayTimes !== i || this.currentTime !== n) && ((e < 0 && this.playState !== e || this.playState <= 0 && this.currentPlayTimes !== i) && (this._frameIndex = -1), !0)
                }, e.prototype.init = function(t, e, i) {
                    this._armature = t, this._animationState = e, this._timelineData = i, this._actionTimeline = this._animationState._actionTimeline, this === this._actionTimeline && (this._actionTimeline = null), this._animationData = this._animationState._animationData, this._frameRate = this._animationData.parent.frameRate, this._frameRateR = 1 / this._frameRate, this._position = this._animationState._position, this._duration = this._animationState._duration, this._dragonBonesData = this._animationData.parent.parent, null !== this._timelineData && (this._frameIntArray = this._dragonBonesData.frameIntArray, this._frameFloatArray = this._dragonBonesData.frameFloatArray, this._frameArray = this._dragonBonesData.frameArray, this._timelineArray = this._dragonBonesData.timelineArray, this._frameIndices = this._dragonBonesData.frameIndices, this._frameCount = this._timelineArray[this._timelineData.offset + 2], this._frameValueOffset = this._timelineArray[this._timelineData.offset + 4], this._timeScale = 100 / this._timelineArray[this._timelineData.offset + 0], this._timeOffset = .01 * this._timelineArray[this._timelineData.offset + 1])
                }, e.prototype.fadeOut = function() {}, e.prototype.update = function(t) {
                    if (this._setCurrentTime(t)) {
                        if (this._frameCount > 1) {
                            var e = Math.floor(this.currentTime * this._frameRate),
                                i = this._frameIndices[this._timelineData.frameIndicesOffset + e];
                            this._frameIndex !== i && (this._frameIndex = i, this._frameOffset = this._animationData.frameOffset + this._timelineArray[this._timelineData.offset + 5 + this._frameIndex], this._onArriveAtFrame())
                        } else this._frameIndex < 0 && (this._frameIndex = 0, null !== this._timelineData && (this._frameOffset = this._animationData.frameOffset + this._timelineArray[this._timelineData.offset + 5]), this._onArriveAtFrame());
                        0 !== this._tweenState && this._onUpdateFrame()
                    }
                }, e
            })(t.BaseObject);
            t.TimelineState = e;
            var i = (function(t) {
                function e() {
                    return null !== t && t.apply(this, arguments) || this
                }
                return n(e, t), e._getEasingValue = function(t, e, i) {
                    var n = e;
                    switch (t) {
                        case 3:
                            n = Math.pow(e, 2);
                            break;
                        case 4:
                            n = 1 - Math.pow(1 - e, 2);
                            break;
                        case 5:
                            n = .5 * (1 - Math.cos(e * Math.PI))
                    }
                    return (n - e) * i + e
                }, e._getEasingCurveValue = function(t, e, i, n) {
                    if (t <= 0) return 0;
                    if (t >= 1) return 1;
                    var r = i + 1,
                        s = Math.floor(t * r),
                        o = 0 === s ? 0 : e[n + s - 1];
                    return 1e-4 * (o + ((s === r - 1 ? 1e4 : e[n + s]) - o) * (t * r - s))
                }, e.prototype._onClear = function() {
                    t.prototype._onClear.call(this), this._tweenType = 0, this._curveCount = 0, this._framePosition = 0, this._frameDurationR = 0, this._tweenProgress = 0, this._tweenEasing = 0
                }, e.prototype._onArriveAtFrame = function() {
                    if (this._frameCount > 1 && (this._frameIndex !== this._frameCount - 1 || 0 === this._animationState.playTimes || this._animationState.currentPlayTimes < this._animationState.playTimes - 1))
                        if (this._tweenType = this._frameArray[this._frameOffset + 1], this._tweenState = 0 === this._tweenType ? 1 : 2, 2 === this._tweenType ? this._curveCount = this._frameArray[this._frameOffset + 2] : 0 !== this._tweenType && 1 !== this._tweenType && (this._tweenEasing = .01 * this._frameArray[this._frameOffset + 2]), this._framePosition = this._frameArray[this._frameOffset] * this._frameRateR, this._frameIndex === this._frameCount - 1) this._frameDurationR = 1 / (this._animationData.duration - this._framePosition);
                        else {
                            var t = this._animationData.frameOffset + this._timelineArray[this._timelineData.offset + 5 + this._frameIndex + 1],
                                e = this._frameArray[t] * this._frameRateR - this._framePosition;
                            this._frameDurationR = e > 0 ? 1 / e : 0
                        }
                    else this._tweenState = 1
                }, e.prototype._onUpdateFrame = function() {
                    2 === this._tweenState ? (this._tweenProgress = (this.currentTime - this._framePosition) * this._frameDurationR, 2 === this._tweenType ? this._tweenProgress = e._getEasingCurveValue(this._tweenProgress, this._frameArray, this._curveCount, this._frameOffset + 3) : 1 !== this._tweenType && (this._tweenProgress = e._getEasingValue(this._tweenType, this._tweenProgress, this._tweenEasing))) : this._tweenProgress = 0
                }, e
            })(e);
            t.TweenTimelineState = i;
            var r = (function(t) {
                function e() {
                    return null !== t && t.apply(this, arguments) || this
                }
                return n(e, t), e.prototype._onClear = function() {
                    t.prototype._onClear.call(this), this.bone = null, this.bonePose = null
                }, e.prototype.blend = function(t) {
                    var e = this.bone._blendState.blendWeight,
                        i = this.bone.animationPose,
                        n = this.bonePose.result;
                    2 === t ? (i.x += n.x * e, i.y += n.y * e, i.rotation += n.rotation * e, i.skew += n.skew * e, i.scaleX += (n.scaleX - 1) * e, i.scaleY += (n.scaleY - 1) * e) : 1 !== e ? (i.x = n.x * e, i.y = n.y * e, i.rotation = n.rotation * e, i.skew = n.skew * e, i.scaleX = (n.scaleX - 1) * e + 1, i.scaleY = (n.scaleY - 1) * e + 1) : (i.x = n.x, i.y = n.y, i.rotation = n.rotation, i.skew = n.skew, i.scaleX = n.scaleX, i.scaleY = n.scaleY), 0 === this._animationState._fadeState && 0 === this._animationState._subFadeState || (this.bone._transformDirty = !0)
                }, e
            })(i);
            t.BoneTimelineState = r;
            var s = (function(t) {
                function e() {
                    return null !== t && t.apply(this, arguments) || this
                }
                return n(e, t), e.prototype._onClear = function() {
                    t.prototype._onClear.call(this), this.slot = null
                }, e
            })(i);
            t.SlotTimelineState = s;
            var o = (function(t) {
                function e() {
                    return null !== t && t.apply(this, arguments) || this
                }
                return n(e, t), e.prototype._onClear = function() {
                    t.prototype._onClear.call(this), this.constraint = null
                }, e
            })(i);
            t.ConstraintTimelineState = o
        })(r || (r = {})), (function(t) {
            var e = (function(e) {
                function i() {
                    return null !== e && e.apply(this, arguments) || this
                }
                return n(i, e), i.toString = function() {
                    return "[class dragonBones.ActionTimelineState]"
                }, i.prototype._onCrossFrame = function(e) {
                    var i = this._armature.eventDispatcher;
                    if (this._animationState.actionEnabled)
                        for (var n = this._animationData.frameOffset + this._timelineArray[this._timelineData.offset + 5 + e], r = this._frameArray[n + 1], s = this._animationData.parent.actions, o = 0; o < r; ++o) {
                            var a = s[this._frameArray[n + 2 + o]];
                            if (0 === a.type) {
                                (l = t.BaseObject.borrowObject(t.EventObject)).time = this._frameArray[n] / this._frameRate, l.animationState = this._animationState, t.EventObject.actionDataToInstance(a, l, this._armature), this._armature._bufferAction(l, !0)
                            } else {
                                var l, h = 10 === a.type ? t.EventObject.FRAME_EVENT : t.EventObject.SOUND_EVENT;
                                if (11 === a.type || i.hasDBEventListener(h))(l = t.BaseObject.borrowObject(t.EventObject)).time = this._frameArray[n] / this._frameRate, l.animationState = this._animationState, t.EventObject.actionDataToInstance(a, l, this._armature), this._armature._dragonBones.bufferEvent(l)
                            }
                        }
                }, i.prototype._onArriveAtFrame = function() {}, i.prototype._onUpdateFrame = function() {}, i.prototype.update = function(e) {
                    var i = this.playState,
                        n = this.currentPlayTimes,
                        r = this.currentTime;
                    if (this._setCurrentTime(e)) {
                        var s = this._armature.eventDispatcher;
                        if (i < 0) {
                            if (this.playState === i) return;
                            if (this._animationState.displayControl && this._animationState.resetToPose && this._armature._sortZOrder(null, 0), n = this.currentPlayTimes, s.hasDBEventListener(t.EventObject.START)) {
                                var o = t.BaseObject.borrowObject(t.EventObject);
                                o.type = t.EventObject.START, o.armature = this._armature, o.animationState = this._animationState, this._armature._dragonBones.bufferEvent(o)
                            }
                        }
                        var a = this._animationState.timeScale < 0,
                            l = null,
                            h = null;
                        if (this.currentPlayTimes !== n && (s.hasDBEventListener(t.EventObject.LOOP_COMPLETE) && ((l = t.BaseObject.borrowObject(t.EventObject)).type = t.EventObject.LOOP_COMPLETE, l.armature = this._armature, l.animationState = this._animationState), this.playState > 0 && s.hasDBEventListener(t.EventObject.COMPLETE) && ((h = t.BaseObject.borrowObject(t.EventObject)).type = t.EventObject.COMPLETE, h.armature = this._armature, h.animationState = this._animationState)), this._frameCount > 1) {
                            var c = this._timelineData,
                                u = Math.floor(this.currentTime * this._frameRate),
                                _ = this._frameIndices[c.frameIndicesOffset + u];
                            if (this._frameIndex !== _) {
                                var f = this._frameIndex;
                                if (this._frameIndex = _, null !== this._timelineArray)
                                    if (this._frameOffset = this._animationData.frameOffset + this._timelineArray[c.offset + 5 + this._frameIndex], a) {
                                        if (f < 0) {
                                            var d = Math.floor(r * this._frameRate);
                                            f = this._frameIndices[c.frameIndicesOffset + d], this.currentPlayTimes === n && f === _ && (f = -1)
                                        }
                                        for (; f >= 0;) {
                                            var p = this._animationData.frameOffset + this._timelineArray[c.offset + 5 + f],
                                                m = this._frameArray[p] / this._frameRate;
                                            if (this._position <= m && m <= this._position + this._duration && this._onCrossFrame(f), null !== l && 0 === f && (this._armature._dragonBones.bufferEvent(l), l = null), f > 0 ? f-- : f = this._frameCount - 1, f === _) break
                                        }
                                    } else {
                                        if (f < 0) {
                                            d = Math.floor(r * this._frameRate);
                                            f = this._frameIndices[c.frameIndicesOffset + d];
                                            p = this._animationData.frameOffset + this._timelineArray[c.offset + 5 + f], m = this._frameArray[p] / this._frameRate;
                                            this.currentPlayTimes === n && (r <= m ? f > 0 ? f-- : f = this._frameCount - 1 : f === _ && (f = -1))
                                        }
                                        for (; f >= 0;) {
                                            f < this._frameCount - 1 ? f++ : f = 0;
                                            p = this._animationData.frameOffset + this._timelineArray[c.offset + 5 + f], m = this._frameArray[p] / this._frameRate;
                                            if (this._position <= m && m <= this._position + this._duration && this._onCrossFrame(f), null !== l && 0 === f && (this._armature._dragonBones.bufferEvent(l), l = null), f === _) break
                                        }
                                    }
                            }
                        } else if (this._frameIndex < 0 && (this._frameIndex = 0, null !== this._timelineData)) {
                            this._frameOffset = this._animationData.frameOffset + this._timelineArray[this._timelineData.offset + 5];
                            m = this._frameArray[this._frameOffset] / this._frameRate;
                            this.currentPlayTimes === n ? r <= m && this._onCrossFrame(this._frameIndex) : this._position <= m && (a || null === l || (this._armature._dragonBones.bufferEvent(l), l = null), this._onCrossFrame(this._frameIndex))
                        }
                        null !== l && this._armature._dragonBones.bufferEvent(l), null !== h && this._armature._dragonBones.bufferEvent(h)
                    }
                }, i.prototype.setCurrentTime = function(t) {
                    this._setCurrentTime(t), this._frameIndex = -1
                }, i
            })(t.TimelineState);
            t.ActionTimelineState = e;
            var i = (function(t) {
                function e() {
                    return null !== t && t.apply(this, arguments) || this
                }
                return n(e, t), e.toString = function() {
                    return "[class dragonBones.ZOrderTimelineState]"
                }, e.prototype._onArriveAtFrame = function() {
                    this.playState >= 0 && (this._frameArray[this._frameOffset + 1] > 0 ? this._armature._sortZOrder(this._frameArray, this._frameOffset + 2) : this._armature._sortZOrder(null, 0))
                }, e.prototype._onUpdateFrame = function() {}, e
            })(t.TimelineState);
            t.ZOrderTimelineState = i;
            var r = (function(e) {
                function i() {
                    return null !== e && e.apply(this, arguments) || this
                }
                return n(i, e), i.toString = function() {
                    return "[class dragonBones.BoneAllTimelineState]"
                }, i.prototype._onArriveAtFrame = function() {
                    if (e.prototype._onArriveAtFrame.call(this), null !== this._timelineData) {
                        var t = this._animationData.frameFloatOffset + this._frameValueOffset + 6 * this._frameIndex,
                            i = this._armature._armatureData.scale,
                            n = this._frameFloatArray,
                            r = this.bonePose.current,
                            s = this.bonePose.delta;
                        r.x = n[t++] * i, r.y = n[t++] * i, r.rotation = n[t++], r.skew = n[t++], r.scaleX = n[t++], r.scaleY = n[t++], 2 === this._tweenState ? (this._frameIndex === this._frameCount - 1 && (t = this._animationData.frameFloatOffset + this._frameValueOffset), s.x = n[t++] * i - r.x, s.y = n[t++] * i - r.y, s.rotation = n[t++] - r.rotation, s.skew = n[t++] - r.skew, s.scaleX = n[t++] - r.scaleX, s.scaleY = n[t++] - r.scaleY) : (s.x = 0, s.y = 0, s.rotation = 0, s.skew = 0, s.scaleX = 0, s.scaleY = 0)
                    } else {
                        r = this.bonePose.current, s = this.bonePose.delta;
                        r.x = 0, r.y = 0, r.rotation = 0, r.skew = 0, r.scaleX = 1, r.scaleY = 1, s.x = 0, s.y = 0, s.rotation = 0, s.skew = 0, s.scaleX = 0, s.scaleY = 0
                    }
                }, i.prototype._onUpdateFrame = function() {
                    e.prototype._onUpdateFrame.call(this);
                    var t = this.bonePose.current,
                        i = this.bonePose.delta,
                        n = this.bonePose.result;
                    this.bone._transformDirty = !0, 2 !== this._tweenState && (this._tweenState = 0), n.x = t.x + i.x * this._tweenProgress, n.y = t.y + i.y * this._tweenProgress, n.rotation = t.rotation + i.rotation * this._tweenProgress, n.skew = t.skew + i.skew * this._tweenProgress, n.scaleX = t.scaleX + i.scaleX * this._tweenProgress, n.scaleY = t.scaleY + i.scaleY * this._tweenProgress
                }, i.prototype.fadeOut = function() {
                    var e = this.bonePose.result;
                    e.rotation = t.Transform.normalizeRadian(e.rotation), e.skew = t.Transform.normalizeRadian(e.skew)
                }, i
            })(t.BoneTimelineState);
            t.BoneAllTimelineState = r;
            var s = (function(t) {
                function e() {
                    return null !== t && t.apply(this, arguments) || this
                }
                return n(e, t), e.toString = function() {
                    return "[class dragonBones.BoneTranslateTimelineState]"
                }, e.prototype._onArriveAtFrame = function() {
                    if (t.prototype._onArriveAtFrame.call(this), null !== this._timelineData) {
                        var e = this._animationData.frameFloatOffset + this._frameValueOffset + 2 * this._frameIndex,
                            i = this._armature._armatureData.scale,
                            n = this._frameFloatArray,
                            r = this.bonePose.current,
                            s = this.bonePose.delta;
                        r.x = n[e++] * i, r.y = n[e++] * i, 2 === this._tweenState ? (this._frameIndex === this._frameCount - 1 && (e = this._animationData.frameFloatOffset + this._frameValueOffset), s.x = n[e++] * i - r.x, s.y = n[e++] * i - r.y) : (s.x = 0, s.y = 0)
                    } else {
                        r = this.bonePose.current, s = this.bonePose.delta;
                        r.x = 0, r.y = 0, s.x = 0, s.y = 0
                    }
                }, e.prototype._onUpdateFrame = function() {
                    t.prototype._onUpdateFrame.call(this);
                    var e = this.bonePose.current,
                        i = this.bonePose.delta,
                        n = this.bonePose.result;
                    this.bone._transformDirty = !0, 2 !== this._tweenState && (this._tweenState = 0), n.x = e.x + i.x * this._tweenProgress, n.y = e.y + i.y * this._tweenProgress
                }, e
            })(t.BoneTimelineState);
            t.BoneTranslateTimelineState = s;
            var o = (function(e) {
                function i() {
                    return null !== e && e.apply(this, arguments) || this
                }
                return n(i, e), i.toString = function() {
                    return "[class dragonBones.BoneRotateTimelineState]"
                }, i.prototype._onArriveAtFrame = function() {
                    if (e.prototype._onArriveAtFrame.call(this), null !== this._timelineData) {
                        var i = this._animationData.frameFloatOffset + this._frameValueOffset + 2 * this._frameIndex,
                            n = this._frameFloatArray,
                            r = this.bonePose.current,
                            s = this.bonePose.delta;
                        r.rotation = n[i++], r.skew = n[i++], 2 === this._tweenState ? (this._frameIndex === this._frameCount - 1 ? (i = this._animationData.frameFloatOffset + this._frameValueOffset, s.rotation = t.Transform.normalizeRadian(n[i++] - r.rotation)) : s.rotation = n[i++] - r.rotation, s.skew = n[i++] - r.skew) : (s.rotation = 0, s.skew = 0)
                    } else {
                        r = this.bonePose.current, s = this.bonePose.delta;
                        r.rotation = 0, r.skew = 0, s.rotation = 0, s.skew = 0
                    }
                }, i.prototype._onUpdateFrame = function() {
                    e.prototype._onUpdateFrame.call(this);
                    var t = this.bonePose.current,
                        i = this.bonePose.delta,
                        n = this.bonePose.result;
                    this.bone._transformDirty = !0, 2 !== this._tweenState && (this._tweenState = 0), n.rotation = t.rotation + i.rotation * this._tweenProgress, n.skew = t.skew + i.skew * this._tweenProgress
                }, i.prototype.fadeOut = function() {
                    var e = this.bonePose.result;
                    e.rotation = t.Transform.normalizeRadian(e.rotation), e.skew = t.Transform.normalizeRadian(e.skew)
                }, i
            })(t.BoneTimelineState);
            t.BoneRotateTimelineState = o;
            var a = (function(t) {
                function e() {
                    return null !== t && t.apply(this, arguments) || this
                }
                return n(e, t), e.toString = function() {
                    return "[class dragonBones.BoneScaleTimelineState]"
                }, e.prototype._onArriveAtFrame = function() {
                    if (t.prototype._onArriveAtFrame.call(this), null !== this._timelineData) {
                        var e = this._animationData.frameFloatOffset + this._frameValueOffset + 2 * this._frameIndex,
                            i = this._frameFloatArray,
                            n = this.bonePose.current,
                            r = this.bonePose.delta;
                        n.scaleX = i[e++], n.scaleY = i[e++], 2 === this._tweenState ? (this._frameIndex === this._frameCount - 1 && (e = this._animationData.frameFloatOffset + this._frameValueOffset), r.scaleX = i[e++] - n.scaleX, r.scaleY = i[e++] - n.scaleY) : (r.scaleX = 0, r.scaleY = 0)
                    } else {
                        n = this.bonePose.current, r = this.bonePose.delta;
                        n.scaleX = 1, n.scaleY = 1, r.scaleX = 0, r.scaleY = 0
                    }
                }, e.prototype._onUpdateFrame = function() {
                    t.prototype._onUpdateFrame.call(this);
                    var e = this.bonePose.current,
                        i = this.bonePose.delta,
                        n = this.bonePose.result;
                    this.bone._transformDirty = !0, 2 !== this._tweenState && (this._tweenState = 0), n.scaleX = e.scaleX + i.scaleX * this._tweenProgress, n.scaleY = e.scaleY + i.scaleY * this._tweenProgress
                }, e
            })(t.BoneTimelineState);
            t.BoneScaleTimelineState = a;
            var l = (function(t) {
                function e() {
                    var e = null !== t && t.apply(this, arguments) || this;
                    return e._current = [], e._delta = [], e._result = [], e
                }
                return n(e, t), e.toString = function() {
                    return "[class dragonBones.SurfaceTimelineState]"
                }, e.prototype._onClear = function() {
                    t.prototype._onClear.call(this), this.surface = null, this._frameFloatOffset = 0, this._valueCount = 0, this._deformCount = 0, this._valueOffset = 0, this._current.length = 0, this._delta.length = 0, this._result.length = 0
                }, e.prototype._onArriveAtFrame = function() {
                    if (t.prototype._onArriveAtFrame.call(this), null !== this._timelineData) {
                        var e = this._animationData.frameFloatOffset + this._frameValueOffset + this._frameIndex * this._valueCount,
                            i = this._armature._armatureData.scale,
                            n = this._frameFloatArray;
                        if (2 === this._tweenState) {
                            var r = e + this._valueCount;
                            this._frameIndex === this._frameCount - 1 && (r = this._animationData.frameFloatOffset + this._frameValueOffset);
                            for (var s = 0; s < this._valueCount; ++s) this._delta[s] = n[r + s] * i - (this._current[s] = n[e + s] * i)
                        } else
                            for (s = 0; s < this._valueCount; ++s) this._current[s] = n[e + s] * i
                    } else
                        for (s = 0; s < this._valueCount; ++s) this._current[s] = 0
                }, e.prototype._onUpdateFrame = function() {
                    t.prototype._onUpdateFrame.call(this), this.surface._transformDirty = !0, 2 !== this._tweenState && (this._tweenState = 0);
                    for (var e = 0; e < this._valueCount; ++e) this._result[e] = this._current[e] + this._delta[e] * this._tweenProgress
                }, e.prototype.init = function(e, i, n) {
                    if (t.prototype.init.call(this, e, i, n), null !== this._timelineData) {
                        var r = this._animationData.frameIntOffset + this._timelineArray[this._timelineData.offset + 3];
                        this._deformCount = this._frameIntArray[r + 1], this._valueCount = this._frameIntArray[r + 2], this._valueOffset = this._frameIntArray[r + 3], this._frameFloatOffset = this._frameIntArray[r + 4] + this._animationData.frameFloatOffset
                    } else this._deformCount = this.surface._deformVertices.length, this._valueCount = this._deformCount, this._valueOffset = 0, this._frameFloatOffset = 0;
                    this._current.length = this._valueCount, this._delta.length = this._valueCount, this._result.length = this._valueCount;
                    for (var s = 0; s < this._valueCount; ++s) this._delta[s] = 0
                }, e.prototype.blend = function(t) {
                    for (var e = this.surface._blendState.blendWeight, i = this.surface._deformVertices, n = 0; n < this._deformCount; ++n) {
                        var r = 0;
                        r = n < this._valueOffset ? this._frameFloatArray[this._frameFloatOffset + n] : n < this._valueOffset + this._valueCount ? this._result[n - this._valueOffset] : this._frameFloatArray[this._frameFloatOffset + n - this._valueCount], 2 === t ? i[n] += r * e : i[n] = 1 !== e ? r * e : r
                    }
                    0 === this._animationState._fadeState && 0 === this._animationState._subFadeState || (this.surface._transformDirty = !0)
                }, e
            })(t.TweenTimelineState);
            t.SurfaceTimelineState = l;
            var h = (function(t) {
                function e() {
                    return null !== t && t.apply(this, arguments) || this
                }
                return n(e, t), e.toString = function() {
                    return "[class dragonBones.SlotDislayTimelineState]"
                }, e.prototype._onArriveAtFrame = function() {
                    if (this.playState >= 0) {
                        var t = null !== this._timelineData ? this._frameArray[this._frameOffset + 1] : this.slot._slotData.displayIndex;
                        this.slot.displayIndex !== t && this.slot._setDisplayIndex(t, !0)
                    }
                }, e
            })(t.SlotTimelineState);
            t.SlotDislayTimelineState = h;
            var c = (function(t) {
                function e() {
                    var e = null !== t && t.apply(this, arguments) || this;
                    return e._current = [0, 0, 0, 0, 0, 0, 0, 0], e._delta = [0, 0, 0, 0, 0, 0, 0, 0], e._result = [0, 0, 0, 0, 0, 0, 0, 0], e
                }
                return n(e, t), e.toString = function() {
                    return "[class dragonBones.SlotColorTimelineState]"
                }, e.prototype._onClear = function() {
                    t.prototype._onClear.call(this), this._dirty = !1
                }, e.prototype._onArriveAtFrame = function() {
                    if (t.prototype._onArriveAtFrame.call(this), null !== this._timelineData) {
                        var e = this._dragonBonesData.intArray,
                            i = this._frameIntArray,
                            n = this._animationData.frameIntOffset + this._frameValueOffset + 1 * this._frameIndex,
                            r = i[n];
                        r < 0 && (r += 65536), this._current[0] = e[r++], this._current[1] = e[r++], this._current[2] = e[r++], this._current[3] = e[r++], this._current[4] = e[r++], this._current[5] = e[r++], this._current[6] = e[r++], this._current[7] = e[r++], 2 === this._tweenState && ((r = this._frameIndex === this._frameCount - 1 ? i[this._animationData.frameIntOffset + this._frameValueOffset] : i[n + 1]) < 0 && (r += 65536), this._delta[0] = e[r++] - this._current[0], this._delta[1] = e[r++] - this._current[1], this._delta[2] = e[r++] - this._current[2], this._delta[3] = e[r++] - this._current[3], this._delta[4] = e[r++] - this._current[4], this._delta[5] = e[r++] - this._current[5], this._delta[6] = e[r++] - this._current[6], this._delta[7] = e[r++] - this._current[7])
                    } else {
                        var s = this.slot._slotData.color;
                        this._current[0] = 100 * s.alphaMultiplier, this._current[1] = 100 * s.redMultiplier, this._current[2] = 100 * s.greenMultiplier, this._current[3] = 100 * s.blueMultiplier, this._current[4] = s.alphaOffset, this._current[5] = s.redOffset, this._current[6] = s.greenOffset, this._current[7] = s.blueOffset
                    }
                }, e.prototype._onUpdateFrame = function() {
                    t.prototype._onUpdateFrame.call(this), this._dirty = !0, 2 !== this._tweenState && (this._tweenState = 0), this._result[0] = .01 * (this._current[0] + this._delta[0] * this._tweenProgress), this._result[1] = .01 * (this._current[1] + this._delta[1] * this._tweenProgress), this._result[2] = .01 * (this._current[2] + this._delta[2] * this._tweenProgress), this._result[3] = .01 * (this._current[3] + this._delta[3] * this._tweenProgress), this._result[4] = this._current[4] + this._delta[4] * this._tweenProgress, this._result[5] = this._current[5] + this._delta[5] * this._tweenProgress, this._result[6] = this._current[6] + this._delta[6] * this._tweenProgress, this._result[7] = this._current[7] + this._delta[7] * this._tweenProgress
                }, e.prototype.fadeOut = function() {
                    this._tweenState = 0, this._dirty = !1
                }, e.prototype.update = function(e) {
                    if (t.prototype.update.call(this, e), 0 !== this._tweenState || this._dirty) {
                        var i = this.slot._colorTransform;
                        if (0 !== this._animationState._fadeState || 0 !== this._animationState._subFadeState) {
                            if (i.alphaMultiplier !== this._result[0] || i.redMultiplier !== this._result[1] || i.greenMultiplier !== this._result[2] || i.blueMultiplier !== this._result[3] || i.alphaOffset !== this._result[4] || i.redOffset !== this._result[5] || i.greenOffset !== this._result[6] || i.blueOffset !== this._result[7]) {
                                var n = Math.pow(this._animationState._fadeProgress, 4);
                                i.alphaMultiplier += (this._result[0] - i.alphaMultiplier) * n, i.redMultiplier += (this._result[1] - i.redMultiplier) * n, i.greenMultiplier += (this._result[2] - i.greenMultiplier) * n, i.blueMultiplier += (this._result[3] - i.blueMultiplier) * n, i.alphaOffset += (this._result[4] - i.alphaOffset) * n, i.redOffset += (this._result[5] - i.redOffset) * n, i.greenOffset += (this._result[6] - i.greenOffset) * n, i.blueOffset += (this._result[7] - i.blueOffset) * n, this.slot._colorDirty = !0
                            }
                        } else this._dirty && (this._dirty = !1, i.alphaMultiplier === this._result[0] && i.redMultiplier === this._result[1] && i.greenMultiplier === this._result[2] && i.blueMultiplier === this._result[3] && i.alphaOffset === this._result[4] && i.redOffset === this._result[5] && i.greenOffset === this._result[6] && i.blueOffset === this._result[7] || (i.alphaMultiplier = this._result[0], i.redMultiplier = this._result[1], i.greenMultiplier = this._result[2], i.blueMultiplier = this._result[3], i.alphaOffset = this._result[4], i.redOffset = this._result[5], i.greenOffset = this._result[6], i.blueOffset = this._result[7], this.slot._colorDirty = !0))
                    }
                }, e
            })(t.SlotTimelineState);
            t.SlotColorTimelineState = c;
            var u = (function(t) {
                function e() {
                    var e = null !== t && t.apply(this, arguments) || this;
                    return e._current = [], e._delta = [], e._result = [], e
                }
                return n(e, t), e.toString = function() {
                    return "[class dragonBones.DeformTimelineState]"
                }, e.prototype._onClear = function() {
                    t.prototype._onClear.call(this), this.vertexOffset = 0, this._dirty = !1, this._frameFloatOffset = 0, this._valueCount = 0, this._deformCount = 0, this._valueOffset = 0, this._current.length = 0, this._delta.length = 0, this._result.length = 0
                }, e.prototype._onArriveAtFrame = function() {
                    if (t.prototype._onArriveAtFrame.call(this), null !== this._timelineData) {
                        var e = this._animationData.frameFloatOffset + this._frameValueOffset + this._frameIndex * this._valueCount,
                            i = this._armature._armatureData.scale,
                            n = this._frameFloatArray;
                        if (2 === this._tweenState) {
                            var r = e + this._valueCount;
                            this._frameIndex === this._frameCount - 1 && (r = this._animationData.frameFloatOffset + this._frameValueOffset);
                            for (var s = 0; s < this._valueCount; ++s) this._delta[s] = n[r + s] * i - (this._current[s] = n[e + s] * i)
                        } else
                            for (s = 0; s < this._valueCount; ++s) this._current[s] = n[e + s] * i
                    } else
                        for (s = 0; s < this._valueCount; ++s) this._current[s] = 0
                }, e.prototype._onUpdateFrame = function() {
                    t.prototype._onUpdateFrame.call(this), this._dirty = !0, 2 !== this._tweenState && (this._tweenState = 0);
                    for (var e = 0; e < this._valueCount; ++e) this._result[e] = this._current[e] + this._delta[e] * this._tweenProgress
                }, e.prototype.init = function(e, i, n) {
                    if (t.prototype.init.call(this, e, i, n), null !== this._timelineData) {
                        var r = this._animationData.frameIntOffset + this._timelineArray[this._timelineData.offset + 3];
                        this.vertexOffset = this._frameIntArray[r + 0], this.vertexOffset < 0 && (this.vertexOffset += 65536), this._deformCount = this._frameIntArray[r + 1], this._valueCount = this._frameIntArray[r + 2], this._valueOffset = this._frameIntArray[r + 3], this._frameFloatOffset = this._frameIntArray[r + 4] + this._animationData.frameFloatOffset
                    } else {
                        var s = this.slot._deformVertices;
                        this._deformCount = null !== s ? s.vertices.length : 0, this._valueCount = this._deformCount, this._valueOffset = 0, this._frameFloatOffset = 0
                    }
                    this._current.length = this._valueCount, this._delta.length = this._valueCount, this._result.length = this._valueCount;
                    for (var o = 0; o < this._valueCount; ++o) this._delta[o] = 0
                }, e.prototype.fadeOut = function() {
                    this._tweenState = 0, this._dirty = !1
                }, e.prototype.update = function(e) {
                    var i = this.slot._deformVertices;
                    if (null !== i && null !== i.verticesData && i.verticesData.offset === this.vertexOffset && (t.prototype.update.call(this, e), 0 !== this._tweenState || this._dirty)) {
                        var n = i.vertices;
                        if (0 !== this._animationState._fadeState || 0 !== this._animationState._subFadeState) {
                            for (var r = Math.pow(this._animationState._fadeProgress, 2), s = 0; s < this._deformCount; ++s) s < this._valueOffset ? n[s] += (this._frameFloatArray[this._frameFloatOffset + s] - n[s]) * r : s < this._valueOffset + this._valueCount ? n[s] += (this._result[s - this._valueOffset] - n[s]) * r : n[s] += (this._frameFloatArray[this._frameFloatOffset + s - this._valueCount] - n[s]) * r;
                            i.verticesDirty = !0
                        } else if (this._dirty) {
                            this._dirty = !1;
                            for (s = 0; s < this._deformCount; ++s) s < this._valueOffset ? n[s] = this._frameFloatArray[this._frameFloatOffset + s] : s < this._valueOffset + this._valueCount ? n[s] = this._result[s - this._valueOffset] : n[s] = this._frameFloatArray[this._frameFloatOffset + s - this._valueCount];
                            i.verticesDirty = !0
                        }
                    }
                }, e
            })(t.SlotTimelineState);
            t.DeformTimelineState = u;
            var _ = (function(t) {
                function e() {
                    return null !== t && t.apply(this, arguments) || this
                }
                return n(e, t), e.toString = function() {
                    return "[class dragonBones.IKConstraintTimelineState]"
                }, e.prototype._onClear = function() {
                    t.prototype._onClear.call(this), this._current = 0, this._delta = 0
                }, e.prototype._onArriveAtFrame = function() {
                    t.prototype._onArriveAtFrame.call(this);
                    var e = this.constraint;
                    if (null !== this._timelineData) {
                        var i = this._animationData.frameIntOffset + this._frameValueOffset + 2 * this._frameIndex,
                            n = this._frameIntArray,
                            r = 0 !== n[i++];
                        this._current = .01 * n[i++], 2 === this._tweenState ? (this._frameIndex === this._frameCount - 1 && (i = this._animationData.frameIntOffset + this._frameValueOffset), this._delta = .01 * n[i + 1] - this._current) : this._delta = 0, e._bendPositive = r
                    } else {
                        var s = e._constraintData;
                        this._current = s.weight, this._delta = 0, e._bendPositive = s.bendPositive
                    }
                    e.invalidUpdate()
                }, e.prototype._onUpdateFrame = function() {
                    t.prototype._onUpdateFrame.call(this), 2 !== this._tweenState && (this._tweenState = 0);
                    var e = this.constraint;
                    e._weight = this._current + this._delta * this._tweenProgress, e.invalidUpdate()
                }, e
            })(t.ConstraintTimelineState);
            t.IKConstraintTimelineState = _;
            var f = (function(t) {
                function e() {
                    var e = null !== t && t.apply(this, arguments) || this;
                    return e._floats = [0, 0, 0, 0, 0, 0], e
                }
                return n(e, t), e.toString = function() {
                    return "[class dragonBones.AnimationTimelineState]"
                }, e.prototype._onClear = function() {
                    t.prototype._onClear.call(this), this.animationState = null
                }, e.prototype._onArriveAtFrame = function() {
                    if (t.prototype._onArriveAtFrame.call(this), null !== this._timelineData) {
                        var e = this._animationData.frameIntOffset + this._frameValueOffset + 2 * this._frameIndex,
                            i = 1 / this.animationState._animationData.parent.frameRate,
                            n = this._frameIntArray;
                        this._floats[0] = n[e++] * i, this._floats[3] = .01 * n[e++], 2 === this._tweenState ? (this._frameIndex === this._frameCount - 1 && (e = this._animationData.frameIntOffset + this._frameValueOffset), this._floats[1] = n[e++] * i - this._floats[0], this._floats[4] = .01 * n[e++] - this._floats[3]) : (this._floats[1] = 0, this._floats[4] = 0)
                    }
                }, e.prototype._onUpdateFrame = function() {
                    t.prototype._onUpdateFrame.call(this), 2 !== this._tweenState && (this._tweenState = 0), this._floats[0] >= 0 && (this._floats[2] = this._floats[0] + this._floats[1] * this._tweenProgress), this._floats[5] = this._floats[3] + this._floats[4] * this._tweenProgress
                }, e.prototype.blend = function(t) {
                    var e = this.animationState,
                        i = e._blendState.blendWeight;
                    2 === t ? (e.weight += this._floats[5] * i, e.currentTime += this._floats[2] * i) : (e.weight = this._floats[5] * i, e.currentTime = this._floats[2] * i)
                }, e
            })(t.TweenTimelineState);
            t.AnimationTimelineState = f
        })(r || (r = {})), (function(t) {
            var e = (function(t) {
                function e() {
                    return null !== t && t.apply(this, arguments) || this
                }
                return n(e, t), e.actionDataToInstance = function(t, i, n) {
                    0 === t.type ? i.type = e.FRAME_EVENT : i.type = 10 === t.type ? e.FRAME_EVENT : e.SOUND_EVENT, i.name = t.name, i.armature = n, i.actionData = t, i.data = t.data, null !== t.bone && (i.bone = n.getBone(t.bone.name)), null !== t.slot && (i.slot = n.getSlot(t.slot.name))
                }, e.toString = function() {
                    return "[class dragonBones.EventObject]"
                }, e.prototype._onClear = function() {
                    this.time = 0, this.type = "", this.name = "", this.armature = null, this.bone = null, this.slot = null, this.animationState = null, this.actionData = null, this.data = null
                }, e.START = "start", e.LOOP_COMPLETE = "loopComplete", e.COMPLETE = "complete", e.FADE_IN = "fadeIn", e.FADE_IN_COMPLETE = "fadeInComplete", e.FADE_OUT = "fadeOut", e.FADE_OUT_COMPLETE = "fadeOutComplete", e.FRAME_EVENT = "frameEvent", e.SOUND_EVENT = "soundEvent", e
            })(t.BaseObject);
            t.EventObject = e
        })(r || (r = {})), (function(t) {
            var e = (function() {
                function e() {}
                return e._getArmatureType = function(t) {
                    switch (t.toLowerCase()) {
                        case "stage":
                            return 2;
                        case "armature":
                            return 0;
                        case "movieclip":
                            return 1;
                        default:
                            return 0
                    }
                }, e._getBoneType = function(t) {
                    switch (t.toLowerCase()) {
                        case "bone":
                            return 0;
                        case "surface":
                            return 1;
                        default:
                            return 0
                    }
                }, e._getDisplayType = function(t) {
                    switch (t.toLowerCase()) {
                        case "image":
                            return 0;
                        case "mesh":
                            return 2;
                        case "armature":
                            return 1;
                        case "boundingbox":
                            return 3;
                        case "path":
                            return 4;
                        default:
                            return 0
                    }
                }, e._getBoundingBoxType = function(t) {
                    switch (t.toLowerCase()) {
                        case "rectangle":
                            return 0;
                        case "ellipse":
                            return 1;
                        case "polygon":
                            return 2;
                        default:
                            return 0
                    }
                }, e._getActionType = function(t) {
                    switch (t.toLowerCase()) {
                        case "play":
                            return 0;
                        case "frame":
                            return 10;
                        case "sound":
                            return 11;
                        default:
                            return 0
                    }
                }, e._getBlendMode = function(t) {
                    switch (t.toLowerCase()) {
                        case "normal":
                            return 0;
                        case "add":
                            return 1;
                        case "alpha":
                            return 2;
                        case "darken":
                            return 3;
                        case "difference":
                            return 4;
                        case "erase":
                            return 5;
                        case "hardlight":
                            return 6;
                        case "invert":
                            return 7;
                        case "layer":
                            return 8;
                        case "lighten":
                            return 9;
                        case "multiply":
                            return 10;
                        case "overlay":
                            return 11;
                        case "screen":
                            return 12;
                        case "subtract":
                            return 13;
                        default:
                            return 0
                    }
                }, e._getPositionMode = function(t) {
                    switch (t.toLocaleLowerCase()) {
                        case "percent":
                            return 1;
                        case "fixed":
                            return 0;
                        default:
                            return 1
                    }
                }, e._getSpacingMode = function(t) {
                    switch (t.toLocaleLowerCase()) {
                        case "length":
                            return 0;
                        case "percent":
                            return 2;
                        case "fixed":
                            return 1;
                        default:
                            return 0
                    }
                }, e._getRotateMode = function(t) {
                    switch (t.toLocaleLowerCase()) {
                        case "tangent":
                            return 0;
                        case "chain":
                            return 1;
                        case "chainscale":
                            return 2;
                        default:
                            return 0
                    }
                }, e.parseDragonBonesData = function(e) {
                    return console.warn("Deprecated."), e instanceof ArrayBuffer ? t.BinaryDataParser.getInstance().parseDragonBonesData(e) : t.ObjectDataParser.getInstance().parseDragonBonesData(e)
                }, e.parseTextureAtlasData = function(i, n) {
                    void 0 === n && (n = 1), console.warn("\u5df2\u5e9f\u5f03");
                    for (var r = {}, s = i[e.SUB_TEXTURE], o = 0, a = s.length; o < a; o++) {
                        var l = s[o],
                            h = l[e.NAME],
                            c = new t.Rectangle,
                            u = null;
                        c.x = l[e.X] / n, c.y = l[e.Y] / n, c.width = l[e.WIDTH] / n, c.height = l[e.HEIGHT] / n, e.FRAME_WIDTH in l && ((u = new t.Rectangle).x = l[e.FRAME_X] / n, u.y = l[e.FRAME_Y] / n, u.width = l[e.FRAME_WIDTH] / n, u.height = l[e.FRAME_HEIGHT] / n), r[h] = {
                            region: c,
                            frame: u,
                            rotated: !1
                        }
                    }
                    return r
                }, e.DATA_VERSION_2_3 = "2.3", e.DATA_VERSION_3_0 = "3.0", e.DATA_VERSION_4_0 = "4.0", e.DATA_VERSION_4_5 = "4.5", e.DATA_VERSION_5_0 = "5.0", e.DATA_VERSION_5_5 = "5.5", e.DATA_VERSION = e.DATA_VERSION_5_5, e.DATA_VERSIONS = [e.DATA_VERSION_4_0, e.DATA_VERSION_4_5, e.DATA_VERSION_5_0, e.DATA_VERSION_5_5], e.TEXTURE_ATLAS = "textureAtlas", e.SUB_TEXTURE = "SubTexture", e.FORMAT = "format", e.IMAGE_PATH = "imagePath", e.WIDTH = "width", e.HEIGHT = "height", e.ROTATED = "rotated", e.FRAME_X = "frameX", e.FRAME_Y = "frameY", e.FRAME_WIDTH = "frameWidth", e.FRAME_HEIGHT = "frameHeight", e.DRADON_BONES = "dragonBones", e.USER_DATA = "userData", e.ARMATURE = "armature", e.BONE = "bone", e.SURFACE = "surface", e.SLOT = "slot", e.CONSTRAINT = "constraint", e.IK = "ik", e.PATH_CONSTRAINT = "path", e.SKIN = "skin", e.DISPLAY = "display", e.ANIMATION = "animation", e.Z_ORDER = "zOrder", e.FFD = "ffd", e.FRAME = "frame", e.TRANSLATE_FRAME = "translateFrame", e.ROTATE_FRAME = "rotateFrame", e.SCALE_FRAME = "scaleFrame", e.DISPLAY_FRAME = "displayFrame", e.COLOR_FRAME = "colorFrame", e.DEFAULT_ACTIONS = "defaultActions", e.ACTIONS = "actions", e.EVENTS = "events", e.INTS = "ints", e.FLOATS = "floats", e.STRINGS = "strings", e.CANVAS = "canvas", e.TRANSFORM = "transform", e.PIVOT = "pivot", e.AABB = "aabb", e.COLOR = "color", e.VERSION = "version", e.COMPATIBLE_VERSION = "compatibleVersion", e.FRAME_RATE = "frameRate", e.TYPE = "type", e.SUB_TYPE = "subType", e.NAME = "name", e.PARENT = "parent", e.TARGET = "target", e.STAGE = "stage", e.SHARE = "share", e.PATH = "path", e.LENGTH = "length", e.DISPLAY_INDEX = "displayIndex", e.BLEND_MODE = "blendMode", e.INHERIT_TRANSLATION = "inheritTranslation", e.INHERIT_ROTATION = "inheritRotation", e.INHERIT_SCALE = "inheritScale", e.INHERIT_REFLECTION = "inheritReflection", e.INHERIT_ANIMATION = "inheritAnimation", e.INHERIT_DEFORM = "inheritDeform", e.SEGMENT_X = "segmentX", e.SEGMENT_Y = "segmentY", e.BEND_POSITIVE = "bendPositive", e.CHAIN = "chain", e.WEIGHT = "weight", e.FADE_IN_TIME = "fadeInTime", e.PLAY_TIMES = "playTimes", e.SCALE = "scale", e.OFFSET = "offset", e.POSITION = "position", e.DURATION = "duration", e.TWEEN_EASING = "tweenEasing", e.TWEEN_ROTATE = "tweenRotate", e.TWEEN_SCALE = "tweenScale", e.CLOCK_WISE = "clockwise", e.CURVE = "curve", e.SOUND = "sound", e.EVENT = "event", e.ACTION = "action", e.X = "x", e.Y = "y", e.SKEW_X = "skX", e.SKEW_Y = "skY", e.SCALE_X = "scX", e.SCALE_Y = "scY", e.VALUE = "value", e.ROTATE = "rotate", e.SKEW = "skew", e.ALPHA_OFFSET = "aO", e.RED_OFFSET = "rO", e.GREEN_OFFSET = "gO", e.BLUE_OFFSET = "bO", e.ALPHA_MULTIPLIER = "aM", e.RED_MULTIPLIER = "rM", e.GREEN_MULTIPLIER = "gM", e.BLUE_MULTIPLIER = "bM", e.UVS = "uvs", e.VERTICES = "vertices", e.TRIANGLES = "triangles", e.WEIGHTS = "weights", e.SLOT_POSE = "slotPose", e.BONE_POSE = "bonePose", e.GLUE_WEIGHTS = "glueWeights", e.GLUE_MESHES = "glueMeshes", e.BONES = "bones", e.POSITION_MODE = "positionMode", e.SPACING_MODE = "spacingMode", e.ROTATE_MODE = "rotateMode", e.SPACING = "spacing", e.ROTATE_OFFSET = "rotateOffset", e.ROTATE_MIX = "rotateMix", e.TRANSLATE_MIX = "translateMix", e.TARGET_DISPLAY = "targetDisplay", e.CLOSED = "closed", e.CONSTANT_SPEED = "constantSpeed", e.VERTEX_COUNT = "vertexCount", e.LENGTHS = "lengths", e.GOTO_AND_PLAY = "gotoAndPlay", e.DEFAULT_NAME = "default", e
            })();
            t.DataParser = e
        })(r || (r = {})), (function(t) {
            var e = (function(e) {
                function r() {
                    var i = null !== e && e.apply(this, arguments) || this;
                    return i._rawTextureAtlasIndex = 0, i._rawBones = [], i._data = null, i._armature = null, i._bone = null, i._surface = null, i._slot = null, i._skin = null, i._mesh = null, i._animation = null, i._timeline = null, i._rawTextureAtlases = null, i._defaultColorOffset = -1, i._prevClockwise = 0, i._prevRotation = 0, i._helpMatrixA = new t.Matrix, i._helpMatrixB = new t.Matrix, i._helpTransform = new t.Transform, i._helpColorTransform = new t.ColorTransform, i._helpPoint = new t.Point, i._helpArray = [], i._intArray = [], i._floatArray = [], i._frameIntArray = [], i._frameFloatArray = [], i._frameArray = [], i._timelineArray = [], i._cacheRawMeshes = [], i._cacheMeshes = [], i._actionFrames = [], i._weightSlotPose = {}, i._weightBonePoses = {}, i._cacheBones = {}, i._slotChildActions = {}, i
                }
                return n(r, e), r._getBoolean = function(t, e, i) {
                    if (e in t) {
                        var n = t[e],
                            r = typeof n;
                        if ("boolean" === r) return n;
                        if ("string" !== r) return !!n;
                        switch (n) {
                            case "0":
                            case "NaN":
                            case "":
                            case "false":
                            case "null":
                            case "undefined":
                                return !1;
                            default:
                                return !0
                        }
                    }
                    return i
                }, r._getNumber = function(t, e, i) {
                    if (e in t) {
                        var n = t[e];
                        return null === n || "NaN" === n ? i : +n || 0
                    }
                    return i
                }, r._getString = function(e, i, n) {
                    if (i in e) {
                        var r = e[i];
                        if ("string" === typeof r) {
                            if (t.DragonBones.webAssembly)
                                for (var s = 0, o = r.length; s < o; ++s)
                                    if (r.charCodeAt(s) > 255) return encodeURI(r);
                            return r
                        }
                        return String(r)
                    }
                    return n
                }, r.prototype._getCurvePoint = function(t, e, i, n, r, s, o, a, l, h) {
                    var c = 1 - l,
                        u = c * c,
                        _ = l * l,
                        f = c * u,
                        d = 3 * l * u,
                        p = 3 * c * _,
                        m = l * _;
                    h.x = f * t + d * i + p * r + m * o, h.y = f * e + d * n + p * s + m * a
                }, r.prototype._samplingEasingCurve = function(t, e) {
                    for (var i = t.length, n = -2, r = 0, s = e.length; r < s; ++r) {
                        for (var o = (r + 1) / (s + 1);
                            (n + 6 < i ? t[n + 6] : 1) < o;) n += 6;
                        for (var a = n >= 0 && n + 6 < i, l = a ? t[n] : 0, h = a ? t[n + 1] : 0, c = t[n + 2], u = t[n + 3], _ = t[n + 4], f = t[n + 5], d = a ? t[n + 6] : 1, p = a ? t[n + 7] : 1, m = 0, y = 1; y - m > 1e-4;) {
                            var v = .5 * (y + m);
                            this._getCurvePoint(l, h, c, u, _, f, d, p, v, this._helpPoint), o - this._helpPoint.x > 0 ? m = v : y = v
                        }
                        e[r] = this._helpPoint.y
                    }
                }, r.prototype._parseActionDataInFrame = function(e, i, n, r) {
                    t.DataParser.EVENT in e && this._mergeActionFrame(e[t.DataParser.EVENT], i, 10, n, r), t.DataParser.SOUND in e && this._mergeActionFrame(e[t.DataParser.SOUND], i, 11, n, r), t.DataParser.ACTION in e && this._mergeActionFrame(e[t.DataParser.ACTION], i, 0, n, r), t.DataParser.EVENTS in e && this._mergeActionFrame(e[t.DataParser.EVENTS], i, 10, n, r), t.DataParser.ACTIONS in e && this._mergeActionFrame(e[t.DataParser.ACTIONS], i, 0, n, r)
                }, r.prototype._mergeActionFrame = function(e, n, r, s, o) {
                    for (var a = t.DragonBones.webAssembly ? this._armature.actions.size() : this._armature.actions.length, l = this._parseActionData(e, r, s, o), h = 0, c = null, u = 0, _ = l; u < _.length; u++) {
                        var f = _[u];
                        this._armature.addAction(f, !1)
                    }
                    0 === this._actionFrames.length && ((c = new i).frameStart = 0, this._actionFrames.push(c), c = null);
                    for (var d = 0, p = this._actionFrames; d < p.length; d++) {
                        var m = p[d];
                        if (m.frameStart === n) {
                            c = m;
                            break
                        }
                        if (m.frameStart > n) break;
                        h++
                    }
                    null === c && ((c = new i).frameStart = n, this._actionFrames.splice(h + 1, 0, c));
                    for (var y = 0; y < l.length; ++y) c.actions.push(a + y)
                }, r.prototype._parseArmature = function(e, i) {
                    var n = t.BaseObject.borrowObject(t.ArmatureData);
                    if (n.name = r._getString(e, t.DataParser.NAME, ""), n.frameRate = r._getNumber(e, t.DataParser.FRAME_RATE, this._data.frameRate), n.scale = i, t.DataParser.TYPE in e && "string" == typeof e[t.DataParser.TYPE] ? n.type = t.DataParser._getArmatureType(e[t.DataParser.TYPE]) : n.type = r._getNumber(e, t.DataParser.TYPE, 0), 0 === n.frameRate && (n.frameRate = 24), this._armature = n, t.DataParser.CANVAS in e) {
                        var s = e[t.DataParser.CANVAS],
                            o = t.BaseObject.borrowObject(t.CanvasData);
                        t.DataParser.COLOR in s ? o.hasBackground = !0 : o.hasBackground = !1, o.color = r._getNumber(s, t.DataParser.COLOR, 0), o.x = r._getNumber(s, t.DataParser.X, 0) * n.scale, o.y = r._getNumber(s, t.DataParser.Y, 0) * n.scale, o.width = r._getNumber(s, t.DataParser.WIDTH, 0) * n.scale, o.height = r._getNumber(s, t.DataParser.HEIGHT, 0) * n.scale, n.canvas = o
                    }
                    if (t.DataParser.AABB in e) {
                        var a = e[t.DataParser.AABB];
                        n.aabb.x = r._getNumber(a, t.DataParser.X, 0) * n.scale, n.aabb.y = r._getNumber(a, t.DataParser.Y, 0) * n.scale, n.aabb.width = r._getNumber(a, t.DataParser.WIDTH, 0) * n.scale, n.aabb.height = r._getNumber(a, t.DataParser.HEIGHT, 0) * n.scale
                    }
                    if (t.DataParser.BONE in e)
                        for (var l = 0, h = e[t.DataParser.BONE]; l < h.length; l++) {
                            var c = h[l],
                                u = r._getString(c, t.DataParser.PARENT, ""),
                                _ = this._parseBone(c);
                            if (u.length > 0) {
                                var f = n.getBone(u);
                                null !== f ? _.parent = f : (u in this._cacheBones || (this._cacheBones[u] = []), this._cacheBones[u].push(_))
                            }
                            if (_.name in this._cacheBones) {
                                for (var d = 0, p = this._cacheBones[_.name]; d < p.length; d++) {
                                    p[d].parent = _
                                }
                                delete this._cacheBones[_.name]
                            }
                            n.addBone(_), this._rawBones.push(_)
                        }
                    if (t.DataParser.IK in e)
                        for (var m = 0, y = e[t.DataParser.IK]; m < y.length; m++) {
                            var v = y[m];
                            (M = this._parseIKConstraint(v)) && n.addConstraint(M)
                        }
                    if (n.sortBones(), t.DataParser.SLOT in e)
                        for (var g = 0, x = 0, b = e[t.DataParser.SLOT]; x < b.length; x++) {
                            var A = b[x];
                            n.addSlot(this._parseSlot(A, g++))
                        }
                    if (t.DataParser.SKIN in e)
                        for (var C = 0, T = e[t.DataParser.SKIN]; C < T.length; C++) {
                            var S = T[C];
                            n.addSkin(this._parseSkin(S))
                        }
                    if (t.DataParser.PATH_CONSTRAINT in e)
                        for (var w = 0, E = e[t.DataParser.PATH_CONSTRAINT]; w < E.length; w++) {
                            var M, D = E[w];
                            (M = this._parsePathConstraint(D)) && n.addConstraint(M)
                        }
                    for (var B = 0, I = this._cacheRawMeshes.length; B < I; ++B) {
                        var P = this._cacheRawMeshes[B];
                        t.DataParser.GLUE_WEIGHTS in P && t.DataParser.GLUE_MESHES in P && this._parseMeshGlue(P, this._cacheMeshes[B])
                    }
                    for (B = 0, I = this._cacheRawMeshes.length; B < I; ++B) {
                        var R = this._cacheRawMeshes[B],
                            O = r._getString(R, t.DataParser.SHARE, "");
                        if (0 !== O.length) {
                            var L = r._getString(R, t.DataParser.SKIN, t.DataParser.DEFAULT_NAME);
                            0 === L.length && (L = t.DataParser.DEFAULT_NAME);
                            var F = n.getMesh(L, "", O);
                            if (null !== F) this._cacheMeshes[B].vertices.shareFrom(F.vertices)
                        }
                    }
                    if (t.DataParser.ANIMATION in e)
                        for (var N = 0, V = e[t.DataParser.ANIMATION]; N < V.length; N++) {
                            var k = V[N],
                                G = this._parseAnimation(k);
                            n.addAnimation(G)
                        }
                    if (t.DataParser.DEFAULT_ACTIONS in e)
                        for (var U = 0, z = this._parseActionData(e[t.DataParser.DEFAULT_ACTIONS], 0, null, null); U < z.length; U++) {
                            var j = z[U];
                            if (n.addAction(j, !0), 0 === j.type) null !== (G = n.getAnimation(j.name)) && (n.defaultAnimation = G)
                        }
                    if (t.DataParser.ACTIONS in e)
                        for (var W = 0, H = this._parseActionData(e[t.DataParser.ACTIONS], 0, null, null); W < H.length; W++) {
                            j = H[W];
                            n.addAction(j, !1)
                        }
                    for (var X in this._rawBones.length = 0, this._cacheRawMeshes.length = 0, this._cacheMeshes.length = 0, this._armature = null, this._weightSlotPose) delete this._weightSlotPose[X];
                    for (var X in this._weightBonePoses) delete this._weightBonePoses[X];
                    for (var X in this._cacheBones) delete this._cacheBones[X];
                    for (var X in this._slotChildActions) delete this._slotChildActions[X];
                    return n
                }, r.prototype._parseBone = function(e) {
                    var i = this._armature.scale;
                    if (0 === (t.DataParser.TYPE in e && "string" == typeof e[t.DataParser.TYPE] ? t.DataParser._getBoneType(e[t.DataParser.TYPE]) : r._getNumber(e, t.DataParser.TYPE, 0))) {
                        var n = t.BaseObject.borrowObject(t.BoneData);
                        return n.inheritTranslation = r._getBoolean(e, t.DataParser.INHERIT_TRANSLATION, !0), n.inheritRotation = r._getBoolean(e, t.DataParser.INHERIT_ROTATION, !0), n.inheritScale = r._getBoolean(e, t.DataParser.INHERIT_SCALE, !0), n.inheritReflection = r._getBoolean(e, t.DataParser.INHERIT_REFLECTION, !0), n.length = r._getNumber(e, t.DataParser.LENGTH, 0) * i, n.name = r._getString(e, t.DataParser.NAME, ""), t.DataParser.TRANSFORM in e && this._parseTransform(e[t.DataParser.TRANSFORM], n.transform, i), n
                    }
                    var s = t.BaseObject.borrowObject(t.SurfaceData);
                    if (s.name = r._getString(e, t.DataParser.NAME, ""), s.segmentX = r._getNumber(e, t.DataParser.SEGMENT_X, 0), s.segmentY = r._getNumber(e, t.DataParser.SEGMENT_Y, 0), s.vertices.length = (s.segmentX + 1) * (s.segmentY + 1) * 2, t.DataParser.VERTICES in e)
                        for (var o = e[t.DataParser.VERTICES], a = 0, l = s.vertices.length; a < l; ++a) a < o.length ? s.vertices[a] = o[a] * i : s.vertices[a] = 0;
                    return s
                }, r.prototype._parseIKConstraint = function(e) {
                    var i = this._armature.getBone(r._getString(e, t.DataParser.BONE, ""));
                    if (null === i) return null;
                    var n = this._armature.getBone(r._getString(e, t.DataParser.TARGET, ""));
                    if (null === n) return null;
                    var s = t.BaseObject.borrowObject(t.IKConstraintData);
                    return s.scaleEnabled = r._getBoolean(e, t.DataParser.SCALE, !1), s.bendPositive = r._getBoolean(e, t.DataParser.BEND_POSITIVE, !0), s.weight = r._getNumber(e, t.DataParser.WEIGHT, 1), s.name = r._getString(e, t.DataParser.NAME, ""), s.type = 0, s.target = n, r._getNumber(e, t.DataParser.CHAIN, 0) > 0 && null !== i.parent ? (s.root = i.parent, s.bone = i) : (s.root = i, s.bone = null), s
                }, r.prototype._parsePathConstraint = function(e) {
                    var i = this._armature.getSlot(r._getString(e, t.DataParser.TARGET, ""));
                    if (null === i) return null;
                    var n = this._armature.defaultSkin;
                    if (null === n) return null;
                    var s = n.getDisplay(i.name, r._getString(e, t.DataParser.TARGET_DISPLAY, i.name));
                    if (null === s || !(s instanceof t.PathDisplayData)) return null;
                    var o = e[t.DataParser.BONES];
                    if (null === o || 0 === o.length) return null;
                    var a = t.BaseObject.borrowObject(t.PathConstraintData);
                    a.name = r._getString(e, t.DataParser.NAME, ""), a.type = 1, a.pathSlot = i, a.pathDisplayData = s, a.target = i.parent, a.positionMode = t.DataParser._getPositionMode(r._getString(e, t.DataParser.POSITION_MODE, "")), a.spacingMode = t.DataParser._getSpacingMode(r._getString(e, t.DataParser.SPACING_MODE, "")), a.rotateMode = t.DataParser._getRotateMode(r._getString(e, t.DataParser.ROTATE_MODE, "")), a.position = r._getNumber(e, t.DataParser.POSITION, 0), a.spacing = r._getNumber(e, t.DataParser.SPACING, 0), a.rotateOffset = r._getNumber(e, t.DataParser.ROTATE_OFFSET, 0), a.rotateMix = r._getNumber(e, t.DataParser.ROTATE_MIX, 1), a.translateMix = r._getNumber(e, t.DataParser.TRANSLATE_MIX, 1);
                    for (var l = 0, h = o; l < h.length; l++) {
                        var c = h[l],
                            u = this._armature.getBone(c);
                        null !== u && (a.AddBone(u), null === a.root && (a.root = u))
                    }
                    return a
                }, r.prototype._parseSlot = function(e, i) {
                    var n = t.BaseObject.borrowObject(t.SlotData);
                    return n.displayIndex = r._getNumber(e, t.DataParser.DISPLAY_INDEX, 0), n.zOrder = i, n.name = r._getString(e, t.DataParser.NAME, ""), n.parent = this._armature.getBone(r._getString(e, t.DataParser.PARENT, "")), t.DataParser.BLEND_MODE in e && "string" == typeof e[t.DataParser.BLEND_MODE] ? n.blendMode = t.DataParser._getBlendMode(e[t.DataParser.BLEND_MODE]) : n.blendMode = r._getNumber(e, t.DataParser.BLEND_MODE, 0), t.DataParser.COLOR in e ? (n.color = t.SlotData.createColor(), this._parseColorTransform(e[t.DataParser.COLOR], n.color)) : n.color = t.SlotData.DEFAULT_COLOR, t.DataParser.ACTIONS in e && (this._slotChildActions[n.name] = this._parseActionData(e[t.DataParser.ACTIONS], 0, null, null)), n
                }, r.prototype._parseSkin = function(e) {
                    var i = t.BaseObject.borrowObject(t.SkinData);
                    if (i.name = r._getString(e, t.DataParser.NAME, t.DataParser.DEFAULT_NAME), 0 === i.name.length && (i.name = t.DataParser.DEFAULT_NAME), t.DataParser.SLOT in e) {
                        var n = e[t.DataParser.SLOT];
                        this._skin = i;
                        for (var s = 0, o = n; s < o.length; s++) {
                            var a = o[s],
                                l = r._getString(a, t.DataParser.NAME, ""),
                                h = this._armature.getSlot(l);
                            if (null !== h) {
                                if (this._slot = h, t.DataParser.DISPLAY in a)
                                    for (var c = 0, u = a[t.DataParser.DISPLAY]; c < u.length; c++) {
                                        var _ = u[c];
                                        _ ? i.addDisplay(l, this._parseDisplay(_)) : i.addDisplay(l, null)
                                    }
                                this._slot = null
                            }
                        }
                        this._skin = null
                    }
                    return i
                }, r.prototype._parseDisplay = function(e) {
                    var i = r._getString(e, t.DataParser.NAME, ""),
                        n = r._getString(e, t.DataParser.PATH, ""),
                        s = 0,
                        o = null;
                    switch (s = t.DataParser.TYPE in e && "string" == typeof e[t.DataParser.TYPE] ? t.DataParser._getDisplayType(e[t.DataParser.TYPE]) : r._getNumber(e, t.DataParser.TYPE, s)) {
                        case 0:
                            var a = o = t.BaseObject.borrowObject(t.ImageDisplayData);
                            a.name = i, a.path = n.length > 0 ? n : i, this._parsePivot(e, a);
                            break;
                        case 1:
                            var l = o = t.BaseObject.borrowObject(t.ArmatureDisplayData);
                            if (l.name = i, l.path = n.length > 0 ? n : i, l.inheritAnimation = !0, t.DataParser.ACTIONS in e)
                                for (var h = 0, c = this._parseActionData(e[t.DataParser.ACTIONS], 0, null, null); h < c.length; h++) {
                                    var u = c[h];
                                    l.addAction(u)
                                } else if (this._slot.name in this._slotChildActions) {
                                    var _ = this._skin.getDisplays(this._slot.name);
                                    if (null === _ ? 0 === this._slot.displayIndex : this._slot.displayIndex === _.length) {
                                        for (var f = 0, d = this._slotChildActions[this._slot.name]; f < d.length; f++) {
                                            u = d[f];
                                            l.addAction(u)
                                        }
                                        delete this._slotChildActions[this._slot.name]
                                    }
                                }
                            break;
                        case 2:
                            var p = o = t.BaseObject.borrowObject(t.MeshDisplayData);
                            p.vertices.inheritDeform = r._getBoolean(e, t.DataParser.INHERIT_DEFORM, !0), p.name = i, p.path = n.length > 0 ? n : i, p.vertices.data = this._data, t.DataParser.SHARE in e ? (this._cacheRawMeshes.push(e), this._cacheMeshes.push(p)) : this._parseMesh(e, p), t.DataParser.GLUE_WEIGHTS in e && t.DataParser.GLUE_MESHES in e && (this._cacheRawMeshes.push(e), this._cacheMeshes.push(p));
                            break;
                        case 3:
                            var m = this._parseBoundingBox(e);
                            if (null !== m) {
                                var y = o = t.BaseObject.borrowObject(t.BoundingBoxDisplayData);
                                y.name = i, y.path = n.length > 0 ? n : i, y.boundingBox = m
                            }
                            break;
                        case 4:
                            var v = e[t.DataParser.LENGTHS],
                                g = o = t.BaseObject.borrowObject(t.PathDisplayData);
                            g.closed = r._getBoolean(e, t.DataParser.CLOSED, !1), g.constantSpeed = r._getBoolean(e, t.DataParser.CONSTANT_SPEED, !1), g.name = i, g.path = n.length > 0 ? n : i, g.vertices.data = this._data, g.curveLengths.length = v.length;
                            for (var x = 0, b = v.length; x < b; ++x) g.curveLengths[x] = v[x];
                            this._parsePath(e, g)
                    }
                    return null !== o && t.DataParser.TRANSFORM in e && this._parseTransform(e[t.DataParser.TRANSFORM], o.transform, this._armature.scale), o
                }, r.prototype._parsePath = function(e, i) {
                    var n = e[t.DataParser.VERTICES],
                        s = r._getNumber(e, t.DataParser.VERTEX_COUNT, 0),
                        o = this._floatArray.length,
                        a = this._intArray.length;
                    if (i.vertices.offset = a, this._intArray.length += 2, this._intArray[a + 0] = s, this._intArray[a + 2] = o, t.DataParser.WEIGHTS in e) {
                        var l = e[t.DataParser.WEIGHTS],
                            h = e[t.DataParser.BONES],
                            c = h.length,
                            u = Math.floor(l.length - s) / 2,
                            _ = this._intArray.length,
                            f = this._floatArray.length,
                            d = this._armature.sortedBones,
                            p = t.BaseObject.borrowObject(t.WeightData);
                        p.count = u, p.offset = _, this._intArray.length += 2 + c + s + u, this._intArray[_ + 0] = c, this._intArray[_ + 1] = f;
                        for (M = 0; M < c; M++) {
                            var m = h[M],
                                y = this._rawBones[m];
                            p.addBone(y), this._intArray[_ + 2 + M] = d.indexOf(y)
                        }
                        this._floatArray.length += 3 * u;
                        M = 0;
                        for (var v = 0, g = 0, x = _ + 2 + c, b = f; M < u; M++) {
                            var A = l[v++];
                            this._intArray[x++] = A;
                            for (var C = 0; C < A; C++) {
                                var T = l[v++],
                                    S = l[v++],
                                    w = n[g++],
                                    E = n[g++];
                                this._intArray[x++] = h.indexOf(T), this._floatArray[b++] = S, this._floatArray[b++] = w, this._floatArray[b++] = E
                            }
                        }
                        i.vertices.weight = p
                    } else {
                        this._floatArray.length += n.length;
                        for (var M = 0, D = n.length; M < D; ++M) this._floatArray[o + M] = n[M]
                    }
                }, r.prototype._parsePivot = function(e, i) {
                    if (t.DataParser.PIVOT in e) {
                        var n = e[t.DataParser.PIVOT];
                        i.pivot.x = r._getNumber(n, t.DataParser.X, 0), i.pivot.y = r._getNumber(n, t.DataParser.Y, 0)
                    } else i.pivot.x = .5, i.pivot.y = .5
                }, r.prototype._parseMesh = function(e, i) {
                    var n = e[t.DataParser.VERTICES],
                        r = e[t.DataParser.UVS],
                        s = e[t.DataParser.TRIANGLES],
                        o = Math.floor(n.length / 2),
                        a = Math.floor(s.length / 3),
                        l = this._floatArray.length,
                        h = l + 2 * o,
                        c = this._intArray.length,
                        u = this._skin.name + "_" + this._slot.name + "_" + i.name;
                    i.vertices.offset = c, this._intArray.length += 4 + 3 * a, this._intArray[c + 0] = o, this._intArray[c + 1] = a, this._intArray[c + 2] = l;
                    for (var _ = 0, f = 3 * a; _ < f; ++_) this._intArray[c + 4 + _] = s[_];
                    this._floatArray.length += 2 * o + 2 * o;
                    for (_ = 0, f = 2 * o; _ < f; ++_) this._floatArray[l + _] = n[_], this._floatArray[h + _] = r[_];
                    if (t.DataParser.WEIGHTS in e) {
                        var d = e[t.DataParser.WEIGHTS],
                            p = e[t.DataParser.SLOT_POSE],
                            m = e[t.DataParser.BONE_POSE],
                            y = this._armature.sortedBones,
                            v = new Array,
                            g = Math.floor(m.length / 7),
                            x = this._floatArray.length,
                            b = Math.floor(d.length - o) / 2,
                            A = this._intArray.length,
                            C = t.BaseObject.borrowObject(t.WeightData);
                        C.count = b, C.offset = A, v.length = g, this._intArray.length += 2 + g + o + b, this._intArray[A + 1] = x;
                        for (_ = 0; _ < g; ++_) {
                            var T = m[7 * _],
                                S = this._rawBones[T];
                            C.addBone(S), v[_] = T, this._intArray[A + 2 + _] = y.indexOf(S)
                        }
                        this._floatArray.length += 3 * b, this._helpMatrixA.copyFromArray(p, 0);
                        _ = 0;
                        for (var w = 0, E = A + 2 + g, M = x; _ < o; ++_) {
                            var D = 2 * _,
                                B = this._intArray[E++] = d[w++],
                                I = this._floatArray[l + D],
                                P = this._floatArray[l + D + 1];
                            this._helpMatrixA.transformPoint(I, P, this._helpPoint), I = this._helpPoint.x, P = this._helpPoint.y;
                            for (var R = 0; R < B; ++R) {
                                T = d[w++];
                                var O = v.indexOf(T);
                                this._helpMatrixB.copyFromArray(m, 7 * O + 1), this._helpMatrixB.invert(), this._helpMatrixB.transformPoint(I, P, this._helpPoint), this._intArray[E++] = O, this._floatArray[M++] = d[w++], this._floatArray[M++] = this._helpPoint.x, this._floatArray[M++] = this._helpPoint.y
                            }
                        }
                        i.vertices.weight = C, this._weightSlotPose[u] = p, this._weightBonePoses[u] = m
                    }
                }, r.prototype._parseMeshGlue = function(t, e) {}, r.prototype._parseBoundingBox = function(e) {
                    var i = null,
                        n = 0;
                    switch (n = t.DataParser.SUB_TYPE in e && "string" == typeof e[t.DataParser.SUB_TYPE] ? t.DataParser._getBoundingBoxType(e[t.DataParser.SUB_TYPE]) : r._getNumber(e, t.DataParser.SUB_TYPE, n)) {
                        case 0:
                            i = t.BaseObject.borrowObject(t.RectangleBoundingBoxData);
                            break;
                        case 1:
                            i = t.BaseObject.borrowObject(t.EllipseBoundingBoxData);
                            break;
                        case 2:
                            i = this._parsePolygonBoundingBox(e)
                    }
                    return null !== i && (i.color = r._getNumber(e, t.DataParser.COLOR, 0), 0 !== i.type && 1 !== i.type || (i.width = r._getNumber(e, t.DataParser.WIDTH, 0), i.height = r._getNumber(e, t.DataParser.HEIGHT, 0))), i
                }, r.prototype._parsePolygonBoundingBox = function(e) {
                    var i = t.BaseObject.borrowObject(t.PolygonBoundingBoxData);
                    if (t.DataParser.VERTICES in e) {
                        var n = this._armature.scale,
                            r = e[t.DataParser.VERTICES],
                            s = i.vertices;
                        t.DragonBones.webAssembly ? s.resize(r.length, 0) : s.length = r.length;
                        for (var o = 0, a = r.length; o < a; o += 2) {
                            var l = r[o] * n,
                                h = r[o + 1] * n;
                            t.DragonBones.webAssembly ? (s.set(o, l), s.set(o + 1, h)) : (s[o] = l, s[o + 1] = h), 0 === o ? (i.x = l, i.y = h, i.width = l, i.height = h) : (l < i.x ? i.x = l : l > i.width && (i.width = l), h < i.y ? i.y = h : h > i.height && (i.height = h))
                        }
                        i.width -= i.x, i.height -= i.y
                    } else console.warn("Data error.\n Please reexport DragonBones Data to fixed the bug.");
                    return i
                }, r.prototype._parseAnimation = function(e) {
                    var i = t.BaseObject.borrowObject(t.AnimationData);
                    if (i.frameCount = Math.max(r._getNumber(e, t.DataParser.DURATION, 1), 1), i.playTimes = r._getNumber(e, t.DataParser.PLAY_TIMES, 1), i.duration = i.frameCount / this._armature.frameRate, i.fadeInTime = r._getNumber(e, t.DataParser.FADE_IN_TIME, 0), i.scale = r._getNumber(e, t.DataParser.SCALE, 1), i.name = r._getString(e, t.DataParser.NAME, t.DataParser.DEFAULT_NAME), 0 === i.name.length && (i.name = t.DataParser.DEFAULT_NAME), i.frameIntOffset = this._frameIntArray.length, i.frameFloatOffset = this._frameFloatArray.length, i.frameOffset = this._frameArray.length, this._animation = i, t.DataParser.FRAME in e) {
                        var n = e[t.DataParser.FRAME],
                            s = n.length;
                        if (s > 0)
                            for (var o = 0, a = 0; o < s; ++o) {
                                var l = n[o];
                                this._parseActionDataInFrame(l, a, null, null), a += r._getNumber(l, t.DataParser.DURATION, 1)
                            }
                    }
                    if (t.DataParser.Z_ORDER in e && (this._animation.zOrderTimeline = this._parseTimeline(e[t.DataParser.Z_ORDER], null, t.DataParser.FRAME, 1, !1, !1, 0, this._parseZOrderFrame)), t.DataParser.BONE in e)
                        for (var h = 0, c = e[t.DataParser.BONE]; h < c.length; h++) {
                            var u = c[h];
                            this._parseBoneTimeline(u)
                        }
                    if (t.DataParser.SURFACE in e)
                        for (var _ = 0, f = e[t.DataParser.SURFACE]; _ < f.length; _++) {
                            u = f[_];
                            var d = r._getString(u, t.DataParser.NAME, "");
                            if (this._surface = this._armature.getBone(d), null !== this._surface) null !== (M = this._parseTimeline(u, null, t.DataParser.FRAME, 50, !1, !0, 0, this._parseSurfaceFrame)) && this._animation.addSurfaceTimeline(this._surface, M), this._surface = null
                        }
                    if (t.DataParser.SLOT in e)
                        for (var p = 0, m = e[t.DataParser.SLOT]; p < m.length; p++) {
                            u = m[p];
                            this._parseSlotTimeline(u)
                        }
                    if (t.DataParser.FFD in e)
                        for (var y = 0, v = e[t.DataParser.FFD]; y < v.length; y++) {
                            u = v[y];
                            var g = r._getString(u, t.DataParser.SKIN, t.DataParser.DEFAULT_NAME),
                                x = r._getString(u, t.DataParser.SLOT, ""),
                                b = r._getString(u, t.DataParser.NAME, "");
                            if (0 === g.length && (g = t.DataParser.DEFAULT_NAME), this._slot = this._armature.getSlot(x), this._mesh = this._armature.getMesh(g, x, b), null !== this._slot && null !== this._mesh) null !== (M = this._parseTimeline(u, null, t.DataParser.FRAME, 22, !1, !0, 0, this._parseSlotFFDFrame)) && this._animation.addSlotTimeline(this._slot, M), this._slot = null, this._mesh = null
                        }
                    if (t.DataParser.IK in e)
                        for (var A = 0, C = e[t.DataParser.IK]; A < C.length; A++) {
                            u = C[A];
                            var T = r._getString(u, t.DataParser.NAME, ""),
                                S = this._armature.getConstraint(T);
                            if (null !== S) null !== (M = this._parseTimeline(u, null, t.DataParser.FRAME, 30, !0, !1, 2, this._parseIKConstraintFrame)) && this._animation.addConstraintTimeline(S, M)
                        }
                    if (t.DataParser.ANIMATION in e)
                        for (var w = 0, E = e[t.DataParser.ANIMATION]; w < E.length; w++) {
                            u = E[w];
                            var M, D = r._getString(u, t.DataParser.NAME, "");
                            null !== (M = this._parseTimeline(u, null, t.DataParser.FRAME, 40, !0, !1, 2, this._parseAnimationFrame)) && this._animation.addAnimationTimeline(D, M)
                        }
                    return this._actionFrames.length > 0 && (this._animation.actionTimeline = this._parseTimeline(null, this._actionFrames, "", 0, !1, !1, 0, this._parseActionFrame), this._actionFrames.length = 0), this._animation = null, i
                }, r.prototype._parseTimeline = function(e, n, s, o, a, l, h, c) {
                    if (null !== e && s.length > 0 && s in e && (n = e[s]), null === n) return null;
                    var u = n.length;
                    if (0 === u) return null;
                    var _ = this._frameIntArray.length,
                        f = this._frameFloatArray.length,
                        d = t.BaseObject.borrowObject(t.TimelineData),
                        p = this._timelineArray.length;
                    if (this._timelineArray.length += 5 + u, null !== e ? (this._timelineArray[p + 0] = Math.round(100 * r._getNumber(e, t.DataParser.SCALE, 1)), this._timelineArray[p + 1] = Math.round(100 * r._getNumber(e, t.DataParser.OFFSET, 0))) : (this._timelineArray[p + 0] = 100, this._timelineArray[p + 1] = 0), this._timelineArray[p + 2] = u, this._timelineArray[p + 3] = h, this._timelineArray[p + 4] = a ? _ - this._animation.frameIntOffset : l ? f - this._animation.frameFloatOffset : 0, this._timeline = d, d.type = o, d.offset = p, 1 === u) d.frameIndicesOffset = -1, this._timelineArray[p + 5 + 0] = c.call(this, n[0], 0, 0) - this._animation.frameOffset;
                    else {
                        var m = this._animation.frameCount + 1,
                            y = this._data.frameIndices,
                            v = 0;
                        t.DragonBones.webAssembly ? (v = y.size(), y.resize(v + m, 0)) : (v = y.length, y.length += m), d.frameIndicesOffset = v;
                        for (var g = 0, x = 0, b = 0, A = 0; g < m; ++g) {
                            if (b + A <= g && x < u) {
                                var C = n[x];
                                b = g, A = x === u - 1 ? this._animation.frameCount - b : C instanceof i ? this._actionFrames[x + 1].frameStart - b : r._getNumber(C, t.DataParser.DURATION, 1), this._timelineArray[p + 5 + x] = c.call(this, C, b, A) - this._animation.frameOffset, x++
                            }
                            t.DragonBones.webAssembly ? y.set(v + g, x - 1) : y[v + g] = x - 1
                        }
                    }
                    return this._timeline = null, d
                }, r.prototype._parseBoneTimeline = function(e) {
                    var i = this._armature.getBone(r._getString(e, t.DataParser.NAME, ""));
                    if (null !== i) {
                        var n;
                        if (this._bone = i, this._slot = this._armature.getSlot(this._bone.name), t.DataParser.TRANSLATE_FRAME in e) null !== (n = this._parseTimeline(e, null, t.DataParser.TRANSLATE_FRAME, 11, !1, !0, 2, this._parseBoneTranslateFrame)) && this._animation.addBoneTimeline(i, n);
                        if (t.DataParser.ROTATE_FRAME in e) null !== (n = this._parseTimeline(e, null, t.DataParser.ROTATE_FRAME, 12, !1, !0, 2, this._parseBoneRotateFrame)) && this._animation.addBoneTimeline(i, n);
                        if (t.DataParser.SCALE_FRAME in e) null !== (n = this._parseTimeline(e, null, t.DataParser.SCALE_FRAME, 13, !1, !0, 2, this._parseBoneScaleFrame)) && this._animation.addBoneTimeline(i, n);
                        if (t.DataParser.FRAME in e) null !== (n = this._parseTimeline(e, null, t.DataParser.FRAME, 10, !1, !0, 6, this._parseBoneAllFrame)) && this._animation.addBoneTimeline(i, n);
                        this._bone = null, this._slot = null
                    }
                }, r.prototype._parseSlotTimeline = function(e) {
                    var i = this._armature.getSlot(r._getString(e, t.DataParser.NAME, ""));
                    if (null !== i) {
                        this._slot = i;
                        var n = null;
                        null !== (n = t.DataParser.DISPLAY_FRAME in e ? this._parseTimeline(e, null, t.DataParser.DISPLAY_FRAME, 20, !1, !1, 0, this._parseSlotDisplayFrame) : this._parseTimeline(e, null, t.DataParser.FRAME, 20, !1, !1, 0, this._parseSlotDisplayFrame)) && this._animation.addSlotTimeline(i, n);
                        var s = null;
                        null !== (s = t.DataParser.COLOR_FRAME in e ? this._parseTimeline(e, null, t.DataParser.COLOR_FRAME, 21, !0, !1, 1, this._parseSlotColorFrame) : this._parseTimeline(e, null, t.DataParser.FRAME, 21, !0, !1, 1, this._parseSlotColorFrame)) && this._animation.addSlotTimeline(i, s), this._slot = null
                    }
                }, r.prototype._parseFrame = function(t, e, i) {
                    var n = this._frameArray.length;
                    return this._frameArray.length += 1, this._frameArray[n + 0] = e, n
                }, r.prototype._parseTweenFrame = function(e, i, n) {
                    var s = this._parseFrame(e, i, n);
                    if (n > 0)
                        if (t.DataParser.CURVE in e) {
                            var o = n + 1;
                            this._helpArray.length = o, this._samplingEasingCurve(e[t.DataParser.CURVE], this._helpArray), this._frameArray.length += 2 + this._helpArray.length, this._frameArray[s + 1] = 2, this._frameArray[s + 2] = o;
                            for (var a = 0; a < o; ++a) this._frameArray[s + 3 + a] = Math.round(1e4 * this._helpArray[a])
                        } else {
                            var l = -2;
                            t.DataParser.TWEEN_EASING in e && (l = r._getNumber(e, t.DataParser.TWEEN_EASING, -2)), -2 === l ? (this._frameArray.length += 1, this._frameArray[s + 1] = 0) : 0 === l ? (this._frameArray.length += 1, this._frameArray[s + 1] = 1) : l < 0 ? (this._frameArray.length += 2, this._frameArray[s + 1] = 3, this._frameArray[s + 2] = Math.round(100 * -l)) : l <= 1 ? (this._frameArray.length += 2, this._frameArray[s + 1] = 4, this._frameArray[s + 2] = Math.round(100 * l)) : (this._frameArray.length += 2, this._frameArray[s + 1] = 5, this._frameArray[s + 2] = Math.round(100 * l - 100))
                        }
                    else this._frameArray.length += 1, this._frameArray[s + 1] = 0;
                    return s
                }, r.prototype._parseActionFrame = function(t, e, i) {
                    var n = this._frameArray.length,
                        r = t.actions.length;
                    this._frameArray.length += 2 + r, this._frameArray[n + 0] = e, this._frameArray[n + 0 + 1] = r;
                    for (var s = 0; s < r; ++s) this._frameArray[n + 0 + 2 + s] = t.actions[s];
                    return n
                }, r.prototype._parseZOrderFrame = function(e, i, n) {
                    var r = this._parseFrame(e, i, n);
                    if (t.DataParser.Z_ORDER in e) {
                        var s = e[t.DataParser.Z_ORDER];
                        if (s.length > 0) {
                            for (var o = this._armature.sortedSlots.length, a = new Array(o - s.length / 2), l = new Array(o), h = 0; h < a.length; ++h) a[h] = 0;
                            for (var c = 0; c < o; ++c) l[c] = -1;
                            for (var u = 0, _ = 0, f = 0, d = s.length; f < d; f += 2) {
                                for (var p = s[f], m = s[f + 1]; u !== p;) a[_++] = u++;
                                l[u + m] = u++
                            }
                            for (; u < o;) a[_++] = u++;
                            this._frameArray.length += 1 + o, this._frameArray[r + 1] = o;
                            for (var y = o; y--;) - 1 === l[y] ? this._frameArray[r + 2 + y] = a[--_] || 0 : this._frameArray[r + 2 + y] = l[y] || 0;
                            return r
                        }
                    }
                    return this._frameArray.length += 1, this._frameArray[r + 1] = 0, r
                }, r.prototype._parseBoneAllFrame = function(e, i, n) {
                    this._helpTransform.identity(), t.DataParser.TRANSFORM in e && this._parseTransform(e[t.DataParser.TRANSFORM], this._helpTransform, 1);
                    var s = this._helpTransform.rotation;
                    0 !== i && (0 === this._prevClockwise ? s = this._prevRotation + t.Transform.normalizeRadian(s - this._prevRotation) : ((this._prevClockwise > 0 ? s >= this._prevRotation : s <= this._prevRotation) && (this._prevClockwise = this._prevClockwise > 0 ? this._prevClockwise - 1 : this._prevClockwise + 1), s = this._prevRotation + s - this._prevRotation + t.Transform.PI_D * this._prevClockwise)), this._prevClockwise = r._getNumber(e, t.DataParser.TWEEN_ROTATE, 0), this._prevRotation = s;
                    var o = this._parseTweenFrame(e, i, n),
                        a = this._frameFloatArray.length;
                    return this._frameFloatArray.length += 6, this._frameFloatArray[a++] = this._helpTransform.x, this._frameFloatArray[a++] = this._helpTransform.y, this._frameFloatArray[a++] = s, this._frameFloatArray[a++] = this._helpTransform.skew, this._frameFloatArray[a++] = this._helpTransform.scaleX, this._frameFloatArray[a++] = this._helpTransform.scaleY, this._parseActionDataInFrame(e, i, this._bone, this._slot), o
                }, r.prototype._parseBoneTranslateFrame = function(e, i, n) {
                    var s = this._parseTweenFrame(e, i, n),
                        o = this._frameFloatArray.length;
                    return this._frameFloatArray.length += 2, this._frameFloatArray[o++] = r._getNumber(e, t.DataParser.X, 0), this._frameFloatArray[o++] = r._getNumber(e, t.DataParser.Y, 0), s
                }, r.prototype._parseBoneRotateFrame = function(e, i, n) {
                    var s = r._getNumber(e, t.DataParser.ROTATE, 0) * t.Transform.DEG_RAD;
                    0 !== i && (0 === this._prevClockwise ? s = this._prevRotation + t.Transform.normalizeRadian(s - this._prevRotation) : ((this._prevClockwise > 0 ? s >= this._prevRotation : s <= this._prevRotation) && (this._prevClockwise = this._prevClockwise > 0 ? this._prevClockwise - 1 : this._prevClockwise + 1), s = this._prevRotation + s - this._prevRotation + t.Transform.PI_D * this._prevClockwise)), this._prevClockwise = r._getNumber(e, t.DataParser.CLOCK_WISE, 0), this._prevRotation = s;
                    var o = this._parseTweenFrame(e, i, n),
                        a = this._frameFloatArray.length;
                    return this._frameFloatArray.length += 2, this._frameFloatArray[a++] = s, this._frameFloatArray[a++] = r._getNumber(e, t.DataParser.SKEW, 0) * t.Transform.DEG_RAD, o
                }, r.prototype._parseBoneScaleFrame = function(e, i, n) {
                    var s = this._parseTweenFrame(e, i, n),
                        o = this._frameFloatArray.length;
                    return this._frameFloatArray.length += 2, this._frameFloatArray[o++] = r._getNumber(e, t.DataParser.X, 1), this._frameFloatArray[o++] = r._getNumber(e, t.DataParser.Y, 1), s
                }, r.prototype._parseSurfaceFrame = function(e, i, n) {
                    var s = this._frameFloatArray.length,
                        o = this._parseTweenFrame(e, i, n),
                        a = e[t.DataParser.VERTICES],
                        l = r._getNumber(e, t.DataParser.OFFSET, 0),
                        h = this._surface.vertices.length / 2,
                        c = 0,
                        u = 0;
                    this._frameFloatArray.length += 2 * h;
                    for (var _ = 0; _ < 2 * h; _ += 2) c = _ < l || _ - l >= a.length ? 0 : a[_ - l], u = _ + 1 < l || _ + 1 - l >= a.length ? 0 : a[_ + 1 - l], this._frameFloatArray[s + _] = c, this._frameFloatArray[s + _ + 1] = u;
                    if (0 === i) {
                        var f = this._frameIntArray.length;
                        this._frameIntArray.length += 5, this._frameIntArray[f + 0] = 0, this._frameIntArray[f + 1] = this._frameFloatArray.length - s, this._frameIntArray[f + 2] = this._frameFloatArray.length - s, this._frameIntArray[f + 3] = 0, this._frameIntArray[f + 4] = s - this._animation.frameFloatOffset, this._timelineArray[this._timeline.offset + 3] = f - this._animation.frameIntOffset
                    }
                    return o
                }, r.prototype._parseSlotDisplayFrame = function(e, i, n) {
                    var s = this._parseFrame(e, i, n);
                    return this._frameArray.length += 1, t.DataParser.VALUE in e ? this._frameArray[s + 1] = r._getNumber(e, t.DataParser.VALUE, 0) : this._frameArray[s + 1] = r._getNumber(e, t.DataParser.DISPLAY_INDEX, 0), this._parseActionDataInFrame(e, i, this._slot.parent, this._slot), s
                }, r.prototype._parseSlotColorFrame = function(e, i, n) {
                    var r = this._parseTweenFrame(e, i, n),
                        s = -1;
                    if (t.DataParser.VALUE in e || t.DataParser.COLOR in e) {
                        var o = t.DataParser.VALUE in e ? e[t.DataParser.VALUE] : e[t.DataParser.COLOR];
                        for (var a in o) {
                            this._parseColorTransform(o, this._helpColorTransform), s = this._intArray.length, this._intArray.length += 8, this._intArray[s++] = Math.round(100 * this._helpColorTransform.alphaMultiplier), this._intArray[s++] = Math.round(100 * this._helpColorTransform.redMultiplier), this._intArray[s++] = Math.round(100 * this._helpColorTransform.greenMultiplier), this._intArray[s++] = Math.round(100 * this._helpColorTransform.blueMultiplier), this._intArray[s++] = Math.round(this._helpColorTransform.alphaOffset), this._intArray[s++] = Math.round(this._helpColorTransform.redOffset), this._intArray[s++] = Math.round(this._helpColorTransform.greenOffset), this._intArray[s++] = Math.round(this._helpColorTransform.blueOffset), s -= 8;
                            break
                        }
                    }
                    s < 0 && (this._defaultColorOffset < 0 && (this._defaultColorOffset = s = this._intArray.length, this._intArray.length += 8, this._intArray[s++] = 100, this._intArray[s++] = 100, this._intArray[s++] = 100, this._intArray[s++] = 100, this._intArray[s++] = 0, this._intArray[s++] = 0, this._intArray[s++] = 0, this._intArray[s++] = 0), s = this._defaultColorOffset);
                    var l = this._frameIntArray.length;
                    return this._frameIntArray.length += 1, this._frameIntArray[l] = s, r
                }, r.prototype._parseSlotFFDFrame = function(e, i, n) {
                    var s = this._frameFloatArray.length,
                        o = this._parseTweenFrame(e, i, n),
                        a = t.DataParser.VERTICES in e ? e[t.DataParser.VERTICES] : null,
                        l = r._getNumber(e, t.DataParser.OFFSET, 0),
                        h = this._intArray[this._mesh.vertices.offset + 0],
                        c = this._mesh.parent.name + "_" + this._slot.name + "_" + this._mesh.name,
                        u = this._mesh.vertices.weight,
                        _ = 0,
                        f = 0,
                        d = 0,
                        p = 0;
                    if (null !== u) {
                        var m = this._weightSlotPose[c];
                        this._helpMatrixA.copyFromArray(m, 0), this._frameFloatArray.length += 2 * u.count, d = u.offset + 2 + u.bones.length
                    } else this._frameFloatArray.length += 2 * h;
                    for (var y = 0; y < 2 * h; y += 2)
                        if (null === a ? (_ = 0, f = 0) : (_ = y < l || y - l >= a.length ? 0 : a[y - l], f = y + 1 < l || y + 1 - l >= a.length ? 0 : a[y + 1 - l]), null !== u) {
                            var v = this._weightBonePoses[c],
                                g = this._intArray[d++];
                            this._helpMatrixA.transformPoint(_, f, this._helpPoint, !0), _ = this._helpPoint.x, f = this._helpPoint.y;
                            for (var x = 0; x < g; ++x) {
                                var b = this._intArray[d++];
                                this._helpMatrixB.copyFromArray(v, 7 * b + 1), this._helpMatrixB.invert(), this._helpMatrixB.transformPoint(_, f, this._helpPoint, !0), this._frameFloatArray[s + p++] = this._helpPoint.x, this._frameFloatArray[s + p++] = this._helpPoint.y
                            }
                        } else this._frameFloatArray[s + y] = _, this._frameFloatArray[s + y + 1] = f;
                    if (0 === i) {
                        var A = this._frameIntArray.length;
                        this._frameIntArray.length += 5, this._frameIntArray[A + 0] = this._mesh.vertices.offset, this._frameIntArray[A + 1] = this._frameFloatArray.length - s, this._frameIntArray[A + 2] = this._frameFloatArray.length - s, this._frameIntArray[A + 3] = 0, this._frameIntArray[A + 4] = s - this._animation.frameFloatOffset, this._timelineArray[this._timeline.offset + 3] = A - this._animation.frameIntOffset
                    }
                    return o
                }, r.prototype._parseIKConstraintFrame = function(e, i, n) {
                    var s = this._parseTweenFrame(e, i, n),
                        o = this._frameIntArray.length;
                    return this._frameIntArray.length += 2, this._frameIntArray[o++] = r._getBoolean(e, t.DataParser.BEND_POSITIVE, !0) ? 1 : 0, this._frameIntArray[o++] = Math.round(100 * r._getNumber(e, t.DataParser.WEIGHT, 1)), s
                }, r.prototype._parseAnimationFrame = function(e, i, n) {
                    var s = this._parseTweenFrame(e, i, n),
                        o = this._frameIntArray.length;
                    return this._frameIntArray.length += 2, this._frameIntArray[o++] = r._getNumber(e, t.DataParser.VALUE, 0), this._frameIntArray[o++] = Math.round(100 * r._getNumber(e, t.DataParser.WEIGHT, 1)), s
                }, r.prototype._parseActionData = function(e, i, n, s) {
                    var o = new Array;
                    if ("string" == typeof e)(c = t.BaseObject.borrowObject(t.ActionData)).type = i, c.name = e, c.bone = n, c.slot = s, o.push(c);
                    else if (e instanceof Array)
                        for (var a = 0, l = e; a < l.length; a++) {
                            var h = l[a],
                                c = t.BaseObject.borrowObject(t.ActionData);
                            if (t.DataParser.GOTO_AND_PLAY in h ? (c.type = 0, c.name = r._getString(h, t.DataParser.GOTO_AND_PLAY, "")) : (t.DataParser.TYPE in h && "string" == typeof h[t.DataParser.TYPE] ? c.type = t.DataParser._getActionType(h[t.DataParser.TYPE]) : c.type = r._getNumber(h, t.DataParser.TYPE, i), c.name = r._getString(h, t.DataParser.NAME, "")), t.DataParser.BONE in h) {
                                var u = r._getString(h, t.DataParser.BONE, "");
                                c.bone = this._armature.getBone(u)
                            } else c.bone = n;
                            if (t.DataParser.SLOT in h) {
                                var _ = r._getString(h, t.DataParser.SLOT, "");
                                c.slot = this._armature.getSlot(_)
                            } else c.slot = s;
                            var f = null;
                            if (t.DataParser.INTS in h) {
                                null === f && (f = t.BaseObject.borrowObject(t.UserData));
                                for (var d = 0, p = h[t.DataParser.INTS]; d < p.length; d++) {
                                    var m = p[d];
                                    f.addInt(m)
                                }
                            }
                            if (t.DataParser.FLOATS in h) {
                                null === f && (f = t.BaseObject.borrowObject(t.UserData));
                                for (var y = 0, v = h[t.DataParser.FLOATS]; y < v.length; y++) {
                                    m = v[y];
                                    f.addFloat(m)
                                }
                            }
                            if (t.DataParser.STRINGS in h) {
                                null === f && (f = t.BaseObject.borrowObject(t.UserData));
                                for (var g = 0, x = h[t.DataParser.STRINGS]; g < x.length; g++) {
                                    m = x[g];
                                    f.addString(m)
                                }
                            }
                            c.data = f, o.push(c)
                        }
                    return o
                }, r.prototype._parseTransform = function(e, i, n) {
                    i.x = r._getNumber(e, t.DataParser.X, 0) * n, i.y = r._getNumber(e, t.DataParser.Y, 0) * n, t.DataParser.ROTATE in e || t.DataParser.SKEW in e ? (i.rotation = t.Transform.normalizeRadian(r._getNumber(e, t.DataParser.ROTATE, 0) * t.Transform.DEG_RAD), i.skew = t.Transform.normalizeRadian(r._getNumber(e, t.DataParser.SKEW, 0) * t.Transform.DEG_RAD)) : (t.DataParser.SKEW_X in e || t.DataParser.SKEW_Y in e) && (i.rotation = t.Transform.normalizeRadian(r._getNumber(e, t.DataParser.SKEW_Y, 0) * t.Transform.DEG_RAD), i.skew = t.Transform.normalizeRadian(r._getNumber(e, t.DataParser.SKEW_X, 0) * t.Transform.DEG_RAD) - i.rotation), i.scaleX = r._getNumber(e, t.DataParser.SCALE_X, 1), i.scaleY = r._getNumber(e, t.DataParser.SCALE_Y, 1)
                }, r.prototype._parseColorTransform = function(e, i) {
                    i.alphaMultiplier = .01 * r._getNumber(e, t.DataParser.ALPHA_MULTIPLIER, 100), i.redMultiplier = .01 * r._getNumber(e, t.DataParser.RED_MULTIPLIER, 100), i.greenMultiplier = .01 * r._getNumber(e, t.DataParser.GREEN_MULTIPLIER, 100), i.blueMultiplier = .01 * r._getNumber(e, t.DataParser.BLUE_MULTIPLIER, 100), i.alphaOffset = r._getNumber(e, t.DataParser.ALPHA_OFFSET, 0), i.redOffset = r._getNumber(e, t.DataParser.RED_OFFSET, 0), i.greenOffset = r._getNumber(e, t.DataParser.GREEN_OFFSET, 0), i.blueOffset = r._getNumber(e, t.DataParser.BLUE_OFFSET, 0)
                }, r.prototype._parseArray = function(t) {
                    this._intArray.length = 0, this._floatArray.length = 0, this._frameIntArray.length = 0, this._frameFloatArray.length = 0, this._frameArray.length = 0, this._timelineArray.length = 0
                }, r.prototype._modifyArray = function() {
                    this._intArray.length % Int16Array.BYTES_PER_ELEMENT != 0 && this._intArray.push(0), this._frameIntArray.length % Int16Array.BYTES_PER_ELEMENT != 0 && this._frameIntArray.push(0), this._frameArray.length % Int16Array.BYTES_PER_ELEMENT != 0 && this._frameArray.push(0), this._timelineArray.length % Uint16Array.BYTES_PER_ELEMENT != 0 && this._timelineArray.push(0);
                    var e = this._intArray.length * Int16Array.BYTES_PER_ELEMENT,
                        i = this._floatArray.length * Float32Array.BYTES_PER_ELEMENT,
                        n = this._frameIntArray.length * Int16Array.BYTES_PER_ELEMENT,
                        r = this._frameFloatArray.length * Float32Array.BYTES_PER_ELEMENT,
                        s = this._frameArray.length * Int16Array.BYTES_PER_ELEMENT,
                        o = this._timelineArray.length * Uint16Array.BYTES_PER_ELEMENT,
                        a = e + i + n + r + s + o;
                    if (t.DragonBones.webAssembly) {
                        for (var l = t.webAssemblyModule.HEAP16.buffer, h = t.webAssemblyModule._malloc(a), c = new Int16Array(l, h, this._intArray.length), u = new Float32Array(l, h + e, this._floatArray.length), _ = new Int16Array(l, h + e + i, this._frameIntArray.length), f = new Float32Array(l, h + e + i + n, this._frameFloatArray.length), d = new Int16Array(l, h + e + i + n + r, this._frameArray.length), p = new Uint16Array(l, h + e + i + n + r + s, this._timelineArray.length), m = 0, y = this._intArray.length; m < y; ++m) c[m] = this._intArray[m];
                        for (m = 0, y = this._floatArray.length; m < y; ++m) u[m] = this._floatArray[m];
                        for (m = 0, y = this._frameIntArray.length; m < y; ++m) _[m] = this._frameIntArray[m];
                        for (m = 0, y = this._frameFloatArray.length; m < y; ++m) f[m] = this._frameFloatArray[m];
                        for (m = 0, y = this._frameArray.length; m < y; ++m) d[m] = this._frameArray[m];
                        for (m = 0, y = this._timelineArray.length; m < y; ++m) p[m] = this._timelineArray[m];
                        t.webAssemblyModule.setDataBinary(this._data, h, e, i, n, r, s, o)
                    } else {
                        var v = new ArrayBuffer(a);
                        for (c = new Int16Array(v, 0, this._intArray.length), u = new Float32Array(v, e, this._floatArray.length), _ = new Int16Array(v, e + i, this._frameIntArray.length), f = new Float32Array(v, e + i + n, this._frameFloatArray.length), d = new Int16Array(v, e + i + n + r, this._frameArray.length), p = new Uint16Array(v, e + i + n + r + s, this._timelineArray.length), m = 0, y = this._intArray.length; m < y; ++m) c[m] = this._intArray[m];
                        for (m = 0, y = this._floatArray.length; m < y; ++m) u[m] = this._floatArray[m];
                        for (m = 0, y = this._frameIntArray.length; m < y; ++m) _[m] = this._frameIntArray[m];
                        for (m = 0, y = this._frameFloatArray.length; m < y; ++m) f[m] = this._frameFloatArray[m];
                        for (m = 0, y = this._frameArray.length; m < y; ++m) d[m] = this._frameArray[m];
                        for (m = 0, y = this._timelineArray.length; m < y; ++m) p[m] = this._timelineArray[m];
                        this._data.binary = v, this._data.intArray = c, this._data.floatArray = u, this._data.frameIntArray = _, this._data.frameFloatArray = f, this._data.frameArray = d, this._data.timelineArray = p
                    }
                    this._defaultColorOffset = -1
                }, r.prototype.parseDragonBonesData = function(e, i) {
                    void 0 === i && (i = 1), console.assert(null !== e && void 0 !== e, "Data error.");
                    var n = r._getString(e, t.DataParser.VERSION, ""),
                        s = r._getString(e, t.DataParser.COMPATIBLE_VERSION, "");
                    if (t.DataParser.DATA_VERSIONS.indexOf(n) >= 0 || t.DataParser.DATA_VERSIONS.indexOf(s) >= 0) {
                        var o = t.BaseObject.borrowObject(t.DragonBonesData);
                        if (o.version = n, o.name = r._getString(e, t.DataParser.NAME, ""), o.frameRate = r._getNumber(e, t.DataParser.FRAME_RATE, 24), 0 === o.frameRate && (o.frameRate = 24), t.DataParser.ARMATURE in e) {
                            this._data = o, this._parseArray(e);
                            for (var a = 0, l = e[t.DataParser.ARMATURE]; a < l.length; a++) {
                                var h = l[a];
                                o.addArmature(this._parseArmature(h, i))
                            }
                            this._data.binary || this._modifyArray(), t.DataParser.STAGE in e ? o.stage = o.getArmature(r._getString(e, t.DataParser.STAGE, "")) : o.armatureNames.length > 0 && (o.stage = o.getArmature(o.armatureNames[0])), this._data = null
                        }
                        return t.DataParser.TEXTURE_ATLAS in e && (this._rawTextureAtlases = e[t.DataParser.TEXTURE_ATLAS]), o
                    }
                    return console.assert(!1, "Nonsupport data version: " + n + "\nPlease convert DragonBones data to support version.\nRead more: https://github.com/DragonBones/Tools/"), null
                }, r.prototype.parseTextureAtlasData = function(e, i, n) {
                    if (void 0 === n && (n = 1), console.assert(void 0 !== e), null === e) {
                        if (null === this._rawTextureAtlases || 0 === this._rawTextureAtlases.length) return !1;
                        var s = this._rawTextureAtlases[this._rawTextureAtlasIndex++];
                        return this.parseTextureAtlasData(s, i, n), this._rawTextureAtlasIndex >= this._rawTextureAtlases.length && (this._rawTextureAtlasIndex = 0, this._rawTextureAtlases = null), !0
                    }
                    if (i.width = r._getNumber(e, t.DataParser.WIDTH, 0), i.height = r._getNumber(e, t.DataParser.HEIGHT, 0), i.scale = 1 === n ? 1 / r._getNumber(e, t.DataParser.SCALE, 1) : n, i.name = r._getString(e, t.DataParser.NAME, ""), i.imagePath = r._getString(e, t.DataParser.IMAGE_PATH, ""), t.DataParser.SUB_TEXTURE in e)
                        for (var o = e[t.DataParser.SUB_TEXTURE], a = 0, l = o.length; a < l; ++a) {
                            var h = o[a],
                                c = i.createTexture();
                            c.rotated = r._getBoolean(h, t.DataParser.ROTATED, !1), c.name = r._getString(h, t.DataParser.NAME, ""), c.region.x = r._getNumber(h, t.DataParser.X, 0), c.region.y = r._getNumber(h, t.DataParser.Y, 0), c.region.width = r._getNumber(h, t.DataParser.WIDTH, 0), c.region.height = r._getNumber(h, t.DataParser.HEIGHT, 0);
                            var u = r._getNumber(h, t.DataParser.FRAME_WIDTH, -1),
                                _ = r._getNumber(h, t.DataParser.FRAME_HEIGHT, -1);
                            u > 0 && _ > 0 && (c.frame = t.TextureData.createRectangle(), c.frame.x = r._getNumber(h, t.DataParser.FRAME_X, 0), c.frame.y = r._getNumber(h, t.DataParser.FRAME_Y, 0), c.frame.width = u, c.frame.height = _), i.addTexture(c)
                        }
                    return !0
                }, r.getInstance = function() {
                    return null === r._objectDataParserInstance && (r._objectDataParserInstance = new r), r._objectDataParserInstance
                }, r._objectDataParserInstance = null, r
            })(t.DataParser);
            t.ObjectDataParser = e;
            var i = (function() {
                return function() {
                    this.frameStart = 0, this.actions = []
                }
            })();
            t.ActionFrame = i
        })(r || (r = {})), (function(t) {
            var e = (function(e) {
                function i() {
                    return null !== e && e.apply(this, arguments) || this
                }
                return n(i, e), i.prototype._inRange = function(t, e, i) {
                    return e <= t && t <= i
                }, i.prototype._decodeUTF8 = function(t) {
                    for (var e, i = 0, n = "", r = 0, s = 0, o = 0, a = 0; t.length > i;) {
                        var l = t[i++];
                        if (-1 === l) e = 0 !== s ? 65533 : -1;
                        else if (0 === s) this._inRange(l, 0, 127) ? e = l : (this._inRange(l, 194, 223) ? (s = 1, a = 128, r = l - 192) : this._inRange(l, 224, 239) ? (s = 2, a = 2048, r = l - 224) : this._inRange(l, 240, 244) && (s = 3, a = 65536, r = l - 240), r *= Math.pow(64, s), e = null);
                        else if (this._inRange(l, 128, 191))
                            if (o += 1, r += (l - 128) * Math.pow(64, s - o), o !== s) e = null;
                            else {
                                var h = r,
                                    c = a;
                                r = 0, s = 0, o = 0, a = 0, e = this._inRange(h, c, 1114111) && !this._inRange(h, 55296, 57343) ? h : l
                            }
                        else r = 0, s = 0, o = 0, a = 0, i--, e = l;
                        null !== e && -1 !== e && (e <= 65535 ? e > 0 && (n += String.fromCharCode(e)) : (e -= 65536, n += String.fromCharCode(55296 + (e >> 10 & 1023)), n += String.fromCharCode(56320 + (1023 & e))))
                    }
                    return n
                }, i.prototype._getUTF16Key = function(t) {
                    for (var e = 0, i = t.length; e < i; ++e)
                        if (t.charCodeAt(e) > 255) return encodeURI(t);
                    return t
                }, i.prototype._parseBinaryTimeline = function(e, i, n) {
                    void 0 === n && (n = null);
                    var r = null !== n ? n : t.BaseObject.borrowObject(t.TimelineData);
                    r.type = e, r.offset = i, this._timeline = r;
                    var s = this._timelineArrayBuffer[r.offset + 2];
                    if (1 === s) r.frameIndicesOffset = -1;
                    else {
                        var o = 0,
                            a = this._animation.frameCount + 1,
                            l = this._data.frameIndices;
                        t.DragonBones.webAssembly ? (o = l.size(), l.resize(o + a, 0)) : (o = l.length, l.length += a), r.frameIndicesOffset = o;
                        for (var h = 0, c = 0, u = 0, _ = 0; h < a; ++h) u + _ <= h && c < s && (u = this._frameArrayBuffer[this._animation.frameOffset + this._timelineArrayBuffer[r.offset + 5 + c]], _ = c === s - 1 ? this._animation.frameCount - u : this._frameArrayBuffer[this._animation.frameOffset + this._timelineArrayBuffer[r.offset + 5 + c + 1]] - u, c++), t.DragonBones.webAssembly ? l.set(o + h, c - 1) : l[o + h] = c - 1
                    }
                    return this._timeline = null, r
                }, i.prototype._parseVertices = function(e, i) {
                    i.offset = e[t.DataParser.OFFSET];
                    var n = this._intArrayBuffer[i.offset + 3];
                    if (n >= 0) {
                        var r = t.BaseObject.borrowObject(t.WeightData),
                            s = this._intArrayBuffer[i.offset + 0],
                            o = this._intArrayBuffer[n + 0];
                        r.offset = n;
                        for (var a = 0; a < o; ++a) {
                            var l = this._intArrayBuffer[n + 2 + a];
                            r.addBone(this._rawBones[l])
                        }
                        for (var h = n + 2 + o, c = 0, u = (a = 0, s); a < u; ++a) {
                            var _ = this._intArrayBuffer[h++];
                            c += _, h += _
                        }
                        r.count = c, i.weight = r
                    }
                }, i.prototype._parseMesh = function(t, e) {
                    this._parseVertices(t, e.vertices)
                }, i.prototype._parsePath = function(t, e) {
                    this._parseVertices(t, e.vertices)
                }, i.prototype._parseAnimation = function(e) {
                    var i = t.BaseObject.borrowObject(t.AnimationData);
                    i.frameCount = Math.max(t.ObjectDataParser._getNumber(e, t.DataParser.DURATION, 1), 1), i.playTimes = t.ObjectDataParser._getNumber(e, t.DataParser.PLAY_TIMES, 1), i.duration = i.frameCount / this._armature.frameRate, i.fadeInTime = t.ObjectDataParser._getNumber(e, t.DataParser.FADE_IN_TIME, 0), i.scale = t.ObjectDataParser._getNumber(e, t.DataParser.SCALE, 1), i.name = t.ObjectDataParser._getString(e, t.DataParser.NAME, t.DataParser.DEFAULT_NAME), 0 === i.name.length && (i.name = t.DataParser.DEFAULT_NAME);
                    var n = e[t.DataParser.OFFSET];
                    if (i.frameIntOffset = n[0], i.frameFloatOffset = n[1], i.frameOffset = n[2], this._animation = i, t.DataParser.ACTION in e && (i.actionTimeline = this._parseBinaryTimeline(0, e[t.DataParser.ACTION])), t.DataParser.Z_ORDER in e && (i.zOrderTimeline = this._parseBinaryTimeline(1, e[t.DataParser.Z_ORDER])), t.DataParser.BONE in e) {
                        var r = e[t.DataParser.BONE];
                        for (var s in r) {
                            var o = r[s];
                            t.DragonBones.webAssembly && (s = this._getUTF16Key(s));
                            var a = this._armature.getBone(s);
                            if (null !== a)
                                for (var l = 0, h = o.length; l < h; l += 2) {
                                    var c = o[l],
                                        u = o[l + 1],
                                        _ = this._parseBinaryTimeline(c, u);
                                    this._animation.addBoneTimeline(a, _)
                                }
                        }
                    }
                    if (t.DataParser.SURFACE in e) {
                        r = e[t.DataParser.SURFACE];
                        for (var s in r) {
                            o = r[s];
                            t.DragonBones.webAssembly && (s = this._getUTF16Key(s));
                            var f = this._armature.getBone(s);
                            if (null !== f)
                                for (l = 0, h = o.length; l < h; l += 2) {
                                    c = o[l], u = o[l + 1], _ = this._parseBinaryTimeline(c, u);
                                    this._animation.addSurfaceTimeline(f, _)
                                }
                        }
                    }
                    if (t.DataParser.SLOT in e) {
                        r = e[t.DataParser.SLOT];
                        for (var s in r) {
                            o = r[s];
                            t.DragonBones.webAssembly && (s = this._getUTF16Key(s));
                            var d = this._armature.getSlot(s);
                            if (null !== d)
                                for (l = 0, h = o.length; l < h; l += 2) {
                                    c = o[l], u = o[l + 1], _ = this._parseBinaryTimeline(c, u);
                                    this._animation.addSlotTimeline(d, _)
                                }
                        }
                    }
                    if (t.DataParser.CONSTRAINT in e) {
                        r = e[t.DataParser.CONSTRAINT];
                        for (var s in r) {
                            o = r[s];
                            t.DragonBones.webAssembly && (s = this._getUTF16Key(s));
                            var p = this._armature.getConstraint(s);
                            if (null !== p)
                                for (l = 0, h = o.length; l < h; l += 2) {
                                    c = o[l], u = o[l + 1], _ = this._parseBinaryTimeline(c, u);
                                    this._animation.addConstraintTimeline(p, _)
                                }
                        }
                    }
                    if (t.DataParser.ANIMATION in e) {
                        r = e[t.DataParser.ANIMATION];
                        for (var s in r) {
                            o = r[s];
                            t.DragonBones.webAssembly && (s = this._getUTF16Key(s));
                            for (l = 0, h = o.length; l < h; l += 2) {
                                c = o[l], u = o[l + 1], _ = this._parseBinaryTimeline(c, u);
                                this._animation.addAnimationTimeline(s, _)
                            }
                        }
                    }
                    return this._animation = null, i
                }, i.prototype._parseArray = function(e) {
                    var i = e[t.DataParser.OFFSET],
                        n = i[1],
                        r = i[3],
                        s = i[5],
                        o = i[7],
                        a = i[9],
                        l = i[11],
                        h = new Int16Array(this._binary, this._binaryOffset + i[0], n / Int16Array.BYTES_PER_ELEMENT),
                        c = new Float32Array(this._binary, this._binaryOffset + i[2], r / Float32Array.BYTES_PER_ELEMENT),
                        u = new Int16Array(this._binary, this._binaryOffset + i[4], s / Int16Array.BYTES_PER_ELEMENT),
                        _ = new Float32Array(this._binary, this._binaryOffset + i[6], o / Float32Array.BYTES_PER_ELEMENT),
                        f = new Int16Array(this._binary, this._binaryOffset + i[8], a / Int16Array.BYTES_PER_ELEMENT),
                        d = new Uint16Array(this._binary, this._binaryOffset + i[10], l / Uint16Array.BYTES_PER_ELEMENT);
                    if (t.DragonBones.webAssembly) {
                        for (var p = n + r + s + o + a + l, m = t.webAssemblyModule._malloc(p), y = new Uint8Array(this._binary, this._binaryOffset, p / Uint8Array.BYTES_PER_ELEMENT), v = new Uint8Array(t.webAssemblyModule.HEAP16.buffer, m, y.length), g = 0, x = y.length; g < x; ++g) v[g] = y[g];
                        t.webAssemblyModule.setDataBinary(this._data, m, n, r, s, o, a, l), this._intArrayBuffer = h, this._floatArrayBuffer = c, this._frameIntArrayBuffer = u, this._frameFloatArrayBuffer = _, this._frameArrayBuffer = f, this._timelineArrayBuffer = d
                    } else this._data.binary = this._binary, this._data.intArray = this._intArrayBuffer = h, this._data.floatArray = this._floatArrayBuffer = c, this._data.frameIntArray = this._frameIntArrayBuffer = u, this._data.frameFloatArray = this._frameFloatArrayBuffer = _, this._data.frameArray = this._frameArrayBuffer = f, this._data.timelineArray = this._timelineArrayBuffer = d
                }, i.prototype.parseDragonBonesData = function(t, i) {
                    void 0 === i && (i = 1), console.assert(null !== t && void 0 !== t && t instanceof ArrayBuffer, "Data error.");
                    var n = new Uint8Array(t, 0, 8);
                    if (n[0] !== "D".charCodeAt(0) || n[1] !== "B".charCodeAt(0) || n[2] !== "D".charCodeAt(0) || n[3] !== "T".charCodeAt(0)) return console.assert(!1, "Nonsupport data."), null;
                    var r = new Uint32Array(t, 8, 1)[0],
                        s = new Uint8Array(t, 12, r),
                        o = this._decodeUTF8(s),
                        a = JSON.parse(o);
                    return this._binaryOffset = 12 + r, this._binary = t, e.prototype.parseDragonBonesData.call(this, a, i)
                }, i.getInstance = function() {
                    return null === i._binaryDataParserInstance && (i._binaryDataParserInstance = new i), i._binaryDataParserInstance
                }, i._binaryDataParserInstance = null, i
            })(t.ObjectDataParser);
            t.BinaryDataParser = e
        })(r || (r = {})), (function(t) {
            var e = (function() {
                function e(i) {
                    void 0 === i && (i = null), this.autoSearch = !1, this._dragonBonesDataMap = {}, this._textureAtlasDataMap = {}, this._dragonBones = null, this._dataParser = null, null === e._objectParser && (e._objectParser = new t.ObjectDataParser), null === e._binaryParser && (e._binaryParser = new t.BinaryDataParser), this._dataParser = null !== i ? i : e._objectParser
                }
                return e.prototype._isSupportMesh = function() {
                    return !0
                }, e.prototype._getTextureData = function(t, e) {
                    if (t in this._textureAtlasDataMap)
                        for (var i = 0, n = this._textureAtlasDataMap[t]; i < n.length; i++) {
                            if (null !== (l = (a = n[i]).getTexture(e))) return l
                        }
                    if (this.autoSearch)
                        for (var r in this._textureAtlasDataMap)
                            for (var s = 0, o = this._textureAtlasDataMap[r]; s < o.length; s++) {
                                var a, l;
                                if ((a = o[s]).autoSearch)
                                    if (null !== (l = a.getTexture(e))) return l
                            }
                    return null
                }, e.prototype._fillBuildArmaturePackage = function(t, e, i, n, r) {
                    var s = null,
                        o = null;
                    if (e.length > 0 && e in this._dragonBonesDataMap && (o = (s = this._dragonBonesDataMap[e]).getArmature(i)), null === o && (0 === e.length || this.autoSearch))
                        for (var a in this._dragonBonesDataMap)
                            if (s = this._dragonBonesDataMap[a], (0 === e.length || s.autoSearch) && null !== (o = s.getArmature(i))) {
                                e = a;
                                break
                            }
                    if (null !== o) {
                        if (t.dataName = e, t.textureAtlasName = r, t.data = s, t.armature = o, t.skin = null, n.length > 0 && (t.skin = o.getSkin(n), null === t.skin && this.autoSearch))
                            for (var a in this._dragonBonesDataMap) {
                                var l = this._dragonBonesDataMap[a].getArmature(n);
                                if (null !== l) {
                                    t.skin = l.defaultSkin;
                                    break
                                }
                            }
                        return null === t.skin && (t.skin = o.defaultSkin), !0
                    }
                    return !1
                }, e.prototype._buildBones = function(e, i) {
                    for (var n = 0, r = e.armature.sortedBones; n < r.length; n++) {
                        var s = r[n];
                        t.BaseObject.borrowObject(0 === s.type ? t.Bone : t.Surface).init(s, i)
                    }
                }, e.prototype._buildSlots = function(e, i) {
                    var n = e.skin,
                        r = e.armature.defaultSkin;
                    if (null !== n && null !== r) {
                        var s = {};
                        for (var o in r.displays) {
                            var a = r.getDisplays(o);
                            s[o] = a
                        }
                        if (n !== r)
                            for (var o in n.displays) {
                                a = n.getDisplays(o);
                                s[o] = a
                            }
                        for (var l = 0, h = e.armature.sortedSlots; l < h.length; l++) {
                            var c = h[l],
                                u = c.name in s ? s[c.name] : null,
                                _ = this._buildSlot(e, c, i);
                            if (_.rawDisplayDatas = u, null !== u) {
                                for (var f = new Array, d = 0, p = t.DragonBones.webAssembly ? u.size() : u.length; d < p; ++d) {
                                    var m = t.DragonBones.webAssembly ? u.get(d) : u[d];
                                    null !== m ? f.push(this._getSlotDisplay(e, m, null, _)) : f.push(null)
                                }
                                _._setDisplayList(f)
                            }
                            _._setDisplayIndex(c.displayIndex, !0)
                        }
                    }
                }, e.prototype._buildConstraints = function(e, i) {
                    var n = e.armature.constraints;
                    for (var r in n) {
                        var s = n[r];
                        switch (s.type) {
                            case 0:
                                var o = t.BaseObject.borrowObject(t.IKConstraint);
                                o.init(s, i), i._addConstraint(o);
                                break;
                            case 1:
                                var a = t.BaseObject.borrowObject(t.PathConstraint);
                                a.init(s, i), i._addConstraint(a);
                                break;
                            default:
                                var l = t.BaseObject.borrowObject(t.IKConstraint);
                                l.init(s, i), i._addConstraint(l)
                        }
                    }
                }, e.prototype._buildChildArmature = function(t, e, i) {
                    return this.buildArmature(i.path, null !== t ? t.dataName : "", "", null !== t ? t.textureAtlasName : "")
                }, e.prototype._getSlotDisplay = function(e, i, n, r) {
                    var s = null !== e ? e.dataName : i.parent.parent.parent.name,
                        o = null;
                    switch (i.type) {
                        case 0:
                            var a = i;
                            null !== e && e.textureAtlasName.length > 0 && (a.texture = this._getTextureData(e.textureAtlasName, i.path)), null === a.texture && (a.texture = this._getTextureData(s, i.path)), o = null !== n && 2 === n.type && this._isSupportMesh() ? r.meshDisplay : r.rawDisplay;
                            break;
                        case 2:
                            var l = i;
                            null !== e && e.textureAtlasName.length > 0 && (l.texture = this._getTextureData(e.textureAtlasName, l.path)), null === l.texture && (l.texture = this._getTextureData(s, l.path)), o = this._isSupportMesh() ? r.meshDisplay : r.rawDisplay;
                            break;
                        case 1:
                            var h = i,
                                c = this._buildChildArmature(e, r, i);
                            if (null !== c) {
                                if (c.inheritAnimation = h.inheritAnimation, !c.inheritAnimation) {
                                    var u = h.actions.length > 0 ? h.actions : c.armatureData.defaultActions;
                                    if (u.length > 0)
                                        for (var _ = 0, f = u; _ < f.length; _++) {
                                            var d = f[_],
                                                p = t.BaseObject.borrowObject(t.EventObject);
                                            t.EventObject.actionDataToInstance(d, p, r.armature), p.slot = r, r.armature._bufferAction(p, !1)
                                        } else c.animation.play()
                                }
                                h.armature = c.armatureData
                            }
                            o = c
                    }
                    return o
                }, e.prototype.parseDragonBonesData = function(t, i, n) {
                    void 0 === i && (i = null), void 0 === n && (n = 1);
                    for (var r = t instanceof ArrayBuffer ? e._binaryParser : this._dataParser, s = r.parseDragonBonesData(t, n);;) {
                        var o = this._buildTextureAtlasData(null, null);
                        if (!r.parseTextureAtlasData(null, o, n)) {
                            o.returnToPool();
                            break
                        }
                        this.addTextureAtlasData(o, i)
                    }
                    return null !== s && this.addDragonBonesData(s, i), s
                }, e.prototype.parseTextureAtlasData = function(t, e, i, n) {
                    void 0 === i && (i = null), void 0 === n && (n = 1);
                    var r = this._buildTextureAtlasData(null, null);
                    return this._dataParser.parseTextureAtlasData(t, r, n), this._buildTextureAtlasData(r, e || null), this.addTextureAtlasData(r, i), r
                }, e.prototype.updateTextureAtlasData = function(t, e) {
                    var i = this.getTextureAtlasData(t);
                    if (null !== i)
                        for (var n = 0, r = i.length; n < r; ++n) n < e.length && this._buildTextureAtlasData(i[n], e[n])
                }, e.prototype.getDragonBonesData = function(t) {
                    return t in this._dragonBonesDataMap ? this._dragonBonesDataMap[t] : null
                }, e.prototype.addDragonBonesData = function(t, e) {
                    if (void 0 === e && (e = null), (e = null !== e ? e : t.name) in this._dragonBonesDataMap) {
                        if (this._dragonBonesDataMap[e] === t) return;
                        console.warn("Can not add same name data: " + e)
                    } else this._dragonBonesDataMap[e] = t
                }, e.prototype.removeDragonBonesData = function(t, e) {
                    void 0 === e && (e = !0), t in this._dragonBonesDataMap && (e && this._dragonBones.bufferObject(this._dragonBonesDataMap[t]), delete this._dragonBonesDataMap[t])
                }, e.prototype.getTextureAtlasData = function(t) {
                    return t in this._textureAtlasDataMap ? this._textureAtlasDataMap[t] : null
                }, e.prototype.addTextureAtlasData = function(t, e) {
                    void 0 === e && (e = null);
                    var i = (e = null !== e ? e : t.name) in this._textureAtlasDataMap ? this._textureAtlasDataMap[e] : this._textureAtlasDataMap[e] = [];
                    i.indexOf(t) < 0 && i.push(t)
                }, e.prototype.removeTextureAtlasData = function(t, e) {
                    if (void 0 === e && (e = !0), t in this._textureAtlasDataMap) {
                        var i = this._textureAtlasDataMap[t];
                        if (e)
                            for (var n = 0, r = i; n < r.length; n++) {
                                var s = r[n];
                                this._dragonBones.bufferObject(s)
                            }
                        delete this._textureAtlasDataMap[t]
                    }
                }, e.prototype.getArmatureData = function(t, e) {
                    void 0 === e && (e = "");
                    var n = new i;
                    return this._fillBuildArmaturePackage(n, e, t, "", "") ? n.armature : null
                }, e.prototype.clear = function(t) {
                    for (var e in void 0 === t && (t = !0), this._dragonBonesDataMap) t && this._dragonBones.bufferObject(this._dragonBonesDataMap[e]), delete this._dragonBonesDataMap[e];
                    for (var e in this._textureAtlasDataMap) {
                        if (t)
                            for (var i = 0, n = this._textureAtlasDataMap[e]; i < n.length; i++) {
                                var r = n[i];
                                this._dragonBones.bufferObject(r)
                            }
                        delete this._textureAtlasDataMap[e]
                    }
                }, e.prototype.buildArmature = function(t, e, n, r) {
                    void 0 === e && (e = ""), void 0 === n && (n = ""), void 0 === r && (r = "");
                    var s = new i;
                    if (!this._fillBuildArmaturePackage(s, e || "", t, n || "", r || "")) return console.warn("No armature data: " + t + ", " + (null !== e ? e : "")), null;
                    var o = this._buildArmature(s);
                    return this._buildBones(s, o), this._buildSlots(s, o), this._buildConstraints(s, o), o.invalidUpdate(null, !0), o.advanceTime(0), o
                }, e.prototype.replaceDisplay = function(e, i, n) {
                    void 0 === n && (n = -1), n < 0 && (n = e.displayIndex), n < 0 && (n = 0), e.replaceDisplayData(i, n);
                    var r = e.displayList;
                    if (r.length <= n) {
                        r.length = n + 1;
                        for (var s = 0, o = r.length; s < o; ++s) r[s] || (r[s] = null)
                    }
                    if (null !== i) {
                        var a = e.rawDisplayDatas,
                            l = null;
                        a && (t.DragonBones.webAssembly ? n < a.size() && (l = a.get(n)) : n < a.length && (l = a[n])), r[n] = this._getSlotDisplay(null, i, l, e)
                    } else r[n] = null;
                    e.displayList = r
                }, e.prototype.replaceSlotDisplay = function(t, e, i, n, r, s) {
                    void 0 === s && (s = -1);
                    var o = this.getArmatureData(e, t || "");
                    if (!o || !o.defaultSkin) return !1;
                    var a = o.defaultSkin.getDisplay(i, n);
                    return !!a && (this.replaceDisplay(r, a, s), !0)
                }, e.prototype.replaceSlotDisplayList = function(e, i, n, r) {
                    var s = this.getArmatureData(i, e || "");
                    if (!s || !s.defaultSkin) return !1;
                    var o = s.defaultSkin.getDisplays(n);
                    if (!o) return !1;
                    for (var a = 0, l = 0, h = t.DragonBones.webAssembly ? o.size() : o.length; l < h; ++l) {
                        var c = t.DragonBones.webAssembly ? o.get(l) : o[l];
                        this.replaceDisplay(r, c, a++)
                    }
                    return !0
                }, e.prototype.replaceSkin = function(e, i, n, r) {
                    void 0 === n && (n = !1), void 0 === r && (r = null);
                    for (var s = !1, o = i.parent.defaultSkin, a = 0, l = e.getSlots(); a < l.length; a++) {
                        var h = l[a];
                        if (!(null !== r && r.indexOf(h.name) >= 0)) {
                            var c = i.getDisplays(h.name);
                            if (c || (null !== o && i !== o && (c = o.getDisplays(h.name)), c)) {
                                var u = t.DragonBones.webAssembly ? c.size() : c.length,
                                    _ = h.displayList;
                                _.length = u;
                                for (var f = 0, d = u; f < d; ++f) {
                                    var p = t.DragonBones.webAssembly ? c.get(f) : c[f];
                                    _[f] = null !== p ? this._getSlotDisplay(null, p, null, h) : null
                                }
                                s = !0, h.rawDisplayDatas = c, h.displayList = _
                            } else n && (h.rawDisplayDatas = null, h.displayList = [])
                        }
                    }
                    return s
                }, e.prototype.replaceAnimation = function(e, i, n) {
                    void 0 === n && (n = !0);
                    var r = i.defaultSkin;
                    if (null === r) return !1;
                    if (n) e.animation.animations = i.animations;
                    else {
                        var s = e.animation.animations,
                            o = {};
                        for (var a in s) o[a] = s[a];
                        for (var a in i.animations) o[a] = i.animations[a];
                        e.animation.animations = o
                    }
                    for (var l = 0, h = e.getSlots(); l < h.length; l++)
                        for (var c = h[l], u = 0, _ = 0, f = c.displayList; _ < f.length; _++) {
                            var d = f[_];
                            if (d instanceof t.Armature) {
                                var p = r.getDisplays(c.name);
                                if (null !== p && u < (t.DragonBones.webAssembly ? p.size() : p.length)) {
                                    var m = t.DragonBones.webAssembly ? p.get(u) : p[u];
                                    if (null !== m && 1 === m.type) {
                                        var y = this.getArmatureData(m.path, m.parent.parent.parent.name);
                                        y && this.replaceAnimation(d, y, n)
                                    }
                                }
                            }
                            u++
                        }
                    return !0
                }, e.prototype.getAllDragonBonesData = function() {
                    return this._dragonBonesDataMap
                }, e.prototype.getAllTextureAtlasData = function() {
                    return this._textureAtlasDataMap
                }, Object.defineProperty(e.prototype, "clock", {
                    get: function() {
                        return this._dragonBones.clock
                    },
                    enumerable: !0,
                    configurable: !0
                }), Object.defineProperty(e.prototype, "dragonBones", {
                    get: function() {
                        return this._dragonBones
                    },
                    enumerable: !0,
                    configurable: !0
                }), e.prototype.changeSkin = function(t, e, i) {
                    return void 0 === i && (i = null), this.replaceSkin(t, e, !1, i)
                }, e.prototype.copyAnimationsToArmature = function(t, e, i, n, r) {
                    void 0 === i && (i = ""), void 0 === n && (n = ""), void 0 === r && (r = !0);
                    var s = this.getArmatureData(e, n);
                    return !!s && this.replaceAnimation(t, s, r)
                }, e._objectParser = null, e._binaryParser = null, e
            })();
            t.BaseFactory = e;
            var i = (function() {
                return function() {
                    this.dataName = "", this.textureAtlasName = "", this.skin = null
                }
            })();
            t.BuildArmaturePackage = i
        })(r || (r = {})), e.exports = r
    }), {}],
    411: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.default = void 0;
        var n = (function(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        })(t("../../cocos2d/core/renderer/assembler"));

        function r(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }

        function s(t, e) {
            if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
            return !e || "object" != typeof e && "function" != typeof e ? t : e
        }

        function o(t, e) {
            if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e);
            t.prototype = Object.create(e && e.prototype, {
                constructor: {
                    value: t,
                    enumerable: !1,
                    writable: !0,
                    configurable: !0
                }
            }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e)
        }
        var a = t("./ArmatureDisplay"),
            l = t("../../cocos2d/core/renderer/render-flow"),
            h = cc.gfx,
            c = cc.vmath.mat4,
            u = cc.color(255, 0, 0, 255),
            _ = cc.color(0, 0, 255, 255),
            f = void 0,
            d = void 0,
            p = void 0,
            m = void 0,
            y = void 0,
            v = void 0,
            g = void 0,
            x = void 0,
            b = void 0,
            A = void 0,
            C = void 0,
            T = void 0,
            S = void 0,
            w = void 0,
            E = void 0,
            M = void 0,
            D = void 0,
            B = void 0,
            I = void 0,
            P = void 0,
            R = void 0,
            O = void 0,
            L = void 0,
            F = void 0,
            N = void 0,
            V = void 0,
            k = void 0,
            G = void 0,
            U = void 0,
            z = void 0;

        function j(t, e) {
            if (!t) return null;
            var i = void 0,
                n = void 0;
            switch (e) {
                case 1:
                    i = y ? cc.macro.ONE : cc.macro.SRC_ALPHA, n = cc.macro.ONE;
                    break;
                case 10:
                    i = cc.macro.DST_COLOR, n = cc.macro.ONE_MINUS_SRC_ALPHA;
                    break;
                case 12:
                    i = cc.macro.ONE, n = cc.macro.ONE_MINUS_SRC_COLOR;
                    break;
                case 0:
                default:
                    i = y ? cc.macro.ONE : cc.macro.SRC_ALPHA, n = cc.macro.ONE_MINUS_SRC_ALPHA
            }
            var r = !C.enableBatch,
                s = t.getId() + i + n + r,
                o = C.sharedMaterials[0];
            if (!o) return null;
            var a = C._materialCache,
                l = a[s];
            l ? l.texture !== t && (l.setProperty("texture", t), l.updateHash(s)) : (a[o._hash] ? (l = new cc.Material).copy(o) : l = o, l.define("CC_USE_MODEL", r), l.setProperty("texture", t), l.effect.setBlend(!0, h.BLEND_FUNC_ADD, i, n, h.BLEND_FUNC_ADD, i, n), a[s] = l, l.updateHash(s));
            return l
        }

        function W(t, e) {
            L = t.a * e * m, v = y ? L / 255 : 1, P = t.r * f * v, R = t.g * d * v, O = t.b * p * v, I = (L << 24 >>> 0) + (O << 16) + (R << 8) + P
        }
        var H = (function(t) {
            function e() {
                return r(this, e), s(this, t.apply(this, arguments))
            }
            return o(e, t), e.prototype.updateRenderData = function(t, e) {}, e.prototype.realTimeTraverse = function(t, e, i) {
                for (var n = t._slots, r = void 0, s = void 0, o = void 0, a = void 0, l = void 0, h = void 0, u = void 0, _ = void 0, f = void 0, d = void 0, p = 0, m = n.length; p < m; p++)
                    if (u = (_ = n[p])._color, _._visible && _._displayData)
                        if (e ? _._mulMat(_._worldMatrix, e, _._matrix) : c.copy(_._worldMatrix, _._matrix), _.childArmature) this.realTimeTraverse(_.childArmature, _._worldMatrix, i * u.a / 255);
                        else if (a = j(_.getTexture(), _._blendMode)) {
                    (g || a._hash !== A.material._hash) && (g = !1, A._flush(), A.node = b, A.material = a), W(u, i), f = _._worldMatrix.m, l = _._localVertices, E = l.length >> 2, h = _._indices, M = h.length, d = x.request(E, M), S = d.indiceOffset, T = d.byteOffset >> 2, w = d.vertexOffset, r = x._vData, s = x._iData, o = x._uintVData, N = f[0], V = f[4], k = f[12], G = f[1], U = f[5], z = f[13];
                    for (var y = 0, v = l.length; y < v;) D = l[y++], B = l[y++], r[T++] = D * N + B * V + k, r[T++] = D * G + B * U + z, r[T++] = l[y++], r[T++] = l[y++], o[T++] = I;
                    for (var C = 0, P = h.length; C < P; C++) s[S++] = w + h[C]
                }
            }, e.prototype.cacheTraverse = function(t, e) {
                if (t) {
                    var i = t.segments;
                    if (0 != i.length) {
                        var n = void 0,
                            r = void 0,
                            s = void 0,
                            o = void 0,
                            a = void 0,
                            l = t.vertices,
                            h = t.indices,
                            c = 0,
                            u = 0,
                            _ = 0;
                        if (e) {
                            var f = e.m;
                            N = f[0], G = f[1], V = f[4], U = f[5], k = f[12], z = f[13]
                        }
                        var d = 16 & F,
                            p = d && (1 === N && 0 === G && 0 === V && 1 === U),
                            m = 0,
                            y = t.colors,
                            v = y[m++],
                            C = v.vfOffset;
                        W(v, 1);
                        for (var P = 0, R = i.length; P < R; P++) {
                            var O = i[P];
                            o = j(O.tex, O.blendMode), (g || o._hash !== A.material._hash) && (g = !1, A._flush(), A.node = b, A.material = o), E = O.vertexCount, M = O.indexCount, a = x.request(E, M), S = a.indiceOffset, w = a.vertexOffset, T = a.byteOffset >> 2, n = x._vData, r = x._iData, s = x._uintVData;
                            for (var L = S, H = S + M; L < H; L++) r[L] = w + h[u++];
                            if (_ = O.vfCount, n.set(l.subarray(c, c + _), T), c += _, p)
                                for (var X = T, Y = T + _; X < Y; X += 5) n[X] += k, n[X + 1] += z;
                            else if (d)
                                for (var q = T, J = T + _; q < J; q += 5) D = n[q], B = n[q + 1], n[q] = D * N + B * V + k, n[q + 1] = D * G + B * U + z;
                            if (1 & F)
                                for (var Z = c - _, K = T + 4, Q = T + 4 + _; K < Q; K += 5, Z += 5) Z >= C && (W(v = y[m++], 1), C = v.vfOffset), s[K] = I
                        }
                    }
                }
            }, e.prototype.fillBuffers = function(t, e) {
                t.node._renderFlag |= l.FLAG_UPDATE_RENDER_DATA;
                var i = t._armature;
                if (i) {
                    g = !0, y = t.premultipliedAlpha, b = t.node, x = e._meshBuffer, A = e, C = t, F = 0;
                    var n = b._color;
                    f = n.r / 255, d = n.g / 255, p = n.b / 255, m = n.a / 255, 4294967295 !== n._val && (F |= 1);
                    var r = void 0;
                    if (C.enableBatch && (r = b._worldMatrix, g = !1, F |= 16), t.isAnimationCached()) this.cacheTraverse(t._curFrame, r);
                    else {
                        this.realTimeTraverse(i, r, 1);
                        var s = t._debugDraw;
                        if (t.debugBones && s) {
                            s.clear(), s.lineWidth = 5, s.strokeColor = u, s.fillColor = _;
                            for (var o = i.getBones(), a = 0, h = o.length; a < h; a++) {
                                var c = o[a],
                                    v = Math.max(c.boneData.length, 5),
                                    T = c.globalTransformMatrix.tx,
                                    S = -c.globalTransformMatrix.ty,
                                    w = T + c.globalTransformMatrix.a * v,
                                    E = S - c.globalTransformMatrix.b * v;
                                s.moveTo(T, S), s.lineTo(w, E), s.stroke()
                            }
                        }
                    }
                    b = void 0, x = void 0, A = void 0, C = void 0
                }
            }, e
        })(n.default);
        i.default = H, n.default.register(a, H), e.exports = i.default
    }), {
        "../../cocos2d/core/renderer/assembler": 227,
        "../../cocos2d/core/renderer/render-flow": 248,
        "./ArmatureDisplay": 402
    }],
    412: [(function(t, e, i) {
        "use strict";
        var n = t("./track-entry-listeners"),
            r = t("../../cocos2d/core/components/CCRenderComponent"),
            s = t("./lib/spine"),
            o = t("../../cocos2d/core/assets/material/CCMaterial"),
            a = t("../../cocos2d/core/graphics/graphics"),
            l = t("./skeleton-cache"),
            h = cc.Enum({
                default: -1
            }),
            c = cc.Enum({
                "<None>": 0
            }),
            u = cc.Enum({
                REALTIME: 0,
                SHARED_CACHE: 1,
                PRIVATE_CACHE: 2
            });
        sp.Skeleton = cc.Class({
            name: "sp.Skeleton",
            extends: r,
            editor: !1,
            statics: {
                AnimationCacheMode: u
            },
            properties: {
                paused: {
                    default: !1,
                    visible: !1
                },
                skeletonData: {
                    default: null,
                    type: sp.SkeletonData,
                    notify: function() {
                        this.defaultSkin = "", this.defaultAnimation = "", this._updateSkeletonData()
                    },
                    tooltip: !1
                },
                defaultSkin: {
                    default: "",
                    visible: !1
                },
                defaultAnimation: {
                    default: "",
                    visible: !1
                },
                animation: {
                    get: function() {
                        if (this.isAnimationCached()) return this._animationName;
                        var t = this.getCurrent(0);
                        return t && t.animation.name || ""
                    },
                    set: function(t) {
                        this.defaultAnimation = t, t ? this.setAnimation(0, t, this.loop) : this.isAnimationCached() || (this.clearTrack(0), this.setToSetupPose())
                    },
                    visible: !1
                },
                _defaultSkinIndex: {
                    get: function() {
                        if (this.skeletonData && this.defaultSkin) {
                            var t = this.skeletonData.getSkinsEnum();
                            if (t) {
                                var e = t[this.defaultSkin];
                                if (void 0 !== e) return e
                            }
                        }
                        return 0
                    },
                    set: function(t) {
                        var e;
                        if (this.skeletonData && (e = this.skeletonData.getSkinsEnum()), !e) return cc.errorID("", this.name);
                        var i = e[t];
                        void 0 !== i ? (this.defaultSkin = i, this.setSkin(this.defaultSkin)) : cc.errorID(7501, this.name)
                    },
                    type: h,
                    visible: !0,
                    displayName: "Default Skin",
                    tooltip: !1
                },
                _animationIndex: {
                    get: function() {
                        var t = this.animation;
                        if (this.skeletonData && t) {
                            var e = this.skeletonData.getAnimsEnum();
                            if (e) {
                                var i = e[t];
                                if (void 0 !== i) return i
                            }
                        }
                        return 0
                    },
                    set: function(t) {
                        if (0 !== t) {
                            var e;
                            if (this.skeletonData && (e = this.skeletonData.getAnimsEnum()), !e) return cc.errorID(7502, this.name);
                            var i = e[t];
                            void 0 !== i ? this.animation = i : cc.errorID(7503, this.name)
                        } else this.animation = ""
                    },
                    type: c,
                    visible: !0,
                    displayName: "Animation",
                    tooltip: !1
                },
                _preCacheMode: -1,
                _cacheMode: u.REALTIME,
                _defaultCacheMode: {
                    default: 0,
                    type: u,
                    notify: function() {
                        this.setAnimationCacheMode(this._defaultCacheMode)
                    },
                    editorOnly: !0,
                    visible: !0,
                    animatable: !1,
                    displayName: "Animation Cache Mode",
                    tooltip: !1
                },
                loop: {
                    default: !0,
                    tooltip: !1
                },
                premultipliedAlpha: {
                    default: !0,
                    tooltip: !1
                },
                timeScale: {
                    default: 1,
                    tooltip: !1
                },
                debugSlots: {
                    default: !1,
                    editorOnly: !0,
                    tooltip: !1,
                    notify: function() {
                        this._updateDebugDraw()
                    }
                },
                debugBones: {
                    default: !1,
                    editorOnly: !0,
                    tooltip: !1,
                    notify: function() {
                        this._updateDebugDraw()
                    }
                },
                debugMesh: {
                    default: !1,
                    editorOnly: !0,
                    tooltip: !1,
                    notify: function() {
                        this._updateDebugDraw()
                    }
                },
                useTint: {
                    default: !1,
                    tooltip: !1,
                    notify: function() {
                        this._updateUseTint()
                    }
                },
                enableBatch: {
                    default: !1,
                    notify: function() {
                        this._updateBatch()
                    },
                    tooltip: !1
                },
                _accTime: 0,
                _playCount: 0,
                _frameCache: null,
                _curFrame: null,
                _skeletonCache: null,
                _animationName: "",
                _animationQueue: [],
                _headAniInfo: null,
                _playTimes: 0,
                _isAniComplete: !0
            },
            ctor: function() {
                this._effectDelegate = null, this._skeleton = null, this._rootBone = null, this._listener = null, this._boundingBox = cc.rect(), this._materialCache = {}, this._debugRenderer = null, this._startSlotIndex = -1, this._endSlotIndex = -1, this._startEntry = {
                    animation: {
                        name: ""
                    },
                    trackIndex: 0
                }, this._endEntry = {
                    animation: {
                        name: ""
                    },
                    trackIndex: 0
                }
            },
            setMaterial: function(t, e) {
                this._super(t, e), this._materialCache = {}
            },
            _updateUseTint: function() {
                var t = this.getMaterial(0),
                    e = this.useTint || this.isAnimationCached();
                t && t.define("USE_TINT", e);
                var i = this._materialCache;
                for (var n in i) {
                    var r = i[n];
                    r && r.define("USE_TINT", e)
                }
            },
            _updateBatch: function() {
                var t = this.getMaterial(0);
                t && t.define("CC_USE_MODEL", !this.enableBatch);
                var e = this._materialCache;
                for (var i in e) {
                    var n = e[i];
                    n && n.define("CC_USE_MODEL", !this.enableBatch)
                }
            },
            setSkeletonData: function(t) {
                if (null != t.width && null != t.height && this.node.setContentSize(t.width, t.height), this._cacheMode === u.SHARED_CACHE ? this._skeletonCache = l.sharedCache : this._cacheMode === u.PRIVATE_CACHE && (this._skeletonCache = new l), this.isAnimationCached()) {
                    (this.debugBones || this.debugSlots) && cc.warn("Debug bones or slots is invalid in cached mode");
                    var e = this._skeletonCache.getSkeletonCache(this.skeletonData._uuid, t);
                    this._skeleton = e.skeleton, this._clipper = e.clipper, this._rootBone = this._skeleton.getRootBone()
                } else this._skeleton = new s.Skeleton(t), this._clipper = new s.SkeletonClipping, this._rootBone = this._skeleton.getRootBone();
                this._activateMaterial()
            },
            setSlotsRange: function(t, e) {
                this.isAnimationCached() ? cc.warn("Slots visible range can not be modified in cached mode.") : (this._startSlotIndex = t, this._endSlotIndex = e)
            },
            setAnimationStateData: function(t) {
                if (this.isAnimationCached()) cc.warn("'setAnimationStateData' interface can not be invoked in cached mode.");
                else {
                    var e = new s.AnimationState(t);
                    this._listener && (this._state && this._state.removeListener(this._listener), e.addListener(this._listener)), this._state = e
                }
            },
            __preload: function() {
                for (var t = this.node.children, e = 0, i = t.length; e < i; e++) {
                    var n = t[e];
                    n && "DEBUG_DRAW_NODE" === n._name && n.destroy()
                }
                this._resetAssembler(), this._updateSkeletonData(), this._updateDebugDraw(), this._updateUseTint(), this._updateBatch()
            },
            setAnimationCacheMode: function(t) {
                this._preCacheMode !== t && (this._cacheMode = t, this._updateSkeletonData(), this._updateUseTint())
            },
            isAnimationCached: function() {
                return this._cacheMode !== u.REALTIME
            },
            update: function(t) {
                if (!this.paused)
                    if (t *= this.timeScale * sp.timeScale, this.isAnimationCached()) {
                        if (this._isAniComplete) {
                            if (0 === this._animationQueue.length && !this._headAniInfo) {
                                var e = this._frameCache;
                                if (e && e.isInvalid()) {
                                    e.updateToFrame();
                                    var i = e.frames;
                                    this._curFrame = i[i.length - 1]
                                }
                                return
                            }
                            if (this._headAniInfo || (this._headAniInfo = this._animationQueue.shift()), this._accTime += t, this._accTime > this._headAniInfo.delay) {
                                var n = this._headAniInfo;
                                this._headAniInfo = null, this.setAnimation(0, n.animationName, n.loop)
                            }
                            return
                        }
                        this._updateCache(t)
                    } else this._updateRealtime(t)
            },
            _emitCacheCompleteEvent: function() {
                this._listener && (this._endEntry.animation.name = this._animationName, this._listener.complete && this._listener.complete(this._endEntry), this._listener.end && this._listener.end(this._endEntry))
            },
            _updateCache: function(t) {
                var e = this._frameCache;
                if (e.isInited()) {
                    var i = e.frames,
                        n = l.FrameTime;
                    0 == this._accTime && 0 == this._playCount && (this._startEntry.animation.name = this._animationName, this._listener && this._listener.start && this._listener.start(this._startEntry)), this._accTime += t;
                    var r = Math.floor(this._accTime / n);
                    if (e.isCompleted || e.updateToFrame(r), e.isCompleted && r >= i.length) {
                        if (this._playCount++, this._playTimes > 0 && this._playCount >= this._playTimes) return this._curFrame = i[i.length - 1], this._accTime = 0, this._playCount = 0, this._isAniComplete = !0, void this._emitCacheCompleteEvent();
                        this._accTime = 0, r = 0, this._emitCacheCompleteEvent()
                    }
                    this._curFrame = i[r]
                }
            },
            _updateRealtime: function(t) {
                var e = this._skeleton,
                    i = this._state;
                e && (e.update(t), i && (i.update(t), i.apply(e)))
            },
            _activateMaterial: function() {
                this.skeletonData ? this.skeletonData.ensureTexturesLoaded((function(t) {
                    if (t) {
                        var e = this.sharedMaterials[0];
                        (e = e ? o.getInstantiatedMaterial(e, this) : o.getInstantiatedBuiltinMaterial("2d-spine", this)).define("CC_USE_MODEL", !0), this._prepareToRender(e)
                    } else this.disableRender()
                }), this) : this.disableRender()
            },
            _prepareToRender: function(t) {
                this.setMaterial(0, t), this.node && this.node._renderComponent == this && this.markForRender(!0)
            },
            onEnable: function() {
                this._super(), this._activateMaterial()
            },
            onRestore: function() {
                this._boundingBox = cc.rect()
            },
            setVertexEffectDelegate: function(t) {
                this._effectDelegate = t
            },
            updateWorldTransform: function() {
                this.isAnimationCached() && this._skeleton && this._skeleton.updateWorldTransform()
            },
            setToSetupPose: function() {
                this._skeleton && this._skeleton.setToSetupPose()
            },
            setBonesToSetupPose: function() {
                this._skeleton && this._skeleton.setBonesToSetupPose()
            },
            setSlotsToSetupPose: function() {
                this._skeleton && this._skeleton.setSlotsToSetupPose()
            },
            updateAnimationCache: function(t) {
                if (this.isAnimationCached()) {
                    var e = this.skeletonData._uuid;
                    this._skeletonCache && this._skeletonCache.updateAnimationCache(e, t)
                }
            },
            invalidAnimationCache: function() {
                this.isAnimationCached() && this._skeletonCache && this._skeletonCache.invalidAnimationCache(this.skeletonData._uuid)
            },
            findBone: function(t) {
                return this._skeleton ? this._skeleton.findBone(t) : null
            },
            findSlot: function(t) {
                return this._skeleton ? this._skeleton.findSlot(t) : null
            },
            setSkin: function(t) {
                this._skeleton && (this._skeleton.setSkinByName(t), this._skeleton.setSlotsToSetupPose()), this.invalidAnimationCache()
            },
            getAttachment: function(t, e) {
                return this._skeleton ? this._skeleton.getAttachmentByName(t, e) : null
            },
            setAttachment: function(t, e) {
                this._skeleton && this._skeleton.setAttachment(t, e), this.invalidAnimationCache()
            },
            getTextureAtlas: function(t) {
                return t.region
            },
            setMix: function(t, e, i) {
                this._state && this._state.data.setMix(t, e, i)
            },
            setAnimation: function(t, e, i) {
                if (this._playTimes = i ? 0 : 1, this._animationName = e, this.isAnimationCached()) {
                    if (0 !== t && cc.warn("Track index can not greater than 0 in cached mode."), !this._skeletonCache) return null;
                    var n = this._skeletonCache.getAnimationCache(this.skeletonData._uuid, e);
                    n || (n = this._skeletonCache.initAnimationCache(this.skeletonData._uuid, e)), n && (this._isAniComplete = !1, this._accTime = 0, this._playCount = 0, this._frameCache = n, this._frameCache.updateToFrame(0), this._curFrame = this._frameCache.frames[0])
                } else if (this._skeleton) {
                    var r = this._skeleton.data.findAnimation(e);
                    if (!r) return cc.logID(7509, e), null;
                    var s = this._state.setAnimationWith(t, r, i);
                    return this._state.apply(this._skeleton), s
                }
                return null
            },
            addAnimation: function(t, e, i, n) {
                if (n = n || 0, this.isAnimationCached()) 0 !== t && cc.warn("Track index can not greater than 0 in cached mode."), this._animationQueue.push({
                    animationName: e,
                    loop: i,
                    delay: n
                });
                else if (this._skeleton) {
                    var r = this._skeleton.data.findAnimation(e);
                    return r ? this._state.addAnimationWith(t, r, i, n) : (cc.logID(7510, e), null)
                }
                return null
            },
            findAnimation: function(t) {
                return this._skeleton ? this._skeleton.data.findAnimation(t) : null
            },
            getCurrent: function(t) {
                if (this.isAnimationCached()) cc.warn("'getCurrent' interface can not be invoked in cached mode.");
                else if (this._state) return this._state.getCurrent(t);
                return null
            },
            clearTracks: function() {
                this.isAnimationCached() ? cc.warn("'clearTracks' interface can not be invoked in cached mode.") : this._state && this._state.clearTracks()
            },
            clearTrack: function(t) {
                this.isAnimationCached() ? cc.warn("'clearTrack' interface can not be invoked in cached mode.") : this._state && this._state.clearTrack(t)
            },
            setStartListener: function(t) {
                this._ensureListener(), this._listener.start = t
            },
            setInterruptListener: function(t) {
                this._ensureListener(), this._listener.interrupt = t
            },
            setEndListener: function(t) {
                this._ensureListener(), this._listener.end = t
            },
            setDisposeListener: function(t) {
                this._ensureListener(), this._listener.dispose = t
            },
            setCompleteListener: function(t) {
                this._ensureListener(), this._listener.complete = t
            },
            setEventListener: function(t) {
                this._ensureListener(), this._listener.event = t
            },
            setTrackStartListener: function(t, e) {
                n.getListeners(t).start = e
            },
            setTrackInterruptListener: function(t, e) {
                n.getListeners(t).interrupt = e
            },
            setTrackEndListener: function(t, e) {
                n.getListeners(t).end = e
            },
            setTrackDisposeListener: function(t, e) {
                n.getListeners(t).dispose = e
            },
            setTrackCompleteListener: function(t, e) {
                n.getListeners(t).complete = function(t) {
                    var i = Math.floor(t.trackTime / t.animationEnd);
                    e(t, i)
                }
            },
            setTrackEventListener: function(t, e) {
                n.getListeners(t).event = e
            },
            getState: function() {
                return this._state
            },
            _updateAnimEnum: !1,
            _updateSkinEnum: !1,
            _ensureListener: function() {
                this._listener || (this._listener = new n, this._state && this._state.addListener(this._listener))
            },
            _updateSkeletonData: function() {
                if (this.skeletonData) {
                    var t = this.skeletonData.getRuntimeData();
                    if (t) {
                        try {
                            this.setSkeletonData(t), this.isAnimationCached() || this.setAnimationStateData(new s.AnimationStateData(this._skeleton.data)), this.defaultSkin && this.setSkin(this.defaultSkin)
                        } catch (t) {
                            cc.warn(t)
                        }
                        this._preCacheMode = this._cacheMode, this.animation = this.defaultAnimation
                    }
                }
            },
            _refreshInspector: function() {
                this._updateAnimEnum(), this._updateSkinEnum(), Editor.Utils.refreshSelectedInspector("node", this.node.uuid)
            },
            _updateDebugDraw: function() {
                if (this.debugBones || this.debugSlots) {
                    if (!this._debugRenderer) {
                        var t = new cc.PrivateNode;
                        t.name = "DEBUG_DRAW_NODE";
                        var e = t.addComponent(a);
                        e.lineWidth = 1, e.strokeColor = cc.color(255, 0, 0, 255), this._debugRenderer = e
                    }
                    this._debugRenderer.node.parent = this.node, this.isAnimationCached() && cc.warn("Debug bones or slots is invalid in cached mode")
                } else this._debugRenderer && (this._debugRenderer.node.parent = null)
            }
        }), e.exports = sp.Skeleton
    }), {
        "../../cocos2d/core/assets/material/CCMaterial": 75,
        "../../cocos2d/core/components/CCRenderComponent": 106,
        "../../cocos2d/core/graphics/graphics": 140,
        "./lib/spine": 414,
        "./skeleton-cache": 415,
        "./track-entry-listeners": 419
    }],
    413: [(function(t, e, i) {
        "use strict";
        var n = "undefined" == typeof window ? global : window,
            r = !0;
        r && (n.sp = {}, sp._timeScale = 1, Object.defineProperty(sp, "timeScale", {
            get: function() {
                return this._timeScale
            },
            set: function(t) {
                this._timeScale = t
            },
            configurable: !0
        }), sp.ATTACHMENT_TYPE = {
            REGION: 0,
            BOUNDING_BOX: 1,
            MESH: 2,
            SKINNED_MESH: 3
        }, sp.AnimationEventType = cc.Enum({
            START: 0,
            INTERRUPT: 1,
            END: 2,
            DISPOSE: 3,
            COMPLETE: 4,
            EVENT: 5
        }), sp.spine = t("./lib/spine"), t("./skeleton-texture"), t("./skeleton-data"), t("./vertex-effect-delegate"), t("./Skeleton"), t("./spine-assembler"))
    }), {
        "./Skeleton": 412,
        "./lib/spine": 414,
        "./skeleton-data": 416,
        "./skeleton-texture": 417,
        "./spine-assembler": 418,
        "./vertex-effect-delegate": 420
    }],
    414: [(function(t, e, i) {
        "use strict";
        var n, r = (function() {
            var t = function(e, i) {
                return (t = Object.setPrototypeOf || {
                        __proto__: []
                    }
                    instanceof Array && function(t, e) {
                        t.__proto__ = e
                    } || function(t, e) {
                        for (var i in e) e.hasOwnProperty(i) && (t[i] = e[i])
                    })(e, i)
            };
            return function(e, i) {
                function n() {
                    this.constructor = e
                }
                t(e, i), e.prototype = null === i ? Object.create(i) : (n.prototype = i.prototype, new n)
            }
        })();
        (function(t) {
            var e, i, n, s = (function() {
                function t(t, e, i) {
                    if (null == t) throw new Error("name cannot be null.");
                    if (null == e) throw new Error("timelines cannot be null.");
                    this.name = t, this.timelines = e, this.duration = i
                }
                return t.prototype.apply = function(t, e, i, n, r, s, o, a) {
                    if (null == t) throw new Error("skeleton cannot be null.");
                    n && 0 != this.duration && (i %= this.duration, e > 0 && (e %= this.duration));
                    for (var l = this.timelines, h = 0, c = l.length; h < c; h++) l[h].apply(t, e, i, r, s, o, a)
                }, t.binarySearch = function(t, e, i) {
                    void 0 === i && (i = 1);
                    var n = 0,
                        r = t.length / i - 2;
                    if (0 == r) return i;
                    for (var s = r >>> 1;;) {
                        if (t[(s + 1) * i] <= e ? n = s + 1 : r = s, n == r) return (n + 1) * i;
                        s = n + r >>> 1
                    }
                }, t.linearSearch = function(t, e, i) {
                    for (var n = 0, r = t.length - i; n <= r; n += i)
                        if (t[n] > e) return n;
                    return -1
                }, t
            })();
            t.Animation = s, (function(t) {
                t[t.setup = 0] = "setup", t[t.current = 1] = "current", t[t.currentLayered = 2] = "currentLayered"
            })(e = t.MixPose || (t.MixPose = {})), (function(t) {
                t[t.in = 0] = "in", t[t.out = 1] = "out"
            })(i = t.MixDirection || (t.MixDirection = {})), (function(t) {
                t[t.rotate = 0] = "rotate", t[t.translate = 1] = "translate", t[t.scale = 2] = "scale", t[t.shear = 3] = "shear", t[t.attachment = 4] = "attachment", t[t.color = 5] = "color", t[t.deform = 6] = "deform", t[t.event = 7] = "event", t[t.drawOrder = 8] = "drawOrder", t[t.ikConstraint = 9] = "ikConstraint", t[t.transformConstraint = 10] = "transformConstraint", t[t.pathConstraintPosition = 11] = "pathConstraintPosition", t[t.pathConstraintSpacing = 12] = "pathConstraintSpacing", t[t.pathConstraintMix = 13] = "pathConstraintMix", t[t.twoColor = 14] = "twoColor"
            })(n = t.TimelineType || (t.TimelineType = {}));
            var o = (function() {
                function e(i) {
                    if (i <= 0) throw new Error("frameCount must be > 0: " + i);
                    this.curves = t.Utils.newFloatArray((i - 1) * e.BEZIER_SIZE)
                }
                return e.prototype.getFrameCount = function() {
                    return this.curves.length / e.BEZIER_SIZE + 1
                }, e.prototype.setLinear = function(t) {
                    this.curves[t * e.BEZIER_SIZE] = e.LINEAR
                }, e.prototype.setStepped = function(t) {
                    this.curves[t * e.BEZIER_SIZE] = e.STEPPED
                }, e.prototype.getCurveType = function(t) {
                    var i = t * e.BEZIER_SIZE;
                    if (i == this.curves.length) return e.LINEAR;
                    var n = this.curves[i];
                    return n == e.LINEAR ? e.LINEAR : n == e.STEPPED ? e.STEPPED : e.BEZIER
                }, e.prototype.setCurve = function(t, i, n, r, s) {
                    var o = .03 * (2 * -i + r),
                        a = .03 * (2 * -n + s),
                        l = .006 * (3 * (i - r) + 1),
                        h = .006 * (3 * (n - s) + 1),
                        c = 2 * o + l,
                        u = 2 * a + h,
                        _ = .3 * i + o + .16666667 * l,
                        f = .3 * n + a + .16666667 * h,
                        d = t * e.BEZIER_SIZE,
                        p = this.curves;
                    p[d++] = e.BEZIER;
                    for (var m = _, y = f, v = d + e.BEZIER_SIZE - 1; d < v; d += 2) p[d] = m, p[d + 1] = y, _ += c, f += u, c += l, u += h, m += _, y += f
                }, e.prototype.getCurvePercent = function(i, n) {
                    n = t.MathUtils.clamp(n, 0, 1);
                    var r = this.curves,
                        s = i * e.BEZIER_SIZE,
                        o = r[s];
                    if (o == e.LINEAR) return n;
                    if (o == e.STEPPED) return 0;
                    for (var a = 0, l = ++s, h = s + e.BEZIER_SIZE - 1; s < h; s += 2)
                        if ((a = r[s]) >= n) {
                            var c = void 0,
                                u = void 0;
                            return s == l ? (c = 0, u = 0) : (c = r[s - 2], u = r[s - 1]), u + (r[s + 1] - u) * (n - c) / (a - c)
                        }
                    var _ = r[s - 1];
                    return _ + (1 - _) * (n - a) / (1 - a)
                }, e.LINEAR = 0, e.STEPPED = 1, e.BEZIER = 2, e.BEZIER_SIZE = 19, e
            })();
            t.CurveTimeline = o;
            var a = (function(i) {
                function o(e) {
                    var n = i.call(this, e) || this;
                    return n.frames = t.Utils.newFloatArray(e << 1), n
                }
                return r(o, i), o.prototype.getPropertyId = function() {
                    return (n.rotate << 24) + this.boneIndex
                }, o.prototype.setFrame = function(t, e, i) {
                    t <<= 1, this.frames[t] = e, this.frames[t + o.ROTATION] = i
                }, o.prototype.apply = function(t, i, n, r, a, l, h) {
                    var c = this.frames,
                        u = t.bones[this.boneIndex];
                    if (n < c[0]) switch (l) {
                        case e.setup:
                            return void(u.rotation = u.data.rotation);
                        case e.current:
                            var _ = u.data.rotation - u.rotation;
                            _ -= 360 * (16384 - (16384.499999999996 - _ / 360 | 0)), u.rotation += _ * a
                    } else if (n >= c[c.length - o.ENTRIES])
                        if (l == e.setup) u.rotation = u.data.rotation + c[c.length + o.PREV_ROTATION] * a;
                        else {
                            var f = u.data.rotation + c[c.length + o.PREV_ROTATION] - u.rotation;
                            f -= 360 * (16384 - (16384.499999999996 - f / 360 | 0)), u.rotation += f * a
                        }
                    else {
                        var d = s.binarySearch(c, n, o.ENTRIES),
                            p = c[d + o.PREV_ROTATION],
                            m = c[d],
                            y = this.getCurvePercent((d >> 1) - 1, 1 - (n - m) / (c[d + o.PREV_TIME] - m)),
                            v = c[d + o.ROTATION] - p;
                        v = p + (v -= 360 * (16384 - (16384.499999999996 - v / 360 | 0))) * y, l == e.setup ? (v -= 360 * (16384 - (16384.499999999996 - v / 360 | 0)), u.rotation = u.data.rotation + v * a) : (v = u.data.rotation + v - u.rotation, v -= 360 * (16384 - (16384.499999999996 - v / 360 | 0)), u.rotation += v * a)
                    }
                }, o.ENTRIES = 2, o.PREV_TIME = -2, o.PREV_ROTATION = -1, o.ROTATION = 1, o
            })(o);
            t.RotateTimeline = a;
            var l = (function(i) {
                function o(e) {
                    var n = i.call(this, e) || this;
                    return n.frames = t.Utils.newFloatArray(e * o.ENTRIES), n
                }
                return r(o, i), o.prototype.getPropertyId = function() {
                    return (n.translate << 24) + this.boneIndex
                }, o.prototype.setFrame = function(t, e, i, n) {
                    t *= o.ENTRIES, this.frames[t] = e, this.frames[t + o.X] = i, this.frames[t + o.Y] = n
                }, o.prototype.apply = function(t, i, n, r, a, l, h) {
                    var c = this.frames,
                        u = t.bones[this.boneIndex];
                    if (n < c[0]) switch (l) {
                        case e.setup:
                            return u.x = u.data.x, void(u.y = u.data.y);
                        case e.current:
                            u.x += (u.data.x - u.x) * a, u.y += (u.data.y - u.y) * a
                    } else {
                        var _ = 0,
                            f = 0;
                        if (n >= c[c.length - o.ENTRIES]) _ = c[c.length + o.PREV_X], f = c[c.length + o.PREV_Y];
                        else {
                            var d = s.binarySearch(c, n, o.ENTRIES);
                            _ = c[d + o.PREV_X], f = c[d + o.PREV_Y];
                            var p = c[d],
                                m = this.getCurvePercent(d / o.ENTRIES - 1, 1 - (n - p) / (c[d + o.PREV_TIME] - p));
                            _ += (c[d + o.X] - _) * m, f += (c[d + o.Y] - f) * m
                        }
                        l == e.setup ? (u.x = u.data.x + _ * a, u.y = u.data.y + f * a) : (u.x += (u.data.x + _ - u.x) * a, u.y += (u.data.y + f - u.y) * a)
                    }
                }, o.ENTRIES = 3, o.PREV_TIME = -3, o.PREV_X = -2, o.PREV_Y = -1, o.X = 1, o.Y = 2, o
            })(o);
            t.TranslateTimeline = l;
            var h = (function(o) {
                function a(t) {
                    return o.call(this, t) || this
                }
                return r(a, o), a.prototype.getPropertyId = function() {
                    return (n.scale << 24) + this.boneIndex
                }, a.prototype.apply = function(n, r, o, l, h, c, u) {
                    var _ = this.frames,
                        f = n.bones[this.boneIndex];
                    if (o < _[0]) switch (c) {
                        case e.setup:
                            return f.scaleX = f.data.scaleX, void(f.scaleY = f.data.scaleY);
                        case e.current:
                            f.scaleX += (f.data.scaleX - f.scaleX) * h, f.scaleY += (f.data.scaleY - f.scaleY) * h
                    } else {
                        var d = 0,
                            p = 0;
                        if (o >= _[_.length - a.ENTRIES]) d = _[_.length + a.PREV_X] * f.data.scaleX, p = _[_.length + a.PREV_Y] * f.data.scaleY;
                        else {
                            var m = s.binarySearch(_, o, a.ENTRIES);
                            d = _[m + a.PREV_X], p = _[m + a.PREV_Y];
                            var y = _[m],
                                v = this.getCurvePercent(m / a.ENTRIES - 1, 1 - (o - y) / (_[m + a.PREV_TIME] - y));
                            d = (d + (_[m + a.X] - d) * v) * f.data.scaleX, p = (p + (_[m + a.Y] - p) * v) * f.data.scaleY
                        }
                        if (1 == h) f.scaleX = d, f.scaleY = p;
                        else {
                            var g = 0,
                                x = 0;
                            c == e.setup ? (g = f.data.scaleX, x = f.data.scaleY) : (g = f.scaleX, x = f.scaleY), u == i.out ? (d = Math.abs(d) * t.MathUtils.signum(g), p = Math.abs(p) * t.MathUtils.signum(x)) : (g = Math.abs(g) * t.MathUtils.signum(d), x = Math.abs(x) * t.MathUtils.signum(p)), f.scaleX = g + (d - g) * h, f.scaleY = x + (p - x) * h
                        }
                    }
                }, a
            })(l);
            t.ScaleTimeline = h;
            var c = (function(t) {
                function i(e) {
                    return t.call(this, e) || this
                }
                return r(i, t), i.prototype.getPropertyId = function() {
                    return (n.shear << 24) + this.boneIndex
                }, i.prototype.apply = function(t, n, r, o, a, l, h) {
                    var c = this.frames,
                        u = t.bones[this.boneIndex];
                    if (r < c[0]) switch (l) {
                        case e.setup:
                            return u.shearX = u.data.shearX, void(u.shearY = u.data.shearY);
                        case e.current:
                            u.shearX += (u.data.shearX - u.shearX) * a, u.shearY += (u.data.shearY - u.shearY) * a
                    } else {
                        var _ = 0,
                            f = 0;
                        if (r >= c[c.length - i.ENTRIES]) _ = c[c.length + i.PREV_X], f = c[c.length + i.PREV_Y];
                        else {
                            var d = s.binarySearch(c, r, i.ENTRIES);
                            _ = c[d + i.PREV_X], f = c[d + i.PREV_Y];
                            var p = c[d],
                                m = this.getCurvePercent(d / i.ENTRIES - 1, 1 - (r - p) / (c[d + i.PREV_TIME] - p));
                            _ += (c[d + i.X] - _) * m, f += (c[d + i.Y] - f) * m
                        }
                        l == e.setup ? (u.shearX = u.data.shearX + _ * a, u.shearY = u.data.shearY + f * a) : (u.shearX += (u.data.shearX + _ - u.shearX) * a, u.shearY += (u.data.shearY + f - u.shearY) * a)
                    }
                }, i
            })(l);
            t.ShearTimeline = c;
            var u = (function(i) {
                function o(e) {
                    var n = i.call(this, e) || this;
                    return n.frames = t.Utils.newFloatArray(e * o.ENTRIES), n
                }
                return r(o, i), o.prototype.getPropertyId = function() {
                    return (n.color << 24) + this.slotIndex
                }, o.prototype.setFrame = function(t, e, i, n, r, s) {
                    t *= o.ENTRIES, this.frames[t] = e, this.frames[t + o.R] = i, this.frames[t + o.G] = n, this.frames[t + o.B] = r, this.frames[t + o.A] = s
                }, o.prototype.apply = function(t, i, n, r, a, l, h) {
                    var c = t.slots[this.slotIndex],
                        u = this.frames;
                    if (n < u[0]) switch (l) {
                        case e.setup:
                            return void c.color.setFromColor(c.data.color);
                        case e.current:
                            var _ = c.color,
                                f = c.data.color;
                            _.add((f.r - _.r) * a, (f.g - _.g) * a, (f.b - _.b) * a, (f.a - _.a) * a)
                    } else {
                        var d = 0,
                            p = 0,
                            m = 0,
                            y = 0;
                        if (n >= u[u.length - o.ENTRIES]) {
                            var v = u.length;
                            d = u[v + o.PREV_R], p = u[v + o.PREV_G], m = u[v + o.PREV_B], y = u[v + o.PREV_A]
                        } else {
                            var g = s.binarySearch(u, n, o.ENTRIES);
                            d = u[g + o.PREV_R], p = u[g + o.PREV_G], m = u[g + o.PREV_B], y = u[g + o.PREV_A];
                            var x = u[g],
                                b = this.getCurvePercent(g / o.ENTRIES - 1, 1 - (n - x) / (u[g + o.PREV_TIME] - x));
                            d += (u[g + o.R] - d) * b, p += (u[g + o.G] - p) * b, m += (u[g + o.B] - m) * b, y += (u[g + o.A] - y) * b
                        }
                        if (1 == a) c.color.set(d, p, m, y);
                        else {
                            _ = c.color;
                            l == e.setup && _.setFromColor(c.data.color), _.add((d - _.r) * a, (p - _.g) * a, (m - _.b) * a, (y - _.a) * a)
                        }
                    }
                }, o.ENTRIES = 5, o.PREV_TIME = -5, o.PREV_R = -4, o.PREV_G = -3, o.PREV_B = -2, o.PREV_A = -1, o.R = 1, o.G = 2, o.B = 3, o.A = 4, o
            })(o);
            t.ColorTimeline = u;
            var _ = (function(i) {
                function o(e) {
                    var n = i.call(this, e) || this;
                    return n.frames = t.Utils.newFloatArray(e * o.ENTRIES), n
                }
                return r(o, i), o.prototype.getPropertyId = function() {
                    return (n.twoColor << 24) + this.slotIndex
                }, o.prototype.setFrame = function(t, e, i, n, r, s, a, l, h) {
                    t *= o.ENTRIES, this.frames[t] = e, this.frames[t + o.R] = i, this.frames[t + o.G] = n, this.frames[t + o.B] = r, this.frames[t + o.A] = s, this.frames[t + o.R2] = a, this.frames[t + o.G2] = l, this.frames[t + o.B2] = h
                }, o.prototype.apply = function(t, i, n, r, a, l, h) {
                    var c = t.slots[this.slotIndex],
                        u = this.frames;
                    if (n < u[0]) switch (l) {
                        case e.setup:
                            return c.color.setFromColor(c.data.color), void c.darkColor.setFromColor(c.data.darkColor);
                        case e.current:
                            var _ = c.color,
                                f = c.darkColor,
                                d = c.data.color,
                                p = c.data.darkColor;
                            _.add((d.r - _.r) * a, (d.g - _.g) * a, (d.b - _.b) * a, (d.a - _.a) * a), f.add((p.r - f.r) * a, (p.g - f.g) * a, (p.b - f.b) * a, 0)
                    } else {
                        var m = 0,
                            y = 0,
                            v = 0,
                            g = 0,
                            x = 0,
                            b = 0,
                            A = 0;
                        if (n >= u[u.length - o.ENTRIES]) {
                            var C = u.length;
                            m = u[C + o.PREV_R], y = u[C + o.PREV_G], v = u[C + o.PREV_B], g = u[C + o.PREV_A], x = u[C + o.PREV_R2], b = u[C + o.PREV_G2], A = u[C + o.PREV_B2]
                        } else {
                            var T = s.binarySearch(u, n, o.ENTRIES);
                            m = u[T + o.PREV_R], y = u[T + o.PREV_G], v = u[T + o.PREV_B], g = u[T + o.PREV_A], x = u[T + o.PREV_R2], b = u[T + o.PREV_G2], A = u[T + o.PREV_B2];
                            var S = u[T],
                                w = this.getCurvePercent(T / o.ENTRIES - 1, 1 - (n - S) / (u[T + o.PREV_TIME] - S));
                            m += (u[T + o.R] - m) * w, y += (u[T + o.G] - y) * w, v += (u[T + o.B] - v) * w, g += (u[T + o.A] - g) * w, x += (u[T + o.R2] - x) * w, b += (u[T + o.G2] - b) * w, A += (u[T + o.B2] - A) * w
                        }
                        if (1 == a) c.color.set(m, y, v, g), c.darkColor.set(x, b, A, 1);
                        else {
                            _ = c.color, f = c.darkColor;
                            l == e.setup && (_.setFromColor(c.data.color), f.setFromColor(c.data.darkColor)), _.add((m - _.r) * a, (y - _.g) * a, (v - _.b) * a, (g - _.a) * a), f.add((x - f.r) * a, (b - f.g) * a, (A - f.b) * a, 0)
                        }
                    }
                }, o.ENTRIES = 8, o.PREV_TIME = -8, o.PREV_R = -7, o.PREV_G = -6, o.PREV_B = -5, o.PREV_A = -4, o.PREV_R2 = -3, o.PREV_G2 = -2, o.PREV_B2 = -1, o.R = 1, o.G = 2, o.B = 3, o.A = 4, o.R2 = 5, o.G2 = 6, o.B2 = 7, o
            })(o);
            t.TwoColorTimeline = _;
            var f = (function() {
                function r(e) {
                    this.frames = t.Utils.newFloatArray(e), this.attachmentNames = new Array(e)
                }
                return r.prototype.getPropertyId = function() {
                    return (n.attachment << 24) + this.slotIndex
                }, r.prototype.getFrameCount = function() {
                    return this.frames.length
                }, r.prototype.setFrame = function(t, e, i) {
                    this.frames[t] = e, this.attachmentNames[t] = i
                }, r.prototype.apply = function(t, n, r, o, a, l, h) {
                    var c = t.slots[this.slotIndex];
                    if (h != i.out || l != e.setup) {
                        var u = this.frames;
                        if (r < u[0]) {
                            if (l == e.setup) {
                                var _ = c.data.attachmentName;
                                c.setAttachment(null == _ ? null : t.getAttachment(this.slotIndex, _))
                            }
                        } else {
                            var f = 0;
                            f = r >= u[u.length - 1] ? u.length - 1 : s.binarySearch(u, r, 1) - 1;
                            var d = this.attachmentNames[f];
                            t.slots[this.slotIndex].setAttachment(null == d ? null : t.getAttachment(this.slotIndex, d))
                        }
                    } else {
                        var p = c.data.attachmentName;
                        c.setAttachment(null == p ? null : t.getAttachment(this.slotIndex, p))
                    }
                }, r
            })();
            t.AttachmentTimeline = f;
            var d = null,
                p = (function(i) {
                    function o(e) {
                        var n = i.call(this, e) || this;
                        return n.frames = t.Utils.newFloatArray(e), n.frameVertices = new Array(e), null == d && (d = t.Utils.newFloatArray(64)), n
                    }
                    return r(o, i), o.prototype.getPropertyId = function() {
                        return (n.deform << 27) + +this.attachment.id + this.slotIndex
                    }, o.prototype.setFrame = function(t, e, i) {
                        this.frames[t] = e, this.frameVertices[t] = i
                    }, o.prototype.apply = function(i, n, r, o, a, l, h) {
                        var c = i.slots[this.slotIndex],
                            u = c.getAttachment();
                        if (u instanceof t.VertexAttachment && u.applyDeform(this.attachment)) {
                            var _ = c.attachmentVertices;
                            0 == _.length && (a = 1);
                            var f = this.frameVertices,
                                d = f[0].length,
                                p = this.frames;
                            if (r < p[0]) {
                                var m = u;
                                switch (l) {
                                    case e.setup:
                                        return void(_.length = 0);
                                    case e.current:
                                        if (1 == a) {
                                            _.length = 0;
                                            break
                                        }
                                        var y = t.Utils.setArraySize(_, d);
                                        if (null == m.bones)
                                            for (var v = m.vertices, g = 0; g < d; g++) y[g] += (v[g] - y[g]) * a;
                                        else {
                                            a = 1 - a;
                                            for (g = 0; g < d; g++) y[g] *= a
                                        }
                                }
                            } else {
                                var x = t.Utils.setArraySize(_, d);
                                if (r >= p[p.length - 1]) {
                                    var b = f[p.length - 1];
                                    if (1 == a) t.Utils.arrayCopy(b, 0, x, 0, d);
                                    else if (l == e.setup) {
                                        if (null == (m = u).bones)
                                            for (var A = m.vertices, C = 0; C < d; C++) {
                                                var T = A[C];
                                                x[C] = T + (b[C] - T) * a
                                            } else
                                                for (var S = 0; S < d; S++) x[S] = b[S] * a
                                    } else
                                        for (var w = 0; w < d; w++) x[w] += (b[w] - x[w]) * a
                                } else {
                                    var E = s.binarySearch(p, r),
                                        M = f[E - 1],
                                        D = f[E],
                                        B = p[E],
                                        I = this.getCurvePercent(E - 1, 1 - (r - B) / (p[E - 1] - B));
                                    if (1 == a)
                                        for (var P = 0; P < d; P++) {
                                            var R = M[P];
                                            x[P] = R + (D[P] - R) * I
                                        } else if (l == e.setup) {
                                            if (null == (m = u).bones)
                                                for (var O = m.vertices, L = 0; L < d; L++) {
                                                    R = M[L], T = O[L];
                                                    x[L] = T + (R + (D[L] - R) * I - T) * a
                                                } else
                                                    for (var F = 0; F < d; F++) {
                                                        R = M[F];
                                                        x[F] = (R + (D[F] - R) * I) * a
                                                    }
                                        } else
                                            for (var N = 0; N < d; N++) {
                                                R = M[N];
                                                x[N] += (R + (D[N] - R) * I - x[N]) * a
                                            }
                                }
                            }
                        }
                    }, o
                })(o);
            t.DeformTimeline = p;
            var m = (function() {
                function e(e) {
                    this.frames = t.Utils.newFloatArray(e), this.events = new Array(e)
                }
                return e.prototype.getPropertyId = function() {
                    return n.event << 24
                }, e.prototype.getFrameCount = function() {
                    return this.frames.length
                }, e.prototype.setFrame = function(t, e) {
                    this.frames[t] = e.time, this.events[t] = e
                }, e.prototype.apply = function(t, e, i, n, r, o, a) {
                    if (null != n) {
                        var l = this.frames,
                            h = this.frames.length;
                        if (e > i) this.apply(t, e, Number.MAX_VALUE, n, r, o, a), e = -1;
                        else if (e >= l[h - 1]) return;
                        if (!(i < l[0])) {
                            var c = 0;
                            if (e < l[0]) c = 0;
                            else
                                for (var u = l[c = s.binarySearch(l, e)]; c > 0 && l[c - 1] == u;) c--;
                            for (; c < h && i >= l[c]; c++) n.push(this.events[c])
                        }
                    }
                }, e
            })();
            t.EventTimeline = m;
            var y = (function() {
                function r(e) {
                    this.frames = t.Utils.newFloatArray(e), this.drawOrders = new Array(e)
                }
                return r.prototype.getPropertyId = function() {
                    return n.drawOrder << 24
                }, r.prototype.getFrameCount = function() {
                    return this.frames.length
                }, r.prototype.setFrame = function(t, e, i) {
                    this.frames[t] = e, this.drawOrders[t] = i
                }, r.prototype.apply = function(n, r, o, a, l, h, c) {
                    var u = n.drawOrder,
                        _ = n.slots;
                    if (c != i.out || h != e.setup) {
                        var f = this.frames;
                        if (o < f[0]) h == e.setup && t.Utils.arrayCopy(n.slots, 0, n.drawOrder, 0, n.slots.length);
                        else {
                            var d = 0;
                            d = o >= f[f.length - 1] ? f.length - 1 : s.binarySearch(f, o) - 1;
                            var p = this.drawOrders[d];
                            if (null == p) t.Utils.arrayCopy(_, 0, u, 0, _.length);
                            else
                                for (var m = 0, y = p.length; m < y; m++) u[m] = _[p[m]]
                        }
                    } else t.Utils.arrayCopy(n.slots, 0, n.drawOrder, 0, n.slots.length)
                }, r
            })();
            t.DrawOrderTimeline = y;
            var v = (function(o) {
                function a(e) {
                    var i = o.call(this, e) || this;
                    return i.frames = t.Utils.newFloatArray(e * a.ENTRIES), i
                }
                return r(a, o), a.prototype.getPropertyId = function() {
                    return (n.ikConstraint << 24) + this.ikConstraintIndex
                }, a.prototype.setFrame = function(t, e, i, n) {
                    t *= a.ENTRIES, this.frames[t] = e, this.frames[t + a.MIX] = i, this.frames[t + a.BEND_DIRECTION] = n
                }, a.prototype.apply = function(t, n, r, o, l, h, c) {
                    var u = this.frames,
                        _ = t.ikConstraints[this.ikConstraintIndex];
                    if (r < u[0]) switch (h) {
                            case e.setup:
                                return _.mix = _.data.mix, void(_.bendDirection = _.data.bendDirection);
                            case e.current:
                                _.mix += (_.data.mix - _.mix) * l, _.bendDirection = _.data.bendDirection
                        } else if (r >= u[u.length - a.ENTRIES]) h == e.setup ? (_.mix = _.data.mix + (u[u.length + a.PREV_MIX] - _.data.mix) * l, _.bendDirection = c == i.out ? _.data.bendDirection : u[u.length + a.PREV_BEND_DIRECTION]) : (_.mix += (u[u.length + a.PREV_MIX] - _.mix) * l, c == i.in && (_.bendDirection = u[u.length + a.PREV_BEND_DIRECTION]));
                        else {
                            var f = s.binarySearch(u, r, a.ENTRIES),
                                d = u[f + a.PREV_MIX],
                                p = u[f],
                                m = this.getCurvePercent(f / a.ENTRIES - 1, 1 - (r - p) / (u[f + a.PREV_TIME] - p));
                            h == e.setup ? (_.mix = _.data.mix + (d + (u[f + a.MIX] - d) * m - _.data.mix) * l, _.bendDirection = c == i.out ? _.data.bendDirection : u[f + a.PREV_BEND_DIRECTION]) : (_.mix += (d + (u[f + a.MIX] - d) * m - _.mix) * l, c == i.in && (_.bendDirection = u[f + a.PREV_BEND_DIRECTION]))
                        }
                }, a.ENTRIES = 3, a.PREV_TIME = -3, a.PREV_MIX = -2, a.PREV_BEND_DIRECTION = -1, a.MIX = 1, a.BEND_DIRECTION = 2, a
            })(o);
            t.IkConstraintTimeline = v;
            var g = (function(i) {
                function o(e) {
                    var n = i.call(this, e) || this;
                    return n.frames = t.Utils.newFloatArray(e * o.ENTRIES), n
                }
                return r(o, i), o.prototype.getPropertyId = function() {
                    return (n.transformConstraint << 24) + this.transformConstraintIndex
                }, o.prototype.setFrame = function(t, e, i, n, r, s) {
                    t *= o.ENTRIES, this.frames[t] = e, this.frames[t + o.ROTATE] = i, this.frames[t + o.TRANSLATE] = n, this.frames[t + o.SCALE] = r, this.frames[t + o.SHEAR] = s
                }, o.prototype.apply = function(t, i, n, r, a, l, h) {
                    var c = this.frames,
                        u = t.transformConstraints[this.transformConstraintIndex];
                    if (n < c[0]) {
                        var _ = u.data;
                        switch (l) {
                            case e.setup:
                                return u.rotateMix = _.rotateMix, u.translateMix = _.translateMix, u.scaleMix = _.scaleMix, void(u.shearMix = _.shearMix);
                            case e.current:
                                u.rotateMix += (_.rotateMix - u.rotateMix) * a, u.translateMix += (_.translateMix - u.translateMix) * a, u.scaleMix += (_.scaleMix - u.scaleMix) * a, u.shearMix += (_.shearMix - u.shearMix) * a
                        }
                    } else {
                        var f = 0,
                            d = 0,
                            p = 0,
                            m = 0;
                        if (n >= c[c.length - o.ENTRIES]) {
                            var y = c.length;
                            f = c[y + o.PREV_ROTATE], d = c[y + o.PREV_TRANSLATE], p = c[y + o.PREV_SCALE], m = c[y + o.PREV_SHEAR]
                        } else {
                            var v = s.binarySearch(c, n, o.ENTRIES);
                            f = c[v + o.PREV_ROTATE], d = c[v + o.PREV_TRANSLATE], p = c[v + o.PREV_SCALE], m = c[v + o.PREV_SHEAR];
                            var g = c[v],
                                x = this.getCurvePercent(v / o.ENTRIES - 1, 1 - (n - g) / (c[v + o.PREV_TIME] - g));
                            f += (c[v + o.ROTATE] - f) * x, d += (c[v + o.TRANSLATE] - d) * x, p += (c[v + o.SCALE] - p) * x, m += (c[v + o.SHEAR] - m) * x
                        }
                        if (l == e.setup) {
                            _ = u.data;
                            u.rotateMix = _.rotateMix + (f - _.rotateMix) * a, u.translateMix = _.translateMix + (d - _.translateMix) * a, u.scaleMix = _.scaleMix + (p - _.scaleMix) * a, u.shearMix = _.shearMix + (m - _.shearMix) * a
                        } else u.rotateMix += (f - u.rotateMix) * a, u.translateMix += (d - u.translateMix) * a, u.scaleMix += (p - u.scaleMix) * a, u.shearMix += (m - u.shearMix) * a
                    }
                }, o.ENTRIES = 5, o.PREV_TIME = -5, o.PREV_ROTATE = -4, o.PREV_TRANSLATE = -3, o.PREV_SCALE = -2, o.PREV_SHEAR = -1, o.ROTATE = 1, o.TRANSLATE = 2, o.SCALE = 3, o.SHEAR = 4, o
            })(o);
            t.TransformConstraintTimeline = g;
            var x = (function(i) {
                function o(e) {
                    var n = i.call(this, e) || this;
                    return n.frames = t.Utils.newFloatArray(e * o.ENTRIES), n
                }
                return r(o, i), o.prototype.getPropertyId = function() {
                    return (n.pathConstraintPosition << 24) + this.pathConstraintIndex
                }, o.prototype.setFrame = function(t, e, i) {
                    t *= o.ENTRIES, this.frames[t] = e, this.frames[t + o.VALUE] = i
                }, o.prototype.apply = function(t, i, n, r, a, l, h) {
                    var c = this.frames,
                        u = t.pathConstraints[this.pathConstraintIndex];
                    if (n < c[0]) switch (l) {
                        case e.setup:
                            return void(u.position = u.data.position);
                        case e.current:
                            u.position += (u.data.position - u.position) * a
                    } else {
                        var _ = 0;
                        if (n >= c[c.length - o.ENTRIES]) _ = c[c.length + o.PREV_VALUE];
                        else {
                            var f = s.binarySearch(c, n, o.ENTRIES);
                            _ = c[f + o.PREV_VALUE];
                            var d = c[f],
                                p = this.getCurvePercent(f / o.ENTRIES - 1, 1 - (n - d) / (c[f + o.PREV_TIME] - d));
                            _ += (c[f + o.VALUE] - _) * p
                        }
                        l == e.setup ? u.position = u.data.position + (_ - u.data.position) * a : u.position += (_ - u.position) * a
                    }
                }, o.ENTRIES = 2, o.PREV_TIME = -2, o.PREV_VALUE = -1, o.VALUE = 1, o
            })(o);
            t.PathConstraintPositionTimeline = x;
            var b = (function(t) {
                function i(e) {
                    return t.call(this, e) || this
                }
                return r(i, t), i.prototype.getPropertyId = function() {
                    return (n.pathConstraintSpacing << 24) + this.pathConstraintIndex
                }, i.prototype.apply = function(t, n, r, o, a, l, h) {
                    var c = this.frames,
                        u = t.pathConstraints[this.pathConstraintIndex];
                    if (r < c[0]) switch (l) {
                        case e.setup:
                            return void(u.spacing = u.data.spacing);
                        case e.current:
                            u.spacing += (u.data.spacing - u.spacing) * a
                    } else {
                        var _ = 0;
                        if (r >= c[c.length - i.ENTRIES]) _ = c[c.length + i.PREV_VALUE];
                        else {
                            var f = s.binarySearch(c, r, i.ENTRIES);
                            _ = c[f + i.PREV_VALUE];
                            var d = c[f],
                                p = this.getCurvePercent(f / i.ENTRIES - 1, 1 - (r - d) / (c[f + i.PREV_TIME] - d));
                            _ += (c[f + i.VALUE] - _) * p
                        }
                        l == e.setup ? u.spacing = u.data.spacing + (_ - u.data.spacing) * a : u.spacing += (_ - u.spacing) * a
                    }
                }, i
            })(x);
            t.PathConstraintSpacingTimeline = b;
            var A = (function(i) {
                function o(e) {
                    var n = i.call(this, e) || this;
                    return n.frames = t.Utils.newFloatArray(e * o.ENTRIES), n
                }
                return r(o, i), o.prototype.getPropertyId = function() {
                    return (n.pathConstraintMix << 24) + this.pathConstraintIndex
                }, o.prototype.setFrame = function(t, e, i, n) {
                    t *= o.ENTRIES, this.frames[t] = e, this.frames[t + o.ROTATE] = i, this.frames[t + o.TRANSLATE] = n
                }, o.prototype.apply = function(t, i, n, r, a, l, h) {
                    var c = this.frames,
                        u = t.pathConstraints[this.pathConstraintIndex];
                    if (n < c[0]) switch (l) {
                        case e.setup:
                            return u.rotateMix = u.data.rotateMix, void(u.translateMix = u.data.translateMix);
                        case e.current:
                            u.rotateMix += (u.data.rotateMix - u.rotateMix) * a, u.translateMix += (u.data.translateMix - u.translateMix) * a
                    } else {
                        var _ = 0,
                            f = 0;
                        if (n >= c[c.length - o.ENTRIES]) _ = c[c.length + o.PREV_ROTATE], f = c[c.length + o.PREV_TRANSLATE];
                        else {
                            var d = s.binarySearch(c, n, o.ENTRIES);
                            _ = c[d + o.PREV_ROTATE], f = c[d + o.PREV_TRANSLATE];
                            var p = c[d],
                                m = this.getCurvePercent(d / o.ENTRIES - 1, 1 - (n - p) / (c[d + o.PREV_TIME] - p));
                            _ += (c[d + o.ROTATE] - _) * m, f += (c[d + o.TRANSLATE] - f) * m
                        }
                        l == e.setup ? (u.rotateMix = u.data.rotateMix + (_ - u.data.rotateMix) * a, u.translateMix = u.data.translateMix + (f - u.data.translateMix) * a) : (u.rotateMix += (_ - u.rotateMix) * a, u.translateMix += (f - u.translateMix) * a)
                    }
                }, o.ENTRIES = 3, o.PREV_TIME = -3, o.PREV_ROTATE = -2, o.PREV_TRANSLATE = -1, o.ROTATE = 1, o.TRANSLATE = 2, o
            })(o);
            t.PathConstraintMixTimeline = A
        })(n || (n = {})), (function(t) {
            var e = (function() {
                function e(e) {
                    this.tracks = new Array, this.events = new Array, this.listeners = new Array, this.queue = new r(this), this.propertyIDs = new t.IntSet, this.mixingTo = new Array, this.animationsChanged = !1, this.timeScale = 1, this.trackEntryPool = new t.Pool(function() {
                        return new i
                    }), this.data = e
                }
                return e.prototype.update = function(t) {
                    t *= this.timeScale;
                    for (var e = this.tracks, i = 0, n = e.length; i < n; i++) {
                        var r = e[i];
                        if (null != r) {
                            r.animationLast = r.nextAnimationLast, r.trackLast = r.nextTrackLast;
                            var s = t * r.timeScale;
                            if (r.delay > 0) {
                                if (r.delay -= s, r.delay > 0) continue;
                                s = -r.delay, r.delay = 0
                            }
                            var o = r.next;
                            if (null != o) {
                                var a = r.trackLast - o.delay;
                                if (a >= 0) {
                                    for (o.delay = 0, o.trackTime = a + t * o.timeScale, r.trackTime += s, this.setCurrent(i, o, !0); null != o.mixingFrom;) o.mixTime += s, o = o.mixingFrom;
                                    continue
                                }
                            } else if (r.trackLast >= r.trackEnd && null == r.mixingFrom) {
                                e[i] = null, this.queue.end(r), this.disposeNext(r);
                                continue
                            }
                            if (null != r.mixingFrom && this.updateMixingFrom(r, t)) {
                                var l = r.mixingFrom;
                                for (r.mixingFrom = null; null != l;) this.queue.end(l), l = l.mixingFrom
                            }
                            r.trackTime += s
                        }
                    }
                    this.queue.drain()
                }, e.prototype.updateMixingFrom = function(t, e) {
                    var i = t.mixingFrom;
                    if (null == i) return !0;
                    var n = this.updateMixingFrom(i, e);
                    return i.animationLast = i.nextAnimationLast, i.trackLast = i.nextTrackLast, t.mixTime > 0 && (t.mixTime >= t.mixDuration || 0 == t.timeScale) ? (0 != i.totalAlpha && 0 != t.mixDuration || (t.mixingFrom = i.mixingFrom, t.interruptAlpha = i.interruptAlpha, this.queue.end(i)), n) : (i.trackTime += e * i.timeScale, t.mixTime += e * t.timeScale, !1)
                }, e.prototype.apply = function(i) {
                    if (null == i) throw new Error("skeleton cannot be null.");
                    this.animationsChanged && this._animationsChanged();
                    for (var n = this.events, r = this.tracks, s = !1, o = 0, a = r.length; o < a; o++) {
                        var l = r[o];
                        if (!(null == l || l.delay > 0)) {
                            s = !0;
                            var h = 0 == o ? t.MixPose.current : t.MixPose.currentLayered,
                                c = l.alpha;
                            null != l.mixingFrom ? c *= this.applyMixingFrom(l, i, h) : l.trackTime >= l.trackEnd && null == l.next && (c = 0);
                            var u = l.animationLast,
                                _ = l.getAnimationTime(),
                                f = l.animation.timelines.length,
                                d = l.animation.timelines;
                            if (1 == c)
                                for (var p = 0; p < f; p++) d[p].apply(i, u, _, n, 1, t.MixPose.setup, t.MixDirection.in);
                            else {
                                var m = l.timelineData,
                                    y = 0 == l.timelinesRotation.length;
                                y && t.Utils.setArraySize(l.timelinesRotation, f << 1, null);
                                var v = l.timelinesRotation;
                                for (p = 0; p < f; p++) {
                                    var g = d[p],
                                        x = m[p] >= e.FIRST ? t.MixPose.setup : h;
                                    g instanceof t.RotateTimeline ? this.applyRotateTimeline(g, i, _, c, x, v, p << 1, y) : (t.Utils.webkit602BugfixHelper(c, x), g.apply(i, u, _, n, c, x, t.MixDirection.in))
                                }
                            }
                            this.queueEvents(l, _), n.length = 0, l.nextAnimationLast = _, l.nextTrackLast = l.trackTime
                        }
                    }
                    return this.queue.drain(), s
                }, e.prototype.applyMixingFrom = function(i, n, r) {
                    var s = i.mixingFrom;
                    null != s.mixingFrom && this.applyMixingFrom(s, n, r);
                    var o = 0;
                    0 == i.mixDuration ? (o = 1, r = t.MixPose.setup) : (o = i.mixTime / i.mixDuration) > 1 && (o = 1);
                    var a = o < s.eventThreshold ? this.events : null,
                        l = o < s.attachmentThreshold,
                        h = o < s.drawOrderThreshold,
                        c = s.animationLast,
                        u = s.getAnimationTime(),
                        _ = s.animation.timelines.length,
                        f = s.animation.timelines,
                        d = s.timelineData,
                        p = s.timelineDipMix,
                        m = 0 == s.timelinesRotation.length;
                    m && t.Utils.setArraySize(s.timelinesRotation, _ << 1, null);
                    var y, v = s.timelinesRotation,
                        g = s.alpha * i.interruptAlpha,
                        x = g * (1 - o),
                        b = 0;
                    s.totalAlpha = 0;
                    for (var A = 0; A < _; A++) {
                        var C = f[A];
                        switch (d[A]) {
                            case e.SUBSEQUENT:
                                if (!l && C instanceof t.AttachmentTimeline) continue;
                                if (!h && C instanceof t.DrawOrderTimeline) continue;
                                y = r, b = x;
                                break;
                            case e.FIRST:
                                y = t.MixPose.setup, b = x;
                                break;
                            case e.DIP:
                                y = t.MixPose.setup, b = g;
                                break;
                            default:
                                y = t.MixPose.setup, b = g;
                                var T = p[A];
                                b *= Math.max(0, 1 - T.mixTime / T.mixDuration)
                        }
                        s.totalAlpha += b, C instanceof t.RotateTimeline ? this.applyRotateTimeline(C, n, u, b, y, v, A << 1, m) : (t.Utils.webkit602BugfixHelper(b, y), C.apply(n, c, u, a, b, y, t.MixDirection.out))
                    }
                    return i.mixDuration > 0 && this.queueEvents(s, u), this.events.length = 0, s.nextAnimationLast = u, s.nextTrackLast = s.trackTime, o
                }, e.prototype.applyRotateTimeline = function(e, i, n, r, s, o, a, l) {
                    if (l && (o[a] = 0), 1 != r) {
                        var h = e,
                            c = h.frames,
                            u = i.bones[h.boneIndex];
                        if (n < c[0]) s == t.MixPose.setup && (u.rotation = u.data.rotation);
                        else {
                            var _ = 0;
                            if (n >= c[c.length - t.RotateTimeline.ENTRIES]) _ = u.data.rotation + c[c.length + t.RotateTimeline.PREV_ROTATION];
                            else {
                                var f = t.Animation.binarySearch(c, n, t.RotateTimeline.ENTRIES),
                                    d = c[f + t.RotateTimeline.PREV_ROTATION],
                                    p = c[f],
                                    m = h.getCurvePercent((f >> 1) - 1, 1 - (n - p) / (c[f + t.RotateTimeline.PREV_TIME] - p));
                                _ = c[f + t.RotateTimeline.ROTATION] - d, _ = d + (_ -= 360 * (16384 - (16384.499999999996 - _ / 360 | 0))) * m + u.data.rotation, _ -= 360 * (16384 - (16384.499999999996 - _ / 360 | 0))
                            }
                            var y = s == t.MixPose.setup ? u.data.rotation : u.rotation,
                                v = 0,
                                g = _ - y;
                            if (0 == g) v = o[a];
                            else {
                                g -= 360 * (16384 - (16384.499999999996 - g / 360 | 0));
                                var x = 0,
                                    b = 0;
                                l ? (x = 0, b = g) : (x = o[a], b = o[a + 1]);
                                var A = g > 0,
                                    C = x >= 0;
                                t.MathUtils.signum(b) != t.MathUtils.signum(g) && Math.abs(b) <= 90 && (Math.abs(x) > 180 && (x += 360 * t.MathUtils.signum(x)), C = A), v = g + x - x % 360, C != A && (v += 360 * t.MathUtils.signum(x)), o[a] = v
                            }
                            o[a + 1] = g, y += v * r, u.rotation = y - 360 * (16384 - (16384.499999999996 - y / 360 | 0))
                        }
                    } else e.apply(i, 0, n, null, 1, s, t.MixDirection.in)
                }, e.prototype.queueEvents = function(t, e) {
                    for (var i = t.animationStart, n = t.animationEnd, r = n - i, s = t.trackLast % r, o = this.events, a = 0, l = o.length; a < l; a++) {
                        var h = o[a];
                        if (h.time < s) break;
                        h.time > n || this.queue.event(t, h)
                    }
                    for ((t.loop ? 0 == r || s > t.trackTime % r : e >= n && t.animationLast < n) && this.queue.complete(t); a < l; a++) {
                        o[a].time < i || this.queue.event(t, o[a])
                    }
                }, e.prototype.clearTracks = function() {
                    var t = this.queue.drainDisabled;
                    this.queue.drainDisabled = !0;
                    for (var e = 0, i = this.tracks.length; e < i; e++) this.clearTrack(e);
                    this.tracks.length = 0, this.queue.drainDisabled = t, this.queue.drain()
                }, e.prototype.clearTrack = function(t) {
                    if (!(t >= this.tracks.length)) {
                        var e = this.tracks[t];
                        if (null != e) {
                            this.queue.end(e), this.disposeNext(e);
                            for (var i = e;;) {
                                var n = i.mixingFrom;
                                if (null == n) break;
                                this.queue.end(n), i.mixingFrom = null, i = n
                            }
                            this.tracks[e.trackIndex] = null, this.queue.drain()
                        }
                    }
                }, e.prototype.setCurrent = function(t, e, i) {
                    var n = this.expandToIndex(t);
                    this.tracks[t] = e, null != n && (i && this.queue.interrupt(n), e.mixingFrom = n, e.mixTime = 0, null != n.mixingFrom && n.mixDuration > 0 && (e.interruptAlpha *= Math.min(1, n.mixTime / n.mixDuration)), n.timelinesRotation.length = 0), this.queue.start(e)
                }, e.prototype.setAnimation = function(t, e, i) {
                    var n = this.data.skeletonData.findAnimation(e);
                    if (null == n) throw new Error("Animation not found: " + e);
                    return this.setAnimationWith(t, n, i)
                }, e.prototype.setAnimationWith = function(t, e, i) {
                    if (null == e) throw new Error("animation cannot be null.");
                    var n = !0,
                        r = this.expandToIndex(t);
                    null != r && (-1 == r.nextTrackLast ? (this.tracks[t] = r.mixingFrom, this.queue.interrupt(r), this.queue.end(r), this.disposeNext(r), r = r.mixingFrom, n = !1) : this.disposeNext(r));
                    var s = this.trackEntry(t, e, i, r);
                    return this.setCurrent(t, s, n), this.queue.drain(), s
                }, e.prototype.addAnimation = function(t, e, i, n) {
                    var r = this.data.skeletonData.findAnimation(e);
                    if (null == r) throw new Error("Animation not found: " + e);
                    return this.addAnimationWith(t, r, i, n)
                }, e.prototype.addAnimationWith = function(t, e, i, n) {
                    if (null == e) throw new Error("animation cannot be null.");
                    var r = this.expandToIndex(t);
                    if (null != r)
                        for (; null != r.next;) r = r.next;
                    var s = this.trackEntry(t, e, i, r);
                    if (null == r) this.setCurrent(t, s, !0), this.queue.drain();
                    else if (r.next = s, n <= 0) {
                        var o = r.animationEnd - r.animationStart;
                        0 != o ? (r.loop ? n += o * (1 + (r.trackTime / o | 0)) : n += o, n -= this.data.getMix(r.animation, e)) : n = 0
                    }
                    return s.delay = n, s
                }, e.prototype.setEmptyAnimation = function(t, i) {
                    var n = this.setAnimationWith(t, e.emptyAnimation, !1);
                    return n.mixDuration = i, n.trackEnd = i, n
                }, e.prototype.addEmptyAnimation = function(t, i, n) {
                    n <= 0 && (n -= i);
                    var r = this.addAnimationWith(t, e.emptyAnimation, !1, n);
                    return r.mixDuration = i, r.trackEnd = i, r
                }, e.prototype.setEmptyAnimations = function(t) {
                    var e = this.queue.drainDisabled;
                    this.queue.drainDisabled = !0;
                    for (var i = 0, n = this.tracks.length; i < n; i++) {
                        var r = this.tracks[i];
                        null != r && this.setEmptyAnimation(r.trackIndex, t)
                    }
                    this.queue.drainDisabled = e, this.queue.drain()
                }, e.prototype.expandToIndex = function(e) {
                    return e < this.tracks.length ? this.tracks[e] : (t.Utils.ensureArrayCapacity(this.tracks, e - this.tracks.length + 1, null), this.tracks.length = e + 1, null)
                }, e.prototype.trackEntry = function(t, e, i, n) {
                    var r = this.trackEntryPool.obtain();
                    return r.trackIndex = t, r.animation = e, r.loop = i, r.eventThreshold = 0, r.attachmentThreshold = 0, r.drawOrderThreshold = 0, r.animationStart = 0, r.animationEnd = e.duration, r.animationLast = -1, r.nextAnimationLast = -1, r.delay = 0, r.trackTime = 0, r.trackLast = -1, r.nextTrackLast = -1, r.trackEnd = Number.MAX_VALUE, r.timeScale = 1, r.alpha = 1, r.interruptAlpha = 1, r.mixTime = 0, r.mixDuration = null == n ? 0 : this.data.getMix(n.animation, e), r
                }, e.prototype.disposeNext = function(t) {
                    for (var e = t.next; null != e;) this.queue.dispose(e), e = e.next;
                    t.next = null
                }, e.prototype._animationsChanged = function() {
                    this.animationsChanged = !1;
                    var t = this.propertyIDs;
                    t.clear();
                    for (var e = this.mixingTo, i = 0, n = this.tracks.length; i < n; i++) {
                        var r = this.tracks[i];
                        null != r && r.setTimelineData(null, e, t)
                    }
                }, e.prototype.getCurrent = function(t) {
                    return t >= this.tracks.length ? null : this.tracks[t]
                }, e.prototype.addListener = function(t) {
                    if (null == t) throw new Error("listener cannot be null.");
                    this.listeners.push(t)
                }, e.prototype.removeListener = function(t) {
                    var e = this.listeners.indexOf(t);
                    e >= 0 && this.listeners.splice(e, 1)
                }, e.prototype.clearListeners = function() {
                    this.listeners.length = 0
                }, e.prototype.clearListenerNotifications = function() {
                    this.queue.clear()
                }, e.emptyAnimation = new t.Animation("<empty>", [], 0), e.SUBSEQUENT = 0, e.FIRST = 1, e.DIP = 2, e.DIP_MIX = 3, e
            })();
            t.AnimationState = e;
            var i = (function() {
                function i() {
                    this.timelineData = new Array, this.timelineDipMix = new Array, this.timelinesRotation = new Array
                }
                return i.prototype.reset = function() {
                    this.next = null, this.mixingFrom = null, this.animation = null, this.listener = null, this.timelineData.length = 0, this.timelineDipMix.length = 0, this.timelinesRotation.length = 0
                }, i.prototype.setTimelineData = function(i, n, r) {
                    null != i && n.push(i);
                    var s = null != this.mixingFrom ? this.mixingFrom.setTimelineData(this, n, r) : this;
                    null != i && n.pop();
                    var o = n,
                        a = n.length - 1,
                        l = this.animation.timelines,
                        h = this.animation.timelines.length,
                        c = t.Utils.setArraySize(this.timelineData, h);
                    this.timelineDipMix.length = 0;
                    var u = t.Utils.setArraySize(this.timelineDipMix, h);
                    t: for (var _ = 0; _ < h; _++) {
                        var f = l[_].getPropertyId();
                        if (r.add(f))
                            if (null != i && i.hasTimeline(f)) {
                                for (var d = a; d >= 0; d--) {
                                    var p = o[d];
                                    if (!p.hasTimeline(f) && p.mixDuration > 0) {
                                        c[_] = e.DIP_MIX, u[_] = p;
                                        continue t
                                    }
                                }
                                c[_] = e.DIP
                            } else c[_] = e.FIRST;
                        else c[_] = e.SUBSEQUENT
                    }
                    return s
                }, i.prototype.hasTimeline = function(t) {
                    for (var e = this.animation.timelines, i = 0, n = e.length; i < n; i++)
                        if (e[i].getPropertyId() == t) return !0;
                    return !1
                }, i.prototype.getAnimationTime = function() {
                    if (this.loop) {
                        var t = this.animationEnd - this.animationStart;
                        return 0 == t ? this.animationStart : this.trackTime % t + this.animationStart
                    }
                    return Math.min(this.trackTime + this.animationStart, this.animationEnd)
                }, i.prototype.setAnimationLast = function(t) {
                    this.animationLast = t, this.nextAnimationLast = t
                }, i.prototype.isComplete = function() {
                    return this.trackTime >= this.animationEnd - this.animationStart
                }, i.prototype.resetRotationDirections = function() {
                    this.timelinesRotation.length = 0
                }, i
            })();
            t.TrackEntry = i;
            var n, r = (function() {
                function t(t) {
                    this.objects = [], this.drainDisabled = !1, this.animState = t
                }
                return t.prototype.start = function(t) {
                    this.objects.push(n.start), this.objects.push(t), this.animState.animationsChanged = !0
                }, t.prototype.interrupt = function(t) {
                    this.objects.push(n.interrupt), this.objects.push(t)
                }, t.prototype.end = function(t) {
                    this.objects.push(n.end), this.objects.push(t), this.animState.animationsChanged = !0
                }, t.prototype.dispose = function(t) {
                    this.objects.push(n.dispose), this.objects.push(t)
                }, t.prototype.complete = function(t) {
                    this.objects.push(n.complete), this.objects.push(t)
                }, t.prototype.event = function(t, e) {
                    this.objects.push(n.event), this.objects.push(t), this.objects.push(e)
                }, t.prototype.drain = function() {
                    if (!this.drainDisabled) {
                        this.drainDisabled = !0;
                        for (var t = this.objects, e = this.animState.listeners, i = 0; i < t.length; i += 2) {
                            var r = t[i],
                                s = t[i + 1];
                            switch (r) {
                                case n.start:
                                    null != s.listener && s.listener.start && s.listener.start(s);
                                    for (var o = 0; o < e.length; o++) e[o].start && e[o].start(s);
                                    break;
                                case n.interrupt:
                                    null != s.listener && s.listener.interrupt && s.listener.interrupt(s);
                                    for (o = 0; o < e.length; o++) e[o].interrupt && e[o].interrupt(s);
                                    break;
                                case n.end:
                                    null != s.listener && s.listener.end && s.listener.end(s);
                                    for (o = 0; o < e.length; o++) e[o].end && e[o].end(s);
                                case n.dispose:
                                    null != s.listener && s.listener.dispose && s.listener.dispose(s);
                                    for (o = 0; o < e.length; o++) e[o].dispose && e[o].dispose(s);
                                    this.animState.trackEntryPool.free(s);
                                    break;
                                case n.complete:
                                    null != s.listener && s.listener.complete && s.listener.complete(s);
                                    for (o = 0; o < e.length; o++) e[o].complete && e[o].complete(s);
                                    break;
                                case n.event:
                                    var a = t[2 + i++];
                                    null != s.listener && s.listener.event && s.listener.event(s, a);
                                    for (o = 0; o < e.length; o++) e[o].event && e[o].event(s, a)
                            }
                        }
                        this.clear(), this.drainDisabled = !1
                    }
                }, t.prototype.clear = function() {
                    this.objects.length = 0
                }, t
            })();
            t.EventQueue = r, (function(t) {
                t[t.start = 0] = "start", t[t.interrupt = 1] = "interrupt", t[t.end = 2] = "end", t[t.dispose = 3] = "dispose", t[t.complete = 4] = "complete", t[t.event = 5] = "event"
            })(n = t.EventType || (t.EventType = {}));
            var s = (function() {
                function t() {}
                return t.prototype.start = function(t) {}, t.prototype.interrupt = function(t) {}, t.prototype.end = function(t) {}, t.prototype.dispose = function(t) {}, t.prototype.complete = function(t) {}, t.prototype.event = function(t, e) {}, t
            })();
            t.AnimationStateAdapter2 = s
        })(n || (n = {})), (function(t) {
            var e = (function() {
                function t(t) {
                    if (this.animationToMixTime = {}, this.defaultMix = 0, null == t) throw new Error("skeletonData cannot be null.");
                    this.skeletonData = t
                }
                return t.prototype.setMix = function(t, e, i) {
                    var n = this.skeletonData.findAnimation(t);
                    if (null == n) throw new Error("Animation not found: " + t);
                    var r = this.skeletonData.findAnimation(e);
                    if (null == r) throw new Error("Animation not found: " + e);
                    this.setMixWith(n, r, i)
                }, t.prototype.setMixWith = function(t, e, i) {
                    if (null == t) throw new Error("from cannot be null.");
                    if (null == e) throw new Error("to cannot be null.");
                    var n = t.name + "." + e.name;
                    this.animationToMixTime[n] = i
                }, t.prototype.getMix = function(t, e) {
                    var i = t.name + "." + e.name,
                        n = this.animationToMixTime[i];
                    return void 0 === n ? this.defaultMix : n
                }, t
            })();
            t.AnimationStateData = e
        })(n || (n = {})), (function(t) {
            var e = (function() {
                function e(t, e) {
                    void 0 === e && (e = ""), this.assets = {}, this.errors = {}, this.toLoad = 0, this.loaded = 0, this.textureLoader = t, this.pathPrefix = e
                }
                return e.downloadText = function(t, e, i) {
                    var n = new XMLHttpRequest;
                    n.open("GET", t, !0), n.onload = function() {
                        200 == n.status ? e(n.responseText) : i(n.status, n.responseText)
                    }, n.onerror = function() {
                        i(n.status, n.responseText)
                    }, n.send()
                }, e.downloadBinary = function(t, e, i) {
                    var n = new XMLHttpRequest;
                    n.open("GET", t, !0), n.responseType = "arraybuffer", n.onload = function() {
                        200 == n.status ? e(new Uint8Array(n.response)) : i(n.status, n.responseText)
                    }, n.onerror = function() {
                        i(n.status, n.responseText)
                    }, n.send()
                }, e.prototype.loadText = function(t, i, n) {
                    var r = this;
                    void 0 === i && (i = null), void 0 === n && (n = null), t = this.pathPrefix + t, this.toLoad++, e.downloadText(t, (function(e) {
                        r.assets[t] = e, i && i(t, e), r.toLoad--, r.loaded++
                    }), (function(e, i) {
                        r.errors[t] = "Couldn't load text " + t + ": status " + status + ", " + i, n && n(t, "Couldn't load text " + t + ": status " + status + ", " + i), r.toLoad--, r.loaded++
                    }))
                }, e.prototype.loadTexture = function(t, e, i) {
                    var n = this;
                    void 0 === e && (e = null), void 0 === i && (i = null), t = this.pathPrefix + t, this.toLoad++;
                    var r = new Image;
                    r.crossOrigin = "anonymous", r.onload = function(i) {
                        var s = n.textureLoader(r);
                        n.assets[t] = s, n.toLoad--, n.loaded++, e && e(t, r)
                    }, r.onerror = function(e) {
                        n.errors[t] = "Couldn't load image " + t, n.toLoad--, n.loaded++, i && i(t, "Couldn't load image " + t)
                    }, r.src = t
                }, e.prototype.loadTextureData = function(t, e, i, n) {
                    var r = this;
                    void 0 === i && (i = null), void 0 === n && (n = null), t = this.pathPrefix + t, this.toLoad++;
                    var s = new Image;
                    s.onload = function(e) {
                        var n = r.textureLoader(s);
                        r.assets[t] = n, r.toLoad--, r.loaded++, i && i(t, s)
                    }, s.onerror = function(e) {
                        r.errors[t] = "Couldn't load image " + t, r.toLoad--, r.loaded++, n && n(t, "Couldn't load image " + t)
                    }, s.src = e
                }, e.prototype.loadTextureAtlas = function(i, n, r) {
                    var s = this;
                    void 0 === n && (n = null), void 0 === r && (r = null);
                    var o = i.lastIndexOf("/") >= 0 ? i.substring(0, i.lastIndexOf("/")) : "";
                    i = this.pathPrefix + i, this.toLoad++, e.downloadText(i, (function(e) {
                        var a = {
                                count: 0
                            },
                            l = new Array;
                        try {
                            new t.TextureAtlas(e, function(e) {
                                l.push(o + "/" + e);
                                var i = document.createElement("img");
                                return i.width = 16, i.height = 16, new t.FakeTexture(i)
                            })
                        } catch (t) {
                            var h = t;
                            return s.errors[i] = "Couldn't load texture atlas " + i + ": " + h.message, r && r(i, "Couldn't load texture atlas " + i + ": " + h.message), s.toLoad--, void s.loaded++
                        }
                        for (var c = function(h) {
                                var c = !1;
                                s.loadTexture(h, (function(h, u) {
                                    if (a.count++, a.count == l.length)
                                        if (c) s.errors[i] = "Couldn't load texture atlas page " + h + "} of atlas " + i, r && r(i, "Couldn't load texture atlas page " + h + " of atlas " + i), s.toLoad--, s.loaded++;
                                        else try {
                                            var _ = new t.TextureAtlas(e, function(t) {
                                                return s.get(o + "/" + t)
                                            });
                                            s.assets[i] = _, n && n(i, _), s.toLoad--, s.loaded++
                                        } catch (t) {
                                            var f = t;
                                            s.errors[i] = "Couldn't load texture atlas " + i + ": " + f.message, r && r(i, "Couldn't load texture atlas " + i + ": " + f.message), s.toLoad--, s.loaded++
                                        }
                                }), (function(t, e) {
                                    c = !0, a.count++, a.count == l.length && (s.errors[i] = "Couldn't load texture atlas page " + t + "} of atlas " + i, r && r(i, "Couldn't load texture atlas page " + t + " of atlas " + i), s.toLoad--, s.loaded++)
                                }))
                            }, u = 0, _ = l; u < _.length; u++) {
                            c(_[u])
                        }
                    }), (function(t, e) {
                        s.errors[i] = "Couldn't load texture atlas " + i + ": status " + status + ", " + e, r && r(i, "Couldn't load texture atlas " + i + ": status " + status + ", " + e), s.toLoad--, s.loaded++
                    }))
                }, e.prototype.get = function(t) {
                    return t = this.pathPrefix + t, this.assets[t]
                }, e.prototype.remove = function(t) {
                    t = this.pathPrefix + t;
                    var e = this.assets[t];
                    e.dispose && e.dispose(), this.assets[t] = null
                }, e.prototype.removeAll = function() {
                    for (var t in this.assets) {
                        var e = this.assets[t];
                        e.dispose && e.dispose()
                    }
                    this.assets = {}
                }, e.prototype.isLoadingComplete = function() {
                    return 0 == this.toLoad
                }, e.prototype.getToLoad = function() {
                    return this.toLoad
                }, e.prototype.getLoaded = function() {
                    return this.loaded
                }, e.prototype.dispose = function() {
                    this.removeAll()
                }, e.prototype.hasErrors = function() {
                    return Object.keys(this.errors).length > 0
                }, e.prototype.getErrors = function() {
                    return this.errors
                }, e
            })();
            t.AssetManager = e
        })(n || (n = {})), (function(t) {
            var e = (function() {
                function e(t) {
                    this.atlas = t
                }
                return e.prototype.newRegionAttachment = function(e, i, n) {
                    var r = this.atlas.findRegion(n);
                    if (null == r) throw new Error("Region not found in atlas: " + n + " (region attachment: " + i + ")");
                    r.renderObject = r;
                    var s = new t.RegionAttachment(i);
                    return s.setRegion(r), s
                }, e.prototype.newMeshAttachment = function(e, i, n) {
                    var r = this.atlas.findRegion(n);
                    if (null == r) throw new Error("Region not found in atlas: " + n + " (mesh attachment: " + i + ")");
                    r.renderObject = r;
                    var s = new t.MeshAttachment(i);
                    return s.region = r, s
                }, e.prototype.newBoundingBoxAttachment = function(e, i) {
                    return new t.BoundingBoxAttachment(i)
                }, e.prototype.newPathAttachment = function(e, i) {
                    return new t.PathAttachment(i)
                }, e.prototype.newPointAttachment = function(e, i) {
                    return new t.PointAttachment(i)
                }, e.prototype.newClippingAttachment = function(e, i) {
                    return new t.ClippingAttachment(i)
                }, e
            })();
            t.AtlasAttachmentLoader = e
        })(n || (n = {})), (function(t) {
            (function(t) {
                t[t.Normal = 0] = "Normal", t[t.Additive = 1] = "Additive", t[t.Multiply = 2] = "Multiply", t[t.Screen = 3] = "Screen"
            })(t.BlendMode || (t.BlendMode = {}))
        })(n || (n = {})), (function(t) {
            var e = (function() {
                function e(t, e, i) {
                    if (this.children = new Array, this.x = 0, this.y = 0, this.rotation = 0, this.scaleX = 0, this.scaleY = 0, this.shearX = 0, this.shearY = 0, this.ax = 0, this.ay = 0, this.arotation = 0, this.ascaleX = 0, this.ascaleY = 0, this.ashearX = 0, this.ashearY = 0, this.appliedValid = !1, this.a = 0, this.b = 0, this.worldX = 0, this.c = 0, this.d = 0, this.worldY = 0, this.sorted = !1, null == t) throw new Error("data cannot be null.");
                    if (null == e) throw new Error("skeleton cannot be null.");
                    this.data = t, this.skeleton = e, this.parent = i, this.setToSetupPose()
                }
                return e.prototype.update = function() {
                    this.updateWorldTransformWith(this.x, this.y, this.rotation, this.scaleX, this.scaleY, this.shearX, this.shearY)
                }, e.prototype.updateWorldTransform = function() {
                    this.updateWorldTransformWith(this.x, this.y, this.rotation, this.scaleX, this.scaleY, this.shearX, this.shearY)
                }, e.prototype.updateWorldTransformWith = function(e, i, n, r, s, o, a) {
                    this.ax = e, this.ay = i, this.arotation = n, this.ascaleX = r, this.ascaleY = s, this.ashearX = o, this.ashearY = a, this.appliedValid = !0;
                    var l = this.parent;
                    if (null == l) {
                        var h = n + 90 + a,
                            c = t.MathUtils.cosDeg(n + o) * r,
                            u = t.MathUtils.cosDeg(h) * s,
                            _ = t.MathUtils.sinDeg(n + o) * r,
                            f = t.MathUtils.sinDeg(h) * s,
                            d = this.skeleton;
                        return d.flipX && (e = -e, c = -c, u = -u), d.flipY && (i = -i, _ = -_, f = -f), this.a = c, this.b = u, this.c = _, this.d = f, this.worldX = e + d.x, void(this.worldY = i + d.y)
                    }
                    var p = l.a,
                        m = l.b,
                        y = l.c,
                        v = l.d;
                    switch (this.worldX = p * e + m * i + l.worldX, this.worldY = y * e + v * i + l.worldY, this.data.transformMode) {
                        case t.TransformMode.Normal:
                            h = n + 90 + a, c = t.MathUtils.cosDeg(n + o) * r, u = t.MathUtils.cosDeg(h) * s, _ = t.MathUtils.sinDeg(n + o) * r, f = t.MathUtils.sinDeg(h) * s;
                            return this.a = p * c + m * _, this.b = p * u + m * f, this.c = y * c + v * _, void(this.d = y * u + v * f);
                        case t.TransformMode.OnlyTranslation:
                            h = n + 90 + a;
                            this.a = t.MathUtils.cosDeg(n + o) * r, this.b = t.MathUtils.cosDeg(h) * s, this.c = t.MathUtils.sinDeg(n + o) * r, this.d = t.MathUtils.sinDeg(h) * s;
                            break;
                        case t.TransformMode.NoRotationOrReflection:
                            var g = 0;
                            (A = p * p + y * y) > 1e-4 ? (m = y * (A = Math.abs(p * v - m * y) / A), v = p * A, g = Math.atan2(y, p) * t.MathUtils.radDeg) : (p = 0, y = 0, g = 90 - Math.atan2(v, m) * t.MathUtils.radDeg);
                            var x = n + o - g,
                                b = n + a - g + 90;
                            c = t.MathUtils.cosDeg(x) * r, u = t.MathUtils.cosDeg(b) * s, _ = t.MathUtils.sinDeg(x) * r, f = t.MathUtils.sinDeg(b) * s;
                            this.a = p * c - m * _, this.b = p * u - m * f, this.c = y * c + v * _, this.d = y * u + v * f;
                            break;
                        case t.TransformMode.NoScale:
                        case t.TransformMode.NoScaleOrReflection:
                            var A, C = t.MathUtils.cosDeg(n),
                                T = t.MathUtils.sinDeg(n),
                                S = p * C + m * T,
                                w = y * C + v * T;
                            (A = Math.sqrt(S * S + w * w)) > 1e-5 && (A = 1 / A), S *= A, w *= A, A = Math.sqrt(S * S + w * w);
                            var E = Math.PI / 2 + Math.atan2(w, S),
                                M = Math.cos(E) * A,
                                D = Math.sin(E) * A;
                            c = t.MathUtils.cosDeg(o) * r, u = t.MathUtils.cosDeg(90 + a) * s, _ = t.MathUtils.sinDeg(o) * r, f = t.MathUtils.sinDeg(90 + a) * s;
                            return (this.data.transformMode != t.TransformMode.NoScaleOrReflection ? p * v - m * y < 0 : this.skeleton.flipX != this.skeleton.flipY) && (M = -M, D = -D), this.a = S * c + M * _, this.b = S * u + M * f, this.c = w * c + D * _, void(this.d = w * u + D * f)
                    }
                    this.skeleton.flipX && (this.a = -this.a, this.b = -this.b), this.skeleton.flipY && (this.c = -this.c, this.d = -this.d)
                }, e.prototype.setToSetupPose = function() {
                    var t = this.data;
                    this.x = t.x, this.y = t.y, this.rotation = t.rotation, this.scaleX = t.scaleX, this.scaleY = t.scaleY, this.shearX = t.shearX, this.shearY = t.shearY
                }, e.prototype.getWorldRotationX = function() {
                    return Math.atan2(this.c, this.a) * t.MathUtils.radDeg
                }, e.prototype.getWorldRotationY = function() {
                    return Math.atan2(this.d, this.b) * t.MathUtils.radDeg
                }, e.prototype.getWorldScaleX = function() {
                    return Math.sqrt(this.a * this.a + this.c * this.c)
                }, e.prototype.getWorldScaleY = function() {
                    return Math.sqrt(this.b * this.b + this.d * this.d)
                }, e.prototype.updateAppliedTransform = function() {
                    this.appliedValid = !0;
                    var e = this.parent;
                    if (null == e) return this.ax = this.worldX, this.ay = this.worldY, this.arotation = Math.atan2(this.c, this.a) * t.MathUtils.radDeg, this.ascaleX = Math.sqrt(this.a * this.a + this.c * this.c), this.ascaleY = Math.sqrt(this.b * this.b + this.d * this.d), this.ashearX = 0, void(this.ashearY = Math.atan2(this.a * this.b + this.c * this.d, this.a * this.d - this.b * this.c) * t.MathUtils.radDeg);
                    var i = e.a,
                        n = e.b,
                        r = e.c,
                        s = e.d,
                        o = 1 / (i * s - n * r),
                        a = this.worldX - e.worldX,
                        l = this.worldY - e.worldY;
                    this.ax = a * s * o - l * n * o, this.ay = l * i * o - a * r * o;
                    var h = o * s,
                        c = o * i,
                        u = o * n,
                        _ = o * r,
                        f = h * this.a - u * this.c,
                        d = h * this.b - u * this.d,
                        p = c * this.c - _ * this.a,
                        m = c * this.d - _ * this.b;
                    if (this.ashearX = 0, this.ascaleX = Math.sqrt(f * f + p * p), this.ascaleX > 1e-4) {
                        var y = f * m - d * p;
                        this.ascaleY = y / this.ascaleX, this.ashearY = Math.atan2(f * d + p * m, y) * t.MathUtils.radDeg, this.arotation = Math.atan2(p, f) * t.MathUtils.radDeg
                    } else this.ascaleX = 0, this.ascaleY = Math.sqrt(d * d + m * m), this.ashearY = 0, this.arotation = 90 - Math.atan2(m, d) * t.MathUtils.radDeg
                }, e.prototype.worldToLocal = function(t) {
                    var e = this.a,
                        i = this.b,
                        n = this.c,
                        r = this.d,
                        s = 1 / (e * r - i * n),
                        o = t.x - this.worldX,
                        a = t.y - this.worldY;
                    return t.x = o * r * s - a * i * s, t.y = a * e * s - o * n * s, t
                }, e.prototype.localToWorld = function(t) {
                    var e = t.x,
                        i = t.y;
                    return t.x = e * this.a + i * this.b + this.worldX, t.y = e * this.c + i * this.d + this.worldY, t
                }, e.prototype.worldToLocalRotation = function(e) {
                    var i = t.MathUtils.sinDeg(e),
                        n = t.MathUtils.cosDeg(e);
                    return Math.atan2(this.a * i - this.c * n, this.d * n - this.b * i) * t.MathUtils.radDeg
                }, e.prototype.localToWorldRotation = function(e) {
                    var i = t.MathUtils.sinDeg(e),
                        n = t.MathUtils.cosDeg(e);
                    return Math.atan2(n * this.c + i * this.d, n * this.a + i * this.b) * t.MathUtils.radDeg
                }, e.prototype.rotateWorld = function(e) {
                    var i = this.a,
                        n = this.b,
                        r = this.c,
                        s = this.d,
                        o = t.MathUtils.cosDeg(e),
                        a = t.MathUtils.sinDeg(e);
                    this.a = o * i - a * r, this.b = o * n - a * s, this.c = a * i + o * r, this.d = a * n + o * s, this.appliedValid = !1
                }, e
            })();
            t.Bone = e
        })(n || (n = {})), (function(t) {
            var e, i = (function() {
                return function(t, i, n) {
                    if (this.x = 0, this.y = 0, this.rotation = 0, this.scaleX = 1, this.scaleY = 1, this.shearX = 0, this.shearY = 0, this.transformMode = e.Normal, t < 0) throw new Error("index must be >= 0.");
                    if (null == i) throw new Error("name cannot be null.");
                    this.index = t, this.name = i, this.parent = n
                }
            })();
            t.BoneData = i, (function(t) {
                t[t.Normal = 0] = "Normal", t[t.OnlyTranslation = 1] = "OnlyTranslation", t[t.NoRotationOrReflection = 2] = "NoRotationOrReflection", t[t.NoScale = 3] = "NoScale", t[t.NoScaleOrReflection = 4] = "NoScaleOrReflection"
            })(e = t.TransformMode || (t.TransformMode = {}))
        })(n || (n = {})), (function(t) {
            var e = (function() {
                return function(t, e) {
                    if (null == e) throw new Error("data cannot be null.");
                    this.time = t, this.data = e
                }
            })();
            t.Event = e
        })(n || (n = {})), (function(t) {
            var e = (function() {
                return function(t) {
                    this.name = t
                }
            })();
            t.EventData = e
        })(n || (n = {})), (function(t) {
            var e = (function() {
                function e(t, e) {
                    if (this.mix = 1, this.bendDirection = 0, null == t) throw new Error("data cannot be null.");
                    if (null == e) throw new Error("skeleton cannot be null.");
                    this.data = t, this.mix = t.mix, this.bendDirection = t.bendDirection, this.bones = new Array;
                    for (var i = 0; i < t.bones.length; i++) this.bones.push(e.findBone(t.bones[i].name));
                    this.target = e.findBone(t.target.name)
                }
                return e.prototype.getOrder = function() {
                    return this.data.order
                }, e.prototype.apply = function() {
                    this.update()
                }, e.prototype.update = function() {
                    var t = this.target,
                        e = this.bones;
                    switch (e.length) {
                        case 1:
                            this.apply1(e[0], t.worldX, t.worldY, this.mix);
                            break;
                        case 2:
                            this.apply2(e[0], e[1], t.worldX, t.worldY, this.bendDirection, this.mix)
                    }
                }, e.prototype.apply1 = function(e, i, n, r) {
                    e.appliedValid || e.updateAppliedTransform();
                    var s = e.parent,
                        o = 1 / (s.a * s.d - s.b * s.c),
                        a = i - s.worldX,
                        l = n - s.worldY,
                        h = (a * s.d - l * s.b) * o - e.ax,
                        c = (l * s.a - a * s.c) * o - e.ay,
                        u = Math.atan2(c, h) * t.MathUtils.radDeg - e.ashearX - e.arotation;
                    e.ascaleX < 0 && (u += 180), u > 180 ? u -= 360 : u < -180 && (u += 360), e.updateWorldTransformWith(e.ax, e.ay, e.arotation + u * r, e.ascaleX, e.ascaleY, e.ashearX, e.ashearY)
                }, e.prototype.apply2 = function(e, i, n, r, s, o) {
                    if (0 != o) {
                        e.appliedValid || e.updateAppliedTransform(), i.appliedValid || i.updateAppliedTransform();
                        var a = e.ax,
                            l = e.ay,
                            h = e.ascaleX,
                            c = e.ascaleY,
                            u = i.ascaleX,
                            _ = 0,
                            f = 0,
                            d = 0;
                        h < 0 ? (h = -h, _ = 180, d = -1) : (_ = 0, d = 1), c < 0 && (c = -c, d = -d), u < 0 ? (u = -u, f = 180) : f = 0;
                        var p = i.ax,
                            m = 0,
                            y = 0,
                            v = 0,
                            g = e.a,
                            x = e.b,
                            b = e.c,
                            A = e.d,
                            C = Math.abs(h - c) <= 1e-4;
                        C ? (y = g * p + x * (m = i.ay) + e.worldX, v = b * p + A * m + e.worldY) : (m = 0, y = g * p + e.worldX, v = b * p + e.worldY);
                        var T = e.parent;
                        g = T.a, x = T.b, b = T.c;
                        var S = 1 / (g * (A = T.d) - x * b),
                            w = n - T.worldX,
                            E = r - T.worldY,
                            M = (w * A - E * x) * S - a,
                            D = (E * g - w * b) * S - l,
                            B = ((w = y - T.worldX) * A - (E = v - T.worldY) * x) * S - a,
                            I = (E * g - w * b) * S - l,
                            P = Math.sqrt(B * B + I * I),
                            R = i.data.length * u,
                            O = 0,
                            L = 0;
                        t: if (C) {
                            var F = (M * M + D * D - P * P - (R *= h) * R) / (2 * P * R);
                            F < -1 ? F = -1 : F > 1 && (F = 1), L = Math.acos(F) * s, g = P + R * F, x = R * Math.sin(L), O = Math.atan2(D * g - M * x, M * g + D * x)
                        } else {
                            var N = (g = h * R) * g,
                                V = (x = c * R) * x,
                                k = M * M + D * D,
                                G = Math.atan2(D, M),
                                U = -2 * V * P,
                                z = V - N;
                            if ((A = U * U - 4 * z * (b = V * P * P + N * k - N * V)) >= 0) {
                                var j = Math.sqrt(A);
                                U < 0 && (j = -j);
                                var W = (j = -(U + j) / 2) / z,
                                    H = b / j,
                                    X = Math.abs(W) < Math.abs(H) ? W : H;
                                if (X * X <= k) {
                                    E = Math.sqrt(k - X * X) * s, O = G - Math.atan2(E, X), L = Math.atan2(E / c, (X - P) / h);
                                    break t
                                }
                            }
                            var Y = t.MathUtils.PI,
                                q = P - g,
                                J = q * q,
                                Z = 0,
                                K = 0,
                                Q = P + g,
                                $ = Q * Q,
                                tt = 0;
                            (b = -g * P / (N - V)) >= -1 && b <= 1 && (b = Math.acos(b), (A = (w = g * Math.cos(b) + P) * w + (E = x * Math.sin(b)) * E) < J && (Y = b, J = A, q = w, Z = E), A > $ && (K = b, $ = A, Q = w, tt = E)), k <= (J + $) / 2 ? (O = G - Math.atan2(Z * s, q), L = Y * s) : (O = G - Math.atan2(tt * s, Q), L = K * s)
                        }
                        var et = Math.atan2(m, p) * d,
                            it = e.arotation;
                        (O = (O - et) * t.MathUtils.radDeg + _ - it) > 180 ? O -= 360 : O < -180 && (O += 360), e.updateWorldTransformWith(a, l, it + O * o, e.ascaleX, e.ascaleY, 0, 0), it = i.arotation, (L = ((L + et) * t.MathUtils.radDeg - i.ashearX) * d + f - it) > 180 ? L -= 360 : L < -180 && (L += 360), i.updateWorldTransformWith(p, m, it + L * o, i.ascaleX, i.ascaleY, i.ashearX, i.ashearY)
                    } else i.updateWorldTransform()
                }, e
            })();
            t.IkConstraint = e
        })(n || (n = {})), (function(t) {
            var e = (function() {
                return function(t) {
                    this.order = 0, this.bones = new Array, this.bendDirection = 1, this.mix = 1, this.name = t
                }
            })();
            t.IkConstraintData = e
        })(n || (n = {})), (function(t) {
            var e = (function() {
                function e(t, e) {
                    if (this.position = 0, this.spacing = 0, this.rotateMix = 0, this.translateMix = 0, this.spaces = new Array, this.positions = new Array, this.world = new Array, this.curves = new Array, this.lengths = new Array, this.segments = new Array, null == t) throw new Error("data cannot be null.");
                    if (null == e) throw new Error("skeleton cannot be null.");
                    this.data = t, this.bones = new Array;
                    for (var i = 0, n = t.bones.length; i < n; i++) this.bones.push(e.findBone(t.bones[i].name));
                    this.target = e.findSlot(t.target.name), this.position = t.position, this.spacing = t.spacing, this.rotateMix = t.rotateMix, this.translateMix = t.translateMix
                }
                return e.prototype.apply = function() {
                    this.update()
                }, e.prototype.update = function() {
                    var i = this.target.getAttachment();
                    if (i instanceof t.PathAttachment) {
                        var n = this.rotateMix,
                            r = this.translateMix,
                            s = n > 0;
                        if (r > 0 || s) {
                            var o = this.data,
                                a = o.spacingMode,
                                l = a == t.SpacingMode.Length,
                                h = o.rotateMode,
                                c = h == t.RotateMode.Tangent,
                                u = h == t.RotateMode.ChainScale,
                                _ = this.bones.length,
                                f = c ? _ : _ + 1,
                                d = this.bones,
                                p = t.Utils.setArraySize(this.spaces, f),
                                m = null,
                                y = this.spacing;
                            if (u || l) {
                                u && (m = t.Utils.setArraySize(this.lengths, _));
                                for (var v = 0, g = f - 1; v < g;) {
                                    var x = (B = d[v]).data.length;
                                    if (x < e.epsilon) u && (m[v] = 0), p[++v] = 0;
                                    else {
                                        var b = x * B.a,
                                            A = x * B.c,
                                            C = Math.sqrt(b * b + A * A);
                                        u && (m[v] = C), p[++v] = (l ? x + y : y) * C / x
                                    }
                                }
                            } else
                                for (v = 1; v < f; v++) p[v] = y;
                            var T = this.computeWorldPositions(i, f, c, o.positionMode == t.PositionMode.Percent, a == t.SpacingMode.Percent),
                                S = T[0],
                                w = T[1],
                                E = o.offsetRotation,
                                M = !1;
                            if (0 == E) M = h == t.RotateMode.Chain;
                            else M = !1, E *= (D = this.target.bone).a * D.d - D.b * D.c > 0 ? t.MathUtils.degRad : -t.MathUtils.degRad;
                            v = 0;
                            for (var D = 3; v < _; v++, D += 3) {
                                var B;
                                (B = d[v]).worldX += (S - B.worldX) * r, B.worldY += (w - B.worldY) * r;
                                var I = (b = T[D]) - S,
                                    P = (A = T[D + 1]) - w;
                                if (u) {
                                    var R = m[v];
                                    if (0 != R) {
                                        var O = (Math.sqrt(I * I + P * P) / R - 1) * n + 1;
                                        B.a *= O, B.c *= O
                                    }
                                }
                                if (S = b, w = A, s) {
                                    var L = B.a,
                                        F = B.b,
                                        N = B.c,
                                        V = B.d,
                                        k = 0,
                                        G = 0,
                                        U = 0;
                                    if (k = c ? T[D - 1] : 0 == p[v + 1] ? T[D + 2] : Math.atan2(P, I), k -= Math.atan2(N, L), M) {
                                        G = Math.cos(k), U = Math.sin(k);
                                        var z = B.data.length;
                                        S += (z * (G * L - U * N) - I) * n, w += (z * (U * L + G * N) - P) * n
                                    } else k += E;
                                    k > t.MathUtils.PI ? k -= t.MathUtils.PI2 : k < -t.MathUtils.PI && (k += t.MathUtils.PI2), k *= n, G = Math.cos(k), U = Math.sin(k), B.a = G * L - U * N, B.b = G * F - U * V, B.c = U * L + G * N, B.d = U * F + G * V
                                }
                                B.appliedValid = !1
                            }
                        }
                    }
                }, e.prototype.computeWorldPositions = function(i, n, r, s, o) {
                    var a = this.target,
                        l = this.position,
                        h = this.spaces,
                        c = t.Utils.setArraySize(this.positions, 3 * n + 2),
                        u = null,
                        _ = i.closed,
                        f = i.worldVerticesLength,
                        d = f / 6,
                        p = e.NONE;
                    if (!i.constantSpeed) {
                        var m = i.lengths,
                            y = m[d -= _ ? 1 : 2];
                        if (s && (l *= y), o)
                            for (var v = 0; v < n; v++) h[v] *= y;
                        u = t.Utils.setArraySize(this.world, 8);
                        v = 0;
                        for (var g = 0, x = 0; v < n; v++, g += 3) {
                            var b = l += H = h[v];
                            if (_)(b %= y) < 0 && (b += y), x = 0;
                            else {
                                if (b < 0) {
                                    p != e.BEFORE && (p = e.BEFORE, i.computeWorldVertices(a, 2, 4, u, 0, 2)), this.addBeforePosition(b, u, 0, c, g);
                                    continue
                                }
                                if (b > y) {
                                    p != e.AFTER && (p = e.AFTER, i.computeWorldVertices(a, f - 6, 4, u, 0, 2)), this.addAfterPosition(b - y, u, 0, c, g);
                                    continue
                                }
                            }
                            for (;; x++) {
                                var A = m[x];
                                if (!(b > A)) {
                                    if (0 == x) b /= A;
                                    else b = (b - (J = m[x - 1])) / (A - J);
                                    break
                                }
                            }
                            x != p && (p = x, _ && x == d ? (i.computeWorldVertices(a, f - 4, 4, u, 0, 2), i.computeWorldVertices(a, 0, 4, u, 4, 2)) : i.computeWorldVertices(a, 6 * x + 2, 8, u, 0, 2)), this.addCurvePosition(b, u[0], u[1], u[2], u[3], u[4], u[5], u[6], u[7], c, g, r || v > 0 && 0 == H)
                        }
                        return c
                    }
                    _ ? (f += 2, u = t.Utils.setArraySize(this.world, f), i.computeWorldVertices(a, 2, f - 4, u, 0, 2), i.computeWorldVertices(a, 0, 2, u, f - 4, 2), u[f - 2] = u[0], u[f - 1] = u[1]) : (d--, f -= 4, u = t.Utils.setArraySize(this.world, f), i.computeWorldVertices(a, 2, f, u, 0, 2));
                    for (var C = t.Utils.setArraySize(this.curves, d), T = 0, S = u[0], w = u[1], E = 0, M = 0, D = 0, B = 0, I = 0, P = 0, R = 0, O = 0, L = 0, F = 0, N = 0, V = 0, k = 0, G = 0, U = (v = 0, 2); v < d; v++, U += 6) E = u[U], M = u[U + 1], D = u[U + 2], B = u[U + 3], I = u[U + 4], P = u[U + 5], N = 2 * (R = .1875 * (S - 2 * E + D)) + (L = .09375 * (3 * (E - D) - S + I)), V = 2 * (O = .1875 * (w - 2 * M + B)) + (F = .09375 * (3 * (M - B) - w + P)), k = .75 * (E - S) + R + .16666667 * L, G = .75 * (M - w) + O + .16666667 * F, T += Math.sqrt(k * k + G * G), k += N, G += V, N += L, V += F, T += Math.sqrt(k * k + G * G), k += N, G += V, T += Math.sqrt(k * k + G * G), k += N + L, G += V + F, T += Math.sqrt(k * k + G * G), C[v] = T, S = I, w = P;
                    if (s && (l *= T), o)
                        for (v = 0; v < n; v++) h[v] *= T;
                    for (var z = this.segments, j = 0, W = (v = 0, g = 0, x = 0, 0); v < n; v++, g += 3) {
                        var H;
                        b = l += H = h[v];
                        if (_)(b %= T) < 0 && (b += T), x = 0;
                        else {
                            if (b < 0) {
                                this.addBeforePosition(b, u, 0, c, g);
                                continue
                            }
                            if (b > T) {
                                this.addAfterPosition(b - T, u, f - 4, c, g);
                                continue
                            }
                        }
                        for (;; x++) {
                            var X = C[x];
                            if (!(b > X)) {
                                if (0 == x) b /= X;
                                else b = (b - (J = C[x - 1])) / (X - J);
                                break
                            }
                        }
                        if (x != p) {
                            p = x;
                            var Y = 6 * x;
                            for (S = u[Y], w = u[Y + 1], E = u[Y + 2], M = u[Y + 3], D = u[Y + 4], B = u[Y + 5], I = u[Y + 6], P = u[Y + 7], N = 2 * (R = .03 * (S - 2 * E + D)) + (L = .006 * (3 * (E - D) - S + I)), V = 2 * (O = .03 * (w - 2 * M + B)) + (F = .006 * (3 * (M - B) - w + P)), k = .3 * (E - S) + R + .16666667 * L, G = .3 * (M - w) + O + .16666667 * F, j = Math.sqrt(k * k + G * G), z[0] = j, Y = 1; Y < 8; Y++) k += N, G += V, N += L, V += F, j += Math.sqrt(k * k + G * G), z[Y] = j;
                            k += N, G += V, j += Math.sqrt(k * k + G * G), z[8] = j, k += N + L, G += V + F, j += Math.sqrt(k * k + G * G), z[9] = j, W = 0
                        }
                        for (b *= j;; W++) {
                            var q = z[W];
                            if (!(b > q)) {
                                var J;
                                if (0 == W) b /= q;
                                else b = W + (b - (J = z[W - 1])) / (q - J);
                                break
                            }
                        }
                        this.addCurvePosition(.1 * b, S, w, E, M, D, B, I, P, c, g, r || v > 0 && 0 == H)
                    }
                    return c
                }, e.prototype.addBeforePosition = function(t, e, i, n, r) {
                    var s = e[i],
                        o = e[i + 1],
                        a = e[i + 2] - s,
                        l = e[i + 3] - o,
                        h = Math.atan2(l, a);
                    n[r] = s + t * Math.cos(h), n[r + 1] = o + t * Math.sin(h), n[r + 2] = h
                }, e.prototype.addAfterPosition = function(t, e, i, n, r) {
                    var s = e[i + 2],
                        o = e[i + 3],
                        a = s - e[i],
                        l = o - e[i + 1],
                        h = Math.atan2(l, a);
                    n[r] = s + t * Math.cos(h), n[r + 1] = o + t * Math.sin(h), n[r + 2] = h
                }, e.prototype.addCurvePosition = function(t, e, i, n, r, s, o, a, l, h, c, u) {
                    (0 == t || isNaN(t)) && (t = 1e-4);
                    var _ = t * t,
                        f = _ * t,
                        d = 1 - t,
                        p = d * d,
                        m = p * d,
                        y = d * t,
                        v = 3 * y,
                        g = d * v,
                        x = v * t,
                        b = e * m + n * g + s * x + a * f,
                        A = i * m + r * g + o * x + l * f;
                    h[c] = b, h[c + 1] = A, u && (h[c + 2] = Math.atan2(A - (i * p + r * y * 2 + o * _), b - (e * p + n * y * 2 + s * _)))
                }, e.prototype.getOrder = function() {
                    return this.data.order
                }, e.NONE = -1, e.BEFORE = -2, e.AFTER = -3, e.epsilon = 1e-5, e
            })();
            t.PathConstraint = e
        })(n || (n = {})), (function(t) {
            var e = (function() {
                return function(t) {
                    this.order = 0, this.bones = new Array, this.name = t
                }
            })();
            t.PathConstraintData = e, (function(t) {
                t[t.Fixed = 0] = "Fixed", t[t.Percent = 1] = "Percent"
            })(t.PositionMode || (t.PositionMode = {})), (function(t) {
                t[t.Length = 0] = "Length", t[t.Fixed = 1] = "Fixed", t[t.Percent = 2] = "Percent"
            })(t.SpacingMode || (t.SpacingMode = {})), (function(t) {
                t[t.Tangent = 0] = "Tangent", t[t.Chain = 1] = "Chain", t[t.ChainScale = 2] = "ChainScale"
            })(t.RotateMode || (t.RotateMode = {}))
        })(n || (n = {})), (function(t) {
            var e = (function() {
                    function t(t) {
                        this.toLoad = new Array, this.assets = {}, this.clientId = t
                    }
                    return t.prototype.loaded = function() {
                        var t = 0;
                        for (var e in this.assets) t++;
                        return t
                    }, t
                })(),
                i = (function() {
                    function t(t) {
                        void 0 === t && (t = ""), this.clientAssets = {}, this.queuedAssets = {}, this.rawAssets = {}, this.errors = {}, this.pathPrefix = t
                    }
                    return t.prototype.queueAsset = function(t, i, n) {
                        var r = this.clientAssets[t];
                        return null !== r && void 0 !== r || (r = new e(t), this.clientAssets[t] = r), null !== i && (r.textureLoader = i), r.toLoad.push(n), this.queuedAssets[n] !== n && (this.queuedAssets[n] = n, !0)
                    }, t.prototype.loadText = function(t, e) {
                        var i = this;
                        if (e = this.pathPrefix + e, this.queueAsset(t, null, e)) {
                            var n = new XMLHttpRequest;
                            n.onreadystatechange = function() {
                                n.readyState == XMLHttpRequest.DONE && (n.status >= 200 && n.status < 300 ? i.rawAssets[e] = n.responseText : i.errors[e] = "Couldn't load text " + e + ": status " + n.status + ", " + n.responseText)
                            }, n.open("GET", e, !0), n.send()
                        }
                    }, t.prototype.loadJson = function(t, e) {
                        var i = this;
                        if (e = this.pathPrefix + e, this.queueAsset(t, null, e)) {
                            var n = new XMLHttpRequest;
                            n.onreadystatechange = function() {
                                n.readyState == XMLHttpRequest.DONE && (n.status >= 200 && n.status < 300 ? i.rawAssets[e] = JSON.parse(n.responseText) : i.errors[e] = "Couldn't load text " + e + ": status " + n.status + ", " + n.responseText)
                            }, n.open("GET", e, !0), n.send()
                        }
                    }, t.prototype.loadTexture = function(t, e, i) {
                        var n = this;
                        if (i = this.pathPrefix + i, this.queueAsset(t, e, i)) {
                            var r = new Image;
                            r.src = i, r.crossOrigin = "anonymous", r.onload = function(t) {
                                n.rawAssets[i] = r
                            }, r.onerror = function(t) {
                                n.errors[i] = "Couldn't load image " + i
                            }
                        }
                    }, t.prototype.get = function(t, e) {
                        e = this.pathPrefix + e;
                        var i = this.clientAssets[t];
                        return null === i || void 0 === i || i.assets[e]
                    }, t.prototype.updateClientAssets = function(t) {
                        for (var e = 0; e < t.toLoad.length; e++) {
                            var i = t.toLoad[e],
                                n = t.assets[i];
                            if (null === n || void 0 === n) {
                                var r = this.rawAssets[i];
                                if (null === r || void 0 === r) continue;
                                r instanceof HTMLImageElement ? t.assets[i] = t.textureLoader(r) : t.assets[i] = r
                            }
                        }
                    }, t.prototype.isLoadingComplete = function(t) {
                        var e = this.clientAssets[t];
                        return null === e || void 0 === e || (this.updateClientAssets(e), e.toLoad.length == e.loaded())
                    }, t.prototype.dispose = function() {}, t.prototype.hasErrors = function() {
                        return Object.keys(this.errors).length > 0
                    }, t.prototype.getErrors = function() {
                        return this.errors
                    }, t
                })();
            t.SharedAssetManager = i
        })(n || (n = {})), (function(t) {
            var e = (function() {
                function e(e) {
                    if (this._updateCache = new Array, this.updateCacheReset = new Array, this.time = 0, this.flipX = !1, this.flipY = !1, this.x = 0, this.y = 0, null == e) throw new Error("data cannot be null.");
                    this.data = e, this.bones = new Array;
                    for (var i = 0; i < e.bones.length; i++) {
                        var n = e.bones[i],
                            r = void 0;
                        if (null == n.parent) r = new t.Bone(n, this, null);
                        else {
                            var s = this.bones[n.parent.index];
                            r = new t.Bone(n, this, s), s.children.push(r)
                        }
                        this.bones.push(r)
                    }
                    this.slots = new Array, this.drawOrder = new Array;
                    for (i = 0; i < e.slots.length; i++) {
                        var o = e.slots[i],
                            a = (r = this.bones[o.boneData.index], new t.Slot(o, r));
                        this.slots.push(a), this.drawOrder.push(a)
                    }
                    this.ikConstraints = new Array;
                    for (i = 0; i < e.ikConstraints.length; i++) {
                        var l = e.ikConstraints[i];
                        this.ikConstraints.push(new t.IkConstraint(l, this))
                    }
                    this.transformConstraints = new Array;
                    for (i = 0; i < e.transformConstraints.length; i++) {
                        var h = e.transformConstraints[i];
                        this.transformConstraints.push(new t.TransformConstraint(h, this))
                    }
                    this.pathConstraints = new Array;
                    for (i = 0; i < e.pathConstraints.length; i++) {
                        var c = e.pathConstraints[i];
                        this.pathConstraints.push(new t.PathConstraint(c, this))
                    }
                    this.color = new t.Color(1, 1, 1, 1), this.updateCache()
                }
                return e.prototype.updateCache = function() {
                    this._updateCache.length = 0, this.updateCacheReset.length = 0;
                    for (var t = this.bones, e = 0, i = t.length; e < i; e++) t[e].sorted = !1;
                    var n = this.ikConstraints,
                        r = this.transformConstraints,
                        s = this.pathConstraints,
                        o = n.length,
                        a = r.length,
                        l = s.length,
                        h = o + a + l;
                    t: for (e = 0; e < h; e++) {
                        for (var c = 0; c < o; c++) {
                            if ((u = n[c]).data.order == e) {
                                this.sortIkConstraint(u);
                                continue t
                            }
                        }
                        for (c = 0; c < a; c++) {
                            if ((u = r[c]).data.order == e) {
                                this.sortTransformConstraint(u);
                                continue t
                            }
                        }
                        for (c = 0; c < l; c++) {
                            var u;
                            if ((u = s[c]).data.order == e) {
                                this.sortPathConstraint(u);
                                continue t
                            }
                        }
                    }
                    for (e = 0, i = t.length; e < i; e++) this.sortBone(t[e])
                }, e.prototype.sortIkConstraint = function(t) {
                    var e = t.target;
                    this.sortBone(e);
                    var i = t.bones,
                        n = i[0];
                    if (this.sortBone(n), i.length > 1) {
                        var r = i[i.length - 1];
                        this._updateCache.indexOf(r) > -1 || this.updateCacheReset.push(r)
                    }
                    this._updateCache.push(t), this.sortReset(n.children), i[i.length - 1].sorted = !0
                }, e.prototype.sortPathConstraint = function(e) {
                    var i = e.target,
                        n = i.data.index,
                        r = i.bone;
                    null != this.skin && this.sortPathConstraintAttachment(this.skin, n, r), null != this.data.defaultSkin && this.data.defaultSkin != this.skin && this.sortPathConstraintAttachment(this.data.defaultSkin, n, r);
                    for (var s = 0, o = this.data.skins.length; s < o; s++) this.sortPathConstraintAttachment(this.data.skins[s], n, r);
                    var a = i.getAttachment();
                    a instanceof t.PathAttachment && this.sortPathConstraintAttachmentWith(a, r);
                    var l = e.bones,
                        h = l.length;
                    for (s = 0; s < h; s++) this.sortBone(l[s]);
                    this._updateCache.push(e);
                    for (s = 0; s < h; s++) this.sortReset(l[s].children);
                    for (s = 0; s < h; s++) l[s].sorted = !0
                }, e.prototype.sortTransformConstraint = function(t) {
                    this.sortBone(t.target);
                    var e = t.bones,
                        i = e.length;
                    if (t.data.local)
                        for (var n = 0; n < i; n++) {
                            var r = e[n];
                            this.sortBone(r.parent), this._updateCache.indexOf(r) > -1 || this.updateCacheReset.push(r)
                        } else
                            for (n = 0; n < i; n++) this.sortBone(e[n]);
                    this._updateCache.push(t);
                    for (var s = 0; s < i; s++) this.sortReset(e[s].children);
                    for (s = 0; s < i; s++) e[s].sorted = !0
                }, e.prototype.sortPathConstraintAttachment = function(t, e, i) {
                    var n = t.attachments[e];
                    if (n)
                        for (var r in n) this.sortPathConstraintAttachmentWith(n[r], i)
                }, e.prototype.sortPathConstraintAttachmentWith = function(e, i) {
                    if (e instanceof t.PathAttachment) {
                        var n = e.bones;
                        if (null == n) this.sortBone(i);
                        else
                            for (var r = this.bones, s = 0; s < n.length;)
                                for (var o = n[s++], a = s + o; s < a; s++) {
                                    var l = n[s];
                                    this.sortBone(r[l])
                                }
                    }
                }, e.prototype.sortBone = function(t) {
                    if (!t.sorted) {
                        var e = t.parent;
                        null != e && this.sortBone(e), t.sorted = !0, this._updateCache.push(t)
                    }
                }, e.prototype.sortReset = function(t) {
                    for (var e = 0, i = t.length; e < i; e++) {
                        var n = t[e];
                        n.sorted && this.sortReset(n.children), n.sorted = !1
                    }
                }, e.prototype.updateWorldTransform = function() {
                    for (var t = this.updateCacheReset, e = 0, i = t.length; e < i; e++) {
                        var n = t[e];
                        n.ax = n.x, n.ay = n.y, n.arotation = n.rotation, n.ascaleX = n.scaleX, n.ascaleY = n.scaleY, n.ashearX = n.shearX, n.ashearY = n.shearY, n.appliedValid = !0
                    }
                    var r = this._updateCache;
                    for (e = 0, i = r.length; e < i; e++) r[e].update()
                }, e.prototype.setToSetupPose = function() {
                    this.setBonesToSetupPose(), this.setSlotsToSetupPose()
                }, e.prototype.setBonesToSetupPose = function() {
                    for (var t = this.bones, e = 0, i = t.length; e < i; e++) t[e].setToSetupPose();
                    var n = this.ikConstraints;
                    for (e = 0, i = n.length; e < i; e++) {
                        (a = n[e]).bendDirection = a.data.bendDirection, a.mix = a.data.mix
                    }
                    var r = this.transformConstraints;
                    for (e = 0, i = r.length; e < i; e++) {
                        var s = (a = r[e]).data;
                        a.rotateMix = s.rotateMix, a.translateMix = s.translateMix, a.scaleMix = s.scaleMix, a.shearMix = s.shearMix
                    }
                    var o = this.pathConstraints;
                    for (e = 0, i = o.length; e < i; e++) {
                        var a;
                        s = (a = o[e]).data;
                        a.position = s.position, a.spacing = s.spacing, a.rotateMix = s.rotateMix, a.translateMix = s.translateMix
                    }
                }, e.prototype.setSlotsToSetupPose = function() {
                    var e = this.slots;
                    t.Utils.arrayCopy(e, 0, this.drawOrder, 0, e.length);
                    for (var i = 0, n = e.length; i < n; i++) e[i].setToSetupPose()
                }, e.prototype.getRootBone = function() {
                    return 0 == this.bones.length ? null : this.bones[0]
                }, e.prototype.findBone = function(t) {
                    if (null == t) throw new Error("boneName cannot be null.");
                    for (var e = this.bones, i = 0, n = e.length; i < n; i++) {
                        var r = e[i];
                        if (r.data.name == t) return r
                    }
                    return null
                }, e.prototype.findBoneIndex = function(t) {
                    if (null == t) throw new Error("boneName cannot be null.");
                    for (var e = this.bones, i = 0, n = e.length; i < n; i++)
                        if (e[i].data.name == t) return i;
                    return -1
                }, e.prototype.findSlot = function(t) {
                    if (null == t) throw new Error("slotName cannot be null.");
                    for (var e = this.slots, i = 0, n = e.length; i < n; i++) {
                        var r = e[i];
                        if (r.data.name == t) return r
                    }
                    return null
                }, e.prototype.findSlotIndex = function(t) {
                    if (null == t) throw new Error("slotName cannot be null.");
                    for (var e = this.slots, i = 0, n = e.length; i < n; i++)
                        if (e[i].data.name == t) return i;
                    return -1
                }, e.prototype.setSkinByName = function(t) {
                    var e = this.data.findSkin(t);
                    if (null == e) throw new Error("Skin not found: " + t);
                    this.setSkin(e)
                }, e.prototype.setSkin = function(t) {
                    if (null != t)
                        if (null != this.skin) t.attachAll(this, this.skin);
                        else
                            for (var e = this.slots, i = 0, n = e.length; i < n; i++) {
                                var r = e[i],
                                    s = r.data.attachmentName;
                                if (null != s) {
                                    var o = t.getAttachment(i, s);
                                    null != o && r.setAttachment(o)
                                }
                            }
                    this.skin = t
                }, e.prototype.getAttachmentByName = function(t, e) {
                    return this.getAttachment(this.data.findSlotIndex(t), e)
                }, e.prototype.getAttachment = function(t, e) {
                    if (null == e) throw new Error("attachmentName cannot be null.");
                    if (null != this.skin) {
                        var i = this.skin.getAttachment(t, e);
                        if (null != i) return i
                    }
                    return null != this.data.defaultSkin ? this.data.defaultSkin.getAttachment(t, e) : null
                }, e.prototype.setAttachment = function(t, e) {
                    if (null == t) throw new Error("slotName cannot be null.");
                    for (var i = this.slots, n = 0, r = i.length; n < r; n++) {
                        var s = i[n];
                        if (s.data.name == t) {
                            var o = null;
                            if (null != e && null == (o = this.getAttachment(n, e))) throw new Error("Attachment not found: " + e + ", for slot: " + t);
                            return void s.setAttachment(o)
                        }
                    }
                    throw new Error("Slot not found: " + t)
                }, e.prototype.findIkConstraint = function(t) {
                    if (null == t) throw new Error("constraintName cannot be null.");
                    for (var e = this.ikConstraints, i = 0, n = e.length; i < n; i++) {
                        var r = e[i];
                        if (r.data.name == t) return r
                    }
                    return null
                }, e.prototype.findTransformConstraint = function(t) {
                    if (null == t) throw new Error("constraintName cannot be null.");
                    for (var e = this.transformConstraints, i = 0, n = e.length; i < n; i++) {
                        var r = e[i];
                        if (r.data.name == t) return r
                    }
                    return null
                }, e.prototype.findPathConstraint = function(t) {
                    if (null == t) throw new Error("constraintName cannot be null.");
                    for (var e = this.pathConstraints, i = 0, n = e.length; i < n; i++) {
                        var r = e[i];
                        if (r.data.name == t) return r
                    }
                    return null
                }, e.prototype.getBounds = function(e, i, n) {
                    if (null == e) throw new Error("offset cannot be null.");
                    if (null == i) throw new Error("size cannot be null.");
                    for (var r = this.drawOrder, s = Number.POSITIVE_INFINITY, o = Number.POSITIVE_INFINITY, a = Number.NEGATIVE_INFINITY, l = Number.NEGATIVE_INFINITY, h = 0, c = r.length; h < c; h++) {
                        var u = r[h],
                            _ = 0,
                            f = null,
                            d = u.getAttachment();
                        if (d instanceof t.RegionAttachment) _ = 8, f = t.Utils.setArraySize(n, _, 0), d.computeWorldVertices(u.bone, f, 0, 2);
                        else if (d instanceof t.MeshAttachment) {
                            var p = d;
                            _ = p.worldVerticesLength, f = t.Utils.setArraySize(n, _, 0), p.computeWorldVertices(u, 0, _, f, 0, 2)
                        }
                        if (null != f)
                            for (var m = 0, y = f.length; m < y; m += 2) {
                                var v = f[m],
                                    g = f[m + 1];
                                s = Math.min(s, v), o = Math.min(o, g), a = Math.max(a, v), l = Math.max(l, g)
                            }
                    }
                    e.set(s, o), i.set(a - s, l - o)
                }, e.prototype.update = function(t) {
                    this.time += t
                }, e
            })();
            t.Skeleton = e
        })(n || (n = {})), (function(t) {
            var e = (function() {
                function e() {
                    this.minX = 0, this.minY = 0, this.maxX = 0, this.maxY = 0, this.boundingBoxes = new Array, this.polygons = new Array, this.polygonPool = new t.Pool(function() {
                        return t.Utils.newFloatArray(16)
                    })
                }
                return e.prototype.update = function(e, i) {
                    if (null == e) throw new Error("skeleton cannot be null.");
                    var n = this.boundingBoxes,
                        r = this.polygons,
                        s = this.polygonPool,
                        o = e.slots,
                        a = o.length;
                    n.length = 0, s.freeAll(r), r.length = 0;
                    for (var l = 0; l < a; l++) {
                        var h = o[l],
                            c = h.getAttachment();
                        if (c instanceof t.BoundingBoxAttachment) {
                            var u = c;
                            n.push(u);
                            var _ = s.obtain();
                            _.length != u.worldVerticesLength && (_ = t.Utils.newFloatArray(u.worldVerticesLength)), r.push(_), u.computeWorldVertices(h, 0, u.worldVerticesLength, _, 0, 2)
                        }
                    }
                    i ? this.aabbCompute() : (this.minX = Number.POSITIVE_INFINITY, this.minY = Number.POSITIVE_INFINITY, this.maxX = Number.NEGATIVE_INFINITY, this.maxY = Number.NEGATIVE_INFINITY)
                }, e.prototype.aabbCompute = function() {
                    for (var t = Number.POSITIVE_INFINITY, e = Number.POSITIVE_INFINITY, i = Number.NEGATIVE_INFINITY, n = Number.NEGATIVE_INFINITY, r = this.polygons, s = 0, o = r.length; s < o; s++)
                        for (var a = r[s], l = a, h = 0, c = a.length; h < c; h += 2) {
                            var u = l[h],
                                _ = l[h + 1];
                            t = Math.min(t, u), e = Math.min(e, _), i = Math.max(i, u), n = Math.max(n, _)
                        }
                    this.minX = t, this.minY = e, this.maxX = i, this.maxY = n
                }, e.prototype.aabbContainsPoint = function(t, e) {
                    return t >= this.minX && t <= this.maxX && e >= this.minY && e <= this.maxY
                }, e.prototype.aabbIntersectsSegment = function(t, e, i, n) {
                    var r = this.minX,
                        s = this.minY,
                        o = this.maxX,
                        a = this.maxY;
                    if (t <= r && i <= r || e <= s && n <= s || t >= o && i >= o || e >= a && n >= a) return !1;
                    var l = (n - e) / (i - t),
                        h = l * (r - t) + e;
                    if (h > s && h < a) return !0;
                    if ((h = l * (o - t) + e) > s && h < a) return !0;
                    var c = (s - e) / l + t;
                    return c > r && c < o || (c = (a - e) / l + t) > r && c < o
                }, e.prototype.aabbIntersectsSkeleton = function(t) {
                    return this.minX < t.maxX && this.maxX > t.minX && this.minY < t.maxY && this.maxY > t.minY
                }, e.prototype.containsPoint = function(t, e) {
                    for (var i = this.polygons, n = 0, r = i.length; n < r; n++)
                        if (this.containsPointPolygon(i[n], t, e)) return this.boundingBoxes[n];
                    return null
                }, e.prototype.containsPointPolygon = function(t, e, i) {
                    for (var n = t, r = t.length, s = r - 2, o = !1, a = 0; a < r; a += 2) {
                        var l = n[a + 1],
                            h = n[s + 1];
                        if (l < i && h >= i || h < i && l >= i) {
                            var c = n[a];
                            c + (i - l) / (h - l) * (n[s] - c) < e && (o = !o)
                        }
                        s = a
                    }
                    return o
                }, e.prototype.intersectsSegment = function(t, e, i, n) {
                    for (var r = this.polygons, s = 0, o = r.length; s < o; s++)
                        if (this.intersectsSegmentPolygon(r[s], t, e, i, n)) return this.boundingBoxes[s];
                    return null
                }, e.prototype.intersectsSegmentPolygon = function(t, e, i, n, r) {
                    for (var s = t, o = t.length, a = e - n, l = i - r, h = e * r - i * n, c = s[o - 2], u = s[o - 1], _ = 0; _ < o; _ += 2) {
                        var f = s[_],
                            d = s[_ + 1],
                            p = c * d - u * f,
                            m = c - f,
                            y = u - d,
                            v = a * y - l * m,
                            g = (h * m - a * p) / v;
                        if ((g >= c && g <= f || g >= f && g <= c) && (g >= e && g <= n || g >= n && g <= e)) {
                            var x = (h * y - l * p) / v;
                            if ((x >= u && x <= d || x >= d && x <= u) && (x >= i && x <= r || x >= r && x <= i)) return !0
                        }
                        c = f, u = d
                    }
                    return !1
                }, e.prototype.getPolygon = function(t) {
                    if (null == t) throw new Error("boundingBox cannot be null.");
                    var e = this.boundingBoxes.indexOf(t);
                    return -1 == e ? null : this.polygons[e]
                }, e.prototype.getWidth = function() {
                    return this.maxX - this.minX
                }, e.prototype.getHeight = function() {
                    return this.maxY - this.minY
                }, e
            })();
            t.SkeletonBounds = e
        })(n || (n = {})), (function(t) {
            var e = (function() {
                function e() {
                    this.triangulator = new t.Triangulator, this.clippingPolygon = new Array, this.clipOutput = new Array, this.clippedVertices = new Array, this.clippedTriangles = new Array, this.scratch = new Array
                }
                return e.prototype.clipStart = function(i, n) {
                    if (null != this.clipAttachment) return 0;
                    this.clipAttachment = n;
                    var r = n.worldVerticesLength,
                        s = t.Utils.setArraySize(this.clippingPolygon, r);
                    n.computeWorldVertices(i, 0, r, s, 0, 2);
                    var o = this.clippingPolygon;
                    e.makeClockwise(o);
                    for (var a = this.clippingPolygons = this.triangulator.decompose(o, this.triangulator.triangulate(o)), l = 0, h = a.length; l < h; l++) {
                        var c = a[l];
                        e.makeClockwise(c), c.push(c[0]), c.push(c[1])
                    }
                    return a.length
                }, e.prototype.clipEndWithSlot = function(t) {
                    null != this.clipAttachment && this.clipAttachment.endSlot == t.data && this.clipEnd()
                }, e.prototype.clipEnd = function() {
                    null != this.clipAttachment && (this.clipAttachment = null, this.clippingPolygons = null, this.clippedVertices.length = 0, this.clippedTriangles.length = 0, this.clippingPolygon.length = 0)
                }, e.prototype.isClipping = function() {
                    return null != this.clipAttachment
                }, e.prototype.clipTriangles = function(e, i, n, r, s, o, a, l, h, c, u, _) {
                    var f = this.clipOutput,
                        d = this.clippedVertices,
                        p = this.clippedTriangles,
                        m = this.clippingPolygons,
                        y = this.clippingPolygons.length,
                        v = l ? 12 : 8,
                        g = 0;
                    c = c || 0, u = u || 0, _ = _ || 0, d.length = 0, p.length = 0;
                    t: for (var x = c, b = c + r; x < b; x += 3) {
                        var A = n[x] * h,
                            C = A + u,
                            T = A + _,
                            S = e[C],
                            w = e[C + 1],
                            E = s[T],
                            M = s[T + 1];
                        T = (A = n[x + 1] * h) + _;
                        var D = e[C = A + u],
                            B = e[C + 1],
                            I = s[T],
                            P = s[T + 1];
                        T = (A = n[x + 2] * h) + _;
                        for (var R = e[C = A + u], O = e[C + 1], L = s[T], F = s[T + 1], N = 0; N < y; N++) {
                            var V = d.length;
                            if (!this.clip(S, w, D, B, R, O, m[N], f)) {
                                (Y = t.Utils.setArraySize(d, V + 3 * v))[V] = S, Y[V + 1] = w, Y[V + 2] = o.r, Y[V + 3] = o.g, Y[V + 4] = o.b, Y[V + 5] = o.a, l ? (Y[V + 6] = E, Y[V + 7] = M, Y[V + 8] = a.r, Y[V + 9] = a.g, Y[V + 10] = a.b, Y[V + 11] = a.a, Y[V + 12] = D, Y[V + 13] = B, Y[V + 14] = o.r, Y[V + 15] = o.g, Y[V + 16] = o.b, Y[V + 17] = o.a, Y[V + 18] = I, Y[V + 19] = P, Y[V + 20] = a.r, Y[V + 21] = a.g, Y[V + 22] = a.b, Y[V + 23] = a.a, Y[V + 24] = R, Y[V + 25] = O, Y[V + 26] = o.r, Y[V + 27] = o.g, Y[V + 28] = o.b, Y[V + 29] = o.a, Y[V + 30] = L, Y[V + 31] = F, Y[V + 32] = a.r, Y[V + 33] = a.g, Y[V + 34] = a.b, Y[V + 35] = a.a) : (Y[V + 6] = E, Y[V + 7] = M, Y[V + 8] = D, Y[V + 9] = B, Y[V + 10] = o.r, Y[V + 11] = o.g, Y[V + 12] = o.b, Y[V + 13] = o.a, Y[V + 14] = I, Y[V + 15] = P, Y[V + 16] = R, Y[V + 17] = O, Y[V + 18] = o.r, Y[V + 19] = o.g, Y[V + 20] = o.b, Y[V + 21] = o.a, Y[V + 22] = L, Y[V + 23] = F), V = p.length, (it = t.Utils.setArraySize(p, V + 3))[V] = g, it[V + 1] = g + 1, it[V + 2] = g + 2, g += 3;
                                continue t
                            }
                            var k = f.length;
                            if (0 != k) {
                                for (var G = B - O, U = R - D, z = S - R, j = O - w, W = 1 / (G * z + U * (w - O)), H = k >> 1, X = this.clipOutput, Y = t.Utils.setArraySize(d, V + H * v), q = 0; q < k; q += 2) {
                                    var J = X[q],
                                        Z = X[q + 1];
                                    Y[V] = J, Y[V + 1] = Z, Y[V + 2] = o.r, Y[V + 3] = o.g, Y[V + 4] = o.b, Y[V + 5] = o.a;
                                    var K = J - R,
                                        Q = Z - O,
                                        $ = (G * K + U * Q) * W,
                                        tt = (j * K + z * Q) * W,
                                        et = 1 - $ - tt;
                                    Y[V + 6] = E * $ + I * tt + L * et, Y[V + 7] = M * $ + P * tt + F * et, l && (Y[V + 8] = a.r, Y[V + 9] = a.g, Y[V + 10] = a.b, Y[V + 11] = a.a), V += v
                                }
                                V = p.length;
                                var it = t.Utils.setArraySize(p, V + 3 * (H - 2));
                                H--;
                                for (q = 1; q < H; q++) it[V] = g, it[V + 1] = g + q, it[V + 2] = g + q + 1, V += 3;
                                g += H + 1
                            }
                        }
                    }
                }, e.prototype.clip = function(t, e, i, n, r, s, o, a) {
                    var l = a,
                        h = !1,
                        c = null;
                    o.length % 4 >= 2 ? (c = a, a = this.scratch) : c = this.scratch, c.length = 0, c.push(t), c.push(e), c.push(i), c.push(n), c.push(r), c.push(s), c.push(t), c.push(e), a.length = 0;
                    for (var u = o, _ = o.length - 4, f = 0;; f += 2) {
                        for (var d = u[f], p = u[f + 1], m = u[f + 2], y = u[f + 3], v = d - m, g = p - y, x = c, b = c.length - 2, A = a.length, C = 0; C < b; C += 2) {
                            var T = x[C],
                                S = x[C + 1],
                                w = x[C + 2],
                                E = x[C + 3],
                                M = v * (E - y) - g * (w - m) > 0;
                            if (v * (S - y) - g * (T - m) > 0) {
                                if (M) {
                                    a.push(w), a.push(E);
                                    continue
                                }
                                var D = ((I = w - T) * (p - S) - (B = E - S) * (d - T)) / (B * (m - d) - I * (y - p));
                                a.push(d + (m - d) * D), a.push(p + (y - p) * D)
                            } else if (M) {
                                var B, I;
                                D = ((I = w - T) * (p - S) - (B = E - S) * (d - T)) / (B * (m - d) - I * (y - p));
                                a.push(d + (m - d) * D), a.push(p + (y - p) * D), a.push(w), a.push(E)
                            }
                            h = !0
                        }
                        if (A == a.length) return l.length = 0, !0;
                        if (a.push(a[0]), a.push(a[1]), f == _) break;
                        var P = a;
                        (a = c).length = 0, c = P
                    }
                    if (l != a) {
                        l.length = 0;
                        f = 0;
                        for (var R = a.length - 2; f < R; f++) l[f] = a[f]
                    } else l.length = l.length - 2;
                    return h
                }, e.makeClockwise = function(t) {
                    for (var e = t, i = t.length, n = e[i - 2] * e[1] - e[0] * e[i - 1], r = 0, s = 0, o = 0, a = 0, l = i - 3; a < l; a += 2) r = e[a], s = e[a + 1], o = e[a + 2], n += r * e[a + 3] - o * s;
                    if (!(n < 0)) {
                        a = 0;
                        var h = i - 2;
                        for (l = i >> 1; a < l; a += 2) {
                            var c = e[a],
                                u = e[a + 1],
                                _ = h - a;
                            e[a] = e[_], e[a + 1] = e[_ + 1], e[_] = c, e[_ + 1] = u
                        }
                    }
                }, e
            })();
            t.SkeletonClipping = e
        })(n || (n = {})), (function(t) {
            var e = (function() {
                function t() {
                    this.bones = new Array, this.slots = new Array, this.skins = new Array, this.events = new Array, this.animations = new Array, this.ikConstraints = new Array, this.transformConstraints = new Array, this.pathConstraints = new Array, this.fps = 0
                }
                return t.prototype.findBone = function(t) {
                    if (null == t) throw new Error("boneName cannot be null.");
                    for (var e = this.bones, i = 0, n = e.length; i < n; i++) {
                        var r = e[i];
                        if (r.name == t) return r
                    }
                    return null
                }, t.prototype.findBoneIndex = function(t) {
                    if (null == t) throw new Error("boneName cannot be null.");
                    for (var e = this.bones, i = 0, n = e.length; i < n; i++)
                        if (e[i].name == t) return i;
                    return -1
                }, t.prototype.findSlot = function(t) {
                    if (null == t) throw new Error("slotName cannot be null.");
                    for (var e = this.slots, i = 0, n = e.length; i < n; i++) {
                        var r = e[i];
                        if (r.name == t) return r
                    }
                    return null
                }, t.prototype.findSlotIndex = function(t) {
                    if (null == t) throw new Error("slotName cannot be null.");
                    for (var e = this.slots, i = 0, n = e.length; i < n; i++)
                        if (e[i].name == t) return i;
                    return -1
                }, t.prototype.findSkin = function(t) {
                    if (null == t) throw new Error("skinName cannot be null.");
                    for (var e = this.skins, i = 0, n = e.length; i < n; i++) {
                        var r = e[i];
                        if (r.name == t) return r
                    }
                    return null
                }, t.prototype.findEvent = function(t) {
                    if (null == t) throw new Error("eventDataName cannot be null.");
                    for (var e = this.events, i = 0, n = e.length; i < n; i++) {
                        var r = e[i];
                        if (r.name == t) return r
                    }
                    return null
                }, t.prototype.findAnimation = function(t) {
                    if (null == t) throw new Error("animationName cannot be null.");
                    for (var e = this.animations, i = 0, n = e.length; i < n; i++) {
                        var r = e[i];
                        if (r.name == t) return r
                    }
                    return null
                }, t.prototype.findIkConstraint = function(t) {
                    if (null == t) throw new Error("constraintName cannot be null.");
                    for (var e = this.ikConstraints, i = 0, n = e.length; i < n; i++) {
                        var r = e[i];
                        if (r.name == t) return r
                    }
                    return null
                }, t.prototype.findTransformConstraint = function(t) {
                    if (null == t) throw new Error("constraintName cannot be null.");
                    for (var e = this.transformConstraints, i = 0, n = e.length; i < n; i++) {
                        var r = e[i];
                        if (r.name == t) return r
                    }
                    return null
                }, t.prototype.findPathConstraint = function(t) {
                    if (null == t) throw new Error("constraintName cannot be null.");
                    for (var e = this.pathConstraints, i = 0, n = e.length; i < n; i++) {
                        var r = e[i];
                        if (r.name == t) return r
                    }
                    return null
                }, t.prototype.findPathConstraintIndex = function(t) {
                    if (null == t) throw new Error("pathConstraintName cannot be null.");
                    for (var e = this.pathConstraints, i = 0, n = e.length; i < n; i++)
                        if (e[i].name == t) return i;
                    return -1
                }, t
            })();
            t.SkeletonData = e
        })(n || (n = {})), (function(t) {
            var e = (function() {
                function e(t) {
                    this.scale = 1, this.linkedMeshes = new Array, this.attachmentLoader = t
                }
                return e.prototype.readSkeletonData = function(i) {
                    var n = this.scale,
                        r = new t.SkeletonData,
                        s = "string" == typeof i ? JSON.parse(i) : i,
                        o = s.skeleton;
                    if (null != o && (r.hash = o.hash, r.version = o.spine, r.width = o.width, r.height = o.height, r.fps = o.fps, r.imagesPath = o.images), s.bones)
                        for (var a = 0; a < s.bones.length; a++) {
                            var l = s.bones[a],
                                h = null,
                                c = this.getValue(l, "parent", null);
                            if (null != c && null == (h = r.findBone(c))) throw new Error("Parent bone not found: " + c);
                            (d = new t.BoneData(r.bones.length, l.name, h)).length = this.getValue(l, "length", 0) * n, d.x = this.getValue(l, "x", 0) * n, d.y = this.getValue(l, "y", 0) * n, d.rotation = this.getValue(l, "rotation", 0), d.scaleX = this.getValue(l, "scaleX", 1), d.scaleY = this.getValue(l, "scaleY", 1), d.shearX = this.getValue(l, "shearX", 0), d.shearY = this.getValue(l, "shearY", 0), d.transformMode = e.transformModeFromString(this.getValue(l, "transform", "normal")), r.bones.push(d)
                        }
                    if (s.slots)
                        for (a = 0; a < s.slots.length; a++) {
                            var u = (S = s.slots[a]).name,
                                _ = S.bone,
                                f = r.findBone(_);
                            if (null == f) throw new Error("Slot bone not found: " + _);
                            var d = new t.SlotData(r.slots.length, u, f),
                                p = this.getValue(S, "color", null);
                            null != p && d.color.setFromString(p);
                            var m = this.getValue(S, "dark", null);
                            null != m && (d.darkColor = new t.Color(1, 1, 1, 1), d.darkColor.setFromString(m)), d.attachmentName = this.getValue(S, "attachment", null), d.blendMode = e.blendModeFromString(this.getValue(S, "blend", "normal")), r.slots.push(d)
                        }
                    if (s.ik)
                        for (a = 0; a < s.ik.length; a++) {
                            var y = s.ik[a];
                            (d = new t.IkConstraintData(y.name)).order = this.getValue(y, "order", 0);
                            for (var v = 0; v < y.bones.length; v++) {
                                _ = y.bones[v];
                                if (null == (x = r.findBone(_))) throw new Error("IK bone not found: " + _);
                                d.bones.push(x)
                            }
                            var g = y.target;
                            if (d.target = r.findBone(g), null == d.target) throw new Error("IK target bone not found: " + g);
                            d.bendDirection = this.getValue(y, "bendPositive", !0) ? 1 : -1, d.mix = this.getValue(y, "mix", 1), r.ikConstraints.push(d)
                        }
                    if (s.transform)
                        for (a = 0; a < s.transform.length; a++) {
                            y = s.transform[a];
                            (d = new t.TransformConstraintData(y.name)).order = this.getValue(y, "order", 0);
                            for (v = 0; v < y.bones.length; v++) {
                                _ = y.bones[v];
                                if (null == (x = r.findBone(_))) throw new Error("Transform constraint bone not found: " + _);
                                d.bones.push(x)
                            }
                            g = y.target;
                            if (d.target = r.findBone(g), null == d.target) throw new Error("Transform constraint target bone not found: " + g);
                            d.local = this.getValue(y, "local", !1), d.relative = this.getValue(y, "relative", !1), d.offsetRotation = this.getValue(y, "rotation", 0), d.offsetX = this.getValue(y, "x", 0) * n, d.offsetY = this.getValue(y, "y", 0) * n, d.offsetScaleX = this.getValue(y, "scaleX", 0), d.offsetScaleY = this.getValue(y, "scaleY", 0), d.offsetShearY = this.getValue(y, "shearY", 0), d.rotateMix = this.getValue(y, "rotateMix", 1), d.translateMix = this.getValue(y, "translateMix", 1), d.scaleMix = this.getValue(y, "scaleMix", 1), d.shearMix = this.getValue(y, "shearMix", 1), r.transformConstraints.push(d)
                        }
                    if (s.path)
                        for (a = 0; a < s.path.length; a++) {
                            y = s.path[a];
                            (d = new t.PathConstraintData(y.name)).order = this.getValue(y, "order", 0);
                            for (v = 0; v < y.bones.length; v++) {
                                var x;
                                _ = y.bones[v];
                                if (null == (x = r.findBone(_))) throw new Error("Transform constraint bone not found: " + _);
                                d.bones.push(x)
                            }
                            g = y.target;
                            if (d.target = r.findSlot(g), null == d.target) throw new Error("Path target slot not found: " + g);
                            d.positionMode = e.positionModeFromString(this.getValue(y, "positionMode", "percent")), d.spacingMode = e.spacingModeFromString(this.getValue(y, "spacingMode", "length")), d.rotateMode = e.rotateModeFromString(this.getValue(y, "rotateMode", "tangent")), d.offsetRotation = this.getValue(y, "rotation", 0), d.position = this.getValue(y, "position", 0), d.positionMode == t.PositionMode.Fixed && (d.position *= n), d.spacing = this.getValue(y, "spacing", 0), d.spacingMode != t.SpacingMode.Length && d.spacingMode != t.SpacingMode.Fixed || (d.spacing *= n), d.rotateMix = this.getValue(y, "rotateMix", 1), d.translateMix = this.getValue(y, "translateMix", 1), r.pathConstraints.push(d)
                        }
                    if (s.skins)
                        for (var b in s.skins) {
                            var A = s.skins[b],
                                C = new t.Skin(b);
                            for (var u in A) {
                                var T = r.findSlotIndex(u);
                                if (-1 == T) throw new Error("Slot not found: " + u);
                                var S = A[u];
                                for (var w in S) {
                                    var E = this.readAttachment(S[w], C, T, w, r);
                                    null != E && C.addAttachment(T, w, E)
                                }
                            }
                            r.skins.push(C), "default" == C.name && (r.defaultSkin = C)
                        }
                    a = 0;
                    for (var M = this.linkedMeshes.length; a < M; a++) {
                        var D = this.linkedMeshes[a];
                        if (null == (C = null == D.skin ? r.defaultSkin : r.findSkin(D.skin))) throw new Error("Skin not found: " + D.skin);
                        var B = C.getAttachment(D.slotIndex, D.parent);
                        if (null == B) throw new Error("Parent mesh not found: " + D.parent);
                        D.mesh.setParentMesh(B), D.mesh.updateUVs()
                    }
                    if (this.linkedMeshes.length = 0, s.events)
                        for (var I in s.events) {
                            var P = s.events[I];
                            (d = new t.EventData(I)).intValue = this.getValue(P, "int", 0), d.floatValue = this.getValue(P, "float", 0), d.stringValue = this.getValue(P, "string", ""), r.events.push(d)
                        }
                    if (s.animations)
                        for (var R in s.animations) {
                            var O = s.animations[R];
                            this.readAnimation(O, R, r)
                        }
                    return r
                }, e.prototype.readAttachment = function(e, n, r, s, o) {
                    var a = this.scale;
                    switch (s = this.getValue(e, "name", s), this.getValue(e, "type", "region")) {
                        case "region":
                            var l = this.getValue(e, "path", s),
                                h = this.attachmentLoader.newRegionAttachment(n, s, l);
                            return null == h ? null : (h.path = l, h.x = this.getValue(e, "x", 0) * a, h.y = this.getValue(e, "y", 0) * a, h.scaleX = this.getValue(e, "scaleX", 1), h.scaleY = this.getValue(e, "scaleY", 1), h.rotation = this.getValue(e, "rotation", 0), h.width = e.width * a, h.height = e.height * a, null != (b = this.getValue(e, "color", null)) && h.color.setFromString(b), h.updateOffset(), h);
                        case "boundingbox":
                            var c = this.attachmentLoader.newBoundingBoxAttachment(n, s);
                            return null == c ? null : (this.readVertices(e, c, e.vertexCount << 1), null != (b = this.getValue(e, "color", null)) && c.color.setFromString(b), c);
                        case "mesh":
                        case "linkedmesh":
                            l = this.getValue(e, "path", s);
                            var u = this.attachmentLoader.newMeshAttachment(n, s, l);
                            if (null == u) return null;
                            u.path = l, null != (b = this.getValue(e, "color", null)) && u.color.setFromString(b);
                            var _ = this.getValue(e, "parent", null);
                            if (null != _) return u.inheritDeform = this.getValue(e, "deform", !0), this.linkedMeshes.push(new i(u, this.getValue(e, "skin", null), r, _)), u;
                            var f = e.uvs;
                            return this.readVertices(e, u, f.length), u.triangles = e.triangles, u.regionUVs = f, u.updateUVs(), u.hullLength = 2 * this.getValue(e, "hull", 0), u;
                        case "path":
                            if (null == (l = this.attachmentLoader.newPathAttachment(n, s))) return null;
                            l.closed = this.getValue(e, "closed", !1), l.constantSpeed = this.getValue(e, "constantSpeed", !0);
                            var d = e.vertexCount;
                            this.readVertices(e, l, d << 1);
                            for (var p = t.Utils.newArray(d / 3, 0), m = 0; m < e.lengths.length; m++) p[m] = e.lengths[m] * a;
                            return l.lengths = p, null != (b = this.getValue(e, "color", null)) && l.color.setFromString(b), l;
                        case "point":
                            var y = this.attachmentLoader.newPointAttachment(n, s);
                            return null == y ? null : (y.x = this.getValue(e, "x", 0) * a, y.y = this.getValue(e, "y", 0) * a, y.rotation = this.getValue(e, "rotation", 0), null != (b = this.getValue(e, "color", null)) && y.color.setFromString(b), y);
                        case "clipping":
                            var v = this.attachmentLoader.newClippingAttachment(n, s);
                            if (null == v) return null;
                            var g = this.getValue(e, "end", null);
                            if (null != g) {
                                var x = o.findSlot(g);
                                if (null == x) throw new Error("Clipping end slot not found: " + g);
                                v.endSlot = x
                            }
                            var b;
                            d = e.vertexCount;
                            return this.readVertices(e, v, d << 1), null != (b = this.getValue(e, "color", null)) && v.color.setFromString(b), v
                    }
                    return null
                }, e.prototype.readVertices = function(e, i, n) {
                    var r = this.scale;
                    i.worldVerticesLength = n;
                    var s = e.vertices;
                    if (n != s.length) {
                        var o = new Array,
                            a = new Array;
                        for (u = 0, _ = s.length; u < _;) {
                            var l = s[u++];
                            a.push(l);
                            for (var h = u + 4 * l; u < h; u += 4) a.push(s[u]), o.push(s[u + 1] * r), o.push(s[u + 2] * r), o.push(s[u + 3])
                        }
                        i.bones = a, i.vertices = t.Utils.toFloatArray(o)
                    } else {
                        var c = t.Utils.toFloatArray(s);
                        if (1 != r)
                            for (var u = 0, _ = s.length; u < _; u++) c[u] *= r;
                        i.vertices = c
                    }
                }, e.prototype.readAnimation = function(e, i, n) {
                    var r = this.scale,
                        s = new Array,
                        o = 0;
                    if (e.slots)
                        for (var a in e.slots) {
                            var l = e.slots[a];
                            if (-1 == (J = n.findSlotIndex(a))) throw new Error("Slot not found: " + a);
                            for (var h in l) {
                                var c = l[h];
                                if ("attachment" == h) {
                                    (x = new t.AttachmentTimeline(c.length)).slotIndex = J;
                                    for (var u = 0, _ = 0; _ < c.length; _++) {
                                        var f = c[_];
                                        x.setFrame(u++, f.time, f.name)
                                    }
                                    s.push(x), o = Math.max(o, x.frames[x.getFrameCount() - 1])
                                } else if ("color" == h) {
                                    (x = new t.ColorTimeline(c.length)).slotIndex = J;
                                    for (u = 0, _ = 0; _ < c.length; _++) {
                                        f = c[_];
                                        var d = new t.Color;
                                        d.setFromString(f.color), x.setFrame(u, f.time, d.r, d.g, d.b, d.a), this.readCurve(f, x, u), u++
                                    }
                                    s.push(x), o = Math.max(o, x.frames[(x.getFrameCount() - 1) * t.ColorTimeline.ENTRIES])
                                } else {
                                    if ("twoColor" != h) throw new Error("Invalid timeline type for a slot: " + h + " (" + a + ")");
                                    (x = new t.TwoColorTimeline(c.length)).slotIndex = J;
                                    for (u = 0, _ = 0; _ < c.length; _++) {
                                        f = c[_];
                                        var p = new t.Color,
                                            m = new t.Color;
                                        p.setFromString(f.light), m.setFromString(f.dark), x.setFrame(u, f.time, p.r, p.g, p.b, p.a, m.r, m.g, m.b), this.readCurve(f, x, u), u++
                                    }
                                    s.push(x), o = Math.max(o, x.frames[(x.getFrameCount() - 1) * t.TwoColorTimeline.ENTRIES])
                                }
                            }
                        }
                    if (e.bones)
                        for (var y in e.bones) {
                            var v = e.bones[y],
                                g = n.findBoneIndex(y);
                            if (-1 == g) throw new Error("Bone not found: " + y);
                            for (var h in v) {
                                c = v[h];
                                if ("rotate" === h) {
                                    (x = new t.RotateTimeline(c.length)).boneIndex = g;
                                    for (u = 0, _ = 0; _ < c.length; _++) {
                                        f = c[_];
                                        x.setFrame(u, f.time, f.angle), this.readCurve(f, x, u), u++
                                    }
                                    s.push(x), o = Math.max(o, x.frames[(x.getFrameCount() - 1) * t.RotateTimeline.ENTRIES])
                                } else {
                                    if ("translate" !== h && "scale" !== h && "shear" !== h) throw new Error("Invalid timeline type for a bone: " + h + " (" + y + ")");
                                    var x = null,
                                        b = 1;
                                    "scale" === h ? x = new t.ScaleTimeline(c.length) : "shear" === h ? x = new t.ShearTimeline(c.length) : (x = new t.TranslateTimeline(c.length), b = r), x.boneIndex = g;
                                    for (u = 0, _ = 0; _ < c.length; _++) {
                                        f = c[_];
                                        var A = this.getValue(f, "x", 0),
                                            C = this.getValue(f, "y", 0);
                                        x.setFrame(u, f.time, A * b, C * b), this.readCurve(f, x, u), u++
                                    }
                                    s.push(x), o = Math.max(o, x.frames[(x.getFrameCount() - 1) * t.TranslateTimeline.ENTRIES])
                                }
                            }
                        }
                    if (e.ik)
                        for (var T in e.ik) {
                            var S = e.ik[T],
                                w = n.findIkConstraint(T);
                            (x = new t.IkConstraintTimeline(S.length)).ikConstraintIndex = n.ikConstraints.indexOf(w);
                            for (u = 0, _ = 0; _ < S.length; _++) {
                                f = S[_];
                                x.setFrame(u, f.time, this.getValue(f, "mix", 1), this.getValue(f, "bendPositive", !0) ? 1 : -1), this.readCurve(f, x, u), u++
                            }
                            s.push(x), o = Math.max(o, x.frames[(x.getFrameCount() - 1) * t.IkConstraintTimeline.ENTRIES])
                        }
                    if (e.transform)
                        for (var T in e.transform) {
                            S = e.transform[T], w = n.findTransformConstraint(T);
                            (x = new t.TransformConstraintTimeline(S.length)).transformConstraintIndex = n.transformConstraints.indexOf(w);
                            for (u = 0, _ = 0; _ < S.length; _++) {
                                f = S[_];
                                x.setFrame(u, f.time, this.getValue(f, "rotateMix", 1), this.getValue(f, "translateMix", 1), this.getValue(f, "scaleMix", 1), this.getValue(f, "shearMix", 1)), this.readCurve(f, x, u), u++
                            }
                            s.push(x), o = Math.max(o, x.frames[(x.getFrameCount() - 1) * t.TransformConstraintTimeline.ENTRIES])
                        }
                    if (e.paths)
                        for (var T in e.paths) {
                            S = e.paths[T];
                            var E = n.findPathConstraintIndex(T);
                            if (-1 == E) throw new Error("Path constraint not found: " + T);
                            var M = n.pathConstraints[E];
                            for (var h in S) {
                                c = S[h];
                                if ("position" === h || "spacing" === h) {
                                    x = null, b = 1;
                                    "spacing" === h ? (x = new t.PathConstraintSpacingTimeline(c.length), M.spacingMode != t.SpacingMode.Length && M.spacingMode != t.SpacingMode.Fixed || (b = r)) : (x = new t.PathConstraintPositionTimeline(c.length), M.positionMode == t.PositionMode.Fixed && (b = r)), x.pathConstraintIndex = E;
                                    for (u = 0, _ = 0; _ < c.length; _++) {
                                        f = c[_];
                                        x.setFrame(u, f.time, this.getValue(f, h, 0) * b), this.readCurve(f, x, u), u++
                                    }
                                    s.push(x), o = Math.max(o, x.frames[(x.getFrameCount() - 1) * t.PathConstraintPositionTimeline.ENTRIES])
                                } else if ("mix" === h) {
                                    (x = new t.PathConstraintMixTimeline(c.length)).pathConstraintIndex = E;
                                    for (u = 0, _ = 0; _ < c.length; _++) {
                                        f = c[_];
                                        x.setFrame(u, f.time, this.getValue(f, "rotateMix", 1), this.getValue(f, "translateMix", 1)), this.readCurve(f, x, u), u++
                                    }
                                    s.push(x), o = Math.max(o, x.frames[(x.getFrameCount() - 1) * t.PathConstraintMixTimeline.ENTRIES])
                                }
                            }
                        }
                    if (e.deform)
                        for (var D in e.deform) {
                            var B = e.deform[D],
                                I = n.findSkin(D);
                            if (null == I) throw new Error("Skin not found: " + D);
                            for (var a in B) {
                                l = B[a];
                                if (-1 == (J = n.findSlotIndex(a))) throw new Error("Slot not found: " + l.name);
                                for (var h in l) {
                                    c = l[h];
                                    var P = I.getAttachment(J, h);
                                    if (null == P) throw new Error("Deform attachment not found: " + c.name);
                                    var R = null != P.bones,
                                        O = P.vertices,
                                        L = R ? O.length / 3 * 2 : O.length;
                                    (x = new t.DeformTimeline(c.length)).slotIndex = J, x.attachment = P;
                                    u = 0;
                                    for (var F = 0; F < c.length; F++) {
                                        f = c[F];
                                        var N = void 0,
                                            V = this.getValue(f, "vertices", null);
                                        if (null == V) N = R ? t.Utils.newFloatArray(L) : O;
                                        else {
                                            N = t.Utils.newFloatArray(L);
                                            var k = this.getValue(f, "offset", 0);
                                            if (t.Utils.arrayCopy(V, 0, N, k, V.length), 1 != r)
                                                for (var G = (_ = k) + V.length; _ < G; _++) N[_] *= r;
                                            if (!R)
                                                for (_ = 0; _ < L; _++) N[_] += O[_]
                                        }
                                        x.setFrame(u, f.time, N), this.readCurve(f, x, u), u++
                                    }
                                    s.push(x), o = Math.max(o, x.frames[x.getFrameCount() - 1])
                                }
                            }
                        }
                    var U = e.drawOrder;
                    if (null == U && (U = e.draworder), null != U) {
                        x = new t.DrawOrderTimeline(U.length);
                        var z = n.slots.length;
                        for (u = 0, F = 0; F < U.length; F++) {
                            var j = U[F],
                                W = null,
                                H = this.getValue(j, "offsets", null);
                            if (null != H) {
                                W = t.Utils.newArray(z, -1);
                                var X = t.Utils.newArray(z - H.length, 0),
                                    Y = 0,
                                    q = 0;
                                for (_ = 0; _ < H.length; _++) {
                                    var J, Z = H[_];
                                    if (-1 == (J = n.findSlotIndex(Z.slot))) throw new Error("Slot not found: " + Z.slot);
                                    for (; Y != J;) X[q++] = Y++;
                                    W[Y + Z.offset] = Y++
                                }
                                for (; Y < z;) X[q++] = Y++;
                                for (_ = z - 1; _ >= 0; _--) - 1 == W[_] && (W[_] = X[--q])
                            }
                            x.setFrame(u++, j.time, W)
                        }
                        s.push(x), o = Math.max(o, x.frames[x.getFrameCount() - 1])
                    }
                    if (e.events) {
                        for (x = new t.EventTimeline(e.events.length), u = 0, _ = 0; _ < e.events.length; _++) {
                            var K = e.events[_],
                                Q = n.findEvent(K.name);
                            if (null == Q) throw new Error("Event not found: " + K.name);
                            var $ = new t.Event(t.Utils.toSinglePrecision(K.time), Q);
                            $.intValue = this.getValue(K, "int", Q.intValue), $.floatValue = this.getValue(K, "float", Q.floatValue), $.stringValue = this.getValue(K, "string", Q.stringValue), x.setFrame(u++, $)
                        }
                        s.push(x), o = Math.max(o, x.frames[x.getFrameCount() - 1])
                    }
                    if (isNaN(o)) throw new Error("Error while parsing animation, duration is NaN");
                    n.animations.push(new t.Animation(i, s, o))
                }, e.prototype.readCurve = function(t, e, i) {
                    if (t.curve)
                        if ("stepped" === t.curve) e.setStepped(i);
                        else if ("[object Array]" === Object.prototype.toString.call(t.curve)) {
                        var n = t.curve;
                        e.setCurve(i, n[0], n[1], n[2], n[3])
                    }
                }, e.prototype.getValue = function(t, e, i) {
                    return void 0 !== t[e] ? t[e] : i
                }, e.blendModeFromString = function(e) {
                    if ("normal" == (e = e.toLowerCase())) return t.BlendMode.Normal;
                    if ("additive" == e) return t.BlendMode.Additive;
                    if ("multiply" == e) return t.BlendMode.Multiply;
                    if ("screen" == e) return t.BlendMode.Screen;
                    throw new Error("Unknown blend mode: " + e)
                }, e.positionModeFromString = function(e) {
                    if ("fixed" == (e = e.toLowerCase())) return t.PositionMode.Fixed;
                    if ("percent" == e) return t.PositionMode.Percent;
                    throw new Error("Unknown position mode: " + e)
                }, e.spacingModeFromString = function(e) {
                    if ("length" == (e = e.toLowerCase())) return t.SpacingMode.Length;
                    if ("fixed" == e) return t.SpacingMode.Fixed;
                    if ("percent" == e) return t.SpacingMode.Percent;
                    throw new Error("Unknown position mode: " + e)
                }, e.rotateModeFromString = function(e) {
                    if ("tangent" == (e = e.toLowerCase())) return t.RotateMode.Tangent;
                    if ("chain" == e) return t.RotateMode.Chain;
                    if ("chainscale" == e) return t.RotateMode.ChainScale;
                    throw new Error("Unknown rotate mode: " + e)
                }, e.transformModeFromString = function(e) {
                    if ("normal" == (e = e.toLowerCase())) return t.TransformMode.Normal;
                    if ("onlytranslation" == e) return t.TransformMode.OnlyTranslation;
                    if ("norotationorreflection" == e) return t.TransformMode.NoRotationOrReflection;
                    if ("noscale" == e) return t.TransformMode.NoScale;
                    if ("noscaleorreflection" == e) return t.TransformMode.NoScaleOrReflection;
                    throw new Error("Unknown transform mode: " + e)
                }, e
            })();
            t.SkeletonJson = e;
            var i = (function() {
                return function(t, e, i, n) {
                    this.mesh = t, this.skin = e, this.slotIndex = i, this.parent = n
                }
            })()
        })(n || (n = {})), (function(t) {
            var e = (function() {
                function t(t) {
                    if (this.attachments = new Array, null == t) throw new Error("name cannot be null.");
                    this.name = t
                }
                return t.prototype.addAttachment = function(t, e, i) {
                    if (null == i) throw new Error("attachment cannot be null.");
                    var n = this.attachments;
                    t >= n.length && (n.length = t + 1), n[t] || (n[t] = {}), n[t][e] = i
                }, t.prototype.getAttachment = function(t, e) {
                    var i = this.attachments[t];
                    return i ? i[e] : null
                }, t.prototype.attachAll = function(t, e) {
                    for (var i = 0, n = 0; n < t.slots.length; n++) {
                        var r = t.slots[n],
                            s = r.getAttachment();
                        if (s && i < e.attachments.length) {
                            var o = e.attachments[i];
                            for (var a in o) {
                                if (s == o[a]) {
                                    var l = this.getAttachment(i, a);
                                    null != l && r.setAttachment(l);
                                    break
                                }
                            }
                        }
                        i++
                    }
                }, t
            })();
            t.Skin = e
        })(n || (n = {})), (function(t) {
            var e = (function() {
                function e(e, i) {
                    if (this.attachmentVertices = new Array, null == e) throw new Error("data cannot be null.");
                    if (null == i) throw new Error("bone cannot be null.");
                    this.data = e, this.bone = i, this.color = new t.Color, this.darkColor = null == e.darkColor ? null : new t.Color, this.setToSetupPose()
                }
                return e.prototype.getAttachment = function() {
                    return this.attachment
                }, e.prototype.setAttachment = function(t) {
                    this.attachment != t && (this.attachment = t, this.attachmentTime = this.bone.skeleton.time, this.attachmentVertices.length = 0)
                }, e.prototype.setAttachmentTime = function(t) {
                    this.attachmentTime = this.bone.skeleton.time - t
                }, e.prototype.getAttachmentTime = function() {
                    return this.bone.skeleton.time - this.attachmentTime
                }, e.prototype.setToSetupPose = function() {
                    this.color.setFromColor(this.data.color), null != this.darkColor && this.darkColor.setFromColor(this.data.darkColor), null == this.data.attachmentName ? this.attachment = null : (this.attachment = null, this.setAttachment(this.bone.skeleton.getAttachment(this.data.index, this.data.attachmentName)))
                }, e
            })();
            t.Slot = e
        })(n || (n = {})), (function(t) {
            var e = (function() {
                return function(e, i, n) {
                    if (this.color = new t.Color(1, 1, 1, 1), e < 0) throw new Error("index must be >= 0.");
                    if (null == i) throw new Error("name cannot be null.");
                    if (null == n) throw new Error("boneData cannot be null.");
                    this.index = e, this.name = i, this.boneData = n
                }
            })();
            t.SlotData = e
        })(n || (n = {})), (function(t) {
            var e, i, n = (function() {
                function t(t) {
                    this._image = t
                }
                return t.prototype.getImage = function() {
                    return this._image
                }, t.filterFromString = function(t) {
                    switch (t.toLowerCase()) {
                        case "nearest":
                            return e.Nearest;
                        case "linear":
                            return e.Linear;
                        case "mipmap":
                            return e.MipMap;
                        case "mipmapnearestnearest":
                            return e.MipMapNearestNearest;
                        case "mipmaplinearnearest":
                            return e.MipMapLinearNearest;
                        case "mipmapnearestlinear":
                            return e.MipMapNearestLinear;
                        case "mipmaplinearlinear":
                            return e.MipMapLinearLinear;
                        default:
                            throw new Error("Unknown texture filter " + t)
                    }
                }, t.wrapFromString = function(t) {
                    switch (t.toLowerCase()) {
                        case "mirroredtepeat":
                            return i.MirroredRepeat;
                        case "clamptoedge":
                            return i.ClampToEdge;
                        case "repeat":
                            return i.Repeat;
                        default:
                            throw new Error("Unknown texture wrap " + t)
                    }
                }, t
            })();
            t.Texture = n, (function(t) {
                t[t.Nearest = 9728] = "Nearest", t[t.Linear = 9729] = "Linear", t[t.MipMap = 9987] = "MipMap", t[t.MipMapNearestNearest = 9984] = "MipMapNearestNearest", t[t.MipMapLinearNearest = 9985] = "MipMapLinearNearest", t[t.MipMapNearestLinear = 9986] = "MipMapNearestLinear", t[t.MipMapLinearLinear = 9987] = "MipMapLinearLinear"
            })(e = t.TextureFilter || (t.TextureFilter = {})), (function(t) {
                t[t.MirroredRepeat = 33648] = "MirroredRepeat", t[t.ClampToEdge = 33071] = "ClampToEdge", t[t.Repeat = 10497] = "Repeat"
            })(i = t.TextureWrap || (t.TextureWrap = {}));
            var s = (function() {
                return function() {
                    this.u = 0, this.v = 0, this.u2 = 0, this.v2 = 0, this.width = 0, this.height = 0, this.rotate = !1, this.offsetX = 0, this.offsetY = 0, this.originalWidth = 0, this.originalHeight = 0
                }
            })();
            t.TextureRegion = s;
            var o = (function(t) {
                function e() {
                    return null !== t && t.apply(this, arguments) || this
                }
                return r(e, t), e.prototype.setFilters = function(t, e) {}, e.prototype.setWraps = function(t, e) {}, e.prototype.dispose = function() {}, e
            })(t.Texture);
            t.FakeTexture = o
        })(n || (n = {})), (function(t) {
            var e = (function() {
                function e(t, e) {
                    this.pages = new Array, this.regions = new Array, this.load(t, e)
                }
                return e.prototype.load = function(e, r) {
                    if (null == r) throw new Error("textureLoader cannot be null.");
                    for (var o = new i(e), a = new Array(4), l = null;;) {
                        var h = o.readLine();
                        if (null == h) break;
                        if (0 == (h = h.trim()).length) l = null;
                        else if (l) {
                            var c = new s;
                            c.name = h, c.page = l, c.rotate = "true" == o.readValue(), o.readTuple(a);
                            var u = parseInt(a[0]),
                                _ = parseInt(a[1]);
                            o.readTuple(a);
                            var f = parseInt(a[0]),
                                d = parseInt(a[1]);
                            c.u = u / l.width, c.v = _ / l.height, c.rotate ? (c.u2 = (u + d) / l.width, c.v2 = (_ + f) / l.height) : (c.u2 = (u + f) / l.width, c.v2 = (_ + d) / l.height), c.x = u, c.y = _, c.width = Math.abs(f), c.height = Math.abs(d), 4 == o.readTuple(a) && 4 == o.readTuple(a) && o.readTuple(a), c.originalWidth = parseInt(a[0]), c.originalHeight = parseInt(a[1]), o.readTuple(a), c.offsetX = parseInt(a[0]), c.offsetY = parseInt(a[1]), c.index = parseInt(o.readValue()), c.texture = l.texture, this.regions.push(c)
                        } else {
                            (l = new n).name = h, 2 == o.readTuple(a) && (l.width = parseInt(a[0]), l.height = parseInt(a[1]), o.readTuple(a)), o.readTuple(a), l.minFilter = t.Texture.filterFromString(a[0]), l.magFilter = t.Texture.filterFromString(a[1]);
                            var p = o.readValue();
                            l.uWrap = t.TextureWrap.ClampToEdge, l.vWrap = t.TextureWrap.ClampToEdge, "x" == p ? l.uWrap = t.TextureWrap.Repeat : "y" == p ? l.vWrap = t.TextureWrap.Repeat : "xy" == p && (l.uWrap = l.vWrap = t.TextureWrap.Repeat), l.texture = r(h), l.texture.setFilters(l.minFilter, l.magFilter), l.texture.setWraps(l.uWrap, l.vWrap), l.width = l.texture.getImage().width, l.height = l.texture.getImage().height, this.pages.push(l)
                        }
                    }
                }, e.prototype.findRegion = function(t) {
                    for (var e = 0; e < this.regions.length; e++)
                        if (this.regions[e].name == t) return this.regions[e];
                    return null
                }, e.prototype.dispose = function() {
                    for (var t = 0; t < this.pages.length; t++) this.pages[t].texture.dispose()
                }, e
            })();
            t.TextureAtlas = e;
            var i = (function() {
                    function t(t) {
                        this.index = 0, this.lines = t.split(/\r\n|\r|\n/)
                    }
                    return t.prototype.readLine = function() {
                        return this.index >= this.lines.length ? null : this.lines[this.index++]
                    }, t.prototype.readValue = function() {
                        var t = this.readLine(),
                            e = t.indexOf(":");
                        if (-1 == e) throw new Error("Invalid line: " + t);
                        return t.substring(e + 1).trim()
                    }, t.prototype.readTuple = function(t) {
                        var e = this.readLine(),
                            i = e.indexOf(":");
                        if (-1 == i) throw new Error("Invalid line: " + e);
                        for (var n = 0, r = i + 1; n < 3; n++) {
                            var s = e.indexOf(",", r);
                            if (-1 == s) break;
                            t[n] = e.substr(r, s - r).trim(), r = s + 1
                        }
                        return t[n] = e.substring(r).trim(), n + 1
                    }, t
                })(),
                n = (function() {
                    return function() {}
                })();
            t.TextureAtlasPage = n;
            var s = (function(t) {
                function e() {
                    return null !== t && t.apply(this, arguments) || this
                }
                return r(e, t), e
            })(t.TextureRegion);
            t.TextureAtlasRegion = s
        })(n || (n = {})), (function(t) {
            var e = (function() {
                function e(e, i) {
                    if (this.rotateMix = 0, this.translateMix = 0, this.scaleMix = 0, this.shearMix = 0, this.temp = new t.Vector2, null == e) throw new Error("data cannot be null.");
                    if (null == i) throw new Error("skeleton cannot be null.");
                    this.data = e, this.rotateMix = e.rotateMix, this.translateMix = e.translateMix, this.scaleMix = e.scaleMix, this.shearMix = e.shearMix, this.bones = new Array;
                    for (var n = 0; n < e.bones.length; n++) this.bones.push(i.findBone(e.bones[n].name));
                    this.target = i.findBone(e.target.name)
                }
                return e.prototype.apply = function() {
                    this.update()
                }, e.prototype.update = function() {
                    this.data.local ? this.data.relative ? this.applyRelativeLocal() : this.applyAbsoluteLocal() : this.data.relative ? this.applyRelativeWorld() : this.applyAbsoluteWorld()
                }, e.prototype.applyAbsoluteWorld = function() {
                    for (var e = this.rotateMix, i = this.translateMix, n = this.scaleMix, r = this.shearMix, s = this.target, o = s.a, a = s.b, l = s.c, h = s.d, c = o * h - a * l > 0 ? t.MathUtils.degRad : -t.MathUtils.degRad, u = this.data.offsetRotation * c, _ = this.data.offsetShearY * c, f = this.bones, d = 0, p = f.length; d < p; d++) {
                        var m = f[d],
                            y = !1;
                        if (0 != e) {
                            var v = m.a,
                                g = m.b,
                                x = m.c,
                                b = m.d;
                            (E = Math.atan2(l, o) - Math.atan2(x, v) + u) > t.MathUtils.PI ? E -= t.MathUtils.PI2 : E < -t.MathUtils.PI && (E += t.MathUtils.PI2), E *= e;
                            var A = Math.cos(E),
                                C = Math.sin(E);
                            m.a = A * v - C * x, m.b = A * g - C * b, m.c = C * v + A * x, m.d = C * g + A * b, y = !0
                        }
                        if (0 != i) {
                            var T = this.temp;
                            s.localToWorld(T.set(this.data.offsetX, this.data.offsetY)), m.worldX += (T.x - m.worldX) * i, m.worldY += (T.y - m.worldY) * i, y = !0
                        }
                        if (n > 0) {
                            var S = Math.sqrt(m.a * m.a + m.c * m.c),
                                w = Math.sqrt(o * o + l * l);
                            S > 1e-5 && (S = (S + (w - S + this.data.offsetScaleX) * n) / S), m.a *= S, m.c *= S, S = Math.sqrt(m.b * m.b + m.d * m.d), w = Math.sqrt(a * a + h * h), S > 1e-5 && (S = (S + (w - S + this.data.offsetScaleY) * n) / S), m.b *= S, m.d *= S, y = !0
                        }
                        if (r > 0) {
                            g = m.b, b = m.d;
                            var E, M = Math.atan2(b, g);
                            (E = Math.atan2(h, a) - Math.atan2(l, o) - (M - Math.atan2(m.c, m.a))) > t.MathUtils.PI ? E -= t.MathUtils.PI2 : E < -t.MathUtils.PI && (E += t.MathUtils.PI2), E = M + (E + _) * r;
                            S = Math.sqrt(g * g + b * b);
                            m.b = Math.cos(E) * S, m.d = Math.sin(E) * S, y = !0
                        }
                        y && (m.appliedValid = !1)
                    }
                }, e.prototype.applyRelativeWorld = function() {
                    for (var e = this.rotateMix, i = this.translateMix, n = this.scaleMix, r = this.shearMix, s = this.target, o = s.a, a = s.b, l = s.c, h = s.d, c = o * h - a * l > 0 ? t.MathUtils.degRad : -t.MathUtils.degRad, u = this.data.offsetRotation * c, _ = this.data.offsetShearY * c, f = this.bones, d = 0, p = f.length; d < p; d++) {
                        var m = f[d],
                            y = !1;
                        if (0 != e) {
                            var v = m.a,
                                g = m.b,
                                x = m.c,
                                b = m.d;
                            (w = Math.atan2(l, o) + u) > t.MathUtils.PI ? w -= t.MathUtils.PI2 : w < -t.MathUtils.PI && (w += t.MathUtils.PI2), w *= e;
                            var A = Math.cos(w),
                                C = Math.sin(w);
                            m.a = A * v - C * x, m.b = A * g - C * b, m.c = C * v + A * x, m.d = C * g + A * b, y = !0
                        }
                        if (0 != i) {
                            var T = this.temp;
                            s.localToWorld(T.set(this.data.offsetX, this.data.offsetY)), m.worldX += T.x * i, m.worldY += T.y * i, y = !0
                        }
                        if (n > 0) {
                            var S = (Math.sqrt(o * o + l * l) - 1 + this.data.offsetScaleX) * n + 1;
                            m.a *= S, m.c *= S, S = (Math.sqrt(a * a + h * h) - 1 + this.data.offsetScaleY) * n + 1, m.b *= S, m.d *= S, y = !0
                        }
                        if (r > 0) {
                            var w;
                            (w = Math.atan2(h, a) - Math.atan2(l, o)) > t.MathUtils.PI ? w -= t.MathUtils.PI2 : w < -t.MathUtils.PI && (w += t.MathUtils.PI2);
                            g = m.b, b = m.d;
                            w = Math.atan2(b, g) + (w - t.MathUtils.PI / 2 + _) * r;
                            S = Math.sqrt(g * g + b * b);
                            m.b = Math.cos(w) * S, m.d = Math.sin(w) * S, y = !0
                        }
                        y && (m.appliedValid = !1)
                    }
                }, e.prototype.applyAbsoluteLocal = function() {
                    var t = this.rotateMix,
                        e = this.translateMix,
                        i = this.scaleMix,
                        n = this.shearMix,
                        r = this.target;
                    r.appliedValid || r.updateAppliedTransform();
                    for (var s = this.bones, o = 0, a = s.length; o < a; o++) {
                        var l = s[o];
                        l.appliedValid || l.updateAppliedTransform();
                        var h = l.arotation;
                        if (0 != t) {
                            var c = r.arotation - h + this.data.offsetRotation;
                            h += (c -= 360 * (16384 - (16384.499999999996 - c / 360 | 0))) * t
                        }
                        var u = l.ax,
                            _ = l.ay;
                        0 != e && (u += (r.ax - u + this.data.offsetX) * e, _ += (r.ay - _ + this.data.offsetY) * e);
                        var f = l.ascaleX,
                            d = l.ascaleY;
                        i > 0 && (f > 1e-5 && (f = (f + (r.ascaleX - f + this.data.offsetScaleX) * i) / f), d > 1e-5 && (d = (d + (r.ascaleY - d + this.data.offsetScaleY) * i) / d));
                        var p = l.ashearY;
                        if (n > 0) {
                            c = r.ashearY - p + this.data.offsetShearY;
                            c -= 360 * (16384 - (16384.499999999996 - c / 360 | 0)), l.shearY += c * n
                        }
                        l.updateWorldTransformWith(u, _, h, f, d, l.ashearX, p)
                    }
                }, e.prototype.applyRelativeLocal = function() {
                    var t = this.rotateMix,
                        e = this.translateMix,
                        i = this.scaleMix,
                        n = this.shearMix,
                        r = this.target;
                    r.appliedValid || r.updateAppliedTransform();
                    for (var s = this.bones, o = 0, a = s.length; o < a; o++) {
                        var l = s[o];
                        l.appliedValid || l.updateAppliedTransform();
                        var h = l.arotation;
                        0 != t && (h += (r.arotation + this.data.offsetRotation) * t);
                        var c = l.ax,
                            u = l.ay;
                        0 != e && (c += (r.ax + this.data.offsetX) * e, u += (r.ay + this.data.offsetY) * e);
                        var _ = l.ascaleX,
                            f = l.ascaleY;
                        i > 0 && (_ > 1e-5 && (_ *= (r.ascaleX - 1 + this.data.offsetScaleX) * i + 1), f > 1e-5 && (f *= (r.ascaleY - 1 + this.data.offsetScaleY) * i + 1));
                        var d = l.ashearY;
                        n > 0 && (d += (r.ashearY + this.data.offsetShearY) * n), l.updateWorldTransformWith(c, u, h, _, f, l.ashearX, d)
                    }
                }, e.prototype.getOrder = function() {
                    return this.data.order
                }, e
            })();
            t.TransformConstraint = e
        })(n || (n = {})), (function(t) {
            var e = (function() {
                return function(t) {
                    if (this.order = 0, this.bones = new Array, this.rotateMix = 0, this.translateMix = 0, this.scaleMix = 0, this.shearMix = 0, this.offsetRotation = 0, this.offsetX = 0, this.offsetY = 0, this.offsetScaleX = 0, this.offsetScaleY = 0, this.offsetShearY = 0, this.relative = !1, this.local = !1, null == t) throw new Error("name cannot be null.");
                    this.name = t
                }
            })();
            t.TransformConstraintData = e
        })(n || (n = {})), (function(t) {
            var e = (function() {
                function e() {
                    this.convexPolygons = new Array, this.convexPolygonsIndices = new Array, this.indicesArray = new Array, this.isConcaveArray = new Array, this.triangles = new Array, this.polygonPool = new t.Pool(function() {
                        return new Array
                    }), this.polygonIndicesPool = new t.Pool(function() {
                        return new Array
                    })
                }
                return e.prototype.triangulate = function(t) {
                    var i = t,
                        n = t.length >> 1,
                        r = this.indicesArray;
                    r.length = 0;
                    for (var s = 0; s < n; s++) r[s] = s;
                    var o = this.isConcaveArray;
                    o.length = 0;
                    s = 0;
                    for (var a = n; s < a; ++s) o[s] = e.isConcave(s, n, i, r);
                    var l = this.triangles;
                    for (l.length = 0; n > 3;) {
                        for (var h = n - 1, c = (s = 0, 1);;) {
                            t: if (!o[s]) {
                                for (var u = r[h] << 1, _ = r[s] << 1, f = r[c] << 1, d = i[u], p = i[u + 1], m = i[_], y = i[_ + 1], v = i[f], g = i[f + 1], x = (c + 1) % n; x != h; x = (x + 1) % n)
                                    if (o[x]) {
                                        var b = r[x] << 1,
                                            A = i[b],
                                            C = i[b + 1];
                                        if (e.positiveArea(v, g, d, p, A, C) && e.positiveArea(d, p, m, y, A, C) && e.positiveArea(m, y, v, g, A, C)) break t
                                    }
                                break
                            }if (0 == c) {
                                do {
                                    if (!o[s]) break;
                                    s--
                                } while (s > 0);
                                break
                            }
                            h = s,
                            s = c,
                            c = (c + 1) % n
                        }
                        l.push(r[(n + s - 1) % n]), l.push(r[s]), l.push(r[(s + 1) % n]), r.splice(s, 1), o.splice(s, 1);
                        var T = (--n + s - 1) % n,
                            S = s == n ? 0 : s;
                        o[T] = e.isConcave(T, n, i, r), o[S] = e.isConcave(S, n, i, r)
                    }
                    return 3 == n && (l.push(r[2]), l.push(r[0]), l.push(r[1])), l
                }, e.prototype.decompose = function(t, i) {
                    var n = t,
                        r = this.convexPolygons;
                    this.polygonPool.freeAll(r), r.length = 0;
                    var s = this.convexPolygonsIndices;
                    this.polygonIndicesPool.freeAll(s), s.length = 0;
                    var o = this.polygonIndicesPool.obtain();
                    o.length = 0;
                    var a = this.polygonPool.obtain();
                    a.length = 0;
                    for (var l = -1, h = 0, c = 0, u = i.length; c < u; c += 3) {
                        var _ = i[c] << 1,
                            f = i[c + 1] << 1,
                            d = i[c + 2] << 1,
                            p = n[_],
                            m = n[_ + 1],
                            y = n[f],
                            v = n[f + 1],
                            g = n[d],
                            x = n[d + 1],
                            b = !1;
                        if (l == _) {
                            var A = a.length - 4,
                                C = e.winding(a[A], a[A + 1], a[A + 2], a[A + 3], g, x),
                                T = e.winding(g, x, a[0], a[1], a[2], a[3]);
                            C == h && T == h && (a.push(g), a.push(x), o.push(d), b = !0)
                        }
                        b || (a.length > 0 ? (r.push(a), s.push(o)) : (this.polygonPool.free(a), this.polygonIndicesPool.free(o)), (a = this.polygonPool.obtain()).length = 0, a.push(p), a.push(m), a.push(y), a.push(v), a.push(g), a.push(x), (o = this.polygonIndicesPool.obtain()).length = 0, o.push(_), o.push(f), o.push(d), h = e.winding(p, m, y, v, g, x), l = _)
                    }
                    a.length > 0 && (r.push(a), s.push(o));
                    for (c = 0, u = r.length; c < u; c++)
                        if (0 != (o = s[c]).length)
                            for (var S = o[0], w = o[o.length - 1], E = (a = r[c])[A = a.length - 4], M = a[A + 1], D = a[A + 2], B = a[A + 3], I = a[0], P = a[1], R = a[2], O = a[3], L = e.winding(E, M, D, B, I, P), F = 0; F < u; F++)
                                if (F != c) {
                                    var N = s[F];
                                    if (3 == N.length) {
                                        var V = N[0],
                                            k = N[1],
                                            G = N[2],
                                            U = r[F];
                                        g = U[U.length - 2], x = U[U.length - 1];
                                        if (V == S && k == w) {
                                            C = e.winding(E, M, D, B, g, x), T = e.winding(g, x, I, P, R, O);
                                            C == L && T == L && (U.length = 0, N.length = 0, a.push(g), a.push(x), o.push(G), E = D, M = B, D = g, B = x, F = 0)
                                        }
                                    }
                                }
                    for (c = r.length - 1; c >= 0; c--) 0 == (a = r[c]).length && (r.splice(c, 1), this.polygonPool.free(a), o = s[c], s.splice(c, 1), this.polygonIndicesPool.free(o));
                    return r
                }, e.isConcave = function(t, e, i, n) {
                    var r = n[(e + t - 1) % e] << 1,
                        s = n[t] << 1,
                        o = n[(t + 1) % e] << 1;
                    return !this.positiveArea(i[r], i[r + 1], i[s], i[s + 1], i[o], i[o + 1])
                }, e.positiveArea = function(t, e, i, n, r, s) {
                    return t * (s - n) + i * (e - s) + r * (n - e) >= 0
                }, e.winding = function(t, e, i, n, r, s) {
                    var o = i - t,
                        a = n - e;
                    return r * a - s * o + o * e - t * a >= 0 ? 1 : -1
                }, e
            })();
            t.Triangulator = e
        })(n || (n = {})), (function(t) {
            var e = (function() {
                function t() {
                    this.array = new Array
                }
                return t.prototype.add = function(t) {
                    var e = this.contains(t);
                    return this.array[0 | t] = 0 | t, !e
                }, t.prototype.contains = function(t) {
                    return void 0 != this.array[0 | t]
                }, t.prototype.remove = function(t) {
                    this.array[0 | t] = void 0
                }, t.prototype.clear = function() {
                    this.array.length = 0
                }, t
            })();
            t.IntSet = e;
            var i = (function() {
                function t(t, e, i, n) {
                    void 0 === t && (t = 0), void 0 === e && (e = 0), void 0 === i && (i = 0), void 0 === n && (n = 0), this.r = t, this.g = e, this.b = i, this.a = n
                }
                return t.prototype.set = function(t, e, i, n) {
                    return this.r = t, this.g = e, this.b = i, this.a = n, this.clamp(), this
                }, t.prototype.setFromColor = function(t) {
                    return this.r = t.r, this.g = t.g, this.b = t.b, this.a = t.a, this
                }, t.prototype.setFromString = function(t) {
                    return t = "#" == t.charAt(0) ? t.substr(1) : t, this.r = parseInt(t.substr(0, 2), 16) / 255, this.g = parseInt(t.substr(2, 2), 16) / 255, this.b = parseInt(t.substr(4, 2), 16) / 255, this.a = (8 != t.length ? 255 : parseInt(t.substr(6, 2), 16)) / 255, this
                }, t.prototype.add = function(t, e, i, n) {
                    return this.r += t, this.g += e, this.b += i, this.a += n, this.clamp(), this
                }, t.prototype.clamp = function() {
                    return this.r < 0 ? this.r = 0 : this.r > 1 && (this.r = 1), this.g < 0 ? this.g = 0 : this.g > 1 && (this.g = 1), this.b < 0 ? this.b = 0 : this.b > 1 && (this.b = 1), this.a < 0 ? this.a = 0 : this.a > 1 && (this.a = 1), this
                }, t.WHITE = new t(1, 1, 1, 1), t.RED = new t(1, 0, 0, 1), t.GREEN = new t(0, 1, 0, 1), t.BLUE = new t(0, 0, 1, 1), t.MAGENTA = new t(1, 0, 1, 1), t
            })();
            t.Color = i;
            var n = (function() {
                function t() {}
                return t.clamp = function(t, e, i) {
                    return t < e ? e : t > i ? i : t
                }, t.cosDeg = function(e) {
                    return Math.cos(e * t.degRad)
                }, t.sinDeg = function(e) {
                    return Math.sin(e * t.degRad)
                }, t.signum = function(t) {
                    return t > 0 ? 1 : t < 0 ? -1 : 0
                }, t.toInt = function(t) {
                    return t > 0 ? Math.floor(t) : Math.ceil(t)
                }, t.cbrt = function(t) {
                    var e = Math.pow(Math.abs(t), 1 / 3);
                    return t < 0 ? -e : e
                }, t.randomTriangular = function(e, i) {
                    return t.randomTriangularWith(e, i, .5 * (e + i))
                }, t.randomTriangularWith = function(t, e, i) {
                    var n = Math.random(),
                        r = e - t;
                    return n <= (i - t) / r ? t + Math.sqrt(n * r * (i - t)) : e - Math.sqrt((1 - n) * r * (e - i))
                }, t.PI = 3.1415927, t.PI2 = 2 * t.PI, t.radiansToDegrees = 180 / t.PI, t.radDeg = t.radiansToDegrees, t.degreesToRadians = t.PI / 180, t.degRad = t.degreesToRadians, t
            })();
            t.MathUtils = n;
            var s = (function() {
                function t() {}
                return t.prototype.apply = function(t, e, i) {
                    return t + (e - t) * this.applyInternal(i)
                }, t
            })();
            t.Interpolation = s;
            var o = (function(t) {
                function e(e) {
                    var i = t.call(this) || this;
                    return i.power = 2, i.power = e, i
                }
                return r(e, t), e.prototype.applyInternal = function(t) {
                    return t <= .5 ? Math.pow(2 * t, this.power) / 2 : Math.pow(2 * (t - 1), this.power) / (this.power % 2 == 0 ? -2 : 2) + 1
                }, e
            })(s);
            t.Pow = o;
            var a = (function(t) {
                function e(e) {
                    return t.call(this, e) || this
                }
                return r(e, t), e.prototype.applyInternal = function(t) {
                    return Math.pow(t - 1, this.power) * (this.power % 2 == 0 ? -1 : 1) + 1
                }, e
            })(o);
            t.PowOut = a;
            var l = (function() {
                function t() {}
                return t.arrayCopy = function(t, e, i, n, r) {
                    for (var s = e, o = n; s < e + r; s++, o++) i[o] = t[s]
                }, t.setArraySize = function(t, e, i) {
                    void 0 === i && (i = 0);
                    var n = t.length;
                    if (n == e) return t;
                    if (t.length = e, n < e)
                        for (var r = n; r < e; r++) t[r] = i;
                    return t
                }, t.ensureArrayCapacity = function(e, i, n) {
                    return void 0 === n && (n = 0), e.length >= i ? e : t.setArraySize(e, i, n)
                }, t.newArray = function(t, e) {
                    for (var i = new Array(t), n = 0; n < t; n++) i[n] = e;
                    return i
                }, t.newFloatArray = function(e) {
                    if (t.SUPPORTS_TYPED_ARRAYS) return new Float32Array(e);
                    for (var i = new Array(e), n = 0; n < i.length; n++) i[n] = 0;
                    return i
                }, t.newShortArray = function(e) {
                    if (t.SUPPORTS_TYPED_ARRAYS) return new Int16Array(e);
                    for (var i = new Array(e), n = 0; n < i.length; n++) i[n] = 0;
                    return i
                }, t.toFloatArray = function(e) {
                    return t.SUPPORTS_TYPED_ARRAYS ? new Float32Array(e) : e
                }, t.toSinglePrecision = function(e) {
                    return t.SUPPORTS_TYPED_ARRAYS ? Math.fround(e) : e
                }, t.webkit602BugfixHelper = function(t, e) {}, t.SUPPORTS_TYPED_ARRAYS = "undefined" != typeof Float32Array, t
            })();
            t.Utils = l;
            var h = (function() {
                function t() {}
                return t.logBones = function(t) {
                    for (var e = 0; e < t.bones.length; e++) {
                        var i = t.bones[e];
                        console.log(i.data.name + ", " + i.a + ", " + i.b + ", " + i.c + ", " + i.d + ", " + i.worldX + ", " + i.worldY)
                    }
                }, t
            })();
            t.DebugUtils = h;
            var c = (function() {
                function t(t) {
                    this.items = new Array, this.instantiator = t
                }
                return t.prototype.obtain = function() {
                    return this.items.length > 0 ? this.items.pop() : this.instantiator()
                }, t.prototype.free = function(t) {
                    t.reset && t.reset(), this.items.push(t)
                }, t.prototype.freeAll = function(t) {
                    for (var e = 0; e < t.length; e++) t[e].reset && t[e].reset(), this.items[e] = t[e]
                }, t.prototype.clear = function() {
                    this.items.length = 0
                }, t
            })();
            t.Pool = c;
            var u = (function() {
                function t(t, e) {
                    void 0 === t && (t = 0), void 0 === e && (e = 0), this.x = t, this.y = e
                }
                return t.prototype.set = function(t, e) {
                    return this.x = t, this.y = e, this
                }, t.prototype.length = function() {
                    var t = this.x,
                        e = this.y;
                    return Math.sqrt(t * t + e * e)
                }, t.prototype.normalize = function() {
                    var t = this.length();
                    return 0 != t && (this.x /= t, this.y /= t), this
                }, t
            })();
            t.Vector2 = u;
            var _ = (function() {
                function t() {
                    this.maxDelta = .064, this.framesPerSecond = 0, this.delta = 0, this.totalTime = 0, this.lastTime = Date.now() / 1e3, this.frameCount = 0, this.frameTime = 0
                }
                return t.prototype.update = function() {
                    var t = Date.now() / 1e3;
                    this.delta = t - this.lastTime, this.frameTime += this.delta, this.totalTime += this.delta, this.delta > this.maxDelta && (this.delta = this.maxDelta), this.lastTime = t, this.frameCount++, this.frameTime > 1 && (this.framesPerSecond = this.frameCount / this.frameTime, this.frameTime = 0, this.frameCount = 0)
                }, t
            })();
            t.TimeKeeper = _;
            var f = (function() {
                function t(t) {
                    void 0 === t && (t = 32), this.addedValues = 0, this.lastValue = 0, this.mean = 0, this.dirty = !0, this.values = new Array(t)
                }
                return t.prototype.hasEnoughData = function() {
                    return this.addedValues >= this.values.length
                }, t.prototype.addValue = function(t) {
                    this.addedValues < this.values.length && this.addedValues++, this.values[this.lastValue++] = t, this.lastValue > this.values.length - 1 && (this.lastValue = 0), this.dirty = !0
                }, t.prototype.getMean = function() {
                    if (this.hasEnoughData()) {
                        if (this.dirty) {
                            for (var t = 0, e = 0; e < this.values.length; e++) t += this.values[e];
                            this.mean = t / this.values.length, this.dirty = !1
                        }
                        return this.mean
                    }
                    return 0
                }, t
            })();
            t.WindowedMean = f
        })(n || (n = {})), Math.fround || (Math.fround = (function(t) {
            return function(e) {
                return t[0] = e, t[0]
            }
        })(new Float32Array(1))), (function(t) {
            var e = (function() {
                return function(t) {
                    if (null == t) throw new Error("name cannot be null.");
                    this.name = t
                }
            })();
            t.Attachment = e;
            var i = (function(t) {
                function e(i) {
                    var n = t.call(this, i) || this;
                    return n.id = (65535 & e.nextID++) << 11, n.worldVerticesLength = 0, n
                }
                return r(e, t), e.prototype.computeWorldVertices = function(t, e, i, n, r, s) {
                    i = r + (i >> 1) * s;
                    var o = t.bone.skeleton,
                        a = t.attachmentVertices,
                        l = this.vertices,
                        h = this.bones;
                    if (null != h) {
                        for (var c = 0, u = 0, _ = 0; _ < e; _ += 2) {
                            c += (m = h[c]) + 1, u += m
                        }
                        var f = o.bones;
                        if (0 == a.length)
                            for (M = r, T = 3 * u; M < i; M += s) {
                                var d = 0,
                                    p = 0,
                                    m = h[c++];
                                for (m += c; c < m; c++, T += 3) {
                                    x = f[h[c]], D = l[T], B = l[T + 1];
                                    var y = l[T + 2];
                                    d += (D * x.a + B * x.b + x.worldX) * y, p += (D * x.c + B * x.d + x.worldY) * y
                                }
                                n[M] = d, n[M + 1] = p
                            } else
                                for (var v = a, g = (M = r, T = 3 * u, u << 1); M < i; M += s) {
                                    d = 0, p = 0, m = h[c++];
                                    for (m += c; c < m; c++, T += 3, g += 2) {
                                        x = f[h[c]], D = l[T] + v[g], B = l[T + 1] + v[g + 1], y = l[T + 2];
                                        d += (D * x.a + B * x.b + x.worldX) * y, p += (D * x.c + B * x.d + x.worldY) * y
                                    }
                                    n[M] = d, n[M + 1] = p
                                }
                    } else {
                        a.length > 0 && (l = a);
                        for (var x, b = (x = t.bone).worldX, A = x.worldY, C = x.a, T = x.b, S = x.c, w = x.d, E = e, M = r; M < i; E += 2, M += s) {
                            var D = l[E],
                                B = l[E + 1];
                            n[M] = D * C + B * T + b, n[M + 1] = D * S + B * w + A
                        }
                    }
                }, e.prototype.applyDeform = function(t) {
                    return this == t
                }, e.nextID = 0, e
            })(e);
            t.VertexAttachment = i
        })(n || (n = {})), (function(t) {
            (function(t) {
                t[t.Region = 0] = "Region", t[t.BoundingBox = 1] = "BoundingBox", t[t.Mesh = 2] = "Mesh", t[t.LinkedMesh = 3] = "LinkedMesh", t[t.Path = 4] = "Path", t[t.Point = 5] = "Point"
            })(t.AttachmentType || (t.AttachmentType = {}))
        })(n || (n = {})), (function(t) {
            var e = (function(e) {
                function i(i) {
                    var n = e.call(this, i) || this;
                    return n.color = new t.Color(1, 1, 1, 1), n
                }
                return r(i, e), i
            })(t.VertexAttachment);
            t.BoundingBoxAttachment = e
        })(n || (n = {})), (function(t) {
            var e = (function(e) {
                function i(i) {
                    var n = e.call(this, i) || this;
                    return n.color = new t.Color(.2275, .2275, .8078, 1), n
                }
                return r(i, e), i
            })(t.VertexAttachment);
            t.ClippingAttachment = e
        })(n || (n = {})), (function(t) {
            var e = (function(e) {
                function i(i) {
                    var n = e.call(this, i) || this;
                    return n.color = new t.Color(1, 1, 1, 1), n.inheritDeform = !1, n.tempColor = new t.Color(0, 0, 0, 0), n
                }
                return r(i, e), i.prototype.updateUVs = function() {
                    var e = 0,
                        i = 0,
                        n = 0,
                        r = 0;
                    null == this.region ? (e = i = 0, n = r = 1) : (e = this.region.u, i = this.region.v, n = this.region.u2 - e, r = this.region.v2 - i);
                    var s = this.regionUVs;
                    null != this.uvs && this.uvs.length == s.length || (this.uvs = t.Utils.newFloatArray(s.length));
                    var o = this.uvs;
                    if (this.region.rotate)
                        for (var a = 0, l = o.length; a < l; a += 2) o[a] = e + s[a + 1] * n, o[a + 1] = i + r - s[a] * r;
                    else
                        for (a = 0, l = o.length; a < l; a += 2) o[a] = e + s[a] * n, o[a + 1] = i + s[a + 1] * r
                }, i.prototype.applyDeform = function(t) {
                    return this == t || this.inheritDeform && this.parentMesh == t
                }, i.prototype.getParentMesh = function() {
                    return this.parentMesh
                }, i.prototype.setParentMesh = function(t) {
                    this.parentMesh = t, null != t && (this.bones = t.bones, this.vertices = t.vertices, this.worldVerticesLength = t.worldVerticesLength, this.regionUVs = t.regionUVs, this.triangles = t.triangles, this.hullLength = t.hullLength, this.worldVerticesLength = t.worldVerticesLength)
                }, i
            })(t.VertexAttachment);
            t.MeshAttachment = e
        })(n || (n = {})), (function(t) {
            var e = (function(e) {
                function i(i) {
                    var n = e.call(this, i) || this;
                    return n.closed = !1, n.constantSpeed = !1, n.color = new t.Color(1, 1, 1, 1), n
                }
                return r(i, e), i
            })(t.VertexAttachment);
            t.PathAttachment = e
        })(n || (n = {})), (function(t) {
            var e = (function(e) {
                function i(i) {
                    var n = e.call(this, i) || this;
                    return n.color = new t.Color(.38, .94, 0, 1), n
                }
                return r(i, e), i.prototype.computeWorldPosition = function(t, e) {
                    return e.x = this.x * t.a + this.y * t.b + t.worldX, e.y = this.x * t.c + this.y * t.d + t.worldY, e
                }, i.prototype.computeWorldRotation = function(e) {
                    var i = t.MathUtils.cosDeg(this.rotation),
                        n = t.MathUtils.sinDeg(this.rotation),
                        r = i * e.a + n * e.b,
                        s = i * e.c + n * e.d;
                    return Math.atan2(s, r) * t.MathUtils.radDeg
                }, i
            })(t.VertexAttachment);
            t.PointAttachment = e
        })(n || (n = {})), (function(t) {
            var e = (function(e) {
                function i(i) {
                    var n = e.call(this, i) || this;
                    return n.x = 0, n.y = 0, n.scaleX = 1, n.scaleY = 1, n.rotation = 0, n.width = 0, n.height = 0, n.color = new t.Color(1, 1, 1, 1), n.offset = t.Utils.newFloatArray(8), n.uvs = t.Utils.newFloatArray(8), n.tempColor = new t.Color(1, 1, 1, 1), n
                }
                return r(i, e), i.prototype.updateOffset = function() {
                    var t = this.width / this.region.originalWidth * this.scaleX,
                        e = this.height / this.region.originalHeight * this.scaleY,
                        n = -this.width / 2 * this.scaleX + this.region.offsetX * t,
                        r = -this.height / 2 * this.scaleY + this.region.offsetY * e,
                        s = n + this.region.width * t,
                        o = r + this.region.height * e,
                        a = this.rotation * Math.PI / 180,
                        l = Math.cos(a),
                        h = Math.sin(a),
                        c = n * l + this.x,
                        u = n * h,
                        _ = r * l + this.y,
                        f = r * h,
                        d = s * l + this.x,
                        p = s * h,
                        m = o * l + this.y,
                        y = o * h,
                        v = this.offset;
                    v[i.OX1] = c - f, v[i.OY1] = _ + u, v[i.OX2] = c - y, v[i.OY2] = m + u, v[i.OX3] = d - y, v[i.OY3] = m + p, v[i.OX4] = d - f, v[i.OY4] = _ + p
                }, i.prototype.setRegion = function(t) {
                    this.region = t;
                    var e = this.uvs;
                    t.rotate ? (e[2] = t.u, e[3] = t.v2, e[4] = t.u, e[5] = t.v, e[6] = t.u2, e[7] = t.v, e[0] = t.u2, e[1] = t.v2) : (e[0] = t.u, e[1] = t.v2, e[2] = t.u, e[3] = t.v, e[4] = t.u2, e[5] = t.v, e[6] = t.u2, e[7] = t.v2)
                }, i.prototype.computeWorldVertices = function(t, e, n, r) {
                    var s = this.offset,
                        o = t.worldX,
                        a = t.worldY,
                        l = t.a,
                        h = t.b,
                        c = t.c,
                        u = t.d,
                        _ = 0,
                        f = 0;
                    _ = s[i.OX1], f = s[i.OY1], e[n] = _ * l + f * h + o, e[n + 1] = _ * c + f * u + a, n += r, _ = s[i.OX2], f = s[i.OY2], e[n] = _ * l + f * h + o, e[n + 1] = _ * c + f * u + a, n += r, _ = s[i.OX3], f = s[i.OY3], e[n] = _ * l + f * h + o, e[n + 1] = _ * c + f * u + a, n += r, _ = s[i.OX4], f = s[i.OY4], e[n] = _ * l + f * h + o, e[n + 1] = _ * c + f * u + a
                }, i.OX1 = 0, i.OY1 = 1, i.OX2 = 2, i.OY2 = 3, i.OX3 = 4, i.OY3 = 5, i.OX4 = 6, i.OY4 = 7, i.X1 = 0, i.Y1 = 1, i.C1R = 2, i.C1G = 3, i.C1B = 4, i.C1A = 5, i.U1 = 6, i.V1 = 7, i.X2 = 8, i.Y2 = 9, i.C2R = 10, i.C2G = 11, i.C2B = 12, i.C2A = 13, i.U2 = 14, i.V2 = 15, i.X3 = 16, i.Y3 = 17, i.C3R = 18, i.C3G = 19, i.C3B = 20, i.C3A = 21, i.U3 = 22, i.V3 = 23, i.X4 = 24, i.Y4 = 25, i.C4R = 26, i.C4G = 27, i.C4B = 28, i.C4A = 29, i.U4 = 30, i.V4 = 31, i
            })(t.Attachment);
            t.RegionAttachment = e
        })(n || (n = {})), (function(t) {
            var e = (function() {
                function e(t, e) {
                    this.jitterX = 0, this.jitterY = 0, this.jitterX = t, this.jitterY = e
                }
                return e.prototype.begin = function(t) {}, e.prototype.transform = function(e, i, n, r) {
                    e.x += t.MathUtils.randomTriangular(-this.jitterX, this.jitterY), e.y += t.MathUtils.randomTriangular(-this.jitterX, this.jitterY)
                }, e.prototype.end = function() {}, e
            })();
            t.JitterEffect = e
        })(n || (n = {})), (function(t) {
            var e = (function() {
                function e(t, e) {
                    this.centerX = 0, this.centerY = 0, this.radius = 0, this.angle = 0, this.worldX = 0, this.worldY = 0, this.radius = t, this.interpolation = e
                }
                return e.prototype.begin = function(t) {
                    this.worldX = t.x + this.centerX, this.worldY = t.y + this.centerY
                }, e.prototype.transform = function(e, i, n, r) {
                    var s = this.angle * t.MathUtils.degreesToRadians,
                        o = e.x - this.worldX,
                        a = e.y - this.worldY,
                        l = Math.sqrt(o * o + a * a);
                    if (l < this.radius) {
                        var h = this.interpolation.apply(0, s, (this.radius - l) / this.radius),
                            c = Math.cos(h),
                            u = Math.sin(h);
                        e.x = c * o - u * a + this.worldX, e.y = u * o + c * a + this.worldY
                    }
                }, e.prototype.end = function() {}, e.interpolation = new t.PowOut(2), e
            })();
            t.SwirlEffect = e
        })(n || (n = {})), e.exports = n
    }), {}],
    415: [(function(t, e, i) {
        "use strict";
        var n = t("./track-entry-listeners"),
            r = t("./lib/spine"),
            s = [],
            o = [],
            a = 0,
            l = 0,
            h = null,
            c = null,
            u = 0,
            _ = 0,
            f = 0,
            d = 0,
            p = null,
            m = null,
            y = 0,
            v = 0,
            g = void 0,
            x = void 0,
            b = void 0,
            A = void 0,
            C = void 0,
            T = void 0,
            S = new r.Color(1, 1, 1, 1),
            w = new r.Color(1, 1, 1, 1),
            E = [0, 1, 2, 2, 3, 0],
            M = cc.Class({
                ctor: function() {
                    this._inited = !1, this._invalid = !0, this.frames = [], this.totalTime = 0, this._frameIdx = -1, this.isCompleted = !1, this._skeletonInfo = null, this._animationName = null, this._tempSegments = null, this._tempColors = null
                },
                init: function(t, e) {
                    this._inited = !0, this._animationName = e, this._skeletonInfo = t
                },
                clear: function() {
                    this._inited = !1;
                    for (var t = 0, e = this.frames.length; t < e; t++) {
                        this.frames[t].segments.length = 0
                    }
                    this.invalidAllFrame()
                },
                bind: function(t) {
                    var e = function(t) {
                        t && t.animation.name === this._animationName && (this.isCompleted = !0)
                    }.bind(this);
                    t.complete = e
                },
                unbind: function(t) {
                    t.complete = null
                },
                begin: function() {
                    if (this._invalid) {
                        var t = this._skeletonInfo,
                            e = t.curAnimationCache;
                        e && e !== this && e.updateToFrame();
                        var i = t.skeleton,
                            n = t.listener,
                            r = t.state,
                            s = i.data.findAnimation(this._animationName);
                        r.setAnimationWith(0, s, !1), this.bind(n), t.curAnimationCache = this, this._frameIdx = -1, this.isCompleted = !1, this.totalTime = 0, this._invalid = !1
                    }
                },
                end: function() {
                    this._needToUpdate() || (this._skeletonInfo.curAnimationCache = null, this.frames.length = this._frameIdx + 1, this.isCompleted = !0, this.unbind(this._skeletonInfo.listener))
                },
                _needToUpdate: function(t) {
                    return !this.isCompleted && this.totalTime < 30 && (void 0 == t || this._frameIdx < t)
                },
                updateToFrame: function(t) {
                    if (this._inited && (this.begin(), this._needToUpdate(t))) {
                        var e = this._skeletonInfo,
                            i = e.skeleton,
                            n = e.clipper,
                            r = e.state;
                        do {
                            i.update(1 / 60), r.update(1 / 60), r.apply(i), i.updateWorldTransform(), this._frameIdx++, this._updateFrame(i, n, this._frameIdx), this.totalTime += 1 / 60
                        } while (this._needToUpdate(t));
                        this.end()
                    }
                },
                isInited: function() {
                    return this._inited
                },
                isInvalid: function() {
                    return this._invalid
                },
                invalidAllFrame: function() {
                    this.isCompleted = !1, this._invalid = !0
                },
                updateAllFrame: function() {
                    this.invalidAllFrame(), this.updateToFrame()
                },
                _updateFrame: function(t, e, i) {
                    l = 0, a = 0, 0, h = null, c = null, u = 0, _ = 0, f = 0, d = 0, p = null, m = null, this.frames[i] = this.frames[i] || {
                        segments: [],
                        colors: [],
                        vertices: null,
                        uintVert: null,
                        indices: null
                    };
                    var n = this.frames[i],
                        r = this._tempSegments = n.segments,
                        y = this._tempColors = n.colors;
                    this._traverseSkeleton(t, e), d > 0 && (y[d - 1].vfOffset = l), y.length = d;
                    var v = f - 1;
                    if (v >= 0)
                        if (_ > 0) {
                            var g = r[v];
                            g.indexCount = _, g.vfCount = 6 * u, g.vertexCount = u, r.length = f
                        } else r.length = f - 1;
                    if (0 != r.length) {
                        var x = n.vertices,
                            b = n.uintVert;
                        (!x || x.length < l) && (x = n.vertices = new Float32Array(l), b = n.uintVert = new Uint32Array(x.buffer));
                        for (var A = 0, C = 0; A < l;) x[A++] = s[C++], x[A++] = s[C++], x[A++] = s[C++], x[A++] = s[C++], b[A++] = s[C++], b[A++] = s[C++];
                        var T = n.indices;
                        (!T || T.length < a) && (T = n.indices = new Uint16Array(a));
                        for (var S = 0; S < a; S++) T[S] = o[S];
                        n.vertices = x, n.uintVert = b, n.indices = T
                    }
                },
                fillVertices: function(t, e, i, n, r) {
                    if (A = i.a * e.a * t.a * 255, g = e.r * t.r * 255, x = e.g * t.g * 255, b = e.b * t.b * 255, S.r = g * i.r, S.g = x * i.g, S.b = b * i.b, S.a = A, null == r.darkColor ? w.set(0, 0, 0, 1) : (w.r = r.darkColor.r * g, w.g = r.darkColor.g * x, w.b = r.darkColor.b * b), w.a = 0, C = (S.a << 24 >>> 0) + (S.b << 16) + (S.g << 8) + S.r, T = (w.a << 24 >>> 0) + (w.b << 16) + (w.g << 8) + w.r, p !== C || m !== T) {
                        var h = this._tempColors;
                        p = C, m = T, d > 0 && (h[d - 1].vfOffset = l), h[d++] = {
                            fr: S.r,
                            fg: S.g,
                            fb: S.b,
                            fa: S.a,
                            dr: w.r,
                            dg: w.g,
                            db: w.b,
                            da: w.a,
                            vfOffset: 0
                        }
                    }
                    if (n.isClipping()) {
                        n.clipTriangles(s, y, o, v, s, S, w, !0, 6, a, l, l + 2);
                        var c = n.clippedVertices,
                            u = n.clippedTriangles;
                        v = u.length, y = c.length / 12 * 6;
                        for (var _ = 0, f = a, E = u.length; _ < E;) o[f++] = u[_++];
                        for (var M = 0, D = c.length, B = l; M < D; M += 12, B += 6) s[B] = c[M], s[B + 1] = c[M + 1], s[B + 2] = c[M + 6], s[B + 3] = c[M + 7], s[B + 4] = C, s[B + 5] = T
                    } else
                        for (var I = l, P = l + y; I < P; I += 6) s[I + 4] = C, s[I + 5] = T
                },
                _traverseSkeleton: function(t, e) {
                    for (var i = this._tempSegments, n = t.color, d = void 0, p = void 0, m = void 0, g = void 0, x = void 0, b = void 0, A = void 0, C = void 0, T = void 0, S = void 0, w = void 0, M = void 0, D = 0, B = t.drawOrder.length; D < B; D++)
                        if (M = t.drawOrder[D], y = 0, v = 0, d = M.getAttachment())
                            if (b = d instanceof r.RegionAttachment, A = d instanceof r.MeshAttachment, d instanceof r.ClippingAttachment) e.clipStart(M, d);
                            else if (b || A)
                        if (C = d.region.texture._texture)
                            if (w = M.data.blendMode, h === C.url && c === w || (h = C.url, c = w, (T = f - 1) >= 0 && (_ > 0 ? ((S = i[T]).indexCount = _, S.vertexCount = u, S.vfCount = 6 * u) : f--), i[f] = {
                                    tex: C,
                                    blendMode: w,
                                    indexCount: 0,
                                    vertexCount: 0,
                                    vfCount: 0
                                }, f++, _ = 0, u = 0), b ? (x = E, y = 24, v = 6, d.computeWorldVertices(M.bone, s, l, 6)) : A && (x = d.triangles, y = 6 * (d.worldVerticesLength >> 1), v = x.length, d.computeWorldVertices(M, 0, d.worldVerticesLength, s, l, 6)), 0 != y && 0 != v) {
                                for (var I = 0, P = a, R = x.length; I < R;) o[P++] = x[I++];
                                g = d.uvs;
                                for (var O = l, L = l + y, F = 0; O < L; O += 6, F += 2) s[O + 2] = g[F], s[O + 3] = g[F + 1];
                                if (p = d.color, m = M.color, this.fillVertices(n, p, m, e, M), v > 0) {
                                    for (var N = a, V = a + v; N < V; N++) o[N] += u;
                                    a += v, (l += y) / 6, _ += v, u += y / 6
                                }
                                e.clipEndWithSlot(M)
                            } else e.clipEndWithSlot(M);
                    else e.clipEndWithSlot(M);
                    else e.clipEndWithSlot(M);
                    else e.clipEndWithSlot(M);
                    e.clipEnd()
                }
            }),
            D = cc.Class({
                ctor: function() {
                    this._animationPool = {}, this._skeletonCache = {}
                },
                clear: function() {
                    this._animationPool = {}, this._skeletonCache = {}
                },
                removeSkeleton: function(t) {
                    var e = this._skeletonCache[t];
                    if (e) {
                        var i = e.animationsCache;
                        for (var n in i) {
                            var r = i[n];
                            r && (this._animationPool[t + "#" + n] = r, r.clear())
                        }
                        delete this._skeletonCache[t]
                    }
                },
                getSkeletonCache: function(t, e) {
                    var i = this._skeletonCache[t];
                    if (!i) {
                        var s = new r.Skeleton(e),
                            o = new r.SkeletonClipping,
                            a = new r.AnimationStateData(s.data),
                            l = new r.AnimationState(a),
                            h = new n;
                        l.addListener(h), this._skeletonCache[t] = i = {
                            skeleton: s,
                            clipper: o,
                            state: l,
                            listener: h,
                            animationsCache: {},
                            curAnimationCache: null
                        }
                    }
                    return i
                },
                getAnimationCache: function(t, e) {
                    var i = this._skeletonCache[t];
                    return i ? i.animationsCache[e] : null
                },
                invalidAnimationCache: function(t) {
                    var e = this._skeletonCache[t];
                    if (e && e.skeleton) {
                        var i = e.animationsCache;
                        for (var n in i) {
                            i[n].invalidAllFrame()
                        }
                    }
                },
                initAnimationCache: function(t, e) {
                    if (!e) return null;
                    var i = this._skeletonCache[t],
                        n = i && i.skeleton;
                    if (!n) return null;
                    if (!n.data.findAnimation(e)) return null;
                    var r = i.animationsCache,
                        s = r[e];
                    if (!s) {
                        var o = t + "#" + e;
                        (s = this._animationPool[o]) ? delete this._animationPool[o]: s = new M, s.init(i, e), r[e] = s
                    }
                    return s
                },
                updateAnimationCache: function(t, e) {
                    if (e) {
                        var i = this.initAnimationCache(t, e);
                        if (!i) return null;
                        i.updateAllFrame()
                    } else {
                        var n = this._skeletonCache[t];
                        if (!(n && n.skeleton)) return;
                        var r = n.animationsCache;
                        for (var s in r) {
                            r[s].updateAllFrame()
                        }
                    }
                }
            });
        D.FrameTime = 1 / 60, D.sharedCache = new D, e.exports = D
    }), {
        "./lib/spine": 414,
        "./track-entry-listeners": 419
    }],
    416: [(function(t, e, i) {
        "use strict";
        var n = t("./skeleton-cache").sharedCache,
            r = cc.Class({
                name: "sp.SkeletonData",
                extends: cc.Asset,
                ctor: function() {
                    this.reset()
                },
                properties: {
                    _skeletonJson: null,
                    skeletonJsonStr: {
                        get: function() {
                            return this._skeletonJson ? JSON.stringify(this._skeletonJson) : ""
                        }
                    },
                    skeletonJson: {
                        get: function() {
                            return this._skeletonJson
                        },
                        set: function(t) {
                            this._skeletonJson = "string" == typeof t ? JSON.parse(t) : t, !this._uuid && t.skeleton && (this._uuid = t.skeleton.hash), this.reset()
                        }
                    },
                    _atlasText: "",
                    atlasText: {
                        get: function() {
                            return this._atlasText
                        },
                        set: function(t) {
                            this._atlasText = t, this.reset()
                        }
                    },
                    textures: {
                        default: [],
                        type: [cc.Texture2D]
                    },
                    textureNames: {
                        default: [],
                        type: [cc.String]
                    },
                    scale: 1
                },
                statics: {
                    preventDeferredLoadDependents: !0,
                    preventPreloadNativeObject: !0
                },
                createNode: !1,
                reset: function() {
                    this._skeletonCache = null, this._atlasCache = null
                },
                ensureTexturesLoaded: function(t, e) {
                    var i = this.textures,
                        n = i.length;
                    if (0 != n)
                        for (var r = 0, s = function() {
                                ++r >= n && (t && t.call(e, !0), t = null)
                            }, o = 0; o < n; o++) {
                            var a = i[o];
                            a.loaded ? s() : a.once("load", s)
                        } else t.call(e, !1)
                },
                getRuntimeData: function(t) {
                    if (this._skeletonCache) return this._skeletonCache;
                    if (!(this.textures && this.textures.length > 0) && this.textureNames && this.textureNames.length > 0) return t || cc.errorID(7507, this.name), null;
                    var e = this._getAtlas(t);
                    if (!e) return null;
                    var i = new sp.spine.AtlasAttachmentLoader(e),
                        n = new sp.spine.SkeletonJson(i);
                    n.scale = this.scale;
                    var r = this.skeletonJson;
                    return this._skeletonCache = n.readSkeletonData(r), e.dispose(n), this._skeletonCache
                },
                getSkinsEnum: !1,
                getAnimsEnum: !1,
                _getTexture: function(t) {
                    for (var e = this.textureNames, i = 0; i < e.length; i++)
                        if (e[i] === t) {
                            var n = this.textures[i],
                                r = new sp.SkeletonTexture({
                                    width: n.width,
                                    height: n.height
                                });
                            return r.setRealTexture(n), r
                        }
                    return cc.errorID(7506, t), null
                },
                _getAtlas: function(t) {
                    return this._atlasCache ? this._atlasCache : this.atlasText ? this._atlasCache = new sp.spine.TextureAtlas(this.atlasText, this._getTexture.bind(this)) : (t || cc.errorID(7508, this.name), null)
                },
                destroy: function() {
                    n.removeSkeleton(this._uuid), this._super()
                }
            });
        sp.SkeletonData = e.exports = r
    }), {
        "./skeleton-cache": 415
    }],
    417: [(function(t, e, i) {
        "use strict";
        sp.SkeletonTexture = cc.Class({
            name: "sp.SkeletonTexture",
            extends: sp.spine.Texture,
            _texture: null,
            _material: null,
            setRealTexture: function(t) {
                this._texture = t
            },
            getRealTexture: function() {
                return this._texture
            },
            setFilters: function(t, e) {
                this._texture && this._texture.setFilters(t, e)
            },
            setWraps: function(t, e) {
                this._texture && this._texture.setWrapMode(t, e)
            },
            dispose: function() {}
        })
    }), {}],
    418: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0, i.default = void 0;
        var n = (function(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        })(t("../../cocos2d/core/renderer/assembler"));

        function r(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }

        function s(t, e) {
            if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
            return !e || "object" != typeof e && "function" != typeof e ? t : e
        }

        function o(t, e) {
            if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e);
            t.prototype = Object.create(e && e.prototype, {
                constructor: {
                    value: t,
                    enumerable: !1,
                    writable: !0,
                    configurable: !0
                }
            }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e)
        }
        var a = t("./Skeleton"),
            l = t("./lib/spine"),
            h = t("../../cocos2d/core/renderer/render-flow"),
            c = t("../../cocos2d/core/renderer/webgl/vertex-format"),
            u = c.vfmtPosUvColor,
            _ = c.vfmtPosUvTwoColor,
            f = cc.gfx,
            d = 0,
            p = [0, 1, 2, 2, 3, 0],
            m = cc.color(0, 0, 255, 255),
            y = cc.color(255, 0, 0, 255),
            v = cc.color(0, 255, 0, 255),
            g = cc.color(255, 255, 0, 255),
            x = null,
            b = null,
            A = null,
            C = null;
        x = new l.Color(1, 1, 1, 1), b = new l.Color(1, 1, 1, 1), A = new l.Vector2, C = new l.Vector2;
        var T = void 0,
            S = void 0,
            w = void 0,
            E = void 0,
            M = void 0,
            D = void 0,
            B = void 0,
            I = void 0,
            P = void 0,
            R = void 0,
            O = void 0,
            L = void 0,
            F = void 0,
            N = void 0,
            V = void 0,
            k = void 0,
            G = void 0,
            U = 0,
            z = 0,
            j = 0,
            W = 0,
            H = 0,
            X = 0,
            Y = 0,
            q = void 0,
            J = void 0,
            Z = void 0,
            K = void 0,
            Q = void 0,
            $ = void 0,
            tt = void 0,
            et = void 0,
            it = void 0,
            nt = void 0,
            rt = void 0,
            st = void 0,
            ot = void 0,
            at = void 0,
            lt = void 0,
            ht = void 0,
            ct = void 0,
            ut = void 0,
            _t = void 0,
            ft = void 0,
            dt = void 0,
            pt = void 0,
            mt = void 0,
            yt = void 0,
            vt = void 0,
            gt = void 0,
            xt = void 0,
            bt = void 0,
            At = void 0;

        function Ct(t, e) {
            var i = void 0,
                n = void 0;
            switch (e) {
                case l.BlendMode.Additive:
                    i = T ? cc.macro.ONE : cc.macro.SRC_ALPHA, n = cc.macro.ONE;
                    break;
                case l.BlendMode.Multiply:
                    i = cc.macro.DST_COLOR, n = cc.macro.ONE_MINUS_SRC_ALPHA;
                    break;
                case l.BlendMode.Screen:
                    i = cc.macro.ONE, n = cc.macro.ONE_MINUS_SRC_COLOR;
                    break;
                case l.BlendMode.Normal:
                default:
                    i = T ? cc.macro.ONE : cc.macro.SRC_ALPHA, n = cc.macro.ONE_MINUS_SRC_ALPHA
            }
            var r = !yt.enableBatch,
                s = t.getId() + i + n + M + r,
                o = yt.sharedMaterials[0];
            if (!o) return null;
            var a = yt._materialCache,
                h = a[s];
            h ? h.getProperty("texture") !== t && (h.setProperty("texture", t), h.updateHash(s)) : (a[o._hash] ? (h = new cc.Material).copy(o) : h = o, h.define("CC_USE_MODEL", r), h.define("USE_TINT", M), h.setProperty("texture", t), h.effect.setBlend(!0, f.BLEND_FUNC_ADD, i, n, f.BLEND_FUNC_ADD, i, n), h.updateHash(s), a[s] = h);
            return h
        }

        function Tt(t) {
            ft = t.fa * L, at = P * (S = T ? ft / 255 : 1), lt = R * S, ht = O * S, ct = t.fr * at, ut = t.fg * lt, _t = t.fb * ht, F = (ft << 24 >>> 0) + (_t << 16) + (ut << 8) + ct, dt = t.dr * at, pt = t.dg * lt, mt = t.db * ht, N = ((T ? 255 : 0) << 24 >>> 0) + (mt << 16) + (pt << 8) + dt
        }

        function St(t) {
            return (t.a << 24 >>> 0) + (t.b << 16) + (t.g << 8) + t.r
        }
        var wt = (function(t) {
            function e() {
                return r(this, e), s(this, t.apply(this, arguments))
            }
            return o(e, t), e.prototype.updateRenderData = function(t) {
                if (!t.isAnimationCached()) {
                    var e = t._skeleton;
                    e && e.updateWorldTransform()
                }
            }, e.prototype.fillVertices = function(t, e, i, n, r) {
                var s = vt._vData,
                    o = vt._iData,
                    a = vt._uintVData,
                    l = void 0;
                if (x.a = i.a * e.a * t.a * L * 255, S = T ? x.a : 255, q = P * e.r * t.r * S, J = R * e.g * t.g * S, Z = O * e.b * t.b * S, x.r = q * i.r, x.g = J * i.g, x.b = Z * i.b, null == r.darkColor ? b.set(0, 0, 0, 1) : (b.r = r.darkColor.r * q, b.g = r.darkColor.g * J, b.b = r.darkColor.b * Z), b.a = T ? 255 : 0, n.isClipping()) {
                    var h = s.subarray(j + 2);
                    n.clipTriangles(s.subarray(j), U, o.subarray(X), H, h, x, b, M, k);
                    var c = new Float32Array(n.clippedVertices),
                        u = n.clippedTriangles;
                    if (H = u.length, U = c.length / G * k, l = vt.request(U / k, H), X = l.indiceOffset, W = l.vertexOffset, j = l.byteOffset >> 2, s = vt._vData, o = vt._iData, a = vt._uintVData, o.set(u, X), At)
                        for (var _ = 0, f = c.length, d = j; _ < f; _ += G, d += k) A.x = c[_], A.y = c[_ + 1], x.set(c[_ + 2], c[_ + 3], c[_ + 4], c[_ + 5]), C.x = c[_ + 6], C.y = c[_ + 7], M ? b.set(c[_ + 8], c[_ + 9], c[_ + 10], c[_ + 11]) : b.set(0, 0, 0, 0), At.transform(A, C, x, b), s[d] = A.x, s[d + 1] = A.y, s[d + 2] = C.x, s[d + 3] = C.y, a[d + 4] = St(x), M && (a[d + 5] = St(b));
                    else
                        for (var p = 0, m = c.length, y = j; p < m; p += G, y += k) s[y] = c[p], s[y + 1] = c[p + 1], s[y + 2] = c[p + 6], s[y + 3] = c[p + 7], F = (c[p + 5] << 24 >>> 0) + (c[p + 4] << 16) + (c[p + 3] << 8) + c[p + 2], a[y + 4] = F, M && (N = (c[p + 11] << 24 >>> 0) + (c[p + 10] << 16) + (c[p + 9] << 8) + c[p + 8], a[y + 5] = N)
                } else if (At)
                    for (var v = j, g = j + U; v < g; v += k) A.x = s[v], A.y = s[v + 1], C.x = s[v + 2], C.y = s[v + 3], At.transform(A, C, x, b), s[v] = A.x, s[v + 1] = A.y, s[v + 2] = C.x, s[v + 3] = C.y, a[v + 4] = St(x), M && (a[v + 5] = St(b));
                else {
                    F = St(x), N = St(b);
                    for (var w = j, E = j + U; w < E; w += k) a[w + 4] = F, M && (a[w + 5] = N)
                }
            }, e.prototype.realTimeTraverse = function(t) {
                var e = void 0,
                    i = void 0,
                    n = yt._skeleton,
                    r = n.color,
                    s = yt._debugRenderer,
                    o = yt._clipper,
                    a = null,
                    h = void 0,
                    c = void 0,
                    u = void 0,
                    _ = void 0,
                    f = void 0,
                    d = void 0,
                    x = void 0,
                    b = void 0,
                    A = void 0,
                    C = void 0;
                w = yt._startSlotIndex, E = yt._endSlotIndex, K = !1, -1 == w && (K = !0), D = yt.debugSlots, B = yt.debugBones, I = yt.debugMesh, s && (B || D || I) && (s.clear(), s.lineWidth = 2), G = M ? 12 : 8, U = 0, j = 0, W = 0, H = 0, X = 0;
                for (var T = 0, S = n.drawOrder.length; T < S; T++)
                    if (A = n.drawOrder[T], w >= 0 && w == A.data.index && (K = !0), K)
                        if (E >= 0 && E == A.data.index && (K = !1), U = 0, H = 0, h = A.getAttachment())
                            if (d = h instanceof l.RegionAttachment, x = h instanceof l.MeshAttachment, h instanceof l.ClippingAttachment) o.clipStart(A, h);
                            else if (d || x)
                    if (a = Ct(h.region.texture._texture, A.data.blendMode)) {
                        if ((Q || a._hash !== gt.material._hash) && (Q = !1, gt._flush(), gt.node = xt, gt.material = a), d) {
                            if (f = p, U = 4 * k, H = 6, b = vt.request(4, 6), X = b.indiceOffset, W = b.vertexOffset, j = b.byteOffset >> 2, e = vt._vData, i = vt._iData, h.computeWorldVertices(A.bone, e, j, k), s && D) {
                                s.strokeColor = m, s.moveTo(e[j], e[j + 1]);
                                for (var P = j + k, R = j + U; P < R; P += k) s.lineTo(e[P], e[P + 1]);
                                s.close(), s.stroke()
                            }
                        } else if (x && (f = h.triangles, U = (h.worldVerticesLength >> 1) * k, H = f.length, b = vt.request(U / k, H), X = b.indiceOffset, W = b.vertexOffset, j = b.byteOffset >> 2, e = vt._vData, i = vt._iData, h.computeWorldVertices(A, 0, h.worldVerticesLength, e, j, k), s && I)) {
                            s.strokeColor = g;
                            for (var O = 0, L = f.length; O < L; O += 3) {
                                var F = f[O] * k + j,
                                    N = f[O + 1] * k + j,
                                    V = f[O + 2] * k + j;
                                s.moveTo(e[F], e[F + 1]), s.lineTo(e[N], e[N + 1]), s.lineTo(e[V], e[V + 1]), s.close(), s.stroke()
                            }
                        }
                        if (0 != U && 0 != H) {
                            i.set(f, X), _ = h.uvs;
                            for (var z = j, Y = j + U, q = 0; z < Y; z += k, q += 2) e[z + 2] = _[q], e[z + 3] = _[q + 1];
                            if (c = h.color, u = A.color, this.fillVertices(r, c, u, o, A), H > 0) {
                                for (var J = X, Z = X + H; J < Z; J++) i[J] += W;
                                if (t) {
                                    C = t.m, et = C[0], it = C[4], nt = C[12], rt = C[1], st = C[5], ot = C[13];
                                    for (var at = j, lt = j + U; at < lt; at += k) $ = e[at], tt = e[at + 1], e[at] = $ * et + tt * it + nt, e[at + 1] = $ * rt + tt * st + ot
                                }
                                vt.adjust(U / k, H)
                            }
                            o.clipEndWithSlot(A)
                        } else o.clipEndWithSlot(A)
                    } else o.clipEndWithSlot(A);
                else o.clipEndWithSlot(A);
                else o.clipEndWithSlot(A);
                else o.clipEndWithSlot(A);
                if (o.clipEnd(), s && B) {
                    var ht = void 0;
                    s.strokeColor = y, s.fillColor = m;
                    for (var ct = 0, ut = n.bones.length; ct < ut; ct++) {
                        var _t = (ht = n.bones[ct]).data.length * ht.a + ht.worldX,
                            ft = ht.data.length * ht.c + ht.worldY;
                        s.moveTo(ht.worldX, ht.worldY), s.lineTo(_t, ft), s.stroke(), s.circle(ht.worldX, ht.worldY, 1.5 * Math.PI), s.fill(), 0 === ct && (s.fillColor = v)
                    }
                }
            }, e.prototype.cacheTraverse = function(t) {
                var e = yt._curFrame;
                if (e) {
                    var i = e.segments;
                    if (0 != i.length) {
                        var n = void 0,
                            r = void 0,
                            s = void 0,
                            o = void 0,
                            a = void 0,
                            l = e.vertices,
                            h = e.indices,
                            c = void 0,
                            u = 0,
                            _ = 0,
                            f = 0;
                        t && (c = t.m, et = c[0], rt = c[1], it = c[4], st = c[5], nt = c[12], ot = c[13]);
                        var p = 16 & d,
                            m = p && (1 === et && 0 === rt && 0 === it && 1 === st),
                            y = 0,
                            v = e.colors,
                            g = v[y++],
                            x = g.vfOffset;
                        Tt(g);
                        for (var b = 0, A = i.length; b < A; b++) {
                            var C = i[b];
                            if (o = Ct(C.tex, C.blendMode)) {
                                (Q || o._hash !== gt.material._hash) && (Q = !1, gt._flush(), gt.node = xt, gt.material = o), z = C.vertexCount, H = C.indexCount, a = vt.request(z, H), X = a.indiceOffset, W = a.vertexOffset, Y = a.byteOffset >> 2, n = vt._vData, r = vt._iData, s = vt._uintVData;
                                for (var T = X, S = X + H; T < S; T++) r[T] = W + h[_++];
                                if (f = C.vfCount, n.set(l.subarray(u, u + f), Y), u += f, m)
                                    for (var w = Y, E = Y + f; w < E; w += 6) n[w] += nt, n[w + 1] += ot;
                                else if (p)
                                    for (var M = Y, D = Y + f; M < D; M += 6) $ = n[M], tt = n[M + 1], n[M] = $ * et + tt * it + nt, n[M + 1] = $ * rt + tt * st + ot;
                                if (vt.adjust(z, H), bt)
                                    for (var B = u - f, I = Y + 4, P = Y + 4 + f; I < P; I += 6, B += 6) B >= x && (Tt(g = v[y++]), x = g.vfOffset), s[I] = F, s[I + 1] = N
                            }
                        }
                    }
                }
            }, e.prototype.fillBuffers = function(t, e) {
                var i = t.node;
                if (i._renderFlag |= h.FLAG_UPDATE_RENDER_DATA, t._skeleton) {
                    var n = i._color;
                    P = n.r / 255, R = n.g / 255, O = n.b / 255, L = n.a / 255, M = t.useTint || t.isAnimationCached(), V = M ? _ : u, k = M ? 6 : 5, xt = t.node, vt = e.getBuffer("spine", V), gt = e, yt = t, Q = !0, T = t.premultipliedAlpha, S = 1, d = 0, bt = !1, At = t._effectDelegate && t._effectDelegate._vertexEffect, (4294967295 !== n._val || T) && (bt = !0), M && (d |= 1);
                    var r = void 0;
                    yt.enableBatch && (r = xt._worldMatrix, Q = !1, d |= 16), t.isAnimationCached() ? this.cacheTraverse(r) : (At && At.begin(t._skeleton), this.realTimeTraverse(r), At && At.end()), xt = void 0, vt = void 0, gt = void 0, yt = void 0, At = null
                }
            }, e
        })(n.default);
        i.default = wt, n.default.register(a, wt), e.exports = i.default
    }), {
        "../../cocos2d/core/renderer/assembler": 227,
        "../../cocos2d/core/renderer/render-flow": 248,
        "../../cocos2d/core/renderer/webgl/vertex-format": 288,
        "./Skeleton": 412,
        "./lib/spine": 414
    }],
    419: [(function(t, e, i) {
        "use strict";
        var n = function() {
            this.start = null, this.end = null, this.complete = null, this.event = null, this.interrupt = null, this.dispose = null
        };
        n.getListeners = function(t) {
            return t.listener || (t.listener = new n), t.listener
        }, e.exports = n
    }), {}],
    420: [(function(t, e, i) {
        "use strict";
        var n = t("./lib/spine");
        sp.VertexEffectDelegate = cc.Class({
            name: "sp.VertexEffectDelegate",
            ctor: function() {
                this._vertexEffect = null, this._interpolation = null, this._effectType = "none"
            },
            clear: function() {
                this._vertexEffect = null, this._interpolation = null, this._effectType = "none"
            },
            initJitter: function(t, e) {
                return this._effectType = "jitter", this._vertexEffect = new n.JitterEffect(t, e), this._vertexEffect
            },
            initSwirlWithPow: function(t, e) {
                return this._interpolation = new n.Pow(e), this._vertexEffect = new n.SwirlEffect(t, this._interpolation), this._vertexEffect
            },
            initSwirlWithPowOut: function(t, e) {
                return this._interpolation = new n.PowOut(e), this._vertexEffect = new n.SwirlEffect(t, this._interpolation), this._vertexEffect
            },
            getJitterVertexEffect: function() {
                return this._vertexEffect
            },
            getSwirlVertexEffect: function() {
                return this._vertexEffect
            },
            getVertexEffect: function() {
                return this._vertexEffect
            },
            getEffectType: function() {
                return this._effectType
            }
        }), e.exports = sp.VertexEffectDelegate
    }), {
        "./lib/spine": 414
    }],
    421: [(function(t, e, i) {
        "use strict";
        (function(t, n) {
            "object" == typeof i && void 0 !== e ? n(i) : "function" == typeof define && define.amd ? define(["exports"], n) : n(t.box2d = {})
        })(void 0, (function(t) {
            function e(t, e) {
                return void 0 !== t ? t : e
            }
            var i = 1e37,
                n = 1e-5,
                r = n * n,
                s = 3.14159265359,
                o = 2,
                a = 8,
                l = .008,
                h = 2 / 180 * s,
                c = 2 * l,
                u = -1;
            var _ = (function() {
                    function t(t, e, i) {
                        void 0 === t && (t = 0), void 0 === e && (e = 0), void 0 === i && (i = 0), this.major = 0, this.minor = 0, this.revision = 0, this.major = t, this.minor = e, this.revision = i
                    }
                    return t.prototype.toString = function() {
                        return this.major + "." + this.minor + "." + this.revision
                    }, t
                })(),
                f = new _(2, 3, 2);

            function d(t, e) {
                for (var i = [], n = 0; n < t; ++n) i.push(e(n));
                return i
            }

            function p(t, e) {
                void 0 === e && (e = 0);
                for (var i = [], n = 0; n < t; ++n) i.push(e);
                return i
            }
            var m = s / 180,
                y = 180 / s,
                v = Math.abs,
                g = Math.min,
                x = Math.max;

            function b(t, e, i) {
                return t < e ? e : t > i ? i : t
            }
            var A = isFinite;

            function C(t) {
                return t * t
            }

            function T(t) {
                return 1 / Math.sqrt(t)
            }
            var S = Math.sqrt,
                w = Math.pow;
            var E = Math.cos,
                M = Math.sin,
                D = Math.acos,
                B = Math.asin,
                I = Math.atan2;
            var P = (function() {
                    function t(t, e) {
                        void 0 === t && (t = 0), void 0 === e && (e = 0), this.x = t, this.y = e
                    }
                    return t.prototype.Clone = function() {
                        return new t(this.x, this.y)
                    }, t.prototype.SetZero = function() {
                        return this.x = 0, this.y = 0, this
                    }, t.prototype.Set = function(t, e) {
                        return this.x = t, this.y = e, this
                    }, t.prototype.Copy = function(t) {
                        return this.x = t.x, this.y = t.y, this
                    }, t.prototype.SelfAdd = function(t) {
                        return this.x += t.x, this.y += t.y, this
                    }, t.prototype.SelfAddXY = function(t, e) {
                        return this.x += t, this.y += e, this
                    }, t.prototype.SelfSub = function(t) {
                        return this.x -= t.x, this.y -= t.y, this
                    }, t.prototype.SelfSubXY = function(t, e) {
                        return this.x -= t, this.y -= e, this
                    }, t.prototype.SelfMul = function(t) {
                        return this.x *= t, this.y *= t, this
                    }, t.prototype.SelfMulAdd = function(t, e) {
                        return this.x += t * e.x, this.y += t * e.y, this
                    }, t.prototype.SelfMulSub = function(t, e) {
                        return this.x -= t * e.x, this.y -= t * e.y, this
                    }, t.prototype.Dot = function(t) {
                        return this.x * t.x + this.y * t.y
                    }, t.prototype.Cross = function(t) {
                        return this.x * t.y - this.y * t.x
                    }, t.prototype.Length = function() {
                        var t = this.x,
                            e = this.y;
                        return Math.sqrt(t * t + e * e)
                    }, t.prototype.LengthSquared = function() {
                        var t = this.x,
                            e = this.y;
                        return t * t + e * e
                    }, t.prototype.Normalize = function() {
                        var t = this.Length();
                        if (t >= n) {
                            var e = 1 / t;
                            this.x *= e, this.y *= e
                        }
                        return t
                    }, t.prototype.SelfNormalize = function() {
                        var t = this.Length();
                        if (t >= n) {
                            var e = 1 / t;
                            this.x *= e, this.y *= e
                        }
                        return this
                    }, t.prototype.SelfRotate = function(t) {
                        var e = Math.cos(t),
                            i = Math.sin(t),
                            n = this.x;
                        return this.x = e * n - i * this.y, this.y = i * n + e * this.y, this
                    }, t.prototype.IsValid = function() {
                        return isFinite(this.x) && isFinite(this.y)
                    }, t.prototype.SelfCrossVS = function(t) {
                        var e = this.x;
                        return this.x = t * this.y, this.y = -t * e, this
                    }, t.prototype.SelfCrossSV = function(t) {
                        var e = this.x;
                        return this.x = -t * this.y, this.y = t * e, this
                    }, t.prototype.SelfMinV = function(t) {
                        return this.x = g(this.x, t.x), this.y = g(this.y, t.y), this
                    }, t.prototype.SelfMaxV = function(t) {
                        return this.x = x(this.x, t.x), this.y = x(this.y, t.y), this
                    }, t.prototype.SelfAbs = function() {
                        return this.x = v(this.x), this.y = v(this.y), this
                    }, t.prototype.SelfNeg = function() {
                        return this.x = -this.x, this.y = -this.y, this
                    }, t.prototype.SelfSkew = function() {
                        var t = this.x;
                        return this.x = -this.y, this.y = t, this
                    }, t.MakeArray = function(e) {
                        return d(e, (function(e) {
                            return new t
                        }))
                    }, t.AbsV = function(t, e) {
                        return e.x = v(t.x), e.y = v(t.y), e
                    }, t.MinV = function(t, e, i) {
                        return i.x = g(t.x, e.x), i.y = g(t.y, e.y), i
                    }, t.MaxV = function(t, e, i) {
                        return i.x = x(t.x, e.x), i.y = x(t.y, e.y), i
                    }, t.ClampV = function(t, e, i, n) {
                        return n.x = b(t.x, e.x, i.x), n.y = b(t.y, e.y, i.y), n
                    }, t.RotateV = function(t, e, i) {
                        var n = t.x,
                            r = t.y,
                            s = Math.cos(e),
                            o = Math.sin(e);
                        return i.x = s * n - o * r, i.y = o * n + s * r, i
                    }, t.DotVV = function(t, e) {
                        return t.x * e.x + t.y * e.y
                    }, t.CrossVV = function(t, e) {
                        return t.x * e.y - t.y * e.x
                    }, t.CrossVS = function(t, e, i) {
                        var n = t.x;
                        return i.x = e * t.y, i.y = -e * n, i
                    }, t.CrossVOne = function(t, e) {
                        var i = t.x;
                        return e.x = t.y, e.y = -i, e
                    }, t.CrossSV = function(t, e, i) {
                        var n = e.x;
                        return i.x = -t * e.y, i.y = t * n, i
                    }, t.CrossOneV = function(t, e) {
                        var i = t.x;
                        return e.x = -t.y, e.y = i, e
                    }, t.AddVV = function(t, e, i) {
                        return i.x = t.x + e.x, i.y = t.y + e.y, i
                    }, t.SubVV = function(t, e, i) {
                        return i.x = t.x - e.x, i.y = t.y - e.y, i
                    }, t.MulSV = function(t, e, i) {
                        return i.x = e.x * t, i.y = e.y * t, i
                    }, t.MulVS = function(t, e, i) {
                        return i.x = t.x * e, i.y = t.y * e, i
                    }, t.AddVMulSV = function(t, e, i, n) {
                        return n.x = t.x + e * i.x, n.y = t.y + e * i.y, n
                    }, t.SubVMulSV = function(t, e, i, n) {
                        return n.x = t.x - e * i.x, n.y = t.y - e * i.y, n
                    }, t.AddVCrossSV = function(t, e, i, n) {
                        var r = i.x;
                        return n.x = t.x - e * i.y, n.y = t.y + e * r, n
                    }, t.MidVV = function(t, e, i) {
                        return i.x = .5 * (t.x + e.x), i.y = .5 * (t.y + e.y), i
                    }, t.ExtVV = function(t, e, i) {
                        return i.x = .5 * (e.x - t.x), i.y = .5 * (e.y - t.y), i
                    }, t.IsEqualToV = function(t, e) {
                        return t.x === e.x && t.y === e.y
                    }, t.DistanceVV = function(t, e) {
                        var i = t.x - e.x,
                            n = t.y - e.y;
                        return Math.sqrt(i * i + n * n)
                    }, t.DistanceSquaredVV = function(t, e) {
                        var i = t.x - e.x,
                            n = t.y - e.y;
                        return i * i + n * n
                    }, t.NegV = function(t, e) {
                        return e.x = -t.x, e.y = -t.y, e
                    }, t.ZERO = new t(0, 0), t.UNITX = new t(1, 0), t.UNITY = new t(0, 1), t.s_t0 = new t, t.s_t1 = new t, t.s_t2 = new t, t.s_t3 = new t, t
                })(),
                R = new P(0, 0),
                O = (function() {
                    function t(t, e, i) {
                        void 0 === t && (t = 0), void 0 === e && (e = 0), void 0 === i && (i = 0), this.x = t, this.y = e, this.z = i
                    }
                    return t.prototype.Clone = function() {
                        return new t(this.x, this.y, this.z)
                    }, t.prototype.SetZero = function() {
                        return this.x = 0, this.y = 0, this.z = 0, this
                    }, t.prototype.SetXYZ = function(t, e, i) {
                        return this.x = t, this.y = e, this.z = i, this
                    }, t.prototype.Copy = function(t) {
                        return this.x = t.x, this.y = t.y, this.z = t.z, this
                    }, t.prototype.SelfNeg = function() {
                        return this.x = -this.x, this.y = -this.y, this.z = -this.z, this
                    }, t.prototype.SelfAdd = function(t) {
                        return this.x += t.x, this.y += t.y, this.z += t.z, this
                    }, t.prototype.SelfAddXYZ = function(t, e, i) {
                        return this.x += t, this.y += e, this.z += i, this
                    }, t.prototype.SelfSub = function(t) {
                        return this.x -= t.x, this.y -= t.y, this.z -= t.z, this
                    }, t.prototype.SelfSubXYZ = function(t, e, i) {
                        return this.x -= t, this.y -= e, this.z -= i, this
                    }, t.prototype.SelfMul = function(t) {
                        return this.x *= t, this.y *= t, this.z *= t, this
                    }, t.DotV3V3 = function(t, e) {
                        return t.x * e.x + t.y * e.y + t.z * e.z
                    }, t.CrossV3V3 = function(t, e, i) {
                        var n = t.x,
                            r = t.y,
                            s = t.z,
                            o = e.x,
                            a = e.y,
                            l = e.z;
                        return i.x = r * l - s * a, i.y = s * o - n * l, i.z = n * a - r * o, i
                    }, t.ZERO = new t(0, 0, 0), t.s_t0 = new t, t
                })(),
                L = (function() {
                    function t() {
                        this.ex = new P(1, 0), this.ey = new P(0, 1)
                    }
                    return t.prototype.Clone = function() {
                        return (new t).Copy(this)
                    }, t.FromVV = function(e, i) {
                        return (new t).SetVV(e, i)
                    }, t.FromSSSS = function(e, i, n, r) {
                        return (new t).SetSSSS(e, i, n, r)
                    }, t.FromAngle = function(e) {
                        return (new t).SetAngle(e)
                    }, t.prototype.SetSSSS = function(t, e, i, n) {
                        return this.ex.Set(t, i), this.ey.Set(e, n), this
                    }, t.prototype.SetVV = function(t, e) {
                        return this.ex.Copy(t), this.ey.Copy(e), this
                    }, t.prototype.SetAngle = function(t) {
                        var e = Math.cos(t),
                            i = Math.sin(t);
                        return this.ex.Set(e, i), this.ey.Set(-i, e), this
                    }, t.prototype.Copy = function(t) {
                        return this.ex.Copy(t.ex), this.ey.Copy(t.ey), this
                    }, t.prototype.SetIdentity = function() {
                        return this.ex.Set(1, 0), this.ey.Set(0, 1), this
                    }, t.prototype.SetZero = function() {
                        return this.ex.SetZero(), this.ey.SetZero(), this
                    }, t.prototype.GetAngle = function() {
                        return Math.atan2(this.ex.y, this.ex.x)
                    }, t.prototype.GetInverse = function(t) {
                        var e = this.ex.x,
                            i = this.ey.x,
                            n = this.ex.y,
                            r = this.ey.y,
                            s = e * r - i * n;
                        return 0 !== s && (s = 1 / s), t.ex.x = s * r, t.ey.x = -s * i, t.ex.y = -s * n, t.ey.y = s * e, t
                    }, t.prototype.Solve = function(t, e, i) {
                        var n = this.ex.x,
                            r = this.ey.x,
                            s = this.ex.y,
                            o = this.ey.y,
                            a = n * o - r * s;
                        return 0 !== a && (a = 1 / a), i.x = a * (o * t - r * e), i.y = a * (n * e - s * t), i
                    }, t.prototype.SelfAbs = function() {
                        return this.ex.SelfAbs(), this.ey.SelfAbs(), this
                    }, t.prototype.SelfInv = function() {
                        return this.GetInverse(this), this
                    }, t.prototype.SelfAddM = function(t) {
                        return this.ex.SelfAdd(t.ex), this.ey.SelfAdd(t.ey), this
                    }, t.prototype.SelfSubM = function(t) {
                        return this.ex.SelfSub(t.ex), this.ey.SelfSub(t.ey), this
                    }, t.AbsM = function(t, e) {
                        var i = t.ex,
                            n = t.ey;
                        return e.ex.x = v(i.x), e.ex.y = v(i.y), e.ey.x = v(n.x), e.ey.y = v(n.y), e
                    }, t.MulMV = function(t, e, i) {
                        var n = t.ex,
                            r = t.ey,
                            s = e.x,
                            o = e.y;
                        return i.x = n.x * s + r.x * o, i.y = n.y * s + r.y * o, i
                    }, t.MulTMV = function(t, e, i) {
                        var n = t.ex,
                            r = t.ey,
                            s = e.x,
                            o = e.y;
                        return i.x = n.x * s + n.y * o, i.y = r.x * s + r.y * o, i
                    }, t.AddMM = function(t, e, i) {
                        var n = t.ex,
                            r = t.ey,
                            s = e.ex,
                            o = e.ey;
                        return i.ex.x = n.x + s.x, i.ex.y = n.y + s.y, i.ey.x = r.x + o.x, i.ey.y = r.y + o.y, i
                    }, t.MulMM = function(t, e, i) {
                        var n = t.ex.x,
                            r = t.ex.y,
                            s = t.ey.x,
                            o = t.ey.y,
                            a = e.ex.x,
                            l = e.ex.y,
                            h = e.ey.x,
                            c = e.ey.y;
                        return i.ex.x = n * a + s * l, i.ex.y = r * a + o * l, i.ey.x = n * h + s * c, i.ey.y = r * h + o * c, i
                    }, t.MulTMM = function(t, e, i) {
                        var n = t.ex.x,
                            r = t.ex.y,
                            s = t.ey.x,
                            o = t.ey.y,
                            a = e.ex.x,
                            l = e.ex.y,
                            h = e.ey.x,
                            c = e.ey.y;
                        return i.ex.x = n * a + r * l, i.ex.y = s * a + o * l, i.ey.x = n * h + r * c, i.ey.y = s * h + o * c, i
                    }, t.IDENTITY = new t, t
                })(),
                F = (function() {
                    function t() {
                        this.ex = new O(1, 0, 0), this.ey = new O(0, 1, 0), this.ez = new O(0, 0, 1)
                    }
                    return t.prototype.Clone = function() {
                        return (new t).Copy(this)
                    }, t.prototype.SetVVV = function(t, e, i) {
                        return this.ex.Copy(t), this.ey.Copy(e), this.ez.Copy(i), this
                    }, t.prototype.Copy = function(t) {
                        return this.ex.Copy(t.ex), this.ey.Copy(t.ey), this.ez.Copy(t.ez), this
                    }, t.prototype.SetIdentity = function() {
                        return this.ex.SetXYZ(1, 0, 0), this.ey.SetXYZ(0, 1, 0), this.ez.SetXYZ(0, 0, 1), this
                    }, t.prototype.SetZero = function() {
                        return this.ex.SetZero(), this.ey.SetZero(), this.ez.SetZero(), this
                    }, t.prototype.SelfAddM = function(t) {
                        return this.ex.SelfAdd(t.ex), this.ey.SelfAdd(t.ey), this.ez.SelfAdd(t.ez), this
                    }, t.prototype.Solve33 = function(t, e, i, n) {
                        var r = this.ex.x,
                            s = this.ex.y,
                            o = this.ex.z,
                            a = this.ey.x,
                            l = this.ey.y,
                            h = this.ey.z,
                            c = this.ez.x,
                            u = this.ez.y,
                            _ = this.ez.z,
                            f = r * (l * _ - h * u) + s * (h * c - a * _) + o * (a * u - l * c);
                        return 0 !== f && (f = 1 / f), n.x = f * (t * (l * _ - h * u) + e * (h * c - a * _) + i * (a * u - l * c)), n.y = f * (r * (e * _ - i * u) + s * (i * c - t * _) + o * (t * u - e * c)), n.z = f * (r * (l * i - h * e) + s * (h * t - a * i) + o * (a * e - l * t)), n
                    }, t.prototype.Solve22 = function(t, e, i) {
                        var n = this.ex.x,
                            r = this.ey.x,
                            s = this.ex.y,
                            o = this.ey.y,
                            a = n * o - r * s;
                        return 0 !== a && (a = 1 / a), i.x = a * (o * t - r * e), i.y = a * (n * e - s * t), i
                    }, t.prototype.GetInverse22 = function(t) {
                        var e = this.ex.x,
                            i = this.ey.x,
                            n = this.ex.y,
                            r = this.ey.y,
                            s = e * r - i * n;
                        0 !== s && (s = 1 / s), t.ex.x = s * r, t.ey.x = -s * i, t.ex.z = 0, t.ex.y = -s * n, t.ey.y = s * e, t.ey.z = 0, t.ez.x = 0, t.ez.y = 0, t.ez.z = 0
                    }, t.prototype.GetSymInverse33 = function(t) {
                        var e = O.DotV3V3(this.ex, O.CrossV3V3(this.ey, this.ez, O.s_t0));
                        0 !== e && (e = 1 / e);
                        var i = this.ex.x,
                            n = this.ey.x,
                            r = this.ez.x,
                            s = this.ey.y,
                            o = this.ez.y,
                            a = this.ez.z;
                        t.ex.x = e * (s * a - o * o), t.ex.y = e * (r * o - n * a), t.ex.z = e * (n * o - r * s), t.ey.x = t.ex.y, t.ey.y = e * (i * a - r * r), t.ey.z = e * (r * n - i * o), t.ez.x = t.ex.z, t.ez.y = t.ey.z, t.ez.z = e * (i * s - n * n)
                    }, t.MulM33V3 = function(t, e, i) {
                        var n = e.x,
                            r = e.y,
                            s = e.z;
                        return i.x = t.ex.x * n + t.ey.x * r + t.ez.x * s, i.y = t.ex.y * n + t.ey.y * r + t.ez.y * s, i.z = t.ex.z * n + t.ey.z * r + t.ez.z * s, i
                    }, t.MulM33XYZ = function(t, e, i, n, r) {
                        return r.x = t.ex.x * e + t.ey.x * i + t.ez.x * n, r.y = t.ex.y * e + t.ey.y * i + t.ez.y * n, r.z = t.ex.z * e + t.ey.z * i + t.ez.z * n, r
                    }, t.MulM33V2 = function(t, e, i) {
                        var n = e.x,
                            r = e.y;
                        return i.x = t.ex.x * n + t.ey.x * r, i.y = t.ex.y * n + t.ey.y * r, i
                    }, t.MulM33XY = function(t, e, i, n) {
                        return n.x = t.ex.x * e + t.ey.x * i, n.y = t.ex.y * e + t.ey.y * i, n
                    }, t.IDENTITY = new t, t
                })(),
                N = (function() {
                    function t(t) {
                        void 0 === t && (t = 0), this.s = 0, this.c = 1, t && (this.s = Math.sin(t), this.c = Math.cos(t))
                    }
                    return t.prototype.Clone = function() {
                        return (new t).Copy(this)
                    }, t.prototype.Copy = function(t) {
                        return this.s = t.s, this.c = t.c, this
                    }, t.prototype.SetAngle = function(t) {
                        return this.s = Math.sin(t), this.c = Math.cos(t), this
                    }, t.prototype.SetIdentity = function() {
                        return this.s = 0, this.c = 1, this
                    }, t.prototype.GetAngle = function() {
                        return Math.atan2(this.s, this.c)
                    }, t.prototype.GetXAxis = function(t) {
                        return t.x = this.c, t.y = this.s, t
                    }, t.prototype.GetYAxis = function(t) {
                        return t.x = -this.s, t.y = this.c, t
                    }, t.MulRR = function(t, e, i) {
                        var n = t.c,
                            r = t.s,
                            s = e.c,
                            o = e.s;
                        return i.s = r * s + n * o, i.c = n * s - r * o, i
                    }, t.MulTRR = function(t, e, i) {
                        var n = t.c,
                            r = t.s,
                            s = e.c,
                            o = e.s;
                        return i.s = n * o - r * s, i.c = n * s + r * o, i
                    }, t.MulRV = function(t, e, i) {
                        var n = t.c,
                            r = t.s,
                            s = e.x,
                            o = e.y;
                        return i.x = n * s - r * o, i.y = r * s + n * o, i
                    }, t.MulTRV = function(t, e, i) {
                        var n = t.c,
                            r = t.s,
                            s = e.x,
                            o = e.y;
                        return i.x = n * s + r * o, i.y = -r * s + n * o, i
                    }, t.IDENTITY = new t, t
                })(),
                V = (function() {
                    function t() {
                        this.p = new P, this.q = new N
                    }
                    return t.prototype.Clone = function() {
                        return (new t).Copy(this)
                    }, t.prototype.Copy = function(t) {
                        return this.p.Copy(t.p), this.q.Copy(t.q), this
                    }, t.prototype.SetIdentity = function() {
                        return this.p.SetZero(), this.q.SetIdentity(), this
                    }, t.prototype.SetPositionRotation = function(t, e) {
                        return this.p.Copy(t), this.q.Copy(e), this
                    }, t.prototype.SetPositionAngle = function(t, e) {
                        return this.p.Copy(t), this.q.SetAngle(e), this
                    }, t.prototype.SetPosition = function(t) {
                        return this.p.Copy(t), this
                    }, t.prototype.SetPositionXY = function(t, e) {
                        return this.p.Set(t, e), this
                    }, t.prototype.SetRotation = function(t) {
                        return this.q.Copy(t), this
                    }, t.prototype.SetRotationAngle = function(t) {
                        return this.q.SetAngle(t), this
                    }, t.prototype.GetPosition = function() {
                        return this.p
                    }, t.prototype.GetRotation = function() {
                        return this.q
                    }, t.prototype.GetRotationAngle = function() {
                        return this.q.GetAngle()
                    }, t.prototype.GetAngle = function() {
                        return this.q.GetAngle()
                    }, t.MulXV = function(t, e, i) {
                        var n = t.q.c,
                            r = t.q.s,
                            s = e.x,
                            o = e.y;
                        return i.x = n * s - r * o + t.p.x, i.y = r * s + n * o + t.p.y, i
                    }, t.MulTXV = function(t, e, i) {
                        var n = t.q.c,
                            r = t.q.s,
                            s = e.x - t.p.x,
                            o = e.y - t.p.y;
                        return i.x = n * s + r * o, i.y = -r * s + n * o, i
                    }, t.MulXX = function(t, e, i) {
                        return N.MulRR(t.q, e.q, i.q), P.AddVV(N.MulRV(t.q, e.p, i.p), t.p, i.p), i
                    }, t.MulTXX = function(t, e, i) {
                        return N.MulTRR(t.q, e.q, i.q), N.MulTRV(t.q, P.SubVV(e.p, t.p, i.p), i.p), i
                    }, t.IDENTITY = new t, t
                })(),
                k = (function() {
                    function t() {
                        this.localCenter = new P, this.c0 = new P, this.c = new P, this.a0 = 0, this.a = 0, this.alpha0 = 0
                    }
                    return t.prototype.Clone = function() {
                        return (new t).Copy(this)
                    }, t.prototype.Copy = function(t) {
                        return this.localCenter.Copy(t.localCenter), this.c0.Copy(t.c0), this.c.Copy(t.c), this.a0 = t.a0, this.a = t.a, this.alpha0 = t.alpha0, this
                    }, t.prototype.GetTransform = function(t, e) {
                        var i = 1 - e;
                        t.p.x = i * this.c0.x + e * this.c.x, t.p.y = i * this.c0.y + e * this.c.y;
                        var n = i * this.a0 + e * this.a;
                        return t.q.SetAngle(n), t.p.SelfSub(N.MulRV(t.q, this.localCenter, P.s_t0)), t
                    }, t.prototype.Advance = function(t) {
                        var e = (t - this.alpha0) / (1 - this.alpha0),
                            i = 1 - e;
                        this.c0.x = i * this.c0.x + e * this.c.x, this.c0.y = i * this.c0.y + e * this.c.y, this.a0 = i * this.a0 + e * this.a, this.alpha0 = t
                    }, t.prototype.Normalize = function() {
                        var t = 6.28318530718 * Math.floor(this.a0 / 6.28318530718);
                        this.a0 -= t, this.a -= t
                    }, t
                })(),
                G = (function() {
                    function t(t, e, i, n) {
                        void 0 === t && (t = .5), void 0 === e && (e = .5), void 0 === i && (i = .5), void 0 === n && (n = 1), this.r = t, this.g = e, this.b = i, this.a = n
                    }
                    return t.prototype.Clone = function() {
                        return (new t).Copy(this)
                    }, t.prototype.Copy = function(t) {
                        return this.r = t.r, this.g = t.g, this.b = t.b, this.a = t.a, this
                    }, t.prototype.IsEqual = function(t) {
                        return this.r === t.r && this.g === t.g && this.b === t.b && this.a === t.a
                    }, t.prototype.IsZero = function() {
                        return 0 === this.r && 0 === this.g && 0 === this.b && 0 === this.a
                    }, t.prototype.Set = function(t, e, i, n) {
                        void 0 === n && (n = this.a), this.SetRGBA(t, e, i, n)
                    }, t.prototype.SetByteRGB = function(t, e, i) {
                        return this.r = t / 255, this.g = e / 255, this.b = i / 255, this
                    }, t.prototype.SetByteRGBA = function(t, e, i, n) {
                        return this.r = t / 255, this.g = e / 255, this.b = i / 255, this.a = n / 255, this
                    }, t.prototype.SetRGB = function(t, e, i) {
                        return this.r = t, this.g = e, this.b = i, this
                    }, t.prototype.SetRGBA = function(t, e, i, n) {
                        return this.r = t, this.g = e, this.b = i, this.a = n, this
                    }, t.prototype.SelfAdd = function(t) {
                        return this.r += t.r, this.g += t.g, this.b += t.b, this.a += t.a, this
                    }, t.prototype.Add = function(t, e) {
                        return e.r = this.r + t.r, e.g = this.g + t.g, e.b = this.b + t.b, e.a = this.a + t.a, e
                    }, t.prototype.SelfSub = function(t) {
                        return this.r -= t.r, this.g -= t.g, this.b -= t.b, this.a -= t.a, this
                    }, t.prototype.Sub = function(t, e) {
                        return e.r = this.r - t.r, e.g = this.g - t.g, e.b = this.b - t.b, e.a = this.a - t.a, e
                    }, t.prototype.SelfMul = function(t) {
                        return this.r *= t, this.g *= t, this.b *= t, this.a *= t, this
                    }, t.prototype.Mul = function(t, e) {
                        return e.r = this.r * t, e.g = this.g * t, e.b = this.b * t, e.a = this.a * t, e
                    }, t.prototype.Mix = function(e, i) {
                        t.MixColors(this, e, i)
                    }, t.MixColors = function(t, e, i) {
                        var n = i * (e.r - t.r),
                            r = i * (e.g - t.g),
                            s = i * (e.b - t.b),
                            o = i * (e.a - t.a);
                        t.r += n, t.g += r, t.b += s, t.a += o, e.r -= n, e.g -= r, e.b -= s, e.a -= o
                    }, t.prototype.MakeStyleString = function(e) {
                        return void 0 === e && (e = this.a), t.MakeStyleString(this.r, this.g, this.b, e)
                    }, t.MakeStyleString = function(t, e, i, n) {
                        return void 0 === n && (n = 1), t *= 255, e *= 255, i *= 255, n < 1 ? "rgba(" + t + "," + e + "," + i + "," + n + ")" : "rgb(" + t + "," + e + "," + i + ")"
                    }, t.ZERO = new t(0, 0, 0, 0), t.RED = new t(1, 0, 0), t.GREEN = new t(0, 1, 0), t.BLUE = new t(0, 0, 1), t
                })();
            (function(t) {
                t[t.e_none = 0] = "e_none", t[t.e_shapeBit = 1] = "e_shapeBit", t[t.e_jointBit = 2] = "e_jointBit", t[t.e_aabbBit = 4] = "e_aabbBit", t[t.e_pairBit = 8] = "e_pairBit", t[t.e_centerOfMassBit = 16] = "e_centerOfMassBit", t[t.e_particleBit = 32] = "e_particleBit", t[t.e_controllerBit = 64] = "e_controllerBit", t[t.e_all = 63] = "e_all"
            })(t.b2DrawFlags || (t.b2DrawFlags = {}));
            var U = (function() {
                    function t() {
                        this.m_drawFlags = 0
                    }
                    return t.prototype.SetFlags = function(t) {
                        this.m_drawFlags = t
                    }, t.prototype.GetFlags = function() {
                        return this.m_drawFlags
                    }, t.prototype.AppendFlags = function(t) {
                        this.m_drawFlags |= t
                    }, t.prototype.ClearFlags = function(t) {
                        this.m_drawFlags &= ~t
                    }, t
                })(),
                z = (function() {
                    function t() {
                        this.m_start = Date.now()
                    }
                    return t.prototype.Reset = function() {
                        return this.m_start = Date.now(), this
                    }, t.prototype.GetMilliseconds = function() {
                        return Date.now() - this.m_start
                    }, t
                })(),
                j = (function() {
                    function t() {
                        this.m_count = 0, this.m_min_count = 0, this.m_max_count = 0
                    }
                    return t.prototype.GetCount = function() {
                        return this.m_count
                    }, t.prototype.GetMinCount = function() {
                        return this.m_min_count
                    }, t.prototype.GetMaxCount = function() {
                        return this.m_max_count
                    }, t.prototype.ResetCount = function() {
                        var t = this.m_count;
                        return this.m_count = 0, t
                    }, t.prototype.ResetMinCount = function() {
                        this.m_min_count = 0
                    }, t.prototype.ResetMaxCount = function() {
                        this.m_max_count = 0
                    }, t.prototype.Increment = function() {
                        this.m_count++, this.m_max_count < this.m_count && (this.m_max_count = this.m_count)
                    }, t.prototype.Decrement = function() {
                        this.m_count--, this.m_min_count > this.m_count && (this.m_min_count = this.m_count)
                    }, t
                })(),
                W = (function() {
                    function t(t) {
                        this.m_stack = [], this.m_count = 0, this.m_stack = d(t, (function(t) {
                            return null
                        })), this.m_count = 0
                    }
                    return t.prototype.Reset = function() {
                        return this.m_count = 0, this
                    }, t.prototype.Push = function(t) {
                        this.m_stack[this.m_count] = t, this.m_count++
                    }, t.prototype.Pop = function() {
                        this.m_count--;
                        var t = this.m_stack[this.m_count];
                        if (this.m_stack[this.m_count] = null, null === t) throw new Error;
                        return t
                    }, t.prototype.GetCount = function() {
                        return this.m_count
                    }, t
                })(),
                H = (function() {
                    return function() {}
                })(),
                X = (function() {
                    return function() {}
                })(),
                Y = (function() {
                    function t() {
                        this.m_buffer = P.MakeArray(2), this.m_vertices = this.m_buffer, this.m_count = 0, this.m_radius = 0
                    }
                    return t.prototype.Copy = function(t) {
                        return t.m_vertices === t.m_buffer ? (this.m_vertices = this.m_buffer, this.m_buffer[0].Copy(t.m_buffer[0]), this.m_buffer[1].Copy(t.m_buffer[1])) : this.m_vertices = t.m_vertices, this.m_count = t.m_count, this.m_radius = t.m_radius, this
                    }, t.prototype.Reset = function() {
                        return this.m_vertices = this.m_buffer, this.m_count = 0, this.m_radius = 0, this
                    }, t.prototype.SetShape = function(t, e) {
                        t.SetupDistanceProxy(this, e)
                    }, t.prototype.SetVerticesRadius = function(t, e, i) {
                        this.m_vertices = t, this.m_count = e, this.m_radius = i
                    }, t.prototype.GetSupport = function(t) {
                        for (var e = 0, i = P.DotVV(this.m_vertices[0], t), n = 1; n < this.m_count; ++n) {
                            var r = P.DotVV(this.m_vertices[n], t);
                            r > i && (e = n, i = r)
                        }
                        return e
                    }, t.prototype.GetSupportVertex = function(t) {
                        for (var e = 0, i = P.DotVV(this.m_vertices[0], t), n = 1; n < this.m_count; ++n) {
                            var r = P.DotVV(this.m_vertices[n], t);
                            r > i && (e = n, i = r)
                        }
                        return this.m_vertices[e]
                    }, t.prototype.GetVertexCount = function() {
                        return this.m_count
                    }, t.prototype.GetVertex = function(t) {
                        return this.m_vertices[t]
                    }, t
                })(),
                q = (function() {
                    function t() {
                        this.metric = 0, this.count = 0, this.indexA = [0, 0, 0], this.indexB = [0, 0, 0]
                    }
                    return t.prototype.Reset = function() {
                        return this.metric = 0, this.count = 0, this
                    }, t
                })(),
                J = (function() {
                    function t() {
                        this.proxyA = new Y, this.proxyB = new Y, this.transformA = new V, this.transformB = new V, this.useRadii = !1
                    }
                    return t.prototype.Reset = function() {
                        return this.proxyA.Reset(), this.proxyB.Reset(), this.transformA.SetIdentity(), this.transformB.SetIdentity(), this.useRadii = !1, this
                    }, t
                })(),
                Z = (function() {
                    function t() {
                        this.pointA = new P, this.pointB = new P, this.distance = 0, this.iterations = 0
                    }
                    return t.prototype.Reset = function() {
                        return this.pointA.SetZero(), this.pointB.SetZero(), this.distance = 0, this.iterations = 0, this
                    }, t
                })(),
                K = (function() {
                    return function() {
                        this.proxyA = new Y, this.proxyB = new Y, this.transformA = new V, this.transformB = new V, this.translationB = new P
                    }
                })(),
                Q = (function() {
                    return function() {
                        this.point = new P, this.normal = new P, this.lambda = 0, this.iterations = 0
                    }
                })();
            t.b2_gjkCalls = 0, t.b2_gjkIters = 0, t.b2_gjkMaxIters = 0;
            var $ = (function() {
                    function t() {
                        this.wA = new P, this.wB = new P, this.w = new P, this.a = 0, this.indexA = 0, this.indexB = 0
                    }
                    return t.prototype.Copy = function(t) {
                        return this.wA.Copy(t.wA), this.wB.Copy(t.wB), this.w.Copy(t.w), this.a = t.a, this.indexA = t.indexA, this.indexB = t.indexB, this
                    }, t
                })(),
                tt = (function() {
                    function t() {
                        this.m_v1 = new $, this.m_v2 = new $, this.m_v3 = new $, this.m_vertices = [], this.m_count = 0, this.m_vertices[0] = this.m_v1, this.m_vertices[1] = this.m_v2, this.m_vertices[2] = this.m_v3
                    }
                    return t.prototype.ReadCache = function(t, e, i, r, s) {
                        this.m_count = t.count;
                        for (var o = this.m_vertices, a = 0; a < this.m_count; ++a) {
                            (_ = o[a]).indexA = t.indexA[a], _.indexB = t.indexB[a];
                            var l = e.GetVertex(_.indexA),
                                h = r.GetVertex(_.indexB);
                            V.MulXV(i, l, _.wA), V.MulXV(s, h, _.wB), P.SubVV(_.wB, _.wA, _.w), _.a = 0
                        }
                        if (this.m_count > 1) {
                            var c = t.metric,
                                u = this.GetMetric();
                            (u < .5 * c || 2 * c < u || u < n) && (this.m_count = 0)
                        }
                        if (0 === this.m_count) {
                            var _;
                            (_ = o[0]).indexA = 0, _.indexB = 0;
                            l = e.GetVertex(0), h = r.GetVertex(0);
                            V.MulXV(i, l, _.wA), V.MulXV(s, h, _.wB), P.SubVV(_.wB, _.wA, _.w), _.a = 1, this.m_count = 1
                        }
                    }, t.prototype.WriteCache = function(t) {
                        t.metric = this.GetMetric(), t.count = this.m_count;
                        for (var e = this.m_vertices, i = 0; i < this.m_count; ++i) t.indexA[i] = e[i].indexA, t.indexB[i] = e[i].indexB
                    }, t.prototype.GetSearchDirection = function(t) {
                        switch (this.m_count) {
                            case 1:
                                return P.NegV(this.m_v1.w, t);
                            case 2:
                                var e = P.SubVV(this.m_v2.w, this.m_v1.w, t);
                                return P.CrossVV(e, P.NegV(this.m_v1.w, P.s_t0)) > 0 ? P.CrossOneV(e, t) : P.CrossVOne(e, t);
                            default:
                                return t.SetZero()
                        }
                    }, t.prototype.GetClosestPoint = function(t) {
                        switch (this.m_count) {
                            case 0:
                                return t.SetZero();
                            case 1:
                                return t.Copy(this.m_v1.w);
                            case 2:
                                return t.Set(this.m_v1.a * this.m_v1.w.x + this.m_v2.a * this.m_v2.w.x, this.m_v1.a * this.m_v1.w.y + this.m_v2.a * this.m_v2.w.y);
                            case 3:
                            default:
                                return t.SetZero()
                        }
                    }, t.prototype.GetWitnessPoints = function(t, e) {
                        switch (this.m_count) {
                            case 0:
                                break;
                            case 1:
                                t.Copy(this.m_v1.wA), e.Copy(this.m_v1.wB);
                                break;
                            case 2:
                                t.x = this.m_v1.a * this.m_v1.wA.x + this.m_v2.a * this.m_v2.wA.x, t.y = this.m_v1.a * this.m_v1.wA.y + this.m_v2.a * this.m_v2.wA.y, e.x = this.m_v1.a * this.m_v1.wB.x + this.m_v2.a * this.m_v2.wB.x, e.y = this.m_v1.a * this.m_v1.wB.y + this.m_v2.a * this.m_v2.wB.y;
                                break;
                            case 3:
                                e.x = t.x = this.m_v1.a * this.m_v1.wA.x + this.m_v2.a * this.m_v2.wA.x + this.m_v3.a * this.m_v3.wA.x, e.y = t.y = this.m_v1.a * this.m_v1.wA.y + this.m_v2.a * this.m_v2.wA.y + this.m_v3.a * this.m_v3.wA.y
                        }
                    }, t.prototype.GetMetric = function() {
                        switch (this.m_count) {
                            case 0:
                            case 1:
                                return 0;
                            case 2:
                                return P.DistanceVV(this.m_v1.w, this.m_v2.w);
                            case 3:
                                return P.CrossVV(P.SubVV(this.m_v2.w, this.m_v1.w, P.s_t0), P.SubVV(this.m_v3.w, this.m_v1.w, P.s_t1));
                            default:
                                return 0
                        }
                    }, t.prototype.Solve2 = function() {
                        var e = this.m_v1.w,
                            i = this.m_v2.w,
                            n = P.SubVV(i, e, t.s_e12),
                            r = -P.DotVV(e, n);
                        if (r <= 0) return this.m_v1.a = 1, void(this.m_count = 1);
                        var s = P.DotVV(i, n);
                        if (s <= 0) return this.m_v2.a = 1, this.m_count = 1, void this.m_v1.Copy(this.m_v2);
                        var o = 1 / (s + r);
                        this.m_v1.a = s * o, this.m_v2.a = r * o, this.m_count = 2
                    }, t.prototype.Solve3 = function() {
                        var e = this.m_v1.w,
                            i = this.m_v2.w,
                            n = this.m_v3.w,
                            r = P.SubVV(i, e, t.s_e12),
                            s = P.DotVV(e, r),
                            o = P.DotVV(i, r),
                            a = -s,
                            l = P.SubVV(n, e, t.s_e13),
                            h = P.DotVV(e, l),
                            c = P.DotVV(n, l),
                            u = -h,
                            _ = P.SubVV(n, i, t.s_e23),
                            f = P.DotVV(i, _),
                            d = P.DotVV(n, _),
                            p = -f,
                            m = P.CrossVV(r, l),
                            y = m * P.CrossVV(i, n),
                            v = m * P.CrossVV(n, e),
                            g = m * P.CrossVV(e, i);
                        if (a <= 0 && u <= 0) return this.m_v1.a = 1, void(this.m_count = 1);
                        if (o > 0 && a > 0 && g <= 0) {
                            var x = 1 / (o + a);
                            return this.m_v1.a = o * x, this.m_v2.a = a * x, void(this.m_count = 2)
                        }
                        if (c > 0 && u > 0 && v <= 0) {
                            var b = 1 / (c + u);
                            return this.m_v1.a = c * b, this.m_v3.a = u * b, this.m_count = 2, void this.m_v2.Copy(this.m_v3)
                        }
                        if (o <= 0 && p <= 0) return this.m_v2.a = 1, this.m_count = 1, void this.m_v1.Copy(this.m_v2);
                        if (c <= 0 && d <= 0) return this.m_v3.a = 1, this.m_count = 1, void this.m_v1.Copy(this.m_v3);
                        if (d > 0 && p > 0 && y <= 0) {
                            var A = 1 / (d + p);
                            return this.m_v2.a = d * A, this.m_v3.a = p * A, this.m_count = 2, void this.m_v1.Copy(this.m_v3)
                        }
                        var C = 1 / (y + v + g);
                        this.m_v1.a = y * C, this.m_v2.a = v * C, this.m_v3.a = g * C, this.m_count = 3
                    }, t.s_e12 = new P, t.s_e13 = new P, t.s_e23 = new P, t
                })(),
                et = new tt,
                it = [0, 0, 0],
                nt = [0, 0, 0],
                rt = new P,
                st = new P,
                ot = new P,
                at = new P,
                lt = new P;

            function ht(e, i, s) {
                ++t.b2_gjkCalls;
                var o = s.proxyA,
                    a = s.proxyB,
                    l = s.transformA,
                    h = s.transformB,
                    c = et;
                c.ReadCache(i, o, l, a, h);
                for (var u = c.m_vertices, _ = it, f = nt, d = 0, p = 0; p < 20;) {
                    d = c.m_count;
                    for (var m = 0; m < d; ++m) _[m] = u[m].indexA, f[m] = u[m].indexB;
                    switch (c.m_count) {
                        case 1:
                            break;
                        case 2:
                            c.Solve2();
                            break;
                        case 3:
                            c.Solve3()
                    }
                    if (3 === c.m_count) break;
                    var y = c.GetSearchDirection(st);
                    if (y.LengthSquared() < r) break;
                    var v = u[c.m_count];
                    v.indexA = o.GetSupport(N.MulTRV(l.q, P.NegV(y, P.s_t0), at)), V.MulXV(l, o.GetVertex(v.indexA), v.wA), v.indexB = a.GetSupport(N.MulTRV(h.q, y, lt)), V.MulXV(h, a.GetVertex(v.indexB), v.wB), P.SubVV(v.wB, v.wA, v.w), ++p, ++t.b2_gjkIters;
                    var g = !1;
                    for (m = 0; m < d; ++m)
                        if (v.indexA === _[m] && v.indexB === f[m]) {
                            g = !0;
                            break
                        }
                    if (g) break;
                    ++c.m_count
                }
                if (t.b2_gjkMaxIters = x(t.b2_gjkMaxIters, p), c.GetWitnessPoints(e.pointA, e.pointB), e.distance = P.DistanceVV(e.pointA, e.pointB), e.iterations = p, c.WriteCache(i), s.useRadii) {
                    var b = o.m_radius,
                        A = a.m_radius;
                    if (e.distance > b + A && e.distance > n) {
                        e.distance -= b + A;
                        var C = P.SubVV(e.pointB, e.pointA, ot);
                        C.Normalize(), e.pointA.SelfMulAdd(b, C), e.pointB.SelfMulSub(A, C)
                    } else {
                        var T = P.MidVV(e.pointA, e.pointB, rt);
                        e.pointA.Copy(T), e.pointB.Copy(T), e.distance = 0
                    }
                }
            }
            var ct = new P,
                ut = new tt,
                _t = new P,
                ft = new P,
                dt = new P,
                pt = new P,
                mt = new P,
                yt = new P;
            (function(t) {
                t[t.e_vertex = 0] = "e_vertex", t[t.e_face = 1] = "e_face"
            })(t.b2ContactFeatureType || (t.b2ContactFeatureType = {}));
            var vt = (function() {
                    function t() {
                        this._key = 0, this._key_invalid = !1, this._indexA = 0, this._indexB = 0, this._typeA = 0, this._typeB = 0
                    }
                    return Object.defineProperty(t.prototype, "key", {
                        get: function() {
                            return this._key_invalid && (this._key_invalid = !1, this._key = this._indexA | this._indexB << 8 | this._typeA << 16 | this._typeB << 24), this._key
                        },
                        set: function(t) {
                            this._key = t, this._key_invalid = !1, this._indexA = 255 & this._key, this._indexB = this._key >> 8 & 255, this._typeA = this._key >> 16 & 255, this._typeB = this._key >> 24 & 255
                        },
                        enumerable: !0,
                        configurable: !0
                    }), Object.defineProperty(t.prototype, "indexA", {
                        get: function() {
                            return this._indexA
                        },
                        set: function(t) {
                            this._indexA = t, this._key_invalid = !0
                        },
                        enumerable: !0,
                        configurable: !0
                    }), Object.defineProperty(t.prototype, "indexB", {
                        get: function() {
                            return this._indexB
                        },
                        set: function(t) {
                            this._indexB = t, this._key_invalid = !0
                        },
                        enumerable: !0,
                        configurable: !0
                    }), Object.defineProperty(t.prototype, "typeA", {
                        get: function() {
                            return this._typeA
                        },
                        set: function(t) {
                            this._typeA = t, this._key_invalid = !0
                        },
                        enumerable: !0,
                        configurable: !0
                    }), Object.defineProperty(t.prototype, "typeB", {
                        get: function() {
                            return this._typeB
                        },
                        set: function(t) {
                            this._typeB = t, this._key_invalid = !0
                        },
                        enumerable: !0,
                        configurable: !0
                    }), t
                })(),
                gt = (function() {
                    function t() {
                        this.cf = new vt
                    }
                    return t.prototype.Copy = function(t) {
                        return this.key = t.key, this
                    }, t.prototype.Clone = function() {
                        return (new t).Copy(this)
                    }, Object.defineProperty(t.prototype, "key", {
                        get: function() {
                            return this.cf.key
                        },
                        set: function(t) {
                            this.cf.key = t
                        },
                        enumerable: !0,
                        configurable: !0
                    }), t
                })(),
                xt = (function() {
                    function t() {
                        this.localPoint = new P, this.normalImpulse = 0, this.tangentImpulse = 0, this.id = new gt
                    }
                    return t.MakeArray = function(e) {
                        return d(e, (function(e) {
                            return new t
                        }))
                    }, t.prototype.Reset = function() {
                        this.localPoint.SetZero(), this.normalImpulse = 0, this.tangentImpulse = 0, this.id.key = 0
                    }, t.prototype.Copy = function(t) {
                        return this.localPoint.Copy(t.localPoint), this.normalImpulse = t.normalImpulse, this.tangentImpulse = t.tangentImpulse, this.id.Copy(t.id), this
                    }, t
                })();
            (function(t) {
                t[t.e_unknown = -1] = "e_unknown", t[t.e_circles = 0] = "e_circles", t[t.e_faceA = 1] = "e_faceA", t[t.e_faceB = 2] = "e_faceB"
            })(t.b2ManifoldType || (t.b2ManifoldType = {}));
            var bt = (function() {
                    function e() {
                        this.points = xt.MakeArray(o), this.localNormal = new P, this.localPoint = new P, this.type = t.b2ManifoldType.e_unknown, this.pointCount = 0
                    }
                    return e.prototype.Reset = function() {
                        for (var e = 0; e < o; ++e) this.points[e].Reset();
                        this.localNormal.SetZero(), this.localPoint.SetZero(), this.type = t.b2ManifoldType.e_unknown, this.pointCount = 0
                    }, e.prototype.Copy = function(t) {
                        this.pointCount = t.pointCount;
                        for (var e = 0; e < o; ++e) this.points[e].Copy(t.points[e]);
                        return this.localNormal.Copy(t.localNormal), this.localPoint.Copy(t.localPoint), this.type = t.type, this
                    }, e.prototype.Clone = function() {
                        return (new e).Copy(this)
                    }, e
                })(),
                At = (function() {
                    function e() {
                        this.normal = new P, this.points = P.MakeArray(o), this.separations = p(o)
                    }
                    return e.prototype.Initialize = function(i, n, s, o, a) {
                        if (0 !== i.pointCount) switch (i.type) {
                            case t.b2ManifoldType.e_circles:
                                this.normal.Set(1, 0);
                                var l = V.MulXV(n, i.localPoint, e.Initialize_s_pointA),
                                    h = V.MulXV(o, i.points[0].localPoint, e.Initialize_s_pointB);
                                P.DistanceSquaredVV(l, h) > r && P.SubVV(h, l, this.normal).SelfNormalize();
                                var c = P.AddVMulSV(l, s, this.normal, e.Initialize_s_cA),
                                    u = P.SubVMulSV(h, a, this.normal, e.Initialize_s_cB);
                                P.MidVV(c, u, this.points[0]), this.separations[0] = P.DotVV(P.SubVV(u, c, P.s_t0), this.normal);
                                break;
                            case t.b2ManifoldType.e_faceA:
                                N.MulRV(n.q, i.localNormal, this.normal);
                                for (var _ = V.MulXV(n, i.localPoint, e.Initialize_s_planePoint), f = 0; f < i.pointCount; ++f) {
                                    var d = V.MulXV(o, i.points[f].localPoint, e.Initialize_s_clipPoint),
                                        p = s - P.DotVV(P.SubVV(d, _, P.s_t0), this.normal);
                                    c = P.AddVMulSV(d, p, this.normal, e.Initialize_s_cA), u = P.SubVMulSV(d, a, this.normal, e.Initialize_s_cB);
                                    P.MidVV(c, u, this.points[f]), this.separations[f] = P.DotVV(P.SubVV(u, c, P.s_t0), this.normal)
                                }
                                break;
                            case t.b2ManifoldType.e_faceB:
                                N.MulRV(o.q, i.localNormal, this.normal);
                                for (_ = V.MulXV(o, i.localPoint, e.Initialize_s_planePoint), f = 0; f < i.pointCount; ++f) {
                                    d = V.MulXV(n, i.points[f].localPoint, e.Initialize_s_clipPoint), p = a - P.DotVV(P.SubVV(d, _, P.s_t0), this.normal), u = P.AddVMulSV(d, p, this.normal, e.Initialize_s_cB), c = P.SubVMulSV(d, s, this.normal, e.Initialize_s_cA);
                                    P.MidVV(c, u, this.points[f]), this.separations[f] = P.DotVV(P.SubVV(c, u, P.s_t0), this.normal)
                                }
                                this.normal.SelfNeg()
                        }
                    }, e.Initialize_s_pointA = new P, e.Initialize_s_pointB = new P, e.Initialize_s_cA = new P, e.Initialize_s_cB = new P, e.Initialize_s_planePoint = new P, e.Initialize_s_clipPoint = new P, e
                })();
            (function(t) {
                t[t.b2_nullState = 0] = "b2_nullState", t[t.b2_addState = 1] = "b2_addState", t[t.b2_persistState = 2] = "b2_persistState", t[t.b2_removeState = 3] = "b2_removeState"
            })(t.b2PointState || (t.b2PointState = {}));
            var Ct = (function() {
                    function t() {
                        this.v = new P, this.id = new gt
                    }
                    return t.MakeArray = function(e) {
                        return d(e, (function(e) {
                            return new t
                        }))
                    }, t.prototype.Copy = function(t) {
                        return this.v.Copy(t.v), this.id.Copy(t.id), this
                    }, t
                })(),
                Tt = (function() {
                    function t() {
                        this.p1 = new P, this.p2 = new P, this.maxFraction = 1
                    }
                    return t.prototype.Copy = function(t) {
                        return this.p1.Copy(t.p1), this.p2.Copy(t.p2), this.maxFraction = t.maxFraction, this
                    }, t
                })(),
                St = (function() {
                    function t() {
                        this.normal = new P, this.fraction = 0
                    }
                    return t.prototype.Copy = function(t) {
                        return this.normal.Copy(t.normal), this.fraction = t.fraction, this
                    }, t
                })(),
                wt = (function() {
                    function t() {
                        this.lowerBound = new P, this.upperBound = new P, this.m_cache_center = new P, this.m_cache_extent = new P
                    }
                    return t.prototype.Copy = function(t) {
                        return this.lowerBound.Copy(t.lowerBound), this.upperBound.Copy(t.upperBound), this
                    }, t.prototype.IsValid = function() {
                        var t = this.upperBound.x - this.lowerBound.x,
                            e = this.upperBound.y - this.lowerBound.y,
                            i = t >= 0 && e >= 0;
                        return i = i && this.lowerBound.IsValid() && this.upperBound.IsValid()
                    }, t.prototype.GetCenter = function() {
                        return P.MidVV(this.lowerBound, this.upperBound, this.m_cache_center)
                    }, t.prototype.GetExtents = function() {
                        return P.ExtVV(this.lowerBound, this.upperBound, this.m_cache_extent)
                    }, t.prototype.GetPerimeter = function() {
                        return 2 * (this.upperBound.x - this.lowerBound.x + (this.upperBound.y - this.lowerBound.y))
                    }, t.prototype.Combine1 = function(t) {
                        return this.lowerBound.x = g(this.lowerBound.x, t.lowerBound.x), this.lowerBound.y = g(this.lowerBound.y, t.lowerBound.y), this.upperBound.x = x(this.upperBound.x, t.upperBound.x), this.upperBound.y = x(this.upperBound.y, t.upperBound.y), this
                    }, t.prototype.Combine2 = function(t, e) {
                        return this.lowerBound.x = g(t.lowerBound.x, e.lowerBound.x), this.lowerBound.y = g(t.lowerBound.y, e.lowerBound.y), this.upperBound.x = x(t.upperBound.x, e.upperBound.x), this.upperBound.y = x(t.upperBound.y, e.upperBound.y), this
                    }, t.Combine = function(t, e, i) {
                        return i.Combine2(t, e), i
                    }, t.prototype.Contains = function(t) {
                        var e = !0;
                        return e = (e = (e = (e = e && this.lowerBound.x <= t.lowerBound.x) && this.lowerBound.y <= t.lowerBound.y) && t.upperBound.x <= this.upperBound.x) && t.upperBound.y <= this.upperBound.y
                    }, t.prototype.RayCast = function(t, e) {
                        var r = -i,
                            s = i,
                            o = e.p1.x,
                            a = e.p1.y,
                            l = e.p2.x - e.p1.x,
                            h = e.p2.y - e.p1.y,
                            c = v(l),
                            u = v(h),
                            _ = t.normal;
                        if (c < n) {
                            if (o < this.lowerBound.x || this.upperBound.x < o) return !1
                        } else {
                            var f = 1 / l,
                                d = -1;
                            if ((m = (this.lowerBound.x - o) * f) > (y = (this.upperBound.x - o) * f)) {
                                var p = m;
                                m = y, y = p, d = 1
                            }
                            if (m > r && (_.x = d, _.y = 0, r = m), r > (s = g(s, y))) return !1
                        }
                        if (u < n) {
                            if (a < this.lowerBound.y || this.upperBound.y < a) return !1
                        } else {
                            var m, y;
                            f = 1 / h, d = -1;
                            if ((m = (this.lowerBound.y - a) * f) > (y = (this.upperBound.y - a) * f)) {
                                p = m;
                                m = y, y = p, d = 1
                            }
                            if (m > r && (_.x = 0, _.y = d, r = m), r > (s = g(s, y))) return !1
                        }
                        return !(r < 0 || e.maxFraction < r) && (t.fraction = r, !0)
                    }, t.prototype.TestContain = function(t) {
                        return !(t.x < this.lowerBound.x || this.upperBound.x < t.x) && !(t.y < this.lowerBound.y || this.upperBound.y < t.y)
                    }, t.prototype.TestOverlap = function(t) {
                        var e = t.lowerBound.x - this.upperBound.x,
                            i = t.lowerBound.y - this.upperBound.y,
                            n = this.lowerBound.x - t.upperBound.x,
                            r = this.lowerBound.y - t.upperBound.y;
                        return !(e > 0 || i > 0) && !(n > 0 || r > 0)
                    }, t
                })();

            function Et(t, e) {
                var i = e.lowerBound.x - t.upperBound.x,
                    n = e.lowerBound.y - t.upperBound.y,
                    r = t.lowerBound.x - e.upperBound.x,
                    s = t.lowerBound.y - e.upperBound.y;
                return !(i > 0 || n > 0) && !(r > 0 || s > 0)
            }

            function Mt(e, i, n, r, s) {
                var o = 0,
                    a = i[0],
                    l = i[1],
                    h = P.DotVV(n, a.v) - r,
                    c = P.DotVV(n, l.v) - r;
                if (h <= 0 && e[o++].Copy(a), c <= 0 && e[o++].Copy(l), h * c < 0) {
                    var u = h / (h - c),
                        _ = e[o].v;
                    _.x = a.v.x + u * (l.v.x - a.v.x), _.y = a.v.y + u * (l.v.y - a.v.y);
                    var f = e[o].id;
                    f.cf.indexA = s, f.cf.indexB = a.id.cf.indexB, f.cf.typeA = t.b2ContactFeatureType.e_vertex, f.cf.typeB = t.b2ContactFeatureType.e_face, ++o
                }
                return o
            }
            var Dt = new J,
                Bt = new q,
                It = new Z;

            function Pt(t, e, i, r, s, o) {
                var a = Dt.Reset();
                a.proxyA.SetShape(t, e), a.proxyB.SetShape(i, r), a.transformA.Copy(s), a.transformB.Copy(o), a.useRadii = !0;
                var l = Bt.Reset();
                l.count = 0;
                var h = It.Reset();
                return ht(h, l, a), h.distance < 10 * n
            }

            function Rt(t) {
                if (null === t) throw new Error;
                return t
            }
            var Ot = (function() {
                    function t(t) {
                        void 0 === t && (t = 0), this.m_id = 0, this.aabb = new wt, this.parent = null, this.child1 = null, this.child2 = null, this.height = 0, this.m_id = t
                    }
                    return t.prototype.IsLeaf = function() {
                        return null === this.child1
                    }, t
                })(),
                Lt = (function() {
                    function t() {
                        this.m_root = null, this.m_freeList = null, this.m_path = 0, this.m_insertionCount = 0, this.m_stack = new W(256)
                    }
                    return t.prototype.Query = function(t, e) {
                        if (null !== this.m_root) {
                            var i = this.m_stack.Reset();
                            for (i.Push(this.m_root); i.GetCount() > 0;) {
                                var n = i.Pop();
                                if (n.aabb.TestOverlap(t))
                                    if (n.IsLeaf()) {
                                        if (!e(n)) return
                                    } else i.Push(Rt(n.child1)), i.Push(Rt(n.child2))
                            }
                        }
                    }, t.prototype.QueryPoint = function(t, e) {
                        if (null !== this.m_root) {
                            var i = this.m_stack.Reset();
                            for (i.Push(this.m_root); i.GetCount() > 0;) {
                                var n = i.Pop();
                                if (n.aabb.TestContain(t))
                                    if (n.IsLeaf()) {
                                        if (!e(n)) return
                                    } else i.Push(Rt(n.child1)), i.Push(Rt(n.child2))
                            }
                        }
                    }, t.prototype.RayCast = function(e, i) {
                        if (null !== this.m_root) {
                            var n = e.p1,
                                r = e.p2,
                                s = P.SubVV(r, n, t.s_r);
                            s.Normalize();
                            var o = P.CrossOneV(s, t.s_v),
                                a = P.AbsV(o, t.s_abs_v),
                                l = e.maxFraction,
                                h = t.s_segmentAABB,
                                c = n.x + l * (r.x - n.x),
                                u = n.y + l * (r.y - n.y);
                            h.lowerBound.x = g(n.x, c), h.lowerBound.y = g(n.y, u), h.upperBound.x = x(n.x, c), h.upperBound.y = x(n.y, u);
                            var _ = this.m_stack.Reset();
                            for (_.Push(this.m_root); _.GetCount() > 0;) {
                                var f = _.Pop();
                                if (Et(f.aabb, h)) {
                                    var d = f.aabb.GetCenter(),
                                        p = f.aabb.GetExtents();
                                    if (!(v(P.DotVV(o, P.SubVV(n, d, P.s_t0))) - P.DotVV(a, p) > 0))
                                        if (f.IsLeaf()) {
                                            var m = t.s_subInput;
                                            m.p1.Copy(e.p1), m.p2.Copy(e.p2), m.maxFraction = l;
                                            var y = i(m, f);
                                            if (0 === y) return;
                                            y > 0 && (l = y, c = n.x + l * (r.x - n.x), u = n.y + l * (r.y - n.y), h.lowerBound.x = g(n.x, c), h.lowerBound.y = g(n.y, u), h.upperBound.x = x(n.x, c), h.upperBound.y = x(n.y, u))
                                        } else _.Push(Rt(f.child1)), _.Push(Rt(f.child2))
                                }
                            }
                        }
                    }, t.prototype.AllocateNode = function() {
                        if (this.m_freeList) {
                            var e = this.m_freeList;
                            return this.m_freeList = e.parent, e.parent = null, e.child1 = null, e.child2 = null, e.height = 0, delete e.userData, e
                        }
                        return new Ot(t.s_node_id++)
                    }, t.prototype.FreeNode = function(t) {
                        t.parent = this.m_freeList, t.child1 = null, t.child2 = null, t.height = -1, delete t.userData, this.m_freeList = t
                    }, t.prototype.CreateProxy = function(t, e) {
                        var i = this.AllocateNode();
                        return i.aabb.lowerBound.x = t.lowerBound.x - .1, i.aabb.lowerBound.y = t.lowerBound.y - .1, i.aabb.upperBound.x = t.upperBound.x + .1, i.aabb.upperBound.y = t.upperBound.y + .1, i.userData = e, i.height = 0, this.InsertLeaf(i), i
                    }, t.prototype.DestroyProxy = function(t) {
                        this.RemoveLeaf(t), this.FreeNode(t)
                    }, t.prototype.MoveProxy = function(t, e, i) {
                        if (t.aabb.Contains(e)) return !1;
                        this.RemoveLeaf(t);
                        var n = .1 + 2 * (i.x > 0 ? i.x : -i.x),
                            r = .1 + 2 * (i.y > 0 ? i.y : -i.y);
                        return t.aabb.lowerBound.x = e.lowerBound.x - n, t.aabb.lowerBound.y = e.lowerBound.y - r, t.aabb.upperBound.x = e.upperBound.x + n, t.aabb.upperBound.y = e.upperBound.y + r, this.InsertLeaf(t), !0
                    }, t.prototype.InsertLeaf = function(e) {
                        if (++this.m_insertionCount, null === this.m_root) return this.m_root = e, void(this.m_root.parent = null);
                        for (var i = e.aabb, n = this.m_root; !n.IsLeaf();) {
                            var r = Rt(n.child1),
                                s = Rt(n.child2),
                                o = n.aabb.GetPerimeter(),
                                a = t.s_combinedAABB;
                            a.Combine2(n.aabb, i);
                            var l = a.GetPerimeter(),
                                h = 2 * l,
                                c = 2 * (l - o),
                                u = void 0,
                                _ = t.s_aabb,
                                f = void 0;
                            r.IsLeaf() ? (_.Combine2(i, r.aabb), u = _.GetPerimeter() + c) : (_.Combine2(i, r.aabb), f = r.aabb.GetPerimeter(), u = _.GetPerimeter() - f + c);
                            var d = void 0;
                            if (s.IsLeaf() ? (_.Combine2(i, s.aabb), d = _.GetPerimeter() + c) : (_.Combine2(i, s.aabb), f = s.aabb.GetPerimeter(), d = _.GetPerimeter() - f + c), h < u && h < d) break;
                            n = u < d ? r : s
                        }
                        var p = n,
                            m = p.parent,
                            y = this.AllocateNode();
                        y.parent = m, delete y.userData, y.aabb.Combine2(i, p.aabb), y.height = p.height + 1, m ? (m.child1 === p ? m.child1 = y : m.child2 = y, y.child1 = p, y.child2 = e, p.parent = y, e.parent = y) : (y.child1 = p, y.child2 = e, p.parent = y, e.parent = y, this.m_root = y);
                        for (var v = e.parent; null !== v;) {
                            r = Rt((v = this.Balance(v)).child1), s = Rt(v.child2);
                            v.height = 1 + x(r.height, s.height), v.aabb.Combine2(r.aabb, s.aabb), v = v.parent
                        }
                    }, t.prototype.RemoveLeaf = function(t) {
                        if (t !== this.m_root) {
                            var e, i = Rt(t.parent),
                                n = i && i.parent;
                            if (e = i.child1 === t ? Rt(i.child2) : Rt(i.child1), n) {
                                n.child1 === i ? n.child1 = e : n.child2 = e, e.parent = n, this.FreeNode(i);
                                for (var r = n; r;) {
                                    var s = Rt((r = this.Balance(r)).child1),
                                        o = Rt(r.child2);
                                    r.aabb.Combine2(s.aabb, o.aabb), r.height = 1 + x(s.height, o.height), r = r.parent
                                }
                            } else this.m_root = e, e.parent = null, this.FreeNode(i)
                        } else this.m_root = null
                    }, t.prototype.Balance = function(t) {
                        if (t.IsLeaf() || t.height < 2) return t;
                        var e = Rt(t.child1),
                            i = Rt(t.child2),
                            n = i.height - e.height;
                        if (n > 1) {
                            var r = Rt(i.child1),
                                s = Rt(i.child2);
                            return i.child1 = t, i.parent = t.parent, t.parent = i, null !== i.parent ? i.parent.child1 === t ? i.parent.child1 = i : i.parent.child2 = i : this.m_root = i, r.height > s.height ? (i.child2 = r, t.child2 = s, s.parent = t, t.aabb.Combine2(e.aabb, s.aabb), i.aabb.Combine2(t.aabb, r.aabb), t.height = 1 + x(e.height, s.height), i.height = 1 + x(t.height, r.height)) : (i.child2 = s, t.child2 = r, r.parent = t, t.aabb.Combine2(e.aabb, r.aabb), i.aabb.Combine2(t.aabb, s.aabb), t.height = 1 + x(e.height, r.height), i.height = 1 + x(t.height, s.height)), i
                        }
                        if (n < -1) {
                            var o = Rt(e.child1),
                                a = Rt(e.child2);
                            return e.child1 = t, e.parent = t.parent, t.parent = e, null !== e.parent ? e.parent.child1 === t ? e.parent.child1 = e : e.parent.child2 = e : this.m_root = e, o.height > a.height ? (e.child2 = o, t.child1 = a, a.parent = t, t.aabb.Combine2(i.aabb, a.aabb), e.aabb.Combine2(t.aabb, o.aabb), t.height = 1 + x(i.height, a.height), e.height = 1 + x(t.height, o.height)) : (e.child2 = a, t.child1 = o, o.parent = t, t.aabb.Combine2(i.aabb, o.aabb), e.aabb.Combine2(t.aabb, a.aabb), t.height = 1 + x(i.height, o.height), e.height = 1 + x(t.height, a.height)), e
                        }
                        return t
                    }, t.prototype.GetHeight = function() {
                        return null === this.m_root ? 0 : this.m_root.height
                    }, t.GetAreaNode = function(e) {
                        if (null === e) return 0;
                        if (e.IsLeaf()) return 0;
                        var i = e.aabb.GetPerimeter();
                        return i += t.GetAreaNode(e.child1), i += t.GetAreaNode(e.child2)
                    }, t.prototype.GetAreaRatio = function() {
                        if (null === this.m_root) return 0;
                        var e = this.m_root.aabb.GetPerimeter();
                        return t.GetAreaNode(this.m_root) / e
                    }, t.prototype.ComputeHeightNode = function(t) {
                        if (!t || t.IsLeaf()) return 0;
                        var e = this.ComputeHeightNode(t.child1),
                            i = this.ComputeHeightNode(t.child2);
                        return 1 + x(e, i)
                    }, t.prototype.ComputeHeight = function() {
                        return this.ComputeHeightNode(this.m_root)
                    }, t.prototype.ValidateStructure = function(t) {
                        if (null !== t) {
                            this.m_root;
                            var e = t;
                            if (!e.IsLeaf()) {
                                var i = Rt(e.child1),
                                    n = Rt(e.child2);
                                this.ValidateStructure(i), this.ValidateStructure(n)
                            }
                        }
                    }, t.prototype.ValidateMetrics = function(e) {
                        if (null !== e) {
                            var i = e;
                            if (!i.IsLeaf()) {
                                var n = Rt(i.child1),
                                    r = Rt(i.child2);
                                t.s_aabb.Combine2(n.aabb, r.aabb), this.ValidateMetrics(n), this.ValidateMetrics(r)
                            }
                        }
                    }, t.prototype.Validate = function() {}, t.GetMaxBalanceNode = function(t, e) {
                        if (null === t) return e;
                        if (t.height <= 1) return e;
                        var i = Rt(t.child1),
                            n = Rt(t.child2),
                            r = v(n.height - i.height);
                        return x(e, r)
                    }, t.prototype.GetMaxBalance = function() {
                        return t.GetMaxBalanceNode(this.m_root, 0)
                    }, t.prototype.RebuildBottomUp = function() {
                        this.Validate()
                    }, t.ShiftOriginNode = function(e, i) {
                        if (null !== e && !(e.height <= 1)) {
                            var n = e.child1,
                                r = e.child2;
                            t.ShiftOriginNode(n, i), t.ShiftOriginNode(r, i), e.aabb.lowerBound.SelfSub(i), e.aabb.upperBound.SelfSub(i)
                        }
                    }, t.prototype.ShiftOrigin = function(e) {
                        t.ShiftOriginNode(this.m_root, e)
                    }, t.s_r = new P, t.s_v = new P, t.s_abs_v = new P, t.s_segmentAABB = new wt, t.s_subInput = new Tt, t.s_combinedAABB = new wt, t.s_aabb = new wt, t.s_node_id = 0, t
                })(),
                Ft = (function() {
                    return function(t, e) {
                        this.proxyA = t, this.proxyB = e
                    }
                })(),
                Nt = (function() {
                    function t() {
                        this.m_tree = new Lt, this.m_proxyCount = 0, this.m_moveCount = 0, this.m_moveBuffer = [], this.m_pairCount = 0, this.m_pairBuffer = []
                    }
                    return t.prototype.CreateProxy = function(t, e) {
                        var i = this.m_tree.CreateProxy(t, e);
                        return ++this.m_proxyCount, this.BufferMove(i), i
                    }, t.prototype.DestroyProxy = function(t) {
                        this.UnBufferMove(t), --this.m_proxyCount, this.m_tree.DestroyProxy(t)
                    }, t.prototype.MoveProxy = function(t, e, i) {
                        this.m_tree.MoveProxy(t, e, i) && this.BufferMove(t)
                    }, t.prototype.TouchProxy = function(t) {
                        this.BufferMove(t)
                    }, t.prototype.GetProxyCount = function() {
                        return this.m_proxyCount
                    }, t.prototype.UpdatePairs = function(t) {
                        var e = this;
                        this.m_pairCount = 0;
                        for (var i = function(t) {
                                var i = n.m_moveBuffer[t];
                                if (null === i) return "continue";
                                var r = i.aabb;
                                n.m_tree.Query(r, (function(t) {
                                    if (t.m_id === i.m_id) return !0;
                                    var n, r;
                                    if (t.m_id < i.m_id ? (n = t, r = i) : (n = i, r = t), e.m_pairCount === e.m_pairBuffer.length) e.m_pairBuffer[e.m_pairCount] = new Ft(n, r);
                                    else {
                                        var s = e.m_pairBuffer[e.m_pairCount];
                                        s.proxyA = n, s.proxyB = r
                                    }
                                    return ++e.m_pairCount, !0
                                }))
                            }, n = this, r = 0; r < this.m_moveCount; ++r) i(r);
                        this.m_moveCount = 0, this.m_pairBuffer.length = this.m_pairCount, this.m_pairBuffer.sort(Vt);
                        for (var s = 0; s < this.m_pairCount;) {
                            var o = this.m_pairBuffer[s],
                                a = o.proxyA.userData,
                                l = o.proxyB.userData;
                            for (a && l && t(a, l), ++s; s < this.m_pairCount;) {
                                var h = this.m_pairBuffer[s];
                                if (h.proxyA.m_id !== o.proxyA.m_id || h.proxyB.m_id !== o.proxyB.m_id) break;
                                ++s
                            }
                        }
                    }, t.prototype.Query = function(t, e) {
                        this.m_tree.Query(t, e)
                    }, t.prototype.QueryPoint = function(t, e) {
                        this.m_tree.QueryPoint(t, e)
                    }, t.prototype.RayCast = function(t, e) {
                        this.m_tree.RayCast(t, e)
                    }, t.prototype.GetTreeHeight = function() {
                        return this.m_tree.GetHeight()
                    }, t.prototype.GetTreeBalance = function() {
                        return this.m_tree.GetMaxBalance()
                    }, t.prototype.GetTreeQuality = function() {
                        return this.m_tree.GetAreaRatio()
                    }, t.prototype.ShiftOrigin = function(t) {
                        this.m_tree.ShiftOrigin(t)
                    }, t.prototype.BufferMove = function(t) {
                        this.m_moveBuffer[this.m_moveCount] = t, ++this.m_moveCount
                    }, t.prototype.UnBufferMove = function(t) {
                        var e = this.m_moveBuffer.indexOf(t);
                        this.m_moveBuffer[e] = null
                    }, t
                })();

            function Vt(t, e) {
                return t.proxyA.m_id === e.proxyA.m_id ? t.proxyB.m_id - e.proxyB.m_id : t.proxyA.m_id - e.proxyA.m_id
            }
            t.b2_toiTime = 0, t.b2_toiMaxTime = 0, t.b2_toiCalls = 0, t.b2_toiIters = 0, t.b2_toiMaxIters = 0, t.b2_toiRootIters = 0, t.b2_toiMaxRootIters = 0;
            var kt = new V,
                Gt = new V,
                Ut = new P,
                zt = new P,
                jt = new P,
                Wt = new P,
                Ht = new P,
                Xt = (function() {
                    return function() {
                        this.proxyA = new Y, this.proxyB = new Y, this.sweepA = new k, this.sweepB = new k, this.tMax = 0
                    }
                })();
            (function(t) {
                t[t.e_unknown = 0] = "e_unknown", t[t.e_failed = 1] = "e_failed", t[t.e_overlapped = 2] = "e_overlapped", t[t.e_touching = 3] = "e_touching", t[t.e_separated = 4] = "e_separated"
            })(t.b2TOIOutputState || (t.b2TOIOutputState = {}));
            var Yt = (function() {
                return function() {
                    this.state = t.b2TOIOutputState.e_unknown, this.t = 0
                }
            })();
            (function(t) {
                t[t.e_unknown = -1] = "e_unknown", t[t.e_points = 0] = "e_points", t[t.e_faceA = 1] = "e_faceA", t[t.e_faceB = 2] = "e_faceB"
            })(t.b2SeparationFunctionType || (t.b2SeparationFunctionType = {}));
            var qt = (function() {
                    function e() {
                        this.m_sweepA = new k, this.m_sweepB = new k, this.m_type = t.b2SeparationFunctionType.e_unknown, this.m_localPoint = new P, this.m_axis = new P
                    }
                    return e.prototype.Initialize = function(e, i, n, r, s, o) {
                        this.m_proxyA = i, this.m_proxyB = r;
                        var a = e.count;
                        this.m_sweepA.Copy(n), this.m_sweepB.Copy(s);
                        var l = kt,
                            h = Gt;
                        if (this.m_sweepA.GetTransform(l, o), this.m_sweepB.GetTransform(h, o), 1 === a) {
                            this.m_type = t.b2SeparationFunctionType.e_points;
                            var c = this.m_proxyA.GetVertex(e.indexA[0]),
                                u = this.m_proxyB.GetVertex(e.indexB[0]),
                                _ = V.MulXV(l, c, Ut),
                                f = V.MulXV(h, u, zt);
                            P.SubVV(f, _, this.m_axis);
                            var d = this.m_axis.Normalize();
                            return this.m_localPoint.SetZero(), d
                        }
                        if (e.indexA[0] === e.indexA[1]) {
                            this.m_type = t.b2SeparationFunctionType.e_faceB;
                            var p = this.m_proxyB.GetVertex(e.indexB[0]),
                                m = this.m_proxyB.GetVertex(e.indexB[1]);
                            P.CrossVOne(P.SubVV(m, p, P.s_t0), this.m_axis).SelfNormalize();
                            var y = N.MulRV(h.q, this.m_axis, jt);
                            P.MidVV(p, m, this.m_localPoint);
                            f = V.MulXV(h, this.m_localPoint, zt), c = this.m_proxyA.GetVertex(e.indexA[0]), _ = V.MulXV(l, c, Ut);
                            return (d = P.DotVV(P.SubVV(_, f, P.s_t0), y)) < 0 && (this.m_axis.SelfNeg(), d = -d), d
                        }
                        this.m_type = t.b2SeparationFunctionType.e_faceA;
                        var v = this.m_proxyA.GetVertex(e.indexA[0]),
                            g = this.m_proxyA.GetVertex(e.indexA[1]);
                        P.CrossVOne(P.SubVV(g, v, P.s_t0), this.m_axis).SelfNormalize();
                        y = N.MulRV(l.q, this.m_axis, jt);
                        P.MidVV(v, g, this.m_localPoint);
                        _ = V.MulXV(l, this.m_localPoint, Ut), u = this.m_proxyB.GetVertex(e.indexB[0]), f = V.MulXV(h, u, zt);
                        return (d = P.DotVV(P.SubVV(f, _, P.s_t0), y)) < 0 && (this.m_axis.SelfNeg(), d = -d), d
                    }, e.prototype.FindMinSeparation = function(e, i, n) {
                        var r = kt,
                            s = Gt;
                        switch (this.m_sweepA.GetTransform(r, n), this.m_sweepB.GetTransform(s, n), this.m_type) {
                            case t.b2SeparationFunctionType.e_points:
                                var o = N.MulTRV(r.q, this.m_axis, Wt),
                                    a = N.MulTRV(s.q, P.NegV(this.m_axis, P.s_t0), Ht);
                                e[0] = this.m_proxyA.GetSupport(o), i[0] = this.m_proxyB.GetSupport(a);
                                var l = this.m_proxyA.GetVertex(e[0]),
                                    h = this.m_proxyB.GetVertex(i[0]),
                                    c = V.MulXV(r, l, Ut),
                                    u = V.MulXV(s, h, zt);
                                return P.DotVV(P.SubVV(u, c, P.s_t0), this.m_axis);
                            case t.b2SeparationFunctionType.e_faceA:
                                var _ = N.MulRV(r.q, this.m_axis, jt);
                                c = V.MulXV(r, this.m_localPoint, Ut), a = N.MulTRV(s.q, P.NegV(_, P.s_t0), Ht);
                                e[0] = -1, i[0] = this.m_proxyB.GetSupport(a);
                                h = this.m_proxyB.GetVertex(i[0]), u = V.MulXV(s, h, zt);
                                return P.DotVV(P.SubVV(u, c, P.s_t0), _);
                            case t.b2SeparationFunctionType.e_faceB:
                                _ = N.MulRV(s.q, this.m_axis, jt), u = V.MulXV(s, this.m_localPoint, zt), o = N.MulTRV(r.q, P.NegV(_, P.s_t0), Wt);
                                i[0] = -1, e[0] = this.m_proxyA.GetSupport(o);
                                l = this.m_proxyA.GetVertex(e[0]), c = V.MulXV(r, l, Ut);
                                return P.DotVV(P.SubVV(c, u, P.s_t0), _);
                            default:
                                return e[0] = -1, i[0] = -1, 0
                        }
                    }, e.prototype.Evaluate = function(e, i, n) {
                        var r = kt,
                            s = Gt;
                        switch (this.m_sweepA.GetTransform(r, n), this.m_sweepB.GetTransform(s, n), this.m_type) {
                            case t.b2SeparationFunctionType.e_points:
                                var o = this.m_proxyA.GetVertex(e),
                                    a = this.m_proxyB.GetVertex(i),
                                    l = V.MulXV(r, o, Ut),
                                    h = V.MulXV(s, a, zt);
                                return P.DotVV(P.SubVV(h, l, P.s_t0), this.m_axis);
                            case t.b2SeparationFunctionType.e_faceA:
                                var c = N.MulRV(r.q, this.m_axis, jt);
                                l = V.MulXV(r, this.m_localPoint, Ut), a = this.m_proxyB.GetVertex(i), h = V.MulXV(s, a, zt);
                                return P.DotVV(P.SubVV(h, l, P.s_t0), c);
                            case t.b2SeparationFunctionType.e_faceB:
                                c = N.MulRV(s.q, this.m_axis, jt), h = V.MulXV(s, this.m_localPoint, zt), o = this.m_proxyA.GetVertex(e), l = V.MulXV(r, o, Ut);
                                return P.DotVV(P.SubVV(l, h, P.s_t0), c);
                            default:
                                return 0
                        }
                    }, e
                })(),
                Jt = new z,
                Zt = new q,
                Kt = new J,
                Qt = new Z,
                $t = new qt,
                te = [0],
                ee = [0],
                ie = new k,
                ne = new k;

            function re(e, i) {
                var n = Jt.Reset();
                ++t.b2_toiCalls, e.state = t.b2TOIOutputState.e_unknown, e.t = i.tMax;
                var r = i.proxyA,
                    s = i.proxyB,
                    o = ie.Copy(i.sweepA),
                    h = ne.Copy(i.sweepB);
                o.Normalize(), h.Normalize();
                var c = i.tMax,
                    u = r.m_radius + s.m_radius,
                    _ = x(l, u - 3 * l),
                    f = .25 * l,
                    d = 0,
                    p = 0,
                    m = Zt;
                m.count = 0;
                var y = Kt;
                for (y.proxyA.Copy(i.proxyA), y.proxyB.Copy(i.proxyB), y.useRadii = !1;;) {
                    var g = kt,
                        b = Gt;
                    o.GetTransform(g, d), h.GetTransform(b, d), y.transformA.Copy(g), y.transformB.Copy(b);
                    var A = Qt;
                    if (ht(A, m, y), A.distance <= 0) {
                        e.state = t.b2TOIOutputState.e_overlapped, e.t = 0;
                        break
                    }
                    if (A.distance < _ + f) {
                        e.state = t.b2TOIOutputState.e_touching, e.t = d;
                        break
                    }
                    var C = $t;
                    C.Initialize(m, r, o, s, h, d);
                    for (var T = !1, S = c, w = 0;;) {
                        var E = te,
                            M = ee,
                            D = C.FindMinSeparation(E, M, S);
                        if (D > _ + f) {
                            e.state = t.b2TOIOutputState.e_separated, e.t = c, T = !0;
                            break
                        }
                        if (D > _ - f) {
                            d = S;
                            break
                        }
                        var B = C.Evaluate(E[0], M[0], d);
                        if (B < _ - f) {
                            e.state = t.b2TOIOutputState.e_failed, e.t = d, T = !0;
                            break
                        }
                        if (B <= _ + f) {
                            e.state = t.b2TOIOutputState.e_touching, e.t = d, T = !0;
                            break
                        }
                        for (var I = 0, P = d, R = S;;) {
                            var O = 0;
                            O = 1 & I ? P + (_ - B) * (R - P) / (D - B) : .5 * (P + R), ++I, ++t.b2_toiRootIters;
                            var L = C.Evaluate(E[0], M[0], O);
                            if (v(L - _) < f) {
                                S = O;
                                break
                            }
                            if (L > _ ? (P = O, B = L) : (R = O, D = L), 50 === I) break
                        }
                        if (t.b2_toiMaxRootIters = x(t.b2_toiMaxRootIters, I), ++w === a) break
                    }
                    if (++p, ++t.b2_toiIters, T) break;
                    if (20 === p) {
                        e.state = t.b2TOIOutputState.e_failed, e.t = d;
                        break
                    }
                }
                t.b2_toiMaxIters = x(t.b2_toiMaxIters, p);
                var F = n.GetMilliseconds();
                t.b2_toiMaxTime = x(t.b2_toiMaxTime, F), t.b2_toiTime += F
            }
            var se = new P,
                oe = new P;

            function ae(e, i, n, r, s) {
                e.pointCount = 0;
                var o = V.MulXV(n, i.m_p, se),
                    a = V.MulXV(s, r.m_p, oe),
                    l = P.DistanceSquaredVV(o, a),
                    h = i.m_radius + r.m_radius;
                l > h * h || (e.type = t.b2ManifoldType.e_circles, e.localPoint.Copy(i.m_p), e.localNormal.SetZero(), e.pointCount = 1, e.points[0].localPoint.Copy(r.m_p), e.points[0].id.key = 0)
            }
            var le = new P,
                he = new P,
                ce = new P;

            function ue(e, r, s, o, a) {
                e.pointCount = 0;
                for (var l = V.MulXV(a, o.m_p, le), h = V.MulTXV(s, l, he), c = 0, u = -i, _ = r.m_radius + o.m_radius, f = r.m_count, d = r.m_vertices, p = r.m_normals, m = 0; m < f; ++m) {
                    var y = P.DotVV(p[m], P.SubVV(h, d[m], P.s_t0));
                    if (y > _) return;
                    y > u && (u = y, c = m)
                }
                var v = c,
                    g = (v + 1) % f,
                    x = d[v],
                    b = d[g];
                if (u < n) return e.pointCount = 1, e.type = t.b2ManifoldType.e_faceA, e.localNormal.Copy(p[c]), P.MidVV(x, b, e.localPoint), e.points[0].localPoint.Copy(o.m_p), void(e.points[0].id.key = 0);
                var A = P.DotVV(P.SubVV(h, x, P.s_t0), P.SubVV(b, x, P.s_t1)),
                    C = P.DotVV(P.SubVV(h, b, P.s_t0), P.SubVV(x, b, P.s_t1));
                if (A <= 0) {
                    if (P.DistanceSquaredVV(h, x) > _ * _) return;
                    e.pointCount = 1, e.type = t.b2ManifoldType.e_faceA, P.SubVV(h, x, e.localNormal).SelfNormalize(), e.localPoint.Copy(x), e.points[0].localPoint.Copy(o.m_p), e.points[0].id.key = 0
                } else if (C <= 0) {
                    if (P.DistanceSquaredVV(h, b) > _ * _) return;
                    e.pointCount = 1, e.type = t.b2ManifoldType.e_faceA, P.SubVV(h, b, e.localNormal).SelfNormalize(), e.localPoint.Copy(b), e.points[0].localPoint.Copy(o.m_p), e.points[0].id.key = 0
                } else {
                    var T = P.MidVV(x, b, ce);
                    if (P.DotVV(P.SubVV(h, T, P.s_t1), p[v]) > _) return;
                    e.pointCount = 1, e.type = t.b2ManifoldType.e_faceA, e.localNormal.Copy(p[v]).SelfNormalize(), e.localPoint.Copy(T), e.points[0].localPoint.Copy(o.m_p), e.points[0].id.key = 0
                }
            }
            var _e = new P,
                fe = new P,
                de = new P,
                pe = new P;

            function me(t, e, n, r, s) {
                for (var o = t.m_vertices, a = t.m_normals, l = r.m_count, h = r.m_vertices, c = N.MulRV(e.q, a[n], _e), u = N.MulTRV(s.q, c, fe), _ = 0, f = i, d = 0; d < l; ++d) {
                    var p = P.DotVV(h[d], u);
                    p < f && (f = p, _ = d)
                }
                var m = V.MulXV(e, o[n], de),
                    y = V.MulXV(s, h[_], pe);
                return P.DotVV(P.SubVV(y, m, P.s_t0), c)
            }
            var ye = new P,
                ve = new P;

            function ge(t, e, n, r, s) {
                for (var o = e.m_count, a = e.m_normals, l = P.SubVV(V.MulXV(s, r.m_centroid, P.s_t0), V.MulXV(n, e.m_centroid, P.s_t1), ye), h = N.MulTRV(n.q, l, ve), c = 0, u = -i, _ = 0; _ < o; ++_) {
                    var f = P.DotVV(a[_], h);
                    f > u && (u = f, c = _)
                }
                var d = me(e, n, c, r, s),
                    p = (c + o - 1) % o,
                    m = me(e, n, p, r, s),
                    y = (c + 1) % o,
                    v = me(e, n, y, r, s),
                    g = 0,
                    x = 0,
                    b = 0;
                if (m > d && m > v) b = -1, g = p, x = m;
                else {
                    if (!(v > d)) return t[0] = c, d;
                    b = 1, g = y, x = v
                }
                for (;
                    (d = me(e, n, c = -1 === b ? (g + o - 1) % o : (g + 1) % o, r, s)) > x;) g = c, x = d;
                return t[0] = g, x
            }
            var xe = new P;

            function be(e, n, r, s, o, a) {
                for (var l = n.m_normals, h = o.m_count, c = o.m_vertices, u = o.m_normals, _ = N.MulTRV(a.q, N.MulRV(r.q, l[s], P.s_t0), xe), f = 0, d = i, p = 0; p < h; ++p) {
                    var m = P.DotVV(_, u[p]);
                    m < d && (d = m, f = p)
                }
                var y = f,
                    v = (y + 1) % h,
                    g = e[0];
                V.MulXV(a, c[y], g.v);
                var x = g.id.cf;
                x.indexA = s, x.indexB = y, x.typeA = t.b2ContactFeatureType.e_face, x.typeB = t.b2ContactFeatureType.e_vertex;
                var b = e[1];
                V.MulXV(a, c[v], b.v);
                var A = b.id.cf;
                A.indexA = s, A.indexB = v, A.typeA = t.b2ContactFeatureType.e_face, A.typeB = t.b2ContactFeatureType.e_vertex
            }
            var Ae = Ct.MakeArray(2),
                Ce = Ct.MakeArray(2),
                Te = Ct.MakeArray(2),
                Se = [0],
                we = [0],
                Ee = new P,
                Me = new P,
                De = new P,
                Be = new P,
                Ie = new P,
                Pe = new P,
                Re = new P,
                Oe = new P;

            function Le(e, i, n, r, s) {
                e.pointCount = 0;
                var a = i.m_radius + r.m_radius,
                    l = Se;
                l[0] = 0;
                var h = ge(l, i, n, r, s);
                if (!(h > a)) {
                    var c = we;
                    c[0] = 0;
                    var u = ge(c, r, s, i, n);
                    if (!(u > a)) {
                        var _, f, d, p, m = 0,
                            y = 0;
                        u > .98 * h + .001 ? (_ = r, f = i, d = s, p = n, m = c[0], e.type = t.b2ManifoldType.e_faceB, y = 1) : (_ = i, f = r, d = n, p = s, m = l[0], e.type = t.b2ManifoldType.e_faceA, y = 0);
                        var v = Ae;
                        be(v, _, d, m, f, p);
                        var g = _.m_count,
                            x = _.m_vertices,
                            b = m,
                            A = (m + 1) % g,
                            C = x[b],
                            T = x[A],
                            S = P.SubVV(T, C, Ee);
                        S.Normalize();
                        var w = P.CrossVOne(S, Me),
                            E = P.MidVV(C, T, De),
                            M = N.MulRV(d.q, S, Ie),
                            D = P.CrossVOne(M, Be),
                            B = V.MulXV(d, C, Re),
                            I = V.MulXV(d, T, Oe),
                            R = P.DotVV(D, B),
                            O = -P.DotVV(M, B) + a,
                            L = P.DotVV(M, I) + a,
                            F = Ce,
                            k = Te;
                        if (!(Mt(F, v, P.NegV(M, Pe), O, b) < 2 || Mt(k, F, M, L, A) < 2)) {
                            e.localNormal.Copy(w), e.localPoint.Copy(E);
                            for (var G = 0, U = 0; U < o; ++U) {
                                var z = k[U];
                                if (P.DotVV(D, z.v) - R <= a) {
                                    var j = e.points[G];
                                    if (V.MulTXV(p, z.v, j.localPoint), j.id.Copy(z.id), y) {
                                        var W = j.id.cf;
                                        j.id.cf.indexA = W.indexB, j.id.cf.indexB = W.indexA, j.id.cf.typeA = W.typeB, j.id.cf.typeB = W.typeA
                                    }++G
                                }
                            }
                            e.pointCount = G
                        }
                    }
                }
            }
            var Fe = new P,
                Ne = new P,
                Ve = new P,
                ke = new P,
                Ge = new P,
                Ue = new P,
                ze = new P,
                je = new gt;

            function We(e, i, n, r, s) {
                e.pointCount = 0;
                var o = V.MulTXV(n, V.MulXV(s, r.m_p, P.s_t0), Fe),
                    a = i.m_vertex1,
                    l = i.m_vertex2,
                    h = P.SubVV(l, a, Ne),
                    c = P.DotVV(h, P.SubVV(l, o, P.s_t0)),
                    u = P.DotVV(h, P.SubVV(o, a, P.s_t0)),
                    _ = i.m_radius + r.m_radius,
                    f = je;
                if (f.cf.indexB = 0, f.cf.typeB = t.b2ContactFeatureType.e_vertex, u <= 0) {
                    var d = a,
                        p = P.SubVV(o, d, Ve);
                    if (P.DotVV(p, p) > _ * _) return;
                    if (i.m_hasVertex0) {
                        var m = i.m_vertex0,
                            y = a,
                            v = P.SubVV(y, m, ke);
                        if (P.DotVV(v, P.SubVV(y, o, P.s_t0)) > 0) return
                    }
                    return f.cf.indexA = 0, f.cf.typeA = t.b2ContactFeatureType.e_vertex, e.pointCount = 1, e.type = t.b2ManifoldType.e_circles, e.localNormal.SetZero(), e.localPoint.Copy(d), e.points[0].id.Copy(f), void e.points[0].localPoint.Copy(r.m_p)
                }
                if (c <= 0) {
                    var g = l,
                        x = P.SubVV(o, g, Ve);
                    if (P.DotVV(x, x) > _ * _) return;
                    if (i.m_hasVertex3) {
                        var b = i.m_vertex3,
                            A = l,
                            C = P.SubVV(b, A, Ge);
                        if (P.DotVV(C, P.SubVV(o, A, P.s_t0)) > 0) return
                    }
                    return f.cf.indexA = 1, f.cf.typeA = t.b2ContactFeatureType.e_vertex, e.pointCount = 1, e.type = t.b2ManifoldType.e_circles, e.localNormal.SetZero(), e.localPoint.Copy(g), e.points[0].id.Copy(f), void e.points[0].localPoint.Copy(r.m_p)
                }
                var T = P.DotVV(h, h),
                    S = Ue;
                S.x = 1 / T * (c * a.x + u * l.x), S.y = 1 / T * (c * a.y + u * l.y);
                var w = P.SubVV(o, S, Ve);
                if (!(P.DotVV(w, w) > _ * _)) {
                    var E = ze.Set(-h.y, h.x);
                    P.DotVV(E, P.SubVV(o, a, P.s_t0)) < 0 && E.Set(-E.x, -E.y), E.Normalize(), f.cf.indexA = 0, f.cf.typeA = t.b2ContactFeatureType.e_face, e.pointCount = 1, e.type = t.b2ManifoldType.e_faceA, e.localNormal.Copy(E), e.localPoint.Copy(a), e.points[0].id.Copy(f), e.points[0].localPoint.Copy(r.m_p)
                }
            }
            var He = (function() {
                    return function() {
                        this.type = 0, this.index = 0, this.separation = 0
                    }
                })(),
                Xe = (function() {
                    return function() {
                        this.vertices = P.MakeArray(a), this.normals = P.MakeArray(a), this.count = 0
                    }
                })(),
                Ye = (function() {
                    return function() {
                        this.i1 = 0, this.i2 = 0, this.v1 = new P, this.v2 = new P, this.normal = new P, this.sideNormal1 = new P, this.sideOffset1 = 0, this.sideNormal2 = new P, this.sideOffset2 = 0
                    }
                })(),
                qe = new(function() {
                    function e() {
                        this.m_polygonB = new Xe, this.m_xf = new V, this.m_centroidB = new P, this.m_v0 = new P, this.m_v1 = new P, this.m_v2 = new P, this.m_v3 = new P, this.m_normal0 = new P, this.m_normal1 = new P, this.m_normal2 = new P, this.m_normal = new P, this.m_type1 = 0, this.m_type2 = 0, this.m_lowerLimit = new P, this.m_upperLimit = new P, this.m_radius = 0, this.m_front = !1
                    }
                    return e.prototype.Collide = function(i, n, r, s, a) {
                        V.MulTXX(r, a, this.m_xf), V.MulXV(this.m_xf, s.m_centroid, this.m_centroidB), this.m_v0.Copy(n.m_vertex0), this.m_v1.Copy(n.m_vertex1), this.m_v2.Copy(n.m_vertex2), this.m_v3.Copy(n.m_vertex3);
                        var l = n.m_hasVertex0,
                            h = n.m_hasVertex3,
                            c = P.SubVV(this.m_v2, this.m_v1, e.s_edge1);
                        c.Normalize(), this.m_normal1.Set(c.y, -c.x);
                        var u = P.DotVV(this.m_normal1, P.SubVV(this.m_centroidB, this.m_v1, P.s_t0)),
                            _ = 0,
                            f = 0,
                            d = !1,
                            p = !1;
                        if (l) {
                            var m = P.SubVV(this.m_v1, this.m_v0, e.s_edge0);
                            m.Normalize(), this.m_normal0.Set(m.y, -m.x), d = P.CrossVV(m, c) >= 0, _ = P.DotVV(this.m_normal0, P.SubVV(this.m_centroidB, this.m_v0, P.s_t0))
                        }
                        if (h) {
                            var y = P.SubVV(this.m_v3, this.m_v2, e.s_edge2);
                            y.Normalize(), this.m_normal2.Set(y.y, -y.x), p = P.CrossVV(c, y) > 0, f = P.DotVV(this.m_normal2, P.SubVV(this.m_centroidB, this.m_v2, P.s_t0))
                        }
                        l && h ? d && p ? (this.m_front = _ >= 0 || u >= 0 || f >= 0, this.m_front ? (this.m_normal.Copy(this.m_normal1), this.m_lowerLimit.Copy(this.m_normal0), this.m_upperLimit.Copy(this.m_normal2)) : (this.m_normal.Copy(this.m_normal1).SelfNeg(), this.m_lowerLimit.Copy(this.m_normal1).SelfNeg(), this.m_upperLimit.Copy(this.m_normal1).SelfNeg())) : d ? (this.m_front = _ >= 0 || u >= 0 && f >= 0, this.m_front ? (this.m_normal.Copy(this.m_normal1), this.m_lowerLimit.Copy(this.m_normal0), this.m_upperLimit.Copy(this.m_normal1)) : (this.m_normal.Copy(this.m_normal1).SelfNeg(), this.m_lowerLimit.Copy(this.m_normal2).SelfNeg(), this.m_upperLimit.Copy(this.m_normal1).SelfNeg())) : p ? (this.m_front = f >= 0 || _ >= 0 && u >= 0, this.m_front ? (this.m_normal.Copy(this.m_normal1), this.m_lowerLimit.Copy(this.m_normal1), this.m_upperLimit.Copy(this.m_normal2)) : (this.m_normal.Copy(this.m_normal1).SelfNeg(), this.m_lowerLimit.Copy(this.m_normal1).SelfNeg(), this.m_upperLimit.Copy(this.m_normal0).SelfNeg())) : (this.m_front = _ >= 0 && u >= 0 && f >= 0, this.m_front ? (this.m_normal.Copy(this.m_normal1), this.m_lowerLimit.Copy(this.m_normal1), this.m_upperLimit.Copy(this.m_normal1)) : (this.m_normal.Copy(this.m_normal1).SelfNeg(), this.m_lowerLimit.Copy(this.m_normal2).SelfNeg(), this.m_upperLimit.Copy(this.m_normal0).SelfNeg())) : l ? d ? (this.m_front = _ >= 0 || u >= 0, this.m_front ? (this.m_normal.Copy(this.m_normal1), this.m_lowerLimit.Copy(this.m_normal0), this.m_upperLimit.Copy(this.m_normal1).SelfNeg()) : (this.m_normal.Copy(this.m_normal1).SelfNeg(), this.m_lowerLimit.Copy(this.m_normal1), this.m_upperLimit.Copy(this.m_normal1).SelfNeg())) : (this.m_front = _ >= 0 && u >= 0, this.m_front ? (this.m_normal.Copy(this.m_normal1), this.m_lowerLimit.Copy(this.m_normal1), this.m_upperLimit.Copy(this.m_normal1).SelfNeg()) : (this.m_normal.Copy(this.m_normal1).SelfNeg(), this.m_lowerLimit.Copy(this.m_normal1), this.m_upperLimit.Copy(this.m_normal0).SelfNeg())) : h ? p ? (this.m_front = u >= 0 || f >= 0, this.m_front ? (this.m_normal.Copy(this.m_normal1), this.m_lowerLimit.Copy(this.m_normal1).SelfNeg(), this.m_upperLimit.Copy(this.m_normal2)) : (this.m_normal.Copy(this.m_normal1).SelfNeg(), this.m_lowerLimit.Copy(this.m_normal1).SelfNeg(), this.m_upperLimit.Copy(this.m_normal1))) : (this.m_front = u >= 0 && f >= 0, this.m_front ? (this.m_normal.Copy(this.m_normal1), this.m_lowerLimit.Copy(this.m_normal1).SelfNeg(), this.m_upperLimit.Copy(this.m_normal1)) : (this.m_normal.Copy(this.m_normal1).SelfNeg(), this.m_lowerLimit.Copy(this.m_normal2).SelfNeg(), this.m_upperLimit.Copy(this.m_normal1))) : (this.m_front = u >= 0, this.m_front ? (this.m_normal.Copy(this.m_normal1), this.m_lowerLimit.Copy(this.m_normal1).SelfNeg(), this.m_upperLimit.Copy(this.m_normal1).SelfNeg()) : (this.m_normal.Copy(this.m_normal1).SelfNeg(), this.m_lowerLimit.Copy(this.m_normal1), this.m_upperLimit.Copy(this.m_normal1))), this.m_polygonB.count = s.m_count;
                        for (var v = 0; v < s.m_count; ++v) V.MulXV(this.m_xf, s.m_vertices[v], this.m_polygonB.vertices[v]), N.MulRV(this.m_xf.q, s.m_normals[v], this.m_polygonB.normals[v]);
                        this.m_radius = s.m_radius + n.m_radius, i.pointCount = 0;
                        var g = this.ComputeEdgeSeparation(e.s_edgeAxis);
                        if (0 !== g.type && !(g.separation > this.m_radius)) {
                            var x = this.ComputePolygonSeparation(e.s_polygonAxis);
                            if (!(0 !== x.type && x.separation > this.m_radius)) {
                                var b;
                                b = 0 === x.type ? g : x.separation > .98 * g.separation + .001 ? x : g;
                                var A = e.s_ie,
                                    C = e.s_rf;
                                if (1 === b.type) {
                                    i.type = t.b2ManifoldType.e_faceA;
                                    var T = 0,
                                        S = P.DotVV(this.m_normal, this.m_polygonB.normals[0]);
                                    for (v = 1; v < this.m_polygonB.count; ++v) {
                                        var w = P.DotVV(this.m_normal, this.m_polygonB.normals[v]);
                                        w < S && (S = w, T = v)
                                    }
                                    var E = T,
                                        M = (E + 1) % this.m_polygonB.count;
                                    (D = A[0]).v.Copy(this.m_polygonB.vertices[E]), D.id.cf.indexA = 0, D.id.cf.indexB = E, D.id.cf.typeA = t.b2ContactFeatureType.e_face, D.id.cf.typeB = t.b2ContactFeatureType.e_vertex, (B = A[1]).v.Copy(this.m_polygonB.vertices[M]), B.id.cf.indexA = 0, B.id.cf.indexB = M, B.id.cf.typeA = t.b2ContactFeatureType.e_face, B.id.cf.typeB = t.b2ContactFeatureType.e_vertex, this.m_front ? (C.i1 = 0, C.i2 = 1, C.v1.Copy(this.m_v1), C.v2.Copy(this.m_v2), C.normal.Copy(this.m_normal1)) : (C.i1 = 1, C.i2 = 0, C.v1.Copy(this.m_v2), C.v2.Copy(this.m_v1), C.normal.Copy(this.m_normal1).SelfNeg())
                                } else {
                                    var D, B;
                                    i.type = t.b2ManifoldType.e_faceB, (D = A[0]).v.Copy(this.m_v1), D.id.cf.indexA = 0, D.id.cf.indexB = b.index, D.id.cf.typeA = t.b2ContactFeatureType.e_vertex, D.id.cf.typeB = t.b2ContactFeatureType.e_face, (B = A[1]).v.Copy(this.m_v2), B.id.cf.indexA = 0, B.id.cf.indexB = b.index, B.id.cf.typeA = t.b2ContactFeatureType.e_vertex, B.id.cf.typeB = t.b2ContactFeatureType.e_face, C.i1 = b.index, C.i2 = (C.i1 + 1) % this.m_polygonB.count, C.v1.Copy(this.m_polygonB.vertices[C.i1]), C.v2.Copy(this.m_polygonB.vertices[C.i2]), C.normal.Copy(this.m_polygonB.normals[C.i1])
                                }
                                C.sideNormal1.Set(C.normal.y, -C.normal.x), C.sideNormal2.Copy(C.sideNormal1).SelfNeg(), C.sideOffset1 = P.DotVV(C.sideNormal1, C.v1), C.sideOffset2 = P.DotVV(C.sideNormal2, C.v2);
                                var I = e.s_clipPoints1,
                                    R = e.s_clipPoints2;
                                if (!(Mt(I, A, C.sideNormal1, C.sideOffset1, C.i1) < o || Mt(R, I, C.sideNormal2, C.sideOffset2, C.i2) < o)) {
                                    1 === b.type ? (i.localNormal.Copy(C.normal), i.localPoint.Copy(C.v1)) : (i.localNormal.Copy(s.m_normals[C.i1]), i.localPoint.Copy(s.m_vertices[C.i1]));
                                    var O = 0;
                                    for (v = 0; v < o; ++v) {
                                        if (P.DotVV(C.normal, P.SubVV(R[v].v, C.v1, P.s_t0)) <= this.m_radius) {
                                            var L = i.points[O];
                                            1 === b.type ? (V.MulTXV(this.m_xf, R[v].v, L.localPoint), L.id = R[v].id) : (L.localPoint.Copy(R[v].v), L.id.cf.typeA = R[v].id.cf.typeB, L.id.cf.typeB = R[v].id.cf.typeA, L.id.cf.indexA = R[v].id.cf.indexB, L.id.cf.indexB = R[v].id.cf.indexA), ++O
                                        }
                                    }
                                    i.pointCount = O
                                }
                            }
                        }
                    }, e.prototype.ComputeEdgeSeparation = function(t) {
                        var e = t;
                        e.type = 1, e.index = this.m_front ? 0 : 1, e.separation = i;
                        for (var n = 0; n < this.m_polygonB.count; ++n) {
                            var r = P.DotVV(this.m_normal, P.SubVV(this.m_polygonB.vertices[n], this.m_v1, P.s_t0));
                            r < e.separation && (e.separation = r)
                        }
                        return e
                    }, e.prototype.ComputePolygonSeparation = function(t) {
                        var n = t;
                        n.type = 0, n.index = -1, n.separation = -i;
                        for (var r = e.s_perp.Set(-this.m_normal.y, this.m_normal.x), s = 0; s < this.m_polygonB.count; ++s) {
                            var o = P.NegV(this.m_polygonB.normals[s], e.s_n),
                                a = P.DotVV(o, P.SubVV(this.m_polygonB.vertices[s], this.m_v1, P.s_t0)),
                                l = P.DotVV(o, P.SubVV(this.m_polygonB.vertices[s], this.m_v2, P.s_t0)),
                                c = g(a, l);
                            if (c > this.m_radius) return n.type = 2, n.index = s, n.separation = c, n;
                            if (P.DotVV(o, r) >= 0) {
                                if (P.DotVV(P.SubVV(o, this.m_upperLimit, P.s_t0), this.m_normal) < -h) continue
                            } else if (P.DotVV(P.SubVV(o, this.m_lowerLimit, P.s_t0), this.m_normal) < -h) continue;
                            c > n.separation && (n.type = 2, n.index = s, n.separation = c)
                        }
                        return n
                    }, e.s_edge1 = new P, e.s_edge0 = new P, e.s_edge2 = new P, e.s_ie = Ct.MakeArray(2), e.s_rf = new Ye, e.s_clipPoints1 = Ct.MakeArray(2), e.s_clipPoints2 = Ct.MakeArray(2), e.s_edgeAxis = new He, e.s_polygonAxis = new He, e.s_n = new P, e.s_perp = new P, e
                }());

            function Je(t, e, i, n, r) {
                qe.Collide(t, e, i, n, r)
            }
            var Ze = (function() {
                return function() {
                    this.mass = 0, this.center = new P(0, 0), this.I = 0
                }
            })();
            (function(t) {
                t[t.e_unknown = -1] = "e_unknown", t[t.e_circleShape = 0] = "e_circleShape", t[t.e_edgeShape = 1] = "e_edgeShape", t[t.e_polygonShape = 2] = "e_polygonShape", t[t.e_chainShape = 3] = "e_chainShape", t[t.e_shapeTypeCount = 4] = "e_shapeTypeCount"
            })(t.b2ShapeType || (t.b2ShapeType = {}));
            var Ke = (function() {
                    function e(e, i) {
                        this.m_type = t.b2ShapeType.e_unknown, this.m_radius = 0, this.m_type = e, this.m_radius = i
                    }
                    return e.prototype.Copy = function(t) {
                        return this.m_radius = t.m_radius, this
                    }, e.prototype.GetType = function() {
                        return this.m_type
                    }, e
                })(),
                Qe = Object.setPrototypeOf || {
                    __proto__: []
                }
            instanceof Array && function(t, e) {
                t.__proto__ = e
            } || function(t, e) {
                for (var i in e) e.hasOwnProperty(i) && (t[i] = e[i])
            };

            function $e(t, e) {
                function i() {
                    this.constructor = t
                }
                Qe(t, e), t.prototype = null === e ? Object.create(e) : (i.prototype = e.prototype, new i)
            }
            var ti = (function(e) {
                    function i(i) {
                        void 0 === i && (i = 0);
                        var n = e.call(this, t.b2ShapeType.e_circleShape, i) || this;
                        return n.m_p = new P, n
                    }
                    return $e(i, e), i.prototype.Set = function(t, e) {
                        return void 0 === e && (e = this.m_radius), this.m_p.Copy(t), this.m_radius = e, this
                    }, i.prototype.Clone = function() {
                        return (new i).Copy(this)
                    }, i.prototype.Copy = function(t) {
                        return e.prototype.Copy.call(this, t), this.m_p.Copy(t.m_p), this
                    }, i.prototype.GetChildCount = function() {
                        return 1
                    }, i.prototype.TestPoint = function(t, e) {
                        var n = V.MulXV(t, this.m_p, i.TestPoint_s_center),
                            r = P.SubVV(e, n, i.TestPoint_s_d);
                        return P.DotVV(r, r) <= C(this.m_radius)
                    }, i.prototype.ComputeDistance = function(t, e, n, r) {
                        var s = V.MulXV(t, this.m_p, i.ComputeDistance_s_center);
                        return P.SubVV(e, s, n), n.Normalize() - this.m_radius
                    }, i.prototype.RayCast = function(t, e, r, s) {
                        var o = V.MulXV(r, this.m_p, i.RayCast_s_position),
                            a = P.SubVV(e.p1, o, i.RayCast_s_s),
                            l = P.DotVV(a, a) - C(this.m_radius),
                            h = P.SubVV(e.p2, e.p1, i.RayCast_s_r),
                            c = P.DotVV(a, h),
                            u = P.DotVV(h, h),
                            _ = c * c - u * l;
                        if (_ < 0 || u < n) return !1;
                        var f = -(c + S(_));
                        return 0 <= f && f <= e.maxFraction * u && (f /= u, t.fraction = f, P.AddVMulSV(a, f, h, t.normal).SelfNormalize(), !0)
                    }, i.prototype.ComputeAABB = function(t, e, n) {
                        var r = V.MulXV(e, this.m_p, i.ComputeAABB_s_p);
                        t.lowerBound.Set(r.x - this.m_radius, r.y - this.m_radius), t.upperBound.Set(r.x + this.m_radius, r.y + this.m_radius)
                    }, i.prototype.ComputeMass = function(t, e) {
                        var i = C(this.m_radius);
                        t.mass = e * s * i, t.center.Copy(this.m_p), t.I = t.mass * (.5 * i + P.DotVV(this.m_p, this.m_p))
                    }, i.prototype.SetupDistanceProxy = function(t, e) {
                        t.m_vertices = t.m_buffer, t.m_vertices[0].Copy(this.m_p), t.m_count = 1, t.m_radius = this.m_radius
                    }, i.prototype.ComputeSubmergedArea = function(t, e, i, r) {
                        var o = V.MulXV(i, this.m_p, new P),
                            a = -(P.DotVV(t, o) - e);
                        if (a < -this.m_radius + n) return 0;
                        if (a > this.m_radius) return r.Copy(o), s * this.m_radius * this.m_radius;
                        var l = this.m_radius * this.m_radius,
                            h = a * a,
                            c = l * (B(a / this.m_radius) + s / 2) + a * S(l - h),
                            u = -2 / 3 * w(l - h, 1.5) / c;
                        return r.x = o.x + t.x * u, r.y = o.y + t.y * u, c
                    }, i.prototype.Dump = function(t) {
                        t("    const shape: b2CircleShape = new b2CircleShape();\n"), t("    shape.m_radius = %.15f;\n", this.m_radius), t("    shape.m_p.Set(%.15f, %.15f);\n", this.m_p.x, this.m_p.y)
                    }, i.TestPoint_s_center = new P, i.TestPoint_s_d = new P, i.ComputeDistance_s_center = new P, i.RayCast_s_position = new P, i.RayCast_s_s = new P, i.RayCast_s_r = new P, i.ComputeAABB_s_p = new P, i
                })(Ke),
                ei = (function(e) {
                    function r() {
                        var i = e.call(this, t.b2ShapeType.e_polygonShape, c) || this;
                        return i.m_centroid = new P(0, 0), i.m_vertices = [], i.m_normals = [], i.m_count = 0, i
                    }
                    return $e(r, e), r.prototype.Clone = function() {
                        return (new r).Copy(this)
                    }, r.prototype.Copy = function(t) {
                        e.prototype.Copy.call(this, t), this.m_centroid.Copy(t.m_centroid), this.m_count = t.m_count, this.m_vertices = P.MakeArray(this.m_count), this.m_normals = P.MakeArray(this.m_count);
                        for (var i = 0; i < this.m_count; ++i) this.m_vertices[i].Copy(t.m_vertices[i]), this.m_normals[i].Copy(t.m_normals[i]);
                        return this
                    }, r.prototype.GetChildCount = function() {
                        return 1
                    }, r.prototype.Set = function(t, e, i) {
                        if (void 0 === e && (e = t.length), void 0 === i && (i = 0), e < 3) return this.SetAsBox(1, 1);
                        for (var n = g(e, a), s = r.Set_s_ps, o = 0, h = 0; h < n; ++h) {
                            for (var c = t[i + h], u = !0, _ = 0; _ < o; ++_)
                                if (P.DistanceSquaredVV(c, s[_]) < .5 * l * (.5 * l)) {
                                    u = !1;
                                    break
                                }
                            u && s[o++].Copy(c)
                        }
                        if ((n = o) < 3) return this.SetAsBox(1, 1);
                        var f = 0,
                            d = s[0].x;
                        for (h = 1; h < n; ++h) {
                            var p = s[h].x;
                            (p > d || p === d && s[h].y < s[f].y) && (f = h, d = p)
                        }
                        for (var m = r.Set_s_hull, y = 0, v = f;;) {
                            m[y] = v;
                            var x = 0;
                            for (_ = 1; _ < n; ++_)
                                if (x !== v) {
                                    var b = P.SubVV(s[x], s[m[y]], r.Set_s_r),
                                        A = (c = P.SubVV(s[_], s[m[y]], r.Set_s_v), P.CrossVV(b, c));
                                    A < 0 && (x = _), 0 === A && c.LengthSquared() > b.LengthSquared() && (x = _)
                                } else x = _;
                            if (++y, v = x, x === f) break
                        }
                        this.m_count = y, this.m_vertices = P.MakeArray(this.m_count), this.m_normals = P.MakeArray(this.m_count);
                        for (h = 0; h < y; ++h) this.m_vertices[h].Copy(s[m[h]]);
                        for (h = 0; h < y; ++h) {
                            var C = this.m_vertices[h],
                                T = this.m_vertices[(h + 1) % y],
                                S = P.SubVV(T, C, P.s_t0);
                            P.CrossVOne(S, this.m_normals[h]).SelfNormalize()
                        }
                        return r.ComputeCentroid(this.m_vertices, y, this.m_centroid), this
                    }, r.prototype.SetAsArray = function(t, e) {
                        return void 0 === e && (e = t.length), this.Set(t, e)
                    }, r.prototype.SetAsBox = function(t, e, i, n) {
                        if (void 0 === n && (n = 0), this.m_count = 4, this.m_vertices = P.MakeArray(this.m_count), this.m_normals = P.MakeArray(this.m_count), this.m_vertices[0].Set(-t, -e), this.m_vertices[1].Set(t, -e), this.m_vertices[2].Set(t, e), this.m_vertices[3].Set(-t, e), this.m_normals[0].Set(0, -1), this.m_normals[1].Set(1, 0), this.m_normals[2].Set(0, 1), this.m_normals[3].Set(-1, 0), this.m_centroid.SetZero(), i) {
                            this.m_centroid.Copy(i);
                            var r = new V;
                            r.SetPosition(i), r.SetRotationAngle(n);
                            for (var s = 0; s < this.m_count; ++s) V.MulXV(r, this.m_vertices[s], this.m_vertices[s]), N.MulRV(r.q, this.m_normals[s], this.m_normals[s])
                        }
                        return this
                    }, r.prototype.TestPoint = function(t, e) {
                        for (var i = V.MulTXV(t, e, r.TestPoint_s_pLocal), n = 0; n < this.m_count; ++n) {
                            if (P.DotVV(this.m_normals[n], P.SubVV(i, this.m_vertices[n], P.s_t0)) > 0) return !1
                        }
                        return !0
                    }, r.prototype.ComputeDistance = function(t, e, n, s) {
                        for (var o = V.MulTXV(t, e, r.ComputeDistance_s_pLocal), a = -i, l = r.ComputeDistance_s_normalForMaxDistance.Copy(o), h = 0; h < this.m_count; ++h) {
                            var c = P.DotVV(this.m_normals[h], P.SubVV(o, this.m_vertices[h], P.s_t0));
                            c > a && (a = c, l.Copy(this.m_normals[h]))
                        }
                        if (a > 0) {
                            var u = r.ComputeDistance_s_minDistance.Copy(l),
                                _ = a * a;
                            for (h = 0; h < this.m_count; ++h) {
                                var f = P.SubVV(o, this.m_vertices[h], r.ComputeDistance_s_distance),
                                    d = f.LengthSquared();
                                _ > d && (u.Copy(f), _ = d)
                            }
                            return N.MulRV(t.q, u, n), n.Normalize(), Math.sqrt(_)
                        }
                        return N.MulRV(t.q, l, n), a
                    }, r.prototype.RayCast = function(t, e, i, n) {
                        for (var s = V.MulTXV(i, e.p1, r.RayCast_s_p1), o = V.MulTXV(i, e.p2, r.RayCast_s_p2), a = P.SubVV(o, s, r.RayCast_s_d), l = 0, h = e.maxFraction, c = -1, u = 0; u < this.m_count; ++u) {
                            var _ = P.DotVV(this.m_normals[u], P.SubVV(this.m_vertices[u], s, P.s_t0)),
                                f = P.DotVV(this.m_normals[u], a);
                            if (0 === f) {
                                if (_ < 0) return !1
                            } else f < 0 && _ < l * f ? (l = _ / f, c = u) : f > 0 && _ < h * f && (h = _ / f);
                            if (h < l) return !1
                        }
                        return c >= 0 && (t.fraction = l, N.MulRV(i.q, this.m_normals[c], t.normal), !0)
                    }, r.prototype.ComputeAABB = function(t, e, i) {
                        for (var n = V.MulXV(e, this.m_vertices[0], t.lowerBound), s = t.upperBound.Copy(n), o = 0; o < this.m_count; ++o) {
                            var a = V.MulXV(e, this.m_vertices[o], r.ComputeAABB_s_v);
                            P.MinV(a, n, n), P.MaxV(a, s, s)
                        }
                        var l = this.m_radius;
                        n.SelfSubXY(l, l), s.SelfAddXY(l, l)
                    }, r.prototype.ComputeMass = function(t, e) {
                        for (var i = r.ComputeMass_s_center.SetZero(), n = 0, s = 0, o = r.ComputeMass_s_s.SetZero(), a = 0; a < this.m_count; ++a) o.SelfAdd(this.m_vertices[a]);
                        o.SelfMul(1 / this.m_count);
                        for (a = 0; a < this.m_count; ++a) {
                            var l = P.SubVV(this.m_vertices[a], o, r.ComputeMass_s_e1),
                                h = P.SubVV(this.m_vertices[(a + 1) % this.m_count], o, r.ComputeMass_s_e2),
                                c = P.CrossVV(l, h),
                                u = .5 * c;
                            n += u, i.SelfAdd(P.MulSV(u * (1 / 3), P.AddVV(l, h, P.s_t0), P.s_t1));
                            var _ = l.x,
                                f = l.y,
                                d = h.x,
                                p = h.y;
                            s += 1 / 3 * .25 * c * (_ * _ + d * _ + d * d + (f * f + p * f + p * p))
                        }
                        t.mass = e * n, i.SelfMul(1 / n), P.AddVV(i, o, t.center), t.I = e * s, t.I += t.mass * (P.DotVV(t.center, t.center) - P.DotVV(i, i))
                    }, r.prototype.Validate = function() {
                        for (var t = 0; t < this.m_count; ++t)
                            for (var e = t, i = (t + 1) % this.m_count, n = this.m_vertices[e], s = P.SubVV(this.m_vertices[i], n, r.Validate_s_e), o = 0; o < this.m_count; ++o)
                                if (o !== e && o !== i) {
                                    var a = P.SubVV(this.m_vertices[o], n, r.Validate_s_v);
                                    if (P.CrossVV(s, a) < 0) return !1
                                }
                        return !0
                    }, r.prototype.SetupDistanceProxy = function(t, e) {
                        t.m_vertices = this.m_vertices, t.m_count = this.m_count, t.m_radius = this.m_radius
                    }, r.prototype.ComputeSubmergedArea = function(t, e, i, s) {
                        for (var o = N.MulTRV(i.q, t, r.ComputeSubmergedArea_s_normalL), a = e - P.DotVV(t, i.p), l = r.ComputeSubmergedArea_s_depths, h = 0, c = -1, u = -1, _ = !1, f = 0; f < this.m_count; ++f) {
                            l[f] = P.DotVV(o, this.m_vertices[f]) - a;
                            var d = l[f] < -n;
                            f > 0 && (d ? _ || (c = f - 1, h++) : _ && (u = f - 1, h++)), _ = d
                        }
                        switch (h) {
                            case 0:
                                if (_) {
                                    var p = r.ComputeSubmergedArea_s_md;
                                    return this.ComputeMass(p, 1), V.MulXV(i, p.center, s), p.mass
                                }
                                return 0;
                            case 1:
                                -1 === c ? c = this.m_count - 1 : u = this.m_count - 1
                        }
                        for (var m, y = (c + 1) % this.m_count, v = (u + 1) % this.m_count, g = (0 - l[c]) / (l[y] - l[c]), x = (0 - l[u]) / (l[v] - l[u]), b = r.ComputeSubmergedArea_s_intoVec.Set(this.m_vertices[c].x * (1 - g) + this.m_vertices[y].x * g, this.m_vertices[c].y * (1 - g) + this.m_vertices[y].y * g), A = r.ComputeSubmergedArea_s_outoVec.Set(this.m_vertices[u].x * (1 - x) + this.m_vertices[v].x * x, this.m_vertices[u].y * (1 - x) + this.m_vertices[v].y * x), C = 0, T = r.ComputeSubmergedArea_s_center.SetZero(), S = this.m_vertices[y], w = y; w !== v;) {
                            m = (w = (w + 1) % this.m_count) === v ? A : this.m_vertices[w];
                            var E = .5 * ((S.x - b.x) * (m.y - b.y) - (S.y - b.y) * (m.x - b.x));
                            C += E, T.x += E * (b.x + S.x + m.x) / 3, T.y += E * (b.y + S.y + m.y) / 3, S = m
                        }
                        return T.SelfMul(1 / C), V.MulXV(i, T, s), C
                    }, r.prototype.Dump = function(t) {
                        t("    const shape: b2PolygonShape = new b2PolygonShape();\n"), t("    const vs: b2Vec2[] = b2Vec2.MakeArray(%d);\n", a);
                        for (var e = 0; e < this.m_count; ++e) t("    vs[%d].Set(%.15f, %.15f);\n", e, this.m_vertices[e].x, this.m_vertices[e].y);
                        t("    shape.Set(vs, %d);\n", this.m_count)
                    }, r.ComputeCentroid = function(t, e, i) {
                        var n = i;
                        n.SetZero();
                        for (var s = 0, o = r.ComputeCentroid_s_pRef.SetZero(), a = 0; a < e; ++a) {
                            var l = o,
                                h = t[a],
                                c = t[(a + 1) % e],
                                u = P.SubVV(h, l, r.ComputeCentroid_s_e1),
                                _ = P.SubVV(c, l, r.ComputeCentroid_s_e2),
                                f = .5 * P.CrossVV(u, _);
                            s += f, n.x += f * (1 / 3) * (l.x + h.x + c.x), n.y += f * (1 / 3) * (l.y + h.y + c.y)
                        }
                        return n.SelfMul(1 / s), n
                    }, r.Set_s_ps = P.MakeArray(a), r.Set_s_hull = p(a), r.Set_s_r = new P, r.Set_s_v = new P, r.TestPoint_s_pLocal = new P, r.ComputeDistance_s_pLocal = new P, r.ComputeDistance_s_normalForMaxDistance = new P, r.ComputeDistance_s_minDistance = new P, r.ComputeDistance_s_distance = new P, r.RayCast_s_p1 = new P, r.RayCast_s_p2 = new P, r.RayCast_s_d = new P, r.ComputeAABB_s_v = new P, r.ComputeMass_s_center = new P, r.ComputeMass_s_s = new P, r.ComputeMass_s_e1 = new P, r.ComputeMass_s_e2 = new P, r.Validate_s_e = new P, r.Validate_s_v = new P, r.ComputeSubmergedArea_s_normalL = new P, r.ComputeSubmergedArea_s_depths = p(a), r.ComputeSubmergedArea_s_md = new Ze, r.ComputeSubmergedArea_s_intoVec = new P, r.ComputeSubmergedArea_s_outoVec = new P, r.ComputeSubmergedArea_s_center = new P, r.ComputeCentroid_s_pRef = new P, r.ComputeCentroid_s_e1 = new P, r.ComputeCentroid_s_e2 = new P, r
                })(Ke),
                ii = (function(e) {
                    function i() {
                        var i = e.call(this, t.b2ShapeType.e_edgeShape, c) || this;
                        return i.m_vertex1 = new P, i.m_vertex2 = new P, i.m_vertex0 = new P, i.m_vertex3 = new P, i.m_hasVertex0 = !1, i.m_hasVertex3 = !1, i
                    }
                    return $e(i, e), i.prototype.Set = function(t, e) {
                        return this.m_vertex1.Copy(t), this.m_vertex2.Copy(e), this.m_hasVertex0 = !1, this.m_hasVertex3 = !1, this
                    }, i.prototype.Clone = function() {
                        return (new i).Copy(this)
                    }, i.prototype.Copy = function(t) {
                        return e.prototype.Copy.call(this, t), this.m_vertex1.Copy(t.m_vertex1), this.m_vertex2.Copy(t.m_vertex2), this.m_vertex0.Copy(t.m_vertex0), this.m_vertex3.Copy(t.m_vertex3), this.m_hasVertex0 = t.m_hasVertex0, this.m_hasVertex3 = t.m_hasVertex3, this
                    }, i.prototype.GetChildCount = function() {
                        return 1
                    }, i.prototype.TestPoint = function(t, e) {
                        return !1
                    }, i.prototype.ComputeDistance = function(t, e, n, r) {
                        var s = V.MulXV(t, this.m_vertex1, i.ComputeDistance_s_v1),
                            o = V.MulXV(t, this.m_vertex2, i.ComputeDistance_s_v2),
                            a = P.SubVV(e, s, i.ComputeDistance_s_d),
                            l = P.SubVV(o, s, i.ComputeDistance_s_s),
                            h = P.DotVV(a, l);
                        if (h > 0) {
                            var c = P.DotVV(l, l);
                            h > c ? P.SubVV(e, o, a) : a.SelfMulSub(h / c, l)
                        }
                        return n.Copy(a), n.Normalize()
                    }, i.prototype.RayCast = function(t, e, n, r) {
                        var s = V.MulTXV(n, e.p1, i.RayCast_s_p1),
                            o = V.MulTXV(n, e.p2, i.RayCast_s_p2),
                            a = P.SubVV(o, s, i.RayCast_s_d),
                            l = this.m_vertex1,
                            h = this.m_vertex2,
                            c = P.SubVV(h, l, i.RayCast_s_e),
                            u = t.normal.Set(c.y, -c.x).SelfNormalize(),
                            _ = P.DotVV(u, P.SubVV(l, s, P.s_t0)),
                            f = P.DotVV(u, a);
                        if (0 === f) return !1;
                        var d = _ / f;
                        if (d < 0 || e.maxFraction < d) return !1;
                        var p = P.AddVMulSV(s, d, a, i.RayCast_s_q),
                            m = P.SubVV(h, l, i.RayCast_s_r),
                            y = P.DotVV(m, m);
                        if (0 === y) return !1;
                        var v = P.DotVV(P.SubVV(p, l, P.s_t0), m) / y;
                        return !(v < 0 || 1 < v) && (t.fraction = d, N.MulRV(n.q, t.normal, t.normal), _ > 0 && t.normal.SelfNeg(), !0)
                    }, i.prototype.ComputeAABB = function(t, e, n) {
                        var r = V.MulXV(e, this.m_vertex1, i.ComputeAABB_s_v1),
                            s = V.MulXV(e, this.m_vertex2, i.ComputeAABB_s_v2);
                        P.MinV(r, s, t.lowerBound), P.MaxV(r, s, t.upperBound);
                        var o = this.m_radius;
                        t.lowerBound.SelfSubXY(o, o), t.upperBound.SelfAddXY(o, o)
                    }, i.prototype.ComputeMass = function(t, e) {
                        t.mass = 0, P.MidVV(this.m_vertex1, this.m_vertex2, t.center), t.I = 0
                    }, i.prototype.SetupDistanceProxy = function(t, e) {
                        t.m_vertices = t.m_buffer, t.m_vertices[0].Copy(this.m_vertex1), t.m_vertices[1].Copy(this.m_vertex2), t.m_count = 2, t.m_radius = this.m_radius
                    }, i.prototype.ComputeSubmergedArea = function(t, e, i, n) {
                        return n.SetZero(), 0
                    }, i.prototype.Dump = function(t) {
                        t("    const shape: b2EdgeShape = new b2EdgeShape();\n"), t("    shape.m_radius = %.15f;\n", this.m_radius), t("    shape.m_vertex0.Set(%.15f, %.15f);\n", this.m_vertex0.x, this.m_vertex0.y), t("    shape.m_vertex1.Set(%.15f, %.15f);\n", this.m_vertex1.x, this.m_vertex1.y), t("    shape.m_vertex2.Set(%.15f, %.15f);\n", this.m_vertex2.x, this.m_vertex2.y), t("    shape.m_vertex3.Set(%.15f, %.15f);\n", this.m_vertex3.x, this.m_vertex3.y), t("    shape.m_hasVertex0 = %s;\n", this.m_hasVertex0), t("    shape.m_hasVertex3 = %s;\n", this.m_hasVertex3)
                    }, i.ComputeDistance_s_v1 = new P, i.ComputeDistance_s_v2 = new P, i.ComputeDistance_s_d = new P, i.ComputeDistance_s_s = new P, i.RayCast_s_p1 = new P, i.RayCast_s_p2 = new P, i.RayCast_s_d = new P, i.RayCast_s_e = new P, i.RayCast_s_q = new P, i.RayCast_s_r = new P, i.ComputeAABB_s_v1 = new P, i.ComputeAABB_s_v2 = new P, i
                })(Ke),
                ni = (function(e) {
                    function i() {
                        var i = e.call(this, t.b2ShapeType.e_chainShape, c) || this;
                        return i.m_vertices = [], i.m_count = 0, i.m_prevVertex = new P, i.m_nextVertex = new P, i.m_hasPrevVertex = !1, i.m_hasNextVertex = !1, i
                    }
                    return $e(i, e), i.prototype.CreateLoop = function(t, e, i) {
                        if (void 0 === e && (e = t.length), void 0 === i && (i = 0), e < 3) return this;
                        this.m_count = e + 1, this.m_vertices = P.MakeArray(this.m_count);
                        for (var n = 0; n < e; ++n) this.m_vertices[n].Copy(t[i + n]);
                        return this.m_vertices[e].Copy(this.m_vertices[0]), this.m_prevVertex.Copy(this.m_vertices[this.m_count - 2]), this.m_nextVertex.Copy(this.m_vertices[1]), this.m_hasPrevVertex = !0, this.m_hasNextVertex = !0, this
                    }, i.prototype.CreateChain = function(t, e, i) {
                        void 0 === e && (e = t.length), void 0 === i && (i = 0), this.m_count = e, this.m_vertices = P.MakeArray(e);
                        for (var n = 0; n < e; ++n) this.m_vertices[n].Copy(t[i + n]);
                        return this.m_hasPrevVertex = !1, this.m_hasNextVertex = !1, this.m_prevVertex.SetZero(), this.m_nextVertex.SetZero(), this
                    }, i.prototype.SetPrevVertex = function(t) {
                        return this.m_prevVertex.Copy(t), this.m_hasPrevVertex = !0, this
                    }, i.prototype.SetNextVertex = function(t) {
                        return this.m_nextVertex.Copy(t), this.m_hasNextVertex = !0, this
                    }, i.prototype.Clone = function() {
                        return (new i).Copy(this)
                    }, i.prototype.Copy = function(t) {
                        return e.prototype.Copy.call(this, t), this.CreateChain(t.m_vertices, t.m_count), this.m_prevVertex.Copy(t.m_prevVertex), this.m_nextVertex.Copy(t.m_nextVertex), this.m_hasPrevVertex = t.m_hasPrevVertex, this.m_hasNextVertex = t.m_hasNextVertex, this
                    }, i.prototype.GetChildCount = function() {
                        return this.m_count - 1
                    }, i.prototype.GetChildEdge = function(e, i) {
                        e.m_type = t.b2ShapeType.e_edgeShape, e.m_radius = this.m_radius, e.m_vertex1.Copy(this.m_vertices[i]), e.m_vertex2.Copy(this.m_vertices[i + 1]), i > 0 ? (e.m_vertex0.Copy(this.m_vertices[i - 1]), e.m_hasVertex0 = !0) : (e.m_vertex0.Copy(this.m_prevVertex), e.m_hasVertex0 = this.m_hasPrevVertex), i < this.m_count - 2 ? (e.m_vertex3.Copy(this.m_vertices[i + 2]), e.m_hasVertex3 = !0) : (e.m_vertex3.Copy(this.m_nextVertex), e.m_hasVertex3 = this.m_hasNextVertex)
                    }, i.prototype.TestPoint = function(t, e) {
                        return !1
                    }, i.prototype.ComputeDistance = function(t, e, n, r) {
                        var s = i.ComputeDistance_s_edgeShape;
                        return this.GetChildEdge(s, r), s.ComputeDistance(t, e, n, 0)
                    }, i.prototype.RayCast = function(t, e, n, r) {
                        var s = i.RayCast_s_edgeShape;
                        return s.m_vertex1.Copy(this.m_vertices[r]), s.m_vertex2.Copy(this.m_vertices[(r + 1) % this.m_count]), s.RayCast(t, e, n, 0)
                    }, i.prototype.ComputeAABB = function(t, e, n) {
                        var r = this.m_vertices[n],
                            s = this.m_vertices[(n + 1) % this.m_count],
                            o = V.MulXV(e, r, i.ComputeAABB_s_v1),
                            a = V.MulXV(e, s, i.ComputeAABB_s_v2);
                        P.MinV(o, a, t.lowerBound), P.MaxV(o, a, t.upperBound)
                    }, i.prototype.ComputeMass = function(t, e) {
                        t.mass = 0, t.center.SetZero(), t.I = 0
                    }, i.prototype.SetupDistanceProxy = function(t, e) {
                        t.m_vertices = t.m_buffer, t.m_vertices[0].Copy(this.m_vertices[e]), e + 1 < this.m_count ? t.m_vertices[1].Copy(this.m_vertices[e + 1]) : t.m_vertices[1].Copy(this.m_vertices[0]), t.m_count = 2, t.m_radius = this.m_radius
                    }, i.prototype.ComputeSubmergedArea = function(t, e, i, n) {
                        return n.SetZero(), 0
                    }, i.prototype.Dump = function(t) {
                        t("    const shape: b2ChainShape = new b2ChainShape();\n"), t("    const vs: b2Vec2[] = b2Vec2.MakeArray(%d);\n", a);
                        for (var e = 0; e < this.m_count; ++e) t("    vs[%d].Set(%.15f, %.15f);\n", e, this.m_vertices[e].x, this.m_vertices[e].y);
                        t("    shape.CreateChain(vs, %d);\n", this.m_count), t("    shape.m_prevVertex.Set(%.15f, %.15f);\n", this.m_prevVertex.x, this.m_prevVertex.y), t("    shape.m_nextVertex.Set(%.15f, %.15f);\n", this.m_nextVertex.x, this.m_nextVertex.y), t("    shape.m_hasPrevVertex = %s;\n", this.m_hasPrevVertex ? "true" : "false"), t("    shape.m_hasNextVertex = %s;\n", this.m_hasNextVertex ? "true" : "false")
                    }, i.ComputeDistance_s_edgeShape = new ii, i.RayCast_s_edgeShape = new ii, i.ComputeAABB_s_v1 = new P, i.ComputeAABB_s_v2 = new P, i
                })(Ke),
                ri = (function() {
                    function t() {
                        this.categoryBits = 1, this.maskBits = 65535, this.groupIndex = 0
                    }
                    return t.prototype.Clone = function() {
                        return (new t).Copy(this)
                    }, t.prototype.Copy = function(t) {
                        return this.categoryBits = t.categoryBits, this.maskBits = t.maskBits, this.groupIndex = t.groupIndex || 0, this
                    }, t.DEFAULT = new t, t
                })(),
                si = (function() {
                    return function() {
                        this.userData = null, this.friction = .2, this.restitution = 0, this.density = 0, this.isSensor = !1, this.filter = new ri
                    }
                })(),
                oi = (function() {
                    return function(t) {
                        this.aabb = new wt, this.childIndex = 0, this.fixture = t
                    }
                })(),
                ai = (function() {
                    function t(t, e) {
                        this.m_density = 0, this.m_next = null, this.m_friction = 0, this.m_restitution = 0, this.m_proxies = [], this.m_proxyCount = 0, this.m_filter = new ri, this.m_isSensor = !1, this.m_userData = null, this.m_body = e, this.m_shape = t.shape.Clone()
                    }
                    return t.prototype.GetType = function() {
                        return this.m_shape.GetType()
                    }, t.prototype.GetShape = function() {
                        return this.m_shape
                    }, t.prototype.SetSensor = function(t) {
                        t !== this.m_isSensor && (this.m_body.SetAwake(!0), this.m_isSensor = t)
                    }, t.prototype.IsSensor = function() {
                        return this.m_isSensor
                    }, t.prototype.SetFilterData = function(t) {
                        this.m_filter.Copy(t), this.Refilter()
                    }, t.prototype.GetFilterData = function() {
                        return this.m_filter
                    }, t.prototype.Refilter = function() {
                        for (var t = this.m_body.GetContactList(); t;) {
                            var e = t.contact,
                                i = e.GetFixtureA(),
                                n = e.GetFixtureB();
                            i !== this && n !== this || e.FlagForFiltering(), t = t.next
                        }
                        var r = this.m_body.GetWorld();
                        if (null !== r)
                            for (var s = r.m_contactManager.m_broadPhase, o = 0; o < this.m_proxyCount; ++o) s.TouchProxy(this.m_proxies[o].treeNode)
                    }, t.prototype.GetBody = function() {
                        return this.m_body
                    }, t.prototype.GetNext = function() {
                        return this.m_next
                    }, t.prototype.GetUserData = function() {
                        return this.m_userData
                    }, t.prototype.SetUserData = function(t) {
                        this.m_userData = t
                    }, t.prototype.TestPoint = function(t) {
                        return this.m_shape.TestPoint(this.m_body.GetTransform(), t)
                    }, t.prototype.ComputeDistance = function(t, e, i) {
                        return this.m_shape.ComputeDistance(this.m_body.GetTransform(), t, e, i)
                    }, t.prototype.RayCast = function(t, e, i) {
                        return this.m_shape.RayCast(t, e, this.m_body.GetTransform(), i)
                    }, t.prototype.GetMassData = function(t) {
                        return void 0 === t && (t = new Ze), this.m_shape.ComputeMass(t, this.m_density), t
                    }, t.prototype.SetDensity = function(t) {
                        this.m_density = t
                    }, t.prototype.GetDensity = function() {
                        return this.m_density
                    }, t.prototype.GetFriction = function() {
                        return this.m_friction
                    }, t.prototype.SetFriction = function(t) {
                        this.m_friction = t
                    }, t.prototype.GetRestitution = function() {
                        return this.m_restitution
                    }, t.prototype.SetRestitution = function(t) {
                        this.m_restitution = t
                    }, t.prototype.GetAABB = function(t) {
                        return this.m_proxies[t].aabb
                    }, t.prototype.Dump = function(t, e) {
                        t("    const fd: b2FixtureDef = new b2FixtureDef();\n"), t("    fd.friction = %.15f;\n", this.m_friction), t("    fd.restitution = %.15f;\n", this.m_restitution), t("    fd.density = %.15f;\n", this.m_density), t("    fd.isSensor = %s;\n", this.m_isSensor ? "true" : "false"), t("    fd.filter.categoryBits = %d;\n", this.m_filter.categoryBits), t("    fd.filter.maskBits = %d;\n", this.m_filter.maskBits), t("    fd.filter.groupIndex = %d;\n", this.m_filter.groupIndex), this.m_shape.Dump(t), t("\n"), t("    fd.shape = shape;\n"), t("\n"), t("    bodies[%d].CreateFixture(fd);\n", e)
                    }, t.prototype.Create = function(t) {
                        var i = this;
                        this.m_userData = t.userData, this.m_friction = e(t.friction, .2), this.m_restitution = e(t.restitution, 0), this.m_next = null, this.m_filter.Copy(e(t.filter, ri.DEFAULT)), this.m_isSensor = e(t.isSensor, !1), this.m_proxies = d(this.m_shape.GetChildCount(), (function(t) {
                            return new oi(i)
                        })), this.m_proxyCount = 0, this.m_density = e(t.density, 0)
                    }, t.prototype.Destroy = function() {}, t.prototype.CreateProxies = function(t) {
                        var e = this.m_body.m_world.m_contactManager.m_broadPhase;
                        this.m_proxyCount = this.m_shape.GetChildCount();
                        for (var i = 0; i < this.m_proxyCount; ++i) {
                            var n = this.m_proxies[i] = new oi(this);
                            this.m_shape.ComputeAABB(n.aabb, t, i), n.treeNode = e.CreateProxy(n.aabb, n), n.childIndex = i
                        }
                    }, t.prototype.DestroyProxies = function() {
                        for (var t = this.m_body.m_world.m_contactManager.m_broadPhase, e = 0; e < this.m_proxyCount; ++e) {
                            var i = this.m_proxies[e];
                            delete i.treeNode.userData, t.DestroyProxy(i.treeNode), delete i.treeNode
                        }
                        this.m_proxyCount = 0
                    }, t.prototype.TouchProxies = function() {
                        for (var t = this.m_body.m_world.m_contactManager.m_broadPhase, e = this.m_proxyCount, i = 0; i < e; ++i) t.TouchProxy(this.m_proxies[i].treeNode)
                    }, t.prototype.Synchronize = function(e, i) {
                        if (0 !== this.m_proxyCount)
                            for (var n = this.m_body.m_world.m_contactManager.m_broadPhase, r = 0; r < this.m_proxyCount; ++r) {
                                var s = this.m_proxies[r],
                                    o = t.Synchronize_s_aabb1,
                                    a = t.Synchronize_s_aabb2;
                                this.m_shape.ComputeAABB(o, e, r), this.m_shape.ComputeAABB(a, i, r), s.aabb.Combine2(o, a);
                                var l = P.SubVV(i.p, e.p, t.Synchronize_s_displacement);
                                n.MoveProxy(s.treeNode, s.aabb, l)
                            }
                    }, t.Synchronize_s_aabb1 = new wt, t.Synchronize_s_aabb2 = new wt, t.Synchronize_s_displacement = new P, t
                })();
            (function(t) {
                t[t.b2_unknown = -1] = "b2_unknown", t[t.b2_staticBody = 0] = "b2_staticBody", t[t.b2_kinematicBody = 1] = "b2_kinematicBody", t[t.b2_dynamicBody = 2] = "b2_dynamicBody"
            })(t.b2BodyType || (t.b2BodyType = {}));
            var li = (function() {
                    return function() {
                        this.type = t.b2BodyType.b2_staticBody, this.position = new P(0, 0), this.angle = 0, this.linearVelocity = new P(0, 0), this.angularVelocity = 0, this.linearDamping = 0, this.angularDamping = 0, this.allowSleep = !0, this.awake = !0, this.fixedRotation = !1, this.bullet = !1, this.active = !0, this.userData = null, this.gravityScale = 1
                    }
                })(),
                hi = (function() {
                    function i(i, n) {
                        this.m_type = t.b2BodyType.b2_staticBody, this.m_islandFlag = !1, this.m_awakeFlag = !1, this.m_autoSleepFlag = !1, this.m_bulletFlag = !1, this.m_fixedRotationFlag = !1, this.m_activeFlag = !1, this.m_toiFlag = !1, this.m_islandIndex = 0, this.m_xf = new V, this.m_xf0 = new V, this.m_sweep = new k, this.m_linearVelocity = new P, this.m_angularVelocity = 0, this.m_force = new P, this.m_torque = 0, this.m_prev = null, this.m_next = null, this.m_fixtureList = null, this.m_fixtureCount = 0, this.m_jointList = null, this.m_contactList = null, this.m_mass = 1, this.m_invMass = 1, this.m_I = 0, this.m_invI = 0, this.m_linearDamping = 0, this.m_angularDamping = 0, this.m_gravityScale = 1, this.m_sleepTime = 0, this.m_userData = null, this.m_controllerList = null, this.m_controllerCount = 0, this.m_bulletFlag = e(i.bullet, !1), this.m_fixedRotationFlag = e(i.fixedRotation, !1), this.m_autoSleepFlag = e(i.allowSleep, !0), this.m_awakeFlag = e(i.awake, !0), this.m_activeFlag = e(i.active, !0), this.m_world = n, this.m_xf.p.Copy(e(i.position, P.ZERO)), this.m_xf.q.SetAngle(e(i.angle, 0)), this.m_xf0.Copy(this.m_xf), this.m_sweep.localCenter.SetZero(), this.m_sweep.c0.Copy(this.m_xf.p), this.m_sweep.c.Copy(this.m_xf.p), this.m_sweep.a0 = this.m_sweep.a = this.m_xf.q.GetAngle(), this.m_sweep.alpha0 = 0, this.m_linearVelocity.Copy(e(i.linearVelocity, P.ZERO)), this.m_angularVelocity = e(i.angularVelocity, 0), this.m_linearDamping = e(i.linearDamping, 0), this.m_angularDamping = e(i.angularDamping, 0), this.m_gravityScale = e(i.gravityScale, 1), this.m_force.SetZero(), this.m_torque = 0, this.m_sleepTime = 0, this.m_type = e(i.type, t.b2BodyType.b2_staticBody), i.type === t.b2BodyType.b2_dynamicBody ? (this.m_mass = 1, this.m_invMass = 1) : (this.m_mass = 0, this.m_invMass = 0), this.m_I = 0, this.m_invI = 0, this.m_userData = i.userData, this.m_fixtureList = null, this.m_fixtureCount = 0, this.m_controllerList = null, this.m_controllerCount = 0
                    }
                    return i.prototype.CreateFixture = function(t, e) {
                        return void 0 === e && (e = 0), t instanceof Ke ? this.CreateFixtureShapeDensity(t, e) : this.CreateFixtureDef(t)
                    }, i.prototype.CreateFixtureDef = function(t) {
                        if (this.m_world.IsLocked()) throw new Error;
                        var e = new ai(t, this);
                        return e.Create(t), this.m_activeFlag && e.CreateProxies(this.m_xf), e.m_next = this.m_fixtureList, this.m_fixtureList = e, ++this.m_fixtureCount, e.m_density > 0 && this.ResetMassData(), this.m_world.m_newFixture = !0, e
                    }, i.prototype.CreateFixtureShapeDensity = function(t, e) {
                        void 0 === e && (e = 0);
                        var n = i.CreateFixtureShapeDensity_s_def;
                        return n.shape = t, n.density = e, this.CreateFixtureDef(n)
                    }, i.prototype.DestroyFixture = function(t) {
                        if (this.m_world.IsLocked()) throw new Error;
                        for (var e = this.m_fixtureList, i = null; null !== e;) {
                            if (e === t) {
                                i ? i.m_next = t.m_next : this.m_fixtureList = t.m_next;
                                break
                            }
                            i = e, e = e.m_next
                        }
                        for (var n = this.m_contactList; n;) {
                            var r = n.contact;
                            n = n.next;
                            var s = r.GetFixtureA(),
                                o = r.GetFixtureB();
                            t !== s && t !== o || this.m_world.m_contactManager.Destroy(r)
                        }
                        this.m_activeFlag && t.DestroyProxies(), t.m_next = null, t.Destroy(), --this.m_fixtureCount, this.ResetMassData()
                    }, i.prototype.SetTransformVec = function(t, e) {
                        this.SetTransformXY(t.x, t.y, e)
                    }, i.prototype.SetTransformXY = function(t, e, i) {
                        if (this.m_world.IsLocked()) throw new Error;
                        this.m_xf.q.SetAngle(i), this.m_xf.p.Set(t, e), this.m_xf0.Copy(this.m_xf), V.MulXV(this.m_xf, this.m_sweep.localCenter, this.m_sweep.c), this.m_sweep.a = i, this.m_sweep.c0.Copy(this.m_sweep.c), this.m_sweep.a0 = i;
                        for (var n = this.m_fixtureList; n; n = n.m_next) n.Synchronize(this.m_xf, this.m_xf);
                        this.m_world.m_contactManager.FindNewContacts()
                    }, i.prototype.SetTransform = function(t) {
                        this.SetTransformVec(t.p, t.GetAngle())
                    }, i.prototype.GetTransform = function() {
                        return this.m_xf
                    }, i.prototype.GetPosition = function() {
                        return this.m_xf.p
                    }, i.prototype.SetPosition = function(t) {
                        this.SetTransformVec(t, this.GetAngle())
                    }, i.prototype.SetPositionXY = function(t, e) {
                        this.SetTransformXY(t, e, this.GetAngle())
                    }, i.prototype.GetAngle = function() {
                        return this.m_sweep.a
                    }, i.prototype.SetAngle = function(t) {
                        this.SetTransformVec(this.GetPosition(), t)
                    }, i.prototype.GetWorldCenter = function() {
                        return this.m_sweep.c
                    }, i.prototype.GetLocalCenter = function() {
                        return this.m_sweep.localCenter
                    }, i.prototype.SetLinearVelocity = function(e) {
                        this.m_type !== t.b2BodyType.b2_staticBody && (P.DotVV(e, e) > 0 && this.SetAwake(!0), this.m_linearVelocity.Copy(e))
                    }, i.prototype.GetLinearVelocity = function() {
                        return this.m_linearVelocity
                    }, i.prototype.SetAngularVelocity = function(e) {
                        this.m_type !== t.b2BodyType.b2_staticBody && (e * e > 0 && this.SetAwake(!0), this.m_angularVelocity = e)
                    }, i.prototype.GetAngularVelocity = function() {
                        return this.m_angularVelocity
                    }, i.prototype.GetDefinition = function(t) {
                        return t.type = this.GetType(), t.allowSleep = this.m_autoSleepFlag, t.angle = this.GetAngle(), t.angularDamping = this.m_angularDamping, t.gravityScale = this.m_gravityScale, t.angularVelocity = this.m_angularVelocity, t.fixedRotation = this.m_fixedRotationFlag, t.bullet = this.m_bulletFlag, t.awake = this.m_awakeFlag, t.linearDamping = this.m_linearDamping, t.linearVelocity.Copy(this.GetLinearVelocity()), t.position.Copy(this.GetPosition()), t.userData = this.GetUserData(), t
                    }, i.prototype.ApplyForce = function(e, i, n) {
                        void 0 === n && (n = !0), this.m_type === t.b2BodyType.b2_dynamicBody && (n && !this.m_awakeFlag && this.SetAwake(!0), this.m_awakeFlag && (this.m_force.x += e.x, this.m_force.y += e.y, this.m_torque += (i.x - this.m_sweep.c.x) * e.y - (i.y - this.m_sweep.c.y) * e.x))
                    }, i.prototype.ApplyForceToCenter = function(e, i) {
                        void 0 === i && (i = !0), this.m_type === t.b2BodyType.b2_dynamicBody && (i && !this.m_awakeFlag && this.SetAwake(!0), this.m_awakeFlag && (this.m_force.x += e.x, this.m_force.y += e.y))
                    }, i.prototype.ApplyTorque = function(e, i) {
                        void 0 === i && (i = !0), this.m_type === t.b2BodyType.b2_dynamicBody && (i && !this.m_awakeFlag && this.SetAwake(!0), this.m_awakeFlag && (this.m_torque += e))
                    }, i.prototype.ApplyLinearImpulse = function(e, i, n) {
                        void 0 === n && (n = !0), this.m_type === t.b2BodyType.b2_dynamicBody && (n && !this.m_awakeFlag && this.SetAwake(!0), this.m_awakeFlag && (this.m_linearVelocity.x += this.m_invMass * e.x, this.m_linearVelocity.y += this.m_invMass * e.y, this.m_angularVelocity += this.m_invI * ((i.x - this.m_sweep.c.x) * e.y - (i.y - this.m_sweep.c.y) * e.x)))
                    }, i.prototype.ApplyLinearImpulseToCenter = function(e, i) {
                        void 0 === i && (i = !0), this.m_type === t.b2BodyType.b2_dynamicBody && (i && !this.m_awakeFlag && this.SetAwake(!0), this.m_awakeFlag && (this.m_linearVelocity.x += this.m_invMass * e.x, this.m_linearVelocity.y += this.m_invMass * e.y))
                    }, i.prototype.ApplyAngularImpulse = function(e, i) {
                        void 0 === i && (i = !0), this.m_type === t.b2BodyType.b2_dynamicBody && (i && !this.m_awakeFlag && this.SetAwake(!0), this.m_awakeFlag && (this.m_angularVelocity += this.m_invI * e))
                    }, i.prototype.GetMass = function() {
                        return this.m_mass
                    }, i.prototype.GetInertia = function() {
                        return this.m_I + this.m_mass * P.DotVV(this.m_sweep.localCenter, this.m_sweep.localCenter)
                    }, i.prototype.GetMassData = function(t) {
                        return t.mass = this.m_mass, t.I = this.m_I + this.m_mass * P.DotVV(this.m_sweep.localCenter, this.m_sweep.localCenter), t.center.Copy(this.m_sweep.localCenter), t
                    }, i.prototype.SetMassData = function(e) {
                        if (this.m_world.IsLocked()) throw new Error;
                        if (this.m_type === t.b2BodyType.b2_dynamicBody) {
                            this.m_invMass = 0, this.m_I = 0, this.m_invI = 0, this.m_mass = e.mass, this.m_mass <= 0 && (this.m_mass = 1), this.m_invMass = 1 / this.m_mass, e.I > 0 && !this.m_fixedRotationFlag && (this.m_I = e.I - this.m_mass * P.DotVV(e.center, e.center), this.m_invI = 1 / this.m_I);
                            var n = i.SetMassData_s_oldCenter.Copy(this.m_sweep.c);
                            this.m_sweep.localCenter.Copy(e.center), V.MulXV(this.m_xf, this.m_sweep.localCenter, this.m_sweep.c), this.m_sweep.c0.Copy(this.m_sweep.c), P.AddVCrossSV(this.m_linearVelocity, this.m_angularVelocity, P.SubVV(this.m_sweep.c, n, P.s_t0), this.m_linearVelocity)
                        }
                    }, i.prototype.ResetMassData = function() {
                        if (this.m_mass = 0, this.m_invMass = 0, this.m_I = 0, this.m_invI = 0, this.m_sweep.localCenter.SetZero(), this.m_type === t.b2BodyType.b2_staticBody || this.m_type === t.b2BodyType.b2_kinematicBody) return this.m_sweep.c0.Copy(this.m_xf.p), this.m_sweep.c.Copy(this.m_xf.p), void(this.m_sweep.a0 = this.m_sweep.a);
                        for (var e = i.ResetMassData_s_localCenter.SetZero(), n = this.m_fixtureList; n; n = n.m_next)
                            if (0 !== n.m_density) {
                                var r = n.GetMassData(i.ResetMassData_s_massData);
                                this.m_mass += r.mass, e.x += r.center.x * r.mass, e.y += r.center.y * r.mass, this.m_I += r.I
                            }
                        this.m_mass > 0 ? (this.m_invMass = 1 / this.m_mass, e.x *= this.m_invMass, e.y *= this.m_invMass) : (this.m_mass = 1, this.m_invMass = 1), this.m_I > 0 && !this.m_fixedRotationFlag ? (this.m_I -= this.m_mass * P.DotVV(e, e), this.m_invI = 1 / this.m_I) : (this.m_I = 0, this.m_invI = 0);
                        var s = i.ResetMassData_s_oldCenter.Copy(this.m_sweep.c);
                        this.m_sweep.localCenter.Copy(e), V.MulXV(this.m_xf, this.m_sweep.localCenter, this.m_sweep.c), this.m_sweep.c0.Copy(this.m_sweep.c), P.AddVCrossSV(this.m_linearVelocity, this.m_angularVelocity, P.SubVV(this.m_sweep.c, s, P.s_t0), this.m_linearVelocity)
                    }, i.prototype.GetWorldPoint = function(t, e) {
                        return V.MulXV(this.m_xf, t, e)
                    }, i.prototype.GetWorldVector = function(t, e) {
                        return N.MulRV(this.m_xf.q, t, e)
                    }, i.prototype.GetLocalPoint = function(t, e) {
                        return V.MulTXV(this.m_xf, t, e)
                    }, i.prototype.GetLocalVector = function(t, e) {
                        return N.MulTRV(this.m_xf.q, t, e)
                    }, i.prototype.GetLinearVelocityFromWorldPoint = function(t, e) {
                        return P.AddVCrossSV(this.m_linearVelocity, this.m_angularVelocity, P.SubVV(t, this.m_sweep.c, P.s_t0), e)
                    }, i.prototype.GetLinearVelocityFromLocalPoint = function(t, e) {
                        return this.GetLinearVelocityFromWorldPoint(this.GetWorldPoint(t, e), e)
                    }, i.prototype.GetLinearDamping = function() {
                        return this.m_linearDamping
                    }, i.prototype.SetLinearDamping = function(t) {
                        this.m_linearDamping = t
                    }, i.prototype.GetAngularDamping = function() {
                        return this.m_angularDamping
                    }, i.prototype.SetAngularDamping = function(t) {
                        this.m_angularDamping = t
                    }, i.prototype.GetGravityScale = function() {
                        return this.m_gravityScale
                    }, i.prototype.SetGravityScale = function(t) {
                        this.m_gravityScale = t
                    }, i.prototype.SetType = function(e) {
                        if (this.m_world.IsLocked()) throw new Error;
                        if (this.m_type !== e) {
                            this.m_type = e, this.ResetMassData(), this.m_type === t.b2BodyType.b2_staticBody && (this.m_linearVelocity.SetZero(), this.m_angularVelocity = 0, this.m_sweep.a0 = this.m_sweep.a, this.m_sweep.c0.Copy(this.m_sweep.c), this.SynchronizeFixtures()), this.SetAwake(!0), this.m_force.SetZero(), this.m_torque = 0;
                            for (var i = this.m_contactList; i;) {
                                var n = i;
                                i = i.next, this.m_world.m_contactManager.Destroy(n.contact)
                            }
                            this.m_contactList = null;
                            for (var r = this.m_fixtureList; r; r = r.m_next) r.TouchProxies()
                        }
                    }, i.prototype.GetType = function() {
                        return this.m_type
                    }, i.prototype.SetBullet = function(t) {
                        this.m_bulletFlag = t
                    }, i.prototype.IsBullet = function() {
                        return this.m_bulletFlag
                    }, i.prototype.SetSleepingAllowed = function(t) {
                        this.m_autoSleepFlag = t, t || this.SetAwake(!0)
                    }, i.prototype.IsSleepingAllowed = function() {
                        return this.m_autoSleepFlag
                    }, i.prototype.SetAwake = function(t) {
                        t ? (this.m_awakeFlag = !0, this.m_sleepTime = 0) : (this.m_awakeFlag = !1, this.m_sleepTime = 0, this.m_linearVelocity.SetZero(), this.m_angularVelocity = 0, this.m_force.SetZero(), this.m_torque = 0)
                    }, i.prototype.IsAwake = function() {
                        return this.m_awakeFlag
                    }, i.prototype.SetActive = function(t) {
                        if (this.m_world.IsLocked()) throw new Error;
                        if (t !== this.IsActive())
                            if (this.m_activeFlag = t, t)
                                for (var e = this.m_fixtureList; e; e = e.m_next) e.CreateProxies(this.m_xf);
                            else {
                                for (e = this.m_fixtureList; e; e = e.m_next) e.DestroyProxies();
                                for (var i = this.m_contactList; i;) {
                                    var n = i;
                                    i = i.next, this.m_world.m_contactManager.Destroy(n.contact)
                                }
                                this.m_contactList = null
                            }
                    }, i.prototype.IsActive = function() {
                        return this.m_activeFlag
                    }, i.prototype.SetFixedRotation = function(t) {
                        this.m_fixedRotationFlag !== t && (this.m_fixedRotationFlag = t, this.m_angularVelocity = 0, this.ResetMassData())
                    }, i.prototype.IsFixedRotation = function() {
                        return this.m_fixedRotationFlag
                    }, i.prototype.GetFixtureList = function() {
                        return this.m_fixtureList
                    }, i.prototype.GetJointList = function() {
                        return this.m_jointList
                    }, i.prototype.GetContactList = function() {
                        return this.m_contactList
                    }, i.prototype.GetNext = function() {
                        return this.m_next
                    }, i.prototype.GetUserData = function() {
                        return this.m_userData
                    }, i.prototype.SetUserData = function(t) {
                        this.m_userData = t
                    }, i.prototype.GetWorld = function() {
                        return this.m_world
                    }, i.prototype.Dump = function(e) {
                        var i = this.m_islandIndex;
                        e("{\n"), e("  const bd: b2BodyDef = new b2BodyDef();\n");
                        var n = "";
                        switch (this.m_type) {
                            case t.b2BodyType.b2_staticBody:
                                n = "b2BodyType.b2_staticBody";
                                break;
                            case t.b2BodyType.b2_kinematicBody:
                                n = "b2BodyType.b2_kinematicBody";
                                break;
                            case t.b2BodyType.b2_dynamicBody:
                                n = "b2BodyType.b2_dynamicBody"
                        }
                        e("  bd.type = %s;\n", n), e("  bd.position.Set(%.15f, %.15f);\n", this.m_xf.p.x, this.m_xf.p.y), e("  bd.angle = %.15f;\n", this.m_sweep.a), e("  bd.linearVelocity.Set(%.15f, %.15f);\n", this.m_linearVelocity.x, this.m_linearVelocity.y), e("  bd.angularVelocity = %.15f;\n", this.m_angularVelocity), e("  bd.linearDamping = %.15f;\n", this.m_linearDamping), e("  bd.angularDamping = %.15f;\n", this.m_angularDamping), e("  bd.allowSleep = %s;\n", this.m_autoSleepFlag ? "true" : "false"), e("  bd.awake = %s;\n", this.m_awakeFlag ? "true" : "false"), e("  bd.fixedRotation = %s;\n", this.m_fixedRotationFlag ? "true" : "false"), e("  bd.bullet = %s;\n", this.m_bulletFlag ? "true" : "false"), e("  bd.active = %s;\n", this.m_activeFlag ? "true" : "false"), e("  bd.gravityScale = %.15f;\n", this.m_gravityScale), e("\n"), e("  bodies[%d] = this.m_world.CreateBody(bd);\n", this.m_islandIndex), e("\n");
                        for (var r = this.m_fixtureList; r; r = r.m_next) e("  {\n"), r.Dump(e, i), e("  }\n");
                        e("}\n")
                    }, i.prototype.SynchronizeFixtures = function() {
                        var t = i.SynchronizeFixtures_s_xf1;
                        t.q.SetAngle(this.m_sweep.a0), N.MulRV(t.q, this.m_sweep.localCenter, t.p), P.SubVV(this.m_sweep.c0, t.p, t.p);
                        for (var e = this.m_fixtureList; e; e = e.m_next) e.Synchronize(t, this.m_xf)
                    }, i.prototype.SynchronizeTransform = function() {
                        this.m_xf.q.SetAngle(this.m_sweep.a), N.MulRV(this.m_xf.q, this.m_sweep.localCenter, this.m_xf.p), P.SubVV(this.m_sweep.c, this.m_xf.p, this.m_xf.p)
                    }, i.prototype.ShouldCollide = function(e) {
                        return (this.m_type !== t.b2BodyType.b2_staticBody || e.m_type !== t.b2BodyType.b2_staticBody) && this.ShouldCollideConnected(e)
                    }, i.prototype.ShouldCollideConnected = function(t) {
                        for (var e = this.m_jointList; e; e = e.next)
                            if (e.other === t && !e.joint.m_collideConnected) return !1;
                        return !0
                    }, i.prototype.Advance = function(t) {
                        this.m_sweep.Advance(t), this.m_sweep.c.Copy(this.m_sweep.c0), this.m_sweep.a = this.m_sweep.a0, this.m_xf.q.SetAngle(this.m_sweep.a), N.MulRV(this.m_xf.q, this.m_sweep.localCenter, this.m_xf.p), P.SubVV(this.m_sweep.c, this.m_xf.p, this.m_xf.p)
                    }, i.prototype.GetControllerList = function() {
                        return this.m_controllerList
                    }, i.prototype.GetControllerCount = function() {
                        return this.m_controllerCount
                    }, i.CreateFixtureShapeDensity_s_def = new si, i.SetMassData_s_oldCenter = new P, i.ResetMassData_s_localCenter = new P, i.ResetMassData_s_oldCenter = new P, i.ResetMassData_s_massData = new Ze, i.SynchronizeFixtures_s_xf1 = new V, i
                })();
            (function(t) {
                t[t.e_unknownJoint = 0] = "e_unknownJoint", t[t.e_revoluteJoint = 1] = "e_revoluteJoint", t[t.e_prismaticJoint = 2] = "e_prismaticJoint", t[t.e_distanceJoint = 3] = "e_distanceJoint", t[t.e_pulleyJoint = 4] = "e_pulleyJoint", t[t.e_mouseJoint = 5] = "e_mouseJoint", t[t.e_gearJoint = 6] = "e_gearJoint", t[t.e_wheelJoint = 7] = "e_wheelJoint", t[t.e_weldJoint = 8] = "e_weldJoint", t[t.e_frictionJoint = 9] = "e_frictionJoint", t[t.e_ropeJoint = 10] = "e_ropeJoint", t[t.e_motorJoint = 11] = "e_motorJoint", t[t.e_areaJoint = 12] = "e_areaJoint"
            })(t.b2JointType || (t.b2JointType = {})), (function(t) {
                t[t.e_inactiveLimit = 0] = "e_inactiveLimit", t[t.e_atLowerLimit = 1] = "e_atLowerLimit", t[t.e_atUpperLimit = 2] = "e_atUpperLimit", t[t.e_equalLimits = 3] = "e_equalLimits"
            })(t.b2LimitState || (t.b2LimitState = {}));
            var ci = (function() {
                    function t() {
                        this.linear = new P, this.angularA = 0, this.angularB = 0
                    }
                    return t.prototype.SetZero = function() {
                        return this.linear.SetZero(), this.angularA = 0, this.angularB = 0, this
                    }, t.prototype.Set = function(t, e, i) {
                        return this.linear.Copy(t), this.angularA = e, this.angularB = i, this
                    }, t
                })(),
                ui = (function() {
                    return function(t, e) {
                        this.prev = null, this.next = null, this.joint = t, this.other = e
                    }
                })(),
                _i = (function() {
                    return function(e) {
                        this.type = t.b2JointType.e_unknownJoint, this.userData = null, this.collideConnected = !1, this.type = e
                    }
                })(),
                fi = (function() {
                    function i(i) {
                        this.m_type = t.b2JointType.e_unknownJoint, this.m_prev = null, this.m_next = null, this.m_index = 0, this.m_islandFlag = !1, this.m_collideConnected = !1, this.m_userData = null, this.m_type = i.type, this.m_edgeA = new ui(this, i.bodyB), this.m_edgeB = new ui(this, i.bodyA), this.m_bodyA = i.bodyA, this.m_bodyB = i.bodyB, this.m_collideConnected = e(i.collideConnected, !1), this.m_userData = i.userData
                    }
                    return i.prototype.GetType = function() {
                        return this.m_type
                    }, i.prototype.GetBodyA = function() {
                        return this.m_bodyA
                    }, i.prototype.GetBodyB = function() {
                        return this.m_bodyB
                    }, i.prototype.GetNext = function() {
                        return this.m_next
                    }, i.prototype.GetUserData = function() {
                        return this.m_userData
                    }, i.prototype.SetUserData = function(t) {
                        this.m_userData = t
                    }, i.prototype.IsActive = function() {
                        return this.m_bodyA.IsActive() && this.m_bodyB.IsActive()
                    }, i.prototype.GetCollideConnected = function() {
                        return this.m_collideConnected
                    }, i.prototype.Dump = function(t) {
                        t("// Dump is not supported for this joint type.\n")
                    }, i.prototype.ShiftOrigin = function(t) {}, i
                })(),
                di = (function(e) {
                    function i() {
                        var i = e.call(this, t.b2JointType.e_distanceJoint) || this;
                        return i.localAnchorA = new P, i.localAnchorB = new P, i.length = 1, i.frequencyHz = 0, i.dampingRatio = 0, i
                    }
                    return $e(i, e), i.prototype.Initialize = function(t, e, i, n) {
                        this.bodyA = t, this.bodyB = e, this.bodyA.GetLocalPoint(i, this.localAnchorA), this.bodyB.GetLocalPoint(n, this.localAnchorB), this.length = P.DistanceVV(i, n), this.frequencyHz = 0, this.dampingRatio = 0
                    }, i
                })(_i),
                pi = (function(t) {
                    function i(i) {
                        var n = t.call(this, i) || this;
                        return n.m_frequencyHz = 0, n.m_dampingRatio = 0, n.m_bias = 0, n.m_localAnchorA = new P, n.m_localAnchorB = new P, n.m_gamma = 0, n.m_impulse = 0, n.m_length = 0, n.m_indexA = 0, n.m_indexB = 0, n.m_u = new P, n.m_rA = new P, n.m_rB = new P, n.m_localCenterA = new P, n.m_localCenterB = new P, n.m_invMassA = 0, n.m_invMassB = 0, n.m_invIA = 0, n.m_invIB = 0, n.m_mass = 0, n.m_qA = new N, n.m_qB = new N, n.m_lalcA = new P, n.m_lalcB = new P, n.m_frequencyHz = e(i.frequencyHz, 0), n.m_dampingRatio = e(i.dampingRatio, 0), n.m_localAnchorA.Copy(i.localAnchorA), n.m_localAnchorB.Copy(i.localAnchorB), n.m_length = i.length, n
                    }
                    return $e(i, t), i.prototype.GetAnchorA = function(t) {
                        return this.m_bodyA.GetWorldPoint(this.m_localAnchorA, t)
                    }, i.prototype.GetAnchorB = function(t) {
                        return this.m_bodyB.GetWorldPoint(this.m_localAnchorB, t)
                    }, i.prototype.GetReactionForce = function(t, e) {
                        return e.x = t * this.m_impulse * this.m_u.x, e.y = t * this.m_impulse * this.m_u.y, e
                    }, i.prototype.GetReactionTorque = function(t) {
                        return 0
                    }, i.prototype.GetLocalAnchorA = function() {
                        return this.m_localAnchorA
                    }, i.prototype.GetLocalAnchorB = function() {
                        return this.m_localAnchorB
                    }, i.prototype.SetLength = function(t) {
                        this.m_length = t
                    }, i.prototype.Length = function() {
                        return this.m_length
                    }, i.prototype.SetFrequency = function(t) {
                        this.m_frequencyHz = t
                    }, i.prototype.GetFrequency = function() {
                        return this.m_frequencyHz
                    }, i.prototype.SetDampingRatio = function(t) {
                        this.m_dampingRatio = t
                    }, i.prototype.GetDampingRatio = function() {
                        return this.m_dampingRatio
                    }, i.prototype.Dump = function(t) {
                        var e = this.m_bodyA.m_islandIndex,
                            i = this.m_bodyB.m_islandIndex;
                        t("  const jd: b2DistanceJointDef = new b2DistanceJointDef();\n"), t("  jd.bodyA = bodies[%d];\n", e), t("  jd.bodyB = bodies[%d];\n", i), t("  jd.collideConnected = %s;\n", this.m_collideConnected ? "true" : "false"), t("  jd.localAnchorA.Set(%.15f, %.15f);\n", this.m_localAnchorA.x, this.m_localAnchorA.y), t("  jd.localAnchorB.Set(%.15f, %.15f);\n", this.m_localAnchorB.x, this.m_localAnchorB.y), t("  jd.length = %.15f;\n", this.m_length), t("  jd.frequencyHz = %.15f;\n", this.m_frequencyHz), t("  jd.dampingRatio = %.15f;\n", this.m_dampingRatio), t("  joints[%d] = this.m_world.CreateJoint(jd);\n", this.m_index)
                    }, i.prototype.InitVelocityConstraints = function(t) {
                        this.m_indexA = this.m_bodyA.m_islandIndex, this.m_indexB = this.m_bodyB.m_islandIndex, this.m_localCenterA.Copy(this.m_bodyA.m_sweep.localCenter), this.m_localCenterB.Copy(this.m_bodyB.m_sweep.localCenter), this.m_invMassA = this.m_bodyA.m_invMass, this.m_invMassB = this.m_bodyB.m_invMass, this.m_invIA = this.m_bodyA.m_invI, this.m_invIB = this.m_bodyB.m_invI;
                        var e = t.positions[this.m_indexA].c,
                            n = t.positions[this.m_indexA].a,
                            r = t.velocities[this.m_indexA].v,
                            o = t.velocities[this.m_indexA].w,
                            a = t.positions[this.m_indexB].c,
                            h = t.positions[this.m_indexB].a,
                            c = t.velocities[this.m_indexB].v,
                            u = t.velocities[this.m_indexB].w,
                            _ = this.m_qA.SetAngle(n),
                            f = this.m_qB.SetAngle(h);
                        P.SubVV(this.m_localAnchorA, this.m_localCenterA, this.m_lalcA), N.MulRV(_, this.m_lalcA, this.m_rA), P.SubVV(this.m_localAnchorB, this.m_localCenterB, this.m_lalcB), N.MulRV(f, this.m_lalcB, this.m_rB), this.m_u.x = a.x + this.m_rB.x - e.x - this.m_rA.x, this.m_u.y = a.y + this.m_rB.y - e.y - this.m_rA.y;
                        var d = this.m_u.Length();
                        d > l ? this.m_u.SelfMul(1 / d) : this.m_u.SetZero();
                        var p = P.CrossVV(this.m_rA, this.m_u),
                            m = P.CrossVV(this.m_rB, this.m_u),
                            y = this.m_invMassA + this.m_invIA * p * p + this.m_invMassB + this.m_invIB * m * m;
                        if (this.m_mass = 0 !== y ? 1 / y : 0, this.m_frequencyHz > 0) {
                            var v = d - this.m_length,
                                g = 2 * s * this.m_frequencyHz,
                                x = 2 * this.m_mass * this.m_dampingRatio * g,
                                b = this.m_mass * g * g,
                                A = t.step.dt;
                            this.m_gamma = A * (x + A * b), this.m_gamma = 0 !== this.m_gamma ? 1 / this.m_gamma : 0, this.m_bias = v * A * b * this.m_gamma, y += this.m_gamma, this.m_mass = 0 !== y ? 1 / y : 0
                        } else this.m_gamma = 0, this.m_bias = 0;
                        if (t.step.warmStarting) {
                            this.m_impulse *= t.step.dtRatio;
                            var C = P.MulSV(this.m_impulse, this.m_u, i.InitVelocityConstraints_s_P);
                            r.SelfMulSub(this.m_invMassA, C), o -= this.m_invIA * P.CrossVV(this.m_rA, C), c.SelfMulAdd(this.m_invMassB, C), u += this.m_invIB * P.CrossVV(this.m_rB, C)
                        } else this.m_impulse = 0;
                        t.velocities[this.m_indexA].w = o, t.velocities[this.m_indexB].w = u
                    }, i.prototype.SolveVelocityConstraints = function(t) {
                        var e = t.velocities[this.m_indexA].v,
                            n = t.velocities[this.m_indexA].w,
                            r = t.velocities[this.m_indexB].v,
                            s = t.velocities[this.m_indexB].w,
                            o = P.AddVCrossSV(e, n, this.m_rA, i.SolveVelocityConstraints_s_vpA),
                            a = P.AddVCrossSV(r, s, this.m_rB, i.SolveVelocityConstraints_s_vpB),
                            l = P.DotVV(this.m_u, P.SubVV(a, o, P.s_t0)),
                            h = -this.m_mass * (l + this.m_bias + this.m_gamma * this.m_impulse);
                        this.m_impulse += h;
                        var c = P.MulSV(h, this.m_u, i.SolveVelocityConstraints_s_P);
                        e.SelfMulSub(this.m_invMassA, c), n -= this.m_invIA * P.CrossVV(this.m_rA, c), r.SelfMulAdd(this.m_invMassB, c), s += this.m_invIB * P.CrossVV(this.m_rB, c), t.velocities[this.m_indexA].w = n, t.velocities[this.m_indexB].w = s
                    }, i.prototype.SolvePositionConstraints = function(t) {
                        if (this.m_frequencyHz > 0) return !0;
                        var e = t.positions[this.m_indexA].c,
                            n = t.positions[this.m_indexA].a,
                            r = t.positions[this.m_indexB].c,
                            s = t.positions[this.m_indexB].a,
                            o = this.m_qA.SetAngle(n),
                            a = this.m_qB.SetAngle(s),
                            h = N.MulRV(o, this.m_lalcA, this.m_rA),
                            c = N.MulRV(a, this.m_lalcB, this.m_rB),
                            u = this.m_u;
                        u.x = r.x + c.x - e.x - h.x, u.y = r.y + c.y - e.y - h.y;
                        var _ = this.m_u.Normalize() - this.m_length;
                        _ = b(_, -.2, .2);
                        var f = -this.m_mass * _,
                            d = P.MulSV(f, u, i.SolvePositionConstraints_s_P);
                        return e.SelfMulSub(this.m_invMassA, d), n -= this.m_invIA * P.CrossVV(h, d), r.SelfMulAdd(this.m_invMassB, d), s += this.m_invIB * P.CrossVV(c, d), t.positions[this.m_indexA].a = n, t.positions[this.m_indexB].a = s, v(_) < l
                    }, i.InitVelocityConstraints_s_P = new P, i.SolveVelocityConstraints_s_vpA = new P, i.SolveVelocityConstraints_s_vpB = new P, i.SolveVelocityConstraints_s_P = new P, i.SolvePositionConstraints_s_P = new P, i
                })(fi),
                mi = (function(e) {
                    function i() {
                        var i = e.call(this, t.b2JointType.e_areaJoint) || this;
                        return i.bodies = [], i.frequencyHz = 0, i.dampingRatio = 0, i
                    }
                    return $e(i, e), i.prototype.AddBody = function(t) {
                        this.bodies.push(t), 1 === this.bodies.length ? this.bodyA = t : 2 === this.bodies.length && (this.bodyB = t)
                    }, i
                })(_i),
                yi = (function(t) {
                    function i(i) {
                        var n = t.call(this, i) || this;
                        n.m_frequencyHz = 0, n.m_dampingRatio = 0, n.m_impulse = 0, n.m_targetArea = 0, n.m_bodies = i.bodies, n.m_frequencyHz = e(i.frequencyHz, 0), n.m_dampingRatio = e(i.dampingRatio, 0), n.m_targetLengths = p(i.bodies.length), n.m_normals = P.MakeArray(i.bodies.length), n.m_joints = [], n.m_deltas = P.MakeArray(i.bodies.length), n.m_delta = new P;
                        var r = new di;
                        r.frequencyHz = n.m_frequencyHz, r.dampingRatio = n.m_dampingRatio, n.m_targetArea = 0;
                        for (var s = 0; s < n.m_bodies.length; ++s) {
                            var o = n.m_bodies[s],
                                a = n.m_bodies[(s + 1) % n.m_bodies.length],
                                l = o.GetWorldCenter(),
                                h = a.GetWorldCenter();
                            n.m_targetLengths[s] = P.DistanceVV(l, h), n.m_targetArea += P.CrossVV(l, h), r.Initialize(o, a, l, h), n.m_joints[s] = o.GetWorld().CreateJoint(r)
                        }
                        return n.m_targetArea *= .5, n
                    }
                    return $e(i, t), i.prototype.GetAnchorA = function(t) {
                        return t
                    }, i.prototype.GetAnchorB = function(t) {
                        return t
                    }, i.prototype.GetReactionForce = function(t, e) {
                        return e
                    }, i.prototype.GetReactionTorque = function(t) {
                        return 0
                    }, i.prototype.SetFrequency = function(t) {
                        this.m_frequencyHz = t;
                        for (var e = 0; e < this.m_joints.length; ++e) this.m_joints[e].SetFrequency(t)
                    }, i.prototype.GetFrequency = function() {
                        return this.m_frequencyHz
                    }, i.prototype.SetDampingRatio = function(t) {
                        this.m_dampingRatio = t;
                        for (var e = 0; e < this.m_joints.length; ++e) this.m_joints[e].SetDampingRatio(t)
                    }, i.prototype.GetDampingRatio = function() {
                        return this.m_dampingRatio
                    }, i.prototype.Dump = function(t) {
                        t("Area joint dumping is not supported.\n")
                    }, i.prototype.InitVelocityConstraints = function(t) {
                        for (var e = 0; e < this.m_bodies.length; ++e) {
                            var i = this.m_bodies[(e + this.m_bodies.length - 1) % this.m_bodies.length],
                                n = this.m_bodies[(e + 1) % this.m_bodies.length],
                                r = t.positions[i.m_islandIndex].c,
                                s = t.positions[n.m_islandIndex].c,
                                o = this.m_deltas[e];
                            P.SubVV(s, r, o)
                        }
                        if (t.step.warmStarting) {
                            this.m_impulse *= t.step.dtRatio;
                            for (e = 0; e < this.m_bodies.length; ++e) {
                                var a = this.m_bodies[e],
                                    l = t.velocities[a.m_islandIndex].v;
                                o = this.m_deltas[e];
                                l.x += a.m_invMass * o.y * .5 * this.m_impulse, l.y += a.m_invMass * -o.x * .5 * this.m_impulse
                            }
                        } else this.m_impulse = 0
                    }, i.prototype.SolveVelocityConstraints = function(t) {
                        for (var e = 0, i = 0, n = 0; n < this.m_bodies.length; ++n) {
                            var r = this.m_bodies[n],
                                s = t.velocities[r.m_islandIndex].v;
                            e += (a = this.m_deltas[n]).LengthSquared() / r.GetMass(), i += P.CrossVV(s, a)
                        }
                        var o = -2 * i / e;
                        this.m_impulse += o;
                        for (n = 0; n < this.m_bodies.length; ++n) {
                            r = this.m_bodies[n], s = t.velocities[r.m_islandIndex].v;
                            var a = this.m_deltas[n];
                            s.x += r.m_invMass * a.y * .5 * o, s.y += r.m_invMass * -a.x * .5 * o
                        }
                    }, i.prototype.SolvePositionConstraints = function(t) {
                        for (var e = 0, i = 0, r = 0; r < this.m_bodies.length; ++r) {
                            var s = this.m_bodies[r],
                                o = this.m_bodies[(r + 1) % this.m_bodies.length],
                                a = t.positions[s.m_islandIndex].c,
                                h = t.positions[o.m_islandIndex].c,
                                c = (f = P.SubVV(h, a, this.m_delta)).Length();
                            c < n && (c = 1), this.m_normals[r].x = f.y / c, this.m_normals[r].y = -f.x / c, e += c, i += P.CrossVV(a, h)
                        }
                        i *= .5;
                        var u = .5 * (this.m_targetArea - i) / e,
                            _ = !0;
                        for (r = 0; r < this.m_bodies.length; ++r) {
                            s = this.m_bodies[r], a = t.positions[s.m_islandIndex].c;
                            var f, d = (r + 1) % this.m_bodies.length;
                            (f = P.AddVV(this.m_normals[r], this.m_normals[d], this.m_delta)).SelfMul(u);
                            var p = f.LengthSquared();
                            p > C(.2) && f.SelfMul(.2 / S(p)), p > C(l) && (_ = !1), a.x += f.x, a.y += f.y
                        }
                        return _
                    }, i
                })(fi),
                vi = (function(e) {
                    function i() {
                        var i = e.call(this, t.b2JointType.e_frictionJoint) || this;
                        return i.localAnchorA = new P, i.localAnchorB = new P, i.maxForce = 0, i.maxTorque = 0, i
                    }
                    return $e(i, e), i.prototype.Initialize = function(t, e, i) {
                        this.bodyA = t, this.bodyB = e, this.bodyA.GetLocalPoint(i, this.localAnchorA), this.bodyB.GetLocalPoint(i, this.localAnchorB)
                    }, i
                })(_i),
                gi = (function(t) {
                    function i(i) {
                        var n = t.call(this, i) || this;
                        return n.m_localAnchorA = new P, n.m_localAnchorB = new P, n.m_linearImpulse = new P, n.m_angularImpulse = 0, n.m_maxForce = 0, n.m_maxTorque = 0, n.m_indexA = 0, n.m_indexB = 0, n.m_rA = new P, n.m_rB = new P, n.m_localCenterA = new P, n.m_localCenterB = new P, n.m_invMassA = 0, n.m_invMassB = 0, n.m_invIA = 0, n.m_invIB = 0, n.m_linearMass = new L, n.m_angularMass = 0, n.m_qA = new N, n.m_qB = new N, n.m_lalcA = new P, n.m_lalcB = new P, n.m_K = new L, n.m_localAnchorA.Copy(i.localAnchorA), n.m_localAnchorB.Copy(i.localAnchorB), n.m_linearImpulse.SetZero(), n.m_maxForce = e(i.maxForce, 0), n.m_maxTorque = e(i.maxTorque, 0), n.m_linearMass.SetZero(), n
                    }
                    return $e(i, t), i.prototype.InitVelocityConstraints = function(t) {
                        this.m_indexA = this.m_bodyA.m_islandIndex, this.m_indexB = this.m_bodyB.m_islandIndex, this.m_localCenterA.Copy(this.m_bodyA.m_sweep.localCenter), this.m_localCenterB.Copy(this.m_bodyB.m_sweep.localCenter), this.m_invMassA = this.m_bodyA.m_invMass, this.m_invMassB = this.m_bodyB.m_invMass, this.m_invIA = this.m_bodyA.m_invI, this.m_invIB = this.m_bodyB.m_invI;
                        var e = t.positions[this.m_indexA].a,
                            i = t.velocities[this.m_indexA].v,
                            n = t.velocities[this.m_indexA].w,
                            r = t.positions[this.m_indexB].a,
                            s = t.velocities[this.m_indexB].v,
                            o = t.velocities[this.m_indexB].w,
                            a = this.m_qA.SetAngle(e),
                            l = this.m_qB.SetAngle(r);
                        P.SubVV(this.m_localAnchorA, this.m_localCenterA, this.m_lalcA);
                        var h = N.MulRV(a, this.m_lalcA, this.m_rA);
                        P.SubVV(this.m_localAnchorB, this.m_localCenterB, this.m_lalcB);
                        var c = N.MulRV(l, this.m_lalcB, this.m_rB),
                            u = this.m_invMassA,
                            _ = this.m_invMassB,
                            f = this.m_invIA,
                            d = this.m_invIB,
                            p = this.m_K;
                        if (p.ex.x = u + _ + f * h.y * h.y + d * c.y * c.y, p.ex.y = -f * h.x * h.y - d * c.x * c.y, p.ey.x = p.ex.y, p.ey.y = u + _ + f * h.x * h.x + d * c.x * c.x, p.GetInverse(this.m_linearMass), this.m_angularMass = f + d, this.m_angularMass > 0 && (this.m_angularMass = 1 / this.m_angularMass), t.step.warmStarting) {
                            this.m_linearImpulse.SelfMul(t.step.dtRatio), this.m_angularImpulse *= t.step.dtRatio;
                            var m = this.m_linearImpulse;
                            i.SelfMulSub(u, m), n -= f * (P.CrossVV(this.m_rA, m) + this.m_angularImpulse), s.SelfMulAdd(_, m), o += d * (P.CrossVV(this.m_rB, m) + this.m_angularImpulse)
                        } else this.m_linearImpulse.SetZero(), this.m_angularImpulse = 0;
                        t.velocities[this.m_indexA].w = n, t.velocities[this.m_indexB].w = o
                    }, i.prototype.SolveVelocityConstraints = function(t) {
                        var e = t.velocities[this.m_indexA].v,
                            n = t.velocities[this.m_indexA].w,
                            r = t.velocities[this.m_indexB].v,
                            s = t.velocities[this.m_indexB].w,
                            o = this.m_invMassA,
                            a = this.m_invMassB,
                            l = this.m_invIA,
                            h = this.m_invIB,
                            c = t.step.dt,
                            u = s - n,
                            _ = -this.m_angularMass * u,
                            f = this.m_angularImpulse,
                            d = c * this.m_maxTorque;
                        this.m_angularImpulse = b(this.m_angularImpulse + _, -d, d), n -= l * (_ = this.m_angularImpulse - f), s += h * _;
                        var p = P.SubVV(P.AddVCrossSV(r, s, this.m_rB, P.s_t0), P.AddVCrossSV(e, n, this.m_rA, P.s_t1), i.SolveVelocityConstraints_s_Cdot_v2),
                            m = L.MulMV(this.m_linearMass, p, i.SolveVelocityConstraints_s_impulseV).SelfNeg(),
                            y = i.SolveVelocityConstraints_s_oldImpulseV.Copy(this.m_linearImpulse);
                        this.m_linearImpulse.SelfAdd(m);
                        d = c * this.m_maxForce;
                        this.m_linearImpulse.LengthSquared() > d * d && (this.m_linearImpulse.Normalize(), this.m_linearImpulse.SelfMul(d)), P.SubVV(this.m_linearImpulse, y, m), e.SelfMulSub(o, m), n -= l * P.CrossVV(this.m_rA, m), r.SelfMulAdd(a, m), s += h * P.CrossVV(this.m_rB, m), t.velocities[this.m_indexA].w = n, t.velocities[this.m_indexB].w = s
                    }, i.prototype.SolvePositionConstraints = function(t) {
                        return !0
                    }, i.prototype.GetAnchorA = function(t) {
                        return this.m_bodyA.GetWorldPoint(this.m_localAnchorA, t)
                    }, i.prototype.GetAnchorB = function(t) {
                        return this.m_bodyB.GetWorldPoint(this.m_localAnchorB, t)
                    }, i.prototype.GetReactionForce = function(t, e) {
                        return e.x = t * this.m_linearImpulse.x, e.y = t * this.m_linearImpulse.y, e
                    }, i.prototype.GetReactionTorque = function(t) {
                        return t * this.m_angularImpulse
                    }, i.prototype.GetLocalAnchorA = function() {
                        return this.m_localAnchorA
                    }, i.prototype.GetLocalAnchorB = function() {
                        return this.m_localAnchorB
                    }, i.prototype.SetMaxForce = function(t) {
                        this.m_maxForce = t
                    }, i.prototype.GetMaxForce = function() {
                        return this.m_maxForce
                    }, i.prototype.SetMaxTorque = function(t) {
                        this.m_maxTorque = t
                    }, i.prototype.GetMaxTorque = function() {
                        return this.m_maxTorque
                    }, i.prototype.Dump = function(t) {
                        var e = this.m_bodyA.m_islandIndex,
                            i = this.m_bodyB.m_islandIndex;
                        t("  const jd: b2FrictionJointDef = new b2FrictionJointDef();\n"), t("  jd.bodyA = bodies[%d];\n", e), t("  jd.bodyB = bodies[%d];\n", i), t("  jd.collideConnected = %s;\n", this.m_collideConnected ? "true" : "false"), t("  jd.localAnchorA.Set(%.15f, %.15f);\n", this.m_localAnchorA.x, this.m_localAnchorA.y), t("  jd.localAnchorB.Set(%.15f, %.15f);\n", this.m_localAnchorB.x, this.m_localAnchorB.y), t("  jd.maxForce = %.15f;\n", this.m_maxForce), t("  jd.maxTorque = %.15f;\n", this.m_maxTorque), t("  joints[%d] = this.m_world.CreateJoint(jd);\n", this.m_index)
                    }, i.SolveVelocityConstraints_s_Cdot_v2 = new P, i.SolveVelocityConstraints_s_impulseV = new P, i.SolveVelocityConstraints_s_oldImpulseV = new P, i
                })(fi),
                xi = (function(e) {
                    function i() {
                        var i = e.call(this, t.b2JointType.e_gearJoint) || this;
                        return i.ratio = 1, i
                    }
                    return $e(i, e), i
                })(_i),
                bi = (function(i) {
                    function n(n) {
                        var r, s, o = i.call(this, n) || this;
                        o.m_typeA = t.b2JointType.e_unknownJoint, o.m_typeB = t.b2JointType.e_unknownJoint, o.m_localAnchorA = new P, o.m_localAnchorB = new P, o.m_localAnchorC = new P, o.m_localAnchorD = new P, o.m_localAxisC = new P, o.m_localAxisD = new P, o.m_referenceAngleA = 0, o.m_referenceAngleB = 0, o.m_constant = 0, o.m_ratio = 0, o.m_impulse = 0, o.m_indexA = 0, o.m_indexB = 0, o.m_indexC = 0, o.m_indexD = 0, o.m_lcA = new P, o.m_lcB = new P, o.m_lcC = new P, o.m_lcD = new P, o.m_mA = 0, o.m_mB = 0, o.m_mC = 0, o.m_mD = 0, o.m_iA = 0, o.m_iB = 0, o.m_iC = 0, o.m_iD = 0, o.m_JvAC = new P, o.m_JvBD = new P, o.m_JwA = 0, o.m_JwB = 0, o.m_JwC = 0, o.m_JwD = 0, o.m_mass = 0, o.m_qA = new N, o.m_qB = new N, o.m_qC = new N, o.m_qD = new N, o.m_lalcA = new P, o.m_lalcB = new P, o.m_lalcC = new P, o.m_lalcD = new P, o.m_joint1 = n.joint1, o.m_joint2 = n.joint2, o.m_typeA = o.m_joint1.GetType(), o.m_typeB = o.m_joint2.GetType(), o.m_bodyC = o.m_joint1.GetBodyA(), o.m_bodyA = o.m_joint1.GetBodyB();
                        var a = o.m_bodyA.m_xf,
                            l = o.m_bodyA.m_sweep.a,
                            h = o.m_bodyC.m_xf,
                            c = o.m_bodyC.m_sweep.a;
                        if (o.m_typeA === t.b2JointType.e_revoluteJoint) {
                            var u = n.joint1;
                            o.m_localAnchorC.Copy(u.m_localAnchorA), o.m_localAnchorA.Copy(u.m_localAnchorB), o.m_referenceAngleA = u.m_referenceAngle, o.m_localAxisC.SetZero(), r = l - c - o.m_referenceAngleA
                        } else {
                            var _ = n.joint1;
                            o.m_localAnchorC.Copy(_.m_localAnchorA), o.m_localAnchorA.Copy(_.m_localAnchorB), o.m_referenceAngleA = _.m_referenceAngle, o.m_localAxisC.Copy(_.m_localXAxisA);
                            var f = o.m_localAnchorC,
                                d = N.MulTRV(h.q, P.AddVV(N.MulRV(a.q, o.m_localAnchorA, P.s_t0), P.SubVV(a.p, h.p, P.s_t1), P.s_t0), P.s_t0);
                            r = P.DotVV(P.SubVV(d, f, P.s_t0), o.m_localAxisC)
                        }
                        o.m_bodyD = o.m_joint2.GetBodyA(), o.m_bodyB = o.m_joint2.GetBodyB();
                        var p = o.m_bodyB.m_xf,
                            m = o.m_bodyB.m_sweep.a,
                            y = o.m_bodyD.m_xf,
                            v = o.m_bodyD.m_sweep.a;
                        if (o.m_typeB === t.b2JointType.e_revoluteJoint) {
                            u = n.joint2;
                            o.m_localAnchorD.Copy(u.m_localAnchorA), o.m_localAnchorB.Copy(u.m_localAnchorB), o.m_referenceAngleB = u.m_referenceAngle, o.m_localAxisD.SetZero(), s = m - v - o.m_referenceAngleB
                        } else {
                            _ = n.joint2;
                            o.m_localAnchorD.Copy(_.m_localAnchorA), o.m_localAnchorB.Copy(_.m_localAnchorB), o.m_referenceAngleB = _.m_referenceAngle, o.m_localAxisD.Copy(_.m_localXAxisA);
                            var g = o.m_localAnchorD,
                                x = N.MulTRV(y.q, P.AddVV(N.MulRV(p.q, o.m_localAnchorB, P.s_t0), P.SubVV(p.p, y.p, P.s_t1), P.s_t0), P.s_t0);
                            s = P.DotVV(P.SubVV(x, g, P.s_t0), o.m_localAxisD)
                        }
                        return o.m_ratio = e(n.ratio, 1), o.m_constant = r + o.m_ratio * s, o.m_impulse = 0, o
                    }
                    return $e(n, i), n.prototype.InitVelocityConstraints = function(e) {
                        this.m_indexA = this.m_bodyA.m_islandIndex, this.m_indexB = this.m_bodyB.m_islandIndex, this.m_indexC = this.m_bodyC.m_islandIndex, this.m_indexD = this.m_bodyD.m_islandIndex, this.m_lcA.Copy(this.m_bodyA.m_sweep.localCenter), this.m_lcB.Copy(this.m_bodyB.m_sweep.localCenter), this.m_lcC.Copy(this.m_bodyC.m_sweep.localCenter), this.m_lcD.Copy(this.m_bodyD.m_sweep.localCenter), this.m_mA = this.m_bodyA.m_invMass, this.m_mB = this.m_bodyB.m_invMass, this.m_mC = this.m_bodyC.m_invMass, this.m_mD = this.m_bodyD.m_invMass, this.m_iA = this.m_bodyA.m_invI, this.m_iB = this.m_bodyB.m_invI, this.m_iC = this.m_bodyC.m_invI, this.m_iD = this.m_bodyD.m_invI;
                        var i = e.positions[this.m_indexA].a,
                            r = e.velocities[this.m_indexA].v,
                            s = e.velocities[this.m_indexA].w,
                            o = e.positions[this.m_indexB].a,
                            a = e.velocities[this.m_indexB].v,
                            l = e.velocities[this.m_indexB].w,
                            h = e.positions[this.m_indexC].a,
                            c = e.velocities[this.m_indexC].v,
                            u = e.velocities[this.m_indexC].w,
                            _ = e.positions[this.m_indexD].a,
                            f = e.velocities[this.m_indexD].v,
                            d = e.velocities[this.m_indexD].w,
                            p = this.m_qA.SetAngle(i),
                            m = this.m_qB.SetAngle(o),
                            y = this.m_qC.SetAngle(h),
                            v = this.m_qD.SetAngle(_);
                        if (this.m_mass = 0, this.m_typeA === t.b2JointType.e_revoluteJoint) this.m_JvAC.SetZero(), this.m_JwA = 1, this.m_JwC = 1, this.m_mass += this.m_iA + this.m_iC;
                        else {
                            var g = N.MulRV(y, this.m_localAxisC, n.InitVelocityConstraints_s_u);
                            P.SubVV(this.m_localAnchorC, this.m_lcC, this.m_lalcC);
                            var x = N.MulRV(y, this.m_lalcC, n.InitVelocityConstraints_s_rC);
                            P.SubVV(this.m_localAnchorA, this.m_lcA, this.m_lalcA);
                            var b = N.MulRV(p, this.m_lalcA, n.InitVelocityConstraints_s_rA);
                            this.m_JvAC.Copy(g), this.m_JwC = P.CrossVV(x, g), this.m_JwA = P.CrossVV(b, g), this.m_mass += this.m_mC + this.m_mA + this.m_iC * this.m_JwC * this.m_JwC + this.m_iA * this.m_JwA * this.m_JwA
                        }
                        if (this.m_typeB === t.b2JointType.e_revoluteJoint) this.m_JvBD.SetZero(), this.m_JwB = this.m_ratio, this.m_JwD = this.m_ratio, this.m_mass += this.m_ratio * this.m_ratio * (this.m_iB + this.m_iD);
                        else {
                            g = N.MulRV(v, this.m_localAxisD, n.InitVelocityConstraints_s_u);
                            P.SubVV(this.m_localAnchorD, this.m_lcD, this.m_lalcD);
                            var A = N.MulRV(v, this.m_lalcD, n.InitVelocityConstraints_s_rD);
                            P.SubVV(this.m_localAnchorB, this.m_lcB, this.m_lalcB);
                            var C = N.MulRV(m, this.m_lalcB, n.InitVelocityConstraints_s_rB);
                            P.MulSV(this.m_ratio, g, this.m_JvBD), this.m_JwD = this.m_ratio * P.CrossVV(A, g), this.m_JwB = this.m_ratio * P.CrossVV(C, g), this.m_mass += this.m_ratio * this.m_ratio * (this.m_mD + this.m_mB) + this.m_iD * this.m_JwD * this.m_JwD + this.m_iB * this.m_JwB * this.m_JwB
                        }
                        this.m_mass = this.m_mass > 0 ? 1 / this.m_mass : 0, e.step.warmStarting ? (r.SelfMulAdd(this.m_mA * this.m_impulse, this.m_JvAC), s += this.m_iA * this.m_impulse * this.m_JwA, a.SelfMulAdd(this.m_mB * this.m_impulse, this.m_JvBD), l += this.m_iB * this.m_impulse * this.m_JwB, c.SelfMulSub(this.m_mC * this.m_impulse, this.m_JvAC), u -= this.m_iC * this.m_impulse * this.m_JwC, f.SelfMulSub(this.m_mD * this.m_impulse, this.m_JvBD), d -= this.m_iD * this.m_impulse * this.m_JwD) : this.m_impulse = 0, e.velocities[this.m_indexA].w = s, e.velocities[this.m_indexB].w = l, e.velocities[this.m_indexC].w = u, e.velocities[this.m_indexD].w = d
                    }, n.prototype.SolveVelocityConstraints = function(t) {
                        var e = t.velocities[this.m_indexA].v,
                            i = t.velocities[this.m_indexA].w,
                            n = t.velocities[this.m_indexB].v,
                            r = t.velocities[this.m_indexB].w,
                            s = t.velocities[this.m_indexC].v,
                            o = t.velocities[this.m_indexC].w,
                            a = t.velocities[this.m_indexD].v,
                            l = t.velocities[this.m_indexD].w,
                            h = P.DotVV(this.m_JvAC, P.SubVV(e, s, P.s_t0)) + P.DotVV(this.m_JvBD, P.SubVV(n, a, P.s_t0));
                        h += this.m_JwA * i - this.m_JwC * o + (this.m_JwB * r - this.m_JwD * l);
                        var c = -this.m_mass * h;
                        this.m_impulse += c, e.SelfMulAdd(this.m_mA * c, this.m_JvAC), i += this.m_iA * c * this.m_JwA, n.SelfMulAdd(this.m_mB * c, this.m_JvBD), r += this.m_iB * c * this.m_JwB, s.SelfMulSub(this.m_mC * c, this.m_JvAC), o -= this.m_iC * c * this.m_JwC, a.SelfMulSub(this.m_mD * c, this.m_JvBD), l -= this.m_iD * c * this.m_JwD, t.velocities[this.m_indexA].w = i, t.velocities[this.m_indexB].w = r, t.velocities[this.m_indexC].w = o, t.velocities[this.m_indexD].w = l
                    }, n.prototype.SolvePositionConstraints = function(e) {
                        var i, r, s, o, a, h, c = e.positions[this.m_indexA].c,
                            u = e.positions[this.m_indexA].a,
                            _ = e.positions[this.m_indexB].c,
                            f = e.positions[this.m_indexB].a,
                            d = e.positions[this.m_indexC].c,
                            p = e.positions[this.m_indexC].a,
                            m = e.positions[this.m_indexD].c,
                            y = e.positions[this.m_indexD].a,
                            v = this.m_qA.SetAngle(u),
                            g = this.m_qB.SetAngle(f),
                            x = this.m_qC.SetAngle(p),
                            b = this.m_qD.SetAngle(y),
                            A = this.m_JvAC,
                            C = this.m_JvBD,
                            T = 0;
                        if (this.m_typeA === t.b2JointType.e_revoluteJoint) A.SetZero(), s = 1, a = 1, T += this.m_iA + this.m_iC, i = u - p - this.m_referenceAngleA;
                        else {
                            var S = N.MulRV(x, this.m_localAxisC, n.SolvePositionConstraints_s_u),
                                w = N.MulRV(x, this.m_lalcC, n.SolvePositionConstraints_s_rC),
                                E = N.MulRV(v, this.m_lalcA, n.SolvePositionConstraints_s_rA);
                            A.Copy(S), a = P.CrossVV(w, S), s = P.CrossVV(E, S), T += this.m_mC + this.m_mA + this.m_iC * a * a + this.m_iA * s * s;
                            var M = this.m_lalcC,
                                D = N.MulTRV(x, P.AddVV(E, P.SubVV(c, d, P.s_t0), P.s_t0), P.s_t0);
                            i = P.DotVV(P.SubVV(D, M, P.s_t0), this.m_localAxisC)
                        }
                        if (this.m_typeB === t.b2JointType.e_revoluteJoint) C.SetZero(), o = this.m_ratio, h = this.m_ratio, T += this.m_ratio * this.m_ratio * (this.m_iB + this.m_iD), r = f - y - this.m_referenceAngleB;
                        else {
                            S = N.MulRV(b, this.m_localAxisD, n.SolvePositionConstraints_s_u);
                            var B = N.MulRV(b, this.m_lalcD, n.SolvePositionConstraints_s_rD),
                                I = N.MulRV(g, this.m_lalcB, n.SolvePositionConstraints_s_rB);
                            P.MulSV(this.m_ratio, S, C), h = this.m_ratio * P.CrossVV(B, S), o = this.m_ratio * P.CrossVV(I, S), T += this.m_ratio * this.m_ratio * (this.m_mD + this.m_mB) + this.m_iD * h * h + this.m_iB * o * o;
                            var R = this.m_lalcD,
                                O = N.MulTRV(b, P.AddVV(I, P.SubVV(_, m, P.s_t0), P.s_t0), P.s_t0);
                            r = P.DotVV(P.SubVV(O, R, P.s_t0), this.m_localAxisD)
                        }
                        var L = i + this.m_ratio * r - this.m_constant,
                            F = 0;
                        return T > 0 && (F = -L / T), c.SelfMulAdd(this.m_mA * F, A), u += this.m_iA * F * s, _.SelfMulAdd(this.m_mB * F, C), f += this.m_iB * F * o, d.SelfMulSub(this.m_mC * F, A), p -= this.m_iC * F * a, m.SelfMulSub(this.m_mD * F, C), y -= this.m_iD * F * h, e.positions[this.m_indexA].a = u, e.positions[this.m_indexB].a = f, e.positions[this.m_indexC].a = p, e.positions[this.m_indexD].a = y, 0 < l
                    }, n.prototype.GetAnchorA = function(t) {
                        return this.m_bodyA.GetWorldPoint(this.m_localAnchorA, t)
                    }, n.prototype.GetAnchorB = function(t) {
                        return this.m_bodyB.GetWorldPoint(this.m_localAnchorB, t)
                    }, n.prototype.GetReactionForce = function(t, e) {
                        return P.MulSV(t * this.m_impulse, this.m_JvAC, e)
                    }, n.prototype.GetReactionTorque = function(t) {
                        return t * this.m_impulse * this.m_JwA
                    }, n.prototype.GetJoint1 = function() {
                        return this.m_joint1
                    }, n.prototype.GetJoint2 = function() {
                        return this.m_joint2
                    }, n.prototype.GetRatio = function() {
                        return this.m_ratio
                    }, n.prototype.SetRatio = function(t) {
                        this.m_ratio = t
                    }, n.prototype.Dump = function(t) {
                        var e = this.m_bodyA.m_islandIndex,
                            i = this.m_bodyB.m_islandIndex,
                            n = this.m_joint1.m_index,
                            r = this.m_joint2.m_index;
                        t("  const jd: b2GearJointDef = new b2GearJointDef();\n"), t("  jd.bodyA = bodies[%d];\n", e), t("  jd.bodyB = bodies[%d];\n", i), t("  jd.collideConnected = %s;\n", this.m_collideConnected ? "true" : "false"), t("  jd.joint1 = joints[%d];\n", n), t("  jd.joint2 = joints[%d];\n", r), t("  jd.ratio = %.15f;\n", this.m_ratio), t("  joints[%d] = this.m_world.CreateJoint(jd);\n", this.m_index)
                    }, n.InitVelocityConstraints_s_u = new P, n.InitVelocityConstraints_s_rA = new P, n.InitVelocityConstraints_s_rB = new P, n.InitVelocityConstraints_s_rC = new P, n.InitVelocityConstraints_s_rD = new P, n.SolvePositionConstraints_s_u = new P, n.SolvePositionConstraints_s_rA = new P, n.SolvePositionConstraints_s_rB = new P, n.SolvePositionConstraints_s_rC = new P, n.SolvePositionConstraints_s_rD = new P, n
                })(fi),
                Ai = (function(e) {
                    function i() {
                        var i = e.call(this, t.b2JointType.e_motorJoint) || this;
                        return i.linearOffset = new P(0, 0), i.angularOffset = 0, i.maxForce = 1, i.maxTorque = 1, i.correctionFactor = .3, i
                    }
                    return $e(i, e), i.prototype.Initialize = function(t, e) {
                        this.bodyA = t, this.bodyB = e, this.bodyA.GetLocalPoint(this.bodyB.GetPosition(), this.linearOffset);
                        var i = this.bodyA.GetAngle(),
                            n = this.bodyB.GetAngle();
                        this.angularOffset = n - i
                    }, i
                })(_i),
                Ci = (function(t) {
                    function i(i) {
                        var n = t.call(this, i) || this;
                        return n.m_linearOffset = new P, n.m_angularOffset = 0, n.m_linearImpulse = new P, n.m_angularImpulse = 0, n.m_maxForce = 0, n.m_maxTorque = 0, n.m_correctionFactor = .3, n.m_indexA = 0, n.m_indexB = 0, n.m_rA = new P, n.m_rB = new P, n.m_localCenterA = new P, n.m_localCenterB = new P, n.m_linearError = new P, n.m_angularError = 0, n.m_invMassA = 0, n.m_invMassB = 0, n.m_invIA = 0, n.m_invIB = 0, n.m_linearMass = new L, n.m_angularMass = 0, n.m_qA = new N, n.m_qB = new N, n.m_K = new L, n.m_linearOffset.Copy(e(i.linearOffset, P.ZERO)), n.m_linearImpulse.SetZero(), n.m_maxForce = e(i.maxForce, 0), n.m_maxTorque = e(i.maxTorque, 0), n.m_correctionFactor = e(i.correctionFactor, .3), n
                    }
                    return $e(i, t), i.prototype.GetAnchorA = function(t) {
                        var e = this.m_bodyA.GetPosition();
                        return t.x = e.x, t.y = e.y, t
                    }, i.prototype.GetAnchorB = function(t) {
                        var e = this.m_bodyB.GetPosition();
                        return t.x = e.x, t.y = e.y, t
                    }, i.prototype.GetReactionForce = function(t, e) {
                        return P.MulSV(t, this.m_linearImpulse, e)
                    }, i.prototype.GetReactionTorque = function(t) {
                        return t * this.m_angularImpulse
                    }, i.prototype.SetLinearOffset = function(t) {
                        P.IsEqualToV(t, this.m_linearOffset) || (this.m_bodyA.SetAwake(!0), this.m_bodyB.SetAwake(!0), this.m_linearOffset.Copy(t))
                    }, i.prototype.GetLinearOffset = function() {
                        return this.m_linearOffset
                    }, i.prototype.SetAngularOffset = function(t) {
                        t !== this.m_angularOffset && (this.m_bodyA.SetAwake(!0), this.m_bodyB.SetAwake(!0), this.m_angularOffset = t)
                    }, i.prototype.GetAngularOffset = function() {
                        return this.m_angularOffset
                    }, i.prototype.SetMaxForce = function(t) {
                        this.m_maxForce = t
                    }, i.prototype.GetMaxForce = function() {
                        return this.m_maxForce
                    }, i.prototype.SetMaxTorque = function(t) {
                        this.m_maxTorque = t
                    }, i.prototype.GetMaxTorque = function() {
                        return this.m_maxTorque
                    }, i.prototype.InitVelocityConstraints = function(t) {
                        this.m_indexA = this.m_bodyA.m_islandIndex, this.m_indexB = this.m_bodyB.m_islandIndex, this.m_localCenterA.Copy(this.m_bodyA.m_sweep.localCenter), this.m_localCenterB.Copy(this.m_bodyB.m_sweep.localCenter), this.m_invMassA = this.m_bodyA.m_invMass, this.m_invMassB = this.m_bodyB.m_invMass, this.m_invIA = this.m_bodyA.m_invI, this.m_invIB = this.m_bodyB.m_invI;
                        var e = t.positions[this.m_indexA].c,
                            i = t.positions[this.m_indexA].a,
                            n = t.velocities[this.m_indexA].v,
                            r = t.velocities[this.m_indexA].w,
                            s = t.positions[this.m_indexB].c,
                            o = t.positions[this.m_indexB].a,
                            a = t.velocities[this.m_indexB].v,
                            l = t.velocities[this.m_indexB].w,
                            h = this.m_qA.SetAngle(i),
                            c = this.m_qB.SetAngle(o),
                            u = N.MulRV(h, P.SubVV(this.m_linearOffset, this.m_localCenterA, P.s_t0), this.m_rA),
                            _ = N.MulRV(c, P.NegV(this.m_localCenterB, P.s_t0), this.m_rB),
                            f = this.m_invMassA,
                            d = this.m_invMassB,
                            p = this.m_invIA,
                            m = this.m_invIB,
                            y = this.m_K;
                        if (y.ex.x = f + d + p * u.y * u.y + m * _.y * _.y, y.ex.y = -p * u.x * u.y - m * _.x * _.y, y.ey.x = y.ex.y, y.ey.y = f + d + p * u.x * u.x + m * _.x * _.x, y.GetInverse(this.m_linearMass), this.m_angularMass = p + m, this.m_angularMass > 0 && (this.m_angularMass = 1 / this.m_angularMass), P.SubVV(P.AddVV(s, _, P.s_t0), P.AddVV(e, u, P.s_t1), this.m_linearError), this.m_angularError = o - i - this.m_angularOffset, t.step.warmStarting) {
                            this.m_linearImpulse.SelfMul(t.step.dtRatio), this.m_angularImpulse *= t.step.dtRatio;
                            var v = this.m_linearImpulse;
                            n.SelfMulSub(f, v), r -= p * (P.CrossVV(u, v) + this.m_angularImpulse), a.SelfMulAdd(d, v), l += m * (P.CrossVV(_, v) + this.m_angularImpulse)
                        } else this.m_linearImpulse.SetZero(), this.m_angularImpulse = 0;
                        t.velocities[this.m_indexA].w = r, t.velocities[this.m_indexB].w = l
                    }, i.prototype.SolveVelocityConstraints = function(t) {
                        var e = t.velocities[this.m_indexA].v,
                            n = t.velocities[this.m_indexA].w,
                            r = t.velocities[this.m_indexB].v,
                            s = t.velocities[this.m_indexB].w,
                            o = this.m_invMassA,
                            a = this.m_invMassB,
                            l = this.m_invIA,
                            h = this.m_invIB,
                            c = t.step.dt,
                            u = t.step.inv_dt,
                            _ = s - n + u * this.m_correctionFactor * this.m_angularError,
                            f = -this.m_angularMass * _,
                            d = this.m_angularImpulse,
                            p = c * this.m_maxTorque;
                        this.m_angularImpulse = b(this.m_angularImpulse + f, -p, p), n -= l * (f = this.m_angularImpulse - d), s += h * f;
                        var m = this.m_rA,
                            y = this.m_rB,
                            v = P.AddVV(P.SubVV(P.AddVV(r, P.CrossSV(s, y, P.s_t0), P.s_t0), P.AddVV(e, P.CrossSV(n, m, P.s_t1), P.s_t1), P.s_t2), P.MulSV(u * this.m_correctionFactor, this.m_linearError, P.s_t3), i.SolveVelocityConstraints_s_Cdot_v2),
                            g = L.MulMV(this.m_linearMass, v, i.SolveVelocityConstraints_s_impulse_v2).SelfNeg(),
                            x = i.SolveVelocityConstraints_s_oldImpulse_v2.Copy(this.m_linearImpulse);
                        this.m_linearImpulse.SelfAdd(g);
                        p = c * this.m_maxForce;
                        this.m_linearImpulse.LengthSquared() > p * p && (this.m_linearImpulse.Normalize(), this.m_linearImpulse.SelfMul(p)), P.SubVV(this.m_linearImpulse, x, g), e.SelfMulSub(o, g), n -= l * P.CrossVV(m, g), r.SelfMulAdd(a, g), s += h * P.CrossVV(y, g), t.velocities[this.m_indexA].w = n, t.velocities[this.m_indexB].w = s
                    }, i.prototype.SolvePositionConstraints = function(t) {
                        return !0
                    }, i.prototype.Dump = function(t) {
                        var e = this.m_bodyA.m_islandIndex,
                            i = this.m_bodyB.m_islandIndex;
                        t("  const jd: b2MotorJointDef = new b2MotorJointDef();\n"), t("  jd.bodyA = bodies[%d];\n", e), t("  jd.bodyB = bodies[%d];\n", i), t("  jd.collideConnected = %s;\n", this.m_collideConnected ? "true" : "false"), t("  jd.linearOffset.Set(%.15f, %.15f);\n", this.m_linearOffset.x, this.m_linearOffset.y), t("  jd.angularOffset = %.15f;\n", this.m_angularOffset), t("  jd.maxForce = %.15f;\n", this.m_maxForce), t("  jd.maxTorque = %.15f;\n", this.m_maxTorque), t("  jd.correctionFactor = %.15f;\n", this.m_correctionFactor), t("  joints[%d] = this.m_world.CreateJoint(jd);\n", this.m_index)
                    }, i.SolveVelocityConstraints_s_Cdot_v2 = new P, i.SolveVelocityConstraints_s_impulse_v2 = new P, i.SolveVelocityConstraints_s_oldImpulse_v2 = new P, i
                })(fi),
                Ti = (function(e) {
                    function i() {
                        var i = e.call(this, t.b2JointType.e_mouseJoint) || this;
                        return i.target = new P, i.maxForce = 0, i.frequencyHz = 5, i.dampingRatio = .7, i
                    }
                    return $e(i, e), i
                })(_i),
                Si = (function(t) {
                    function i(i) {
                        var n = t.call(this, i) || this;
                        return n.m_localAnchorB = new P, n.m_targetA = new P, n.m_frequencyHz = 0, n.m_dampingRatio = 0, n.m_beta = 0, n.m_impulse = new P, n.m_maxForce = 0, n.m_gamma = 0, n.m_indexA = 0, n.m_indexB = 0, n.m_rB = new P, n.m_localCenterB = new P, n.m_invMassB = 0, n.m_invIB = 0, n.m_mass = new L, n.m_C = new P, n.m_qB = new N, n.m_lalcB = new P, n.m_K = new L, n.m_targetA.Copy(e(i.target, P.ZERO)), V.MulTXV(n.m_bodyB.GetTransform(), n.m_targetA, n.m_localAnchorB), n.m_maxForce = e(i.maxForce, 0), n.m_impulse.SetZero(), n.m_frequencyHz = e(i.frequencyHz, 0), n.m_dampingRatio = e(i.dampingRatio, 0), n.m_beta = 0, n.m_gamma = 0, n
                    }
                    return $e(i, t), i.prototype.SetTarget = function(t) {
                        this.m_bodyB.IsAwake() || this.m_bodyB.SetAwake(!0), this.m_targetA.Copy(t)
                    }, i.prototype.GetTarget = function() {
                        return this.m_targetA
                    }, i.prototype.SetMaxForce = function(t) {
                        this.m_maxForce = t
                    }, i.prototype.GetMaxForce = function() {
                        return this.m_maxForce
                    }, i.prototype.SetFrequency = function(t) {
                        this.m_frequencyHz = t
                    }, i.prototype.GetFrequency = function() {
                        return this.m_frequencyHz
                    }, i.prototype.SetDampingRatio = function(t) {
                        this.m_dampingRatio = t
                    }, i.prototype.GetDampingRatio = function() {
                        return this.m_dampingRatio
                    }, i.prototype.InitVelocityConstraints = function(t) {
                        this.m_indexB = this.m_bodyB.m_islandIndex, this.m_localCenterB.Copy(this.m_bodyB.m_sweep.localCenter), this.m_invMassB = this.m_bodyB.m_invMass, this.m_invIB = this.m_bodyB.m_invI;
                        var e = t.positions[this.m_indexB].c,
                            i = t.positions[this.m_indexB].a,
                            n = t.velocities[this.m_indexB].v,
                            r = t.velocities[this.m_indexB].w,
                            o = this.m_qB.SetAngle(i),
                            a = this.m_bodyB.GetMass(),
                            l = 2 * s * this.m_frequencyHz,
                            h = 2 * a * this.m_dampingRatio * l,
                            c = a * (l * l),
                            u = t.step.dt;
                        this.m_gamma = u * (h + u * c), 0 !== this.m_gamma && (this.m_gamma = 1 / this.m_gamma), this.m_beta = u * c * this.m_gamma, P.SubVV(this.m_localAnchorB, this.m_localCenterB, this.m_lalcB), N.MulRV(o, this.m_lalcB, this.m_rB);
                        var _ = this.m_K;
                        _.ex.x = this.m_invMassB + this.m_invIB * this.m_rB.y * this.m_rB.y + this.m_gamma, _.ex.y = -this.m_invIB * this.m_rB.x * this.m_rB.y, _.ey.x = _.ex.y, _.ey.y = this.m_invMassB + this.m_invIB * this.m_rB.x * this.m_rB.x + this.m_gamma, _.GetInverse(this.m_mass), this.m_C.x = e.x + this.m_rB.x - this.m_targetA.x, this.m_C.y = e.y + this.m_rB.y - this.m_targetA.y, this.m_C.SelfMul(this.m_beta), r *= .98, t.step.warmStarting ? (this.m_impulse.SelfMul(t.step.dtRatio), n.x += this.m_invMassB * this.m_impulse.x, n.y += this.m_invMassB * this.m_impulse.y, r += this.m_invIB * P.CrossVV(this.m_rB, this.m_impulse)) : this.m_impulse.SetZero(), t.velocities[this.m_indexB].w = r
                    }, i.prototype.SolveVelocityConstraints = function(t) {
                        var e = t.velocities[this.m_indexB].v,
                            n = t.velocities[this.m_indexB].w,
                            r = P.AddVCrossSV(e, n, this.m_rB, i.SolveVelocityConstraints_s_Cdot),
                            s = L.MulMV(this.m_mass, P.AddVV(r, P.AddVV(this.m_C, P.MulSV(this.m_gamma, this.m_impulse, P.s_t0), P.s_t0), P.s_t0).SelfNeg(), i.SolveVelocityConstraints_s_impulse),
                            o = i.SolveVelocityConstraints_s_oldImpulse.Copy(this.m_impulse);
                        this.m_impulse.SelfAdd(s);
                        var a = t.step.dt * this.m_maxForce;
                        this.m_impulse.LengthSquared() > a * a && this.m_impulse.SelfMul(a / this.m_impulse.Length()), P.SubVV(this.m_impulse, o, s), e.SelfMulAdd(this.m_invMassB, s), n += this.m_invIB * P.CrossVV(this.m_rB, s), t.velocities[this.m_indexB].w = n
                    }, i.prototype.SolvePositionConstraints = function(t) {
                        return !0
                    }, i.prototype.GetAnchorA = function(t) {
                        return t.x = this.m_targetA.x, t.y = this.m_targetA.y, t
                    }, i.prototype.GetAnchorB = function(t) {
                        return this.m_bodyB.GetWorldPoint(this.m_localAnchorB, t)
                    }, i.prototype.GetReactionForce = function(t, e) {
                        return P.MulSV(t, this.m_impulse, e)
                    }, i.prototype.GetReactionTorque = function(t) {
                        return 0
                    }, i.prototype.Dump = function(t) {
                        t("Mouse joint dumping is not supported.\n")
                    }, i.prototype.ShiftOrigin = function(t) {
                        this.m_targetA.SelfSub(t)
                    }, i.SolveVelocityConstraints_s_Cdot = new P, i.SolveVelocityConstraints_s_impulse = new P, i.SolveVelocityConstraints_s_oldImpulse = new P, i
                })(fi),
                wi = (function(e) {
                    function i() {
                        var i = e.call(this, t.b2JointType.e_prismaticJoint) || this;
                        return i.localAnchorA = new P, i.localAnchorB = new P, i.localAxisA = new P(1, 0), i.referenceAngle = 0, i.enableLimit = !1, i.lowerTranslation = 0, i.upperTranslation = 0, i.enableMotor = !1, i.maxMotorForce = 0, i.motorSpeed = 0, i
                    }
                    return $e(i, e), i.prototype.Initialize = function(t, e, i, n) {
                        this.bodyA = t, this.bodyB = e, this.bodyA.GetLocalPoint(i, this.localAnchorA), this.bodyB.GetLocalPoint(i, this.localAnchorB), this.bodyA.GetLocalVector(n, this.localAxisA), this.referenceAngle = this.bodyB.GetAngle() - this.bodyA.GetAngle()
                    }, i
                })(_i),
                Ei = (function(i) {
                    function n(n) {
                        var r = i.call(this, n) || this;
                        return r.m_localAnchorA = new P, r.m_localAnchorB = new P, r.m_localXAxisA = new P, r.m_localYAxisA = new P, r.m_referenceAngle = 0, r.m_impulse = new O(0, 0, 0), r.m_motorImpulse = 0, r.m_lowerTranslation = 0, r.m_upperTranslation = 0, r.m_maxMotorForce = 0, r.m_motorSpeed = 0, r.m_enableLimit = !1, r.m_enableMotor = !1, r.m_limitState = t.b2LimitState.e_inactiveLimit, r.m_indexA = 0, r.m_indexB = 0, r.m_localCenterA = new P, r.m_localCenterB = new P, r.m_invMassA = 0, r.m_invMassB = 0, r.m_invIA = 0, r.m_invIB = 0, r.m_axis = new P(0, 0), r.m_perp = new P(0, 0), r.m_s1 = 0, r.m_s2 = 0, r.m_a1 = 0, r.m_a2 = 0, r.m_K = new F, r.m_K3 = new F, r.m_K2 = new L, r.m_motorMass = 0, r.m_qA = new N, r.m_qB = new N, r.m_lalcA = new P, r.m_lalcB = new P, r.m_rA = new P, r.m_rB = new P, r.m_localAnchorA.Copy(e(n.localAnchorA, P.ZERO)), r.m_localAnchorB.Copy(e(n.localAnchorB, P.ZERO)), r.m_localXAxisA.Copy(e(n.localAxisA, new P(1, 0))).SelfNormalize(), P.CrossOneV(r.m_localXAxisA, r.m_localYAxisA), r.m_referenceAngle = e(n.referenceAngle, 0), r.m_lowerTranslation = e(n.lowerTranslation, 0), r.m_upperTranslation = e(n.upperTranslation, 0), r.m_maxMotorForce = e(n.maxMotorForce, 0), r.m_motorSpeed = e(n.motorSpeed, 0), r.m_enableLimit = e(n.enableLimit, !1), r.m_enableMotor = e(n.enableMotor, !1), r
                    }
                    return $e(n, i), n.prototype.InitVelocityConstraints = function(e) {
                        this.m_indexA = this.m_bodyA.m_islandIndex, this.m_indexB = this.m_bodyB.m_islandIndex, this.m_localCenterA.Copy(this.m_bodyA.m_sweep.localCenter), this.m_localCenterB.Copy(this.m_bodyB.m_sweep.localCenter), this.m_invMassA = this.m_bodyA.m_invMass, this.m_invMassB = this.m_bodyB.m_invMass, this.m_invIA = this.m_bodyA.m_invI, this.m_invIB = this.m_bodyB.m_invI;
                        var i = e.positions[this.m_indexA].c,
                            r = e.positions[this.m_indexA].a,
                            s = e.velocities[this.m_indexA].v,
                            o = e.velocities[this.m_indexA].w,
                            a = e.positions[this.m_indexB].c,
                            h = e.positions[this.m_indexB].a,
                            c = e.velocities[this.m_indexB].v,
                            u = e.velocities[this.m_indexB].w,
                            _ = this.m_qA.SetAngle(r),
                            f = this.m_qB.SetAngle(h);
                        P.SubVV(this.m_localAnchorA, this.m_localCenterA, this.m_lalcA);
                        var d = N.MulRV(_, this.m_lalcA, this.m_rA);
                        P.SubVV(this.m_localAnchorB, this.m_localCenterB, this.m_lalcB);
                        var p = N.MulRV(f, this.m_lalcB, this.m_rB),
                            m = P.AddVV(P.SubVV(a, i, P.s_t0), P.SubVV(p, d, P.s_t1), n.InitVelocityConstraints_s_d),
                            y = this.m_invMassA,
                            g = this.m_invMassB,
                            x = this.m_invIA,
                            b = this.m_invIB;
                        if (N.MulRV(_, this.m_localXAxisA, this.m_axis), this.m_a1 = P.CrossVV(P.AddVV(m, d, P.s_t0), this.m_axis), this.m_a2 = P.CrossVV(p, this.m_axis), this.m_motorMass = y + g + x * this.m_a1 * this.m_a1 + b * this.m_a2 * this.m_a2, this.m_motorMass > 0 && (this.m_motorMass = 1 / this.m_motorMass), N.MulRV(_, this.m_localYAxisA, this.m_perp), this.m_s1 = P.CrossVV(P.AddVV(m, d, P.s_t0), this.m_perp), this.m_s2 = P.CrossVV(p, this.m_perp), this.m_K.ex.x = y + g + x * this.m_s1 * this.m_s1 + b * this.m_s2 * this.m_s2, this.m_K.ex.y = x * this.m_s1 + b * this.m_s2, this.m_K.ex.z = x * this.m_s1 * this.m_a1 + b * this.m_s2 * this.m_a2, this.m_K.ey.x = this.m_K.ex.y, this.m_K.ey.y = x + b, 0 === this.m_K.ey.y && (this.m_K.ey.y = 1), this.m_K.ey.z = x * this.m_a1 + b * this.m_a2, this.m_K.ez.x = this.m_K.ex.z, this.m_K.ez.y = this.m_K.ey.z, this.m_K.ez.z = y + g + x * this.m_a1 * this.m_a1 + b * this.m_a2 * this.m_a2, this.m_enableLimit) {
                            var A = P.DotVV(this.m_axis, m);
                            v(this.m_upperTranslation - this.m_lowerTranslation) < 2 * l ? this.m_limitState = t.b2LimitState.e_equalLimits : A <= this.m_lowerTranslation ? this.m_limitState !== t.b2LimitState.e_atLowerLimit && (this.m_limitState = t.b2LimitState.e_atLowerLimit, this.m_impulse.z = 0) : A >= this.m_upperTranslation ? this.m_limitState !== t.b2LimitState.e_atUpperLimit && (this.m_limitState = t.b2LimitState.e_atUpperLimit, this.m_impulse.z = 0) : (this.m_limitState = t.b2LimitState.e_inactiveLimit, this.m_impulse.z = 0)
                        } else this.m_limitState = t.b2LimitState.e_inactiveLimit, this.m_impulse.z = 0;
                        if (this.m_enableMotor || (this.m_motorImpulse = 0), e.step.warmStarting) {
                            this.m_impulse.SelfMul(e.step.dtRatio), this.m_motorImpulse *= e.step.dtRatio;
                            var C = P.AddVV(P.MulSV(this.m_impulse.x, this.m_perp, P.s_t0), P.MulSV(this.m_motorImpulse + this.m_impulse.z, this.m_axis, P.s_t1), n.InitVelocityConstraints_s_P),
                                T = this.m_impulse.x * this.m_s1 + this.m_impulse.y + (this.m_motorImpulse + this.m_impulse.z) * this.m_a1,
                                S = this.m_impulse.x * this.m_s2 + this.m_impulse.y + (this.m_motorImpulse + this.m_impulse.z) * this.m_a2;
                            s.SelfMulSub(y, C), o -= x * T, c.SelfMulAdd(g, C), u += b * S
                        } else this.m_impulse.SetZero(), this.m_motorImpulse = 0;
                        e.velocities[this.m_indexA].w = o, e.velocities[this.m_indexB].w = u
                    }, n.prototype.SolveVelocityConstraints = function(e) {
                        var i = e.velocities[this.m_indexA].v,
                            r = e.velocities[this.m_indexA].w,
                            s = e.velocities[this.m_indexB].v,
                            o = e.velocities[this.m_indexB].w,
                            a = this.m_invMassA,
                            l = this.m_invMassB,
                            h = this.m_invIA,
                            c = this.m_invIB;
                        if (this.m_enableMotor && this.m_limitState !== t.b2LimitState.e_equalLimits) {
                            var u = P.DotVV(this.m_axis, P.SubVV(s, i, P.s_t0)) + this.m_a2 * o - this.m_a1 * r,
                                _ = this.m_motorMass * (this.m_motorSpeed - u),
                                f = this.m_motorImpulse,
                                d = e.step.dt * this.m_maxMotorForce;
                            this.m_motorImpulse = b(this.m_motorImpulse + _, -d, d), _ = this.m_motorImpulse - f;
                            var p = P.MulSV(_, this.m_axis, n.SolveVelocityConstraints_s_P),
                                m = _ * this.m_a1,
                                y = _ * this.m_a2;
                            i.SelfMulSub(a, p), r -= h * m, s.SelfMulAdd(l, p), o += c * y
                        }
                        var v = P.DotVV(this.m_perp, P.SubVV(s, i, P.s_t0)) + this.m_s2 * o - this.m_s1 * r,
                            A = o - r;
                        if (this.m_enableLimit && this.m_limitState !== t.b2LimitState.e_inactiveLimit) {
                            var C = P.DotVV(this.m_axis, P.SubVV(s, i, P.s_t0)) + this.m_a2 * o - this.m_a1 * r,
                                T = n.SolveVelocityConstraints_s_f1.Copy(this.m_impulse),
                                S = this.m_K.Solve33(-v, -A, -C, n.SolveVelocityConstraints_s_df3);
                            this.m_impulse.SelfAdd(S), this.m_limitState === t.b2LimitState.e_atLowerLimit ? this.m_impulse.z = x(this.m_impulse.z, 0) : this.m_limitState === t.b2LimitState.e_atUpperLimit && (this.m_impulse.z = g(this.m_impulse.z, 0));
                            var w = -v - (this.m_impulse.z - T.z) * this.m_K.ez.x,
                                E = -A - (this.m_impulse.z - T.z) * this.m_K.ez.y,
                                M = this.m_K.Solve22(w, E, n.SolveVelocityConstraints_s_f2r);
                            M.x += T.x, M.y += T.y, this.m_impulse.x = M.x, this.m_impulse.y = M.y, S.x = this.m_impulse.x - T.x, S.y = this.m_impulse.y - T.y, S.z = this.m_impulse.z - T.z;
                            p = P.AddVV(P.MulSV(S.x, this.m_perp, P.s_t0), P.MulSV(S.z, this.m_axis, P.s_t1), n.SolveVelocityConstraints_s_P), m = S.x * this.m_s1 + S.y + S.z * this.m_a1, y = S.x * this.m_s2 + S.y + S.z * this.m_a2;
                            i.SelfMulSub(a, p), r -= h * m, s.SelfMulAdd(l, p), o += c * y
                        } else {
                            var D = this.m_K.Solve22(-v, -A, n.SolveVelocityConstraints_s_df2);
                            this.m_impulse.x += D.x, this.m_impulse.y += D.y;
                            p = P.MulSV(D.x, this.m_perp, n.SolveVelocityConstraints_s_P), m = D.x * this.m_s1 + D.y, y = D.x * this.m_s2 + D.y;
                            i.SelfMulSub(a, p), r -= h * m, s.SelfMulAdd(l, p), o += c * y
                        }
                        e.velocities[this.m_indexA].w = r, e.velocities[this.m_indexB].w = o
                    }, n.prototype.SolvePositionConstraints = function(t) {
                        var e = t.positions[this.m_indexA].c,
                            i = t.positions[this.m_indexA].a,
                            r = t.positions[this.m_indexB].c,
                            s = t.positions[this.m_indexB].a,
                            o = this.m_qA.SetAngle(i),
                            a = this.m_qB.SetAngle(s),
                            c = this.m_invMassA,
                            u = this.m_invMassB,
                            _ = this.m_invIA,
                            f = this.m_invIB,
                            d = N.MulRV(o, this.m_lalcA, this.m_rA),
                            p = N.MulRV(a, this.m_lalcB, this.m_rB),
                            m = P.SubVV(P.AddVV(r, p, P.s_t0), P.AddVV(e, d, P.s_t1), n.SolvePositionConstraints_s_d),
                            y = N.MulRV(o, this.m_localXAxisA, this.m_axis),
                            g = P.CrossVV(P.AddVV(m, d, P.s_t0), y),
                            A = P.CrossVV(p, y),
                            C = N.MulRV(o, this.m_localYAxisA, this.m_perp),
                            T = P.CrossVV(P.AddVV(m, d, P.s_t0), C),
                            S = P.CrossVV(p, C),
                            w = n.SolvePositionConstraints_s_impulse,
                            E = P.DotVV(C, m),
                            M = s - i - this.m_referenceAngle,
                            D = v(E),
                            B = v(M),
                            I = !1,
                            R = 0;
                        if (this.m_enableLimit) {
                            var O = P.DotVV(y, m);
                            v(this.m_upperTranslation - this.m_lowerTranslation) < 2 * l ? (R = b(O, -.2, .2), D = x(D, v(O)), I = !0) : O <= this.m_lowerTranslation ? (R = b(O - this.m_lowerTranslation + l, -.2, 0), D = x(D, this.m_lowerTranslation - O), I = !0) : O >= this.m_upperTranslation && (R = b(O - this.m_upperTranslation - l, 0, .2), D = x(D, O - this.m_upperTranslation), I = !0)
                        }
                        if (I) {
                            var L = c + u + _ * T * T + f * S * S,
                                F = _ * T + f * S,
                                V = _ * T * g + f * S * A;
                            0 === (z = _ + f) && (z = 1);
                            var k = _ * g + f * A,
                                G = c + u + _ * g * g + f * A * A,
                                U = this.m_K3;
                            U.ex.SetXYZ(L, F, V), U.ey.SetXYZ(F, z, k), U.ez.SetXYZ(V, k, G), w = U.Solve33(-E, -M, -R, w)
                        } else {
                            var z;
                            L = c + u + _ * T * T + f * S * S, F = _ * T + f * S;
                            0 === (z = _ + f) && (z = 1);
                            var j = this.m_K2;
                            j.ex.Set(L, F), j.ey.Set(F, z);
                            var W = j.Solve(-E, -M, n.SolvePositionConstraints_s_impulse1);
                            w.x = W.x, w.y = W.y, w.z = 0
                        }
                        var H = P.AddVV(P.MulSV(w.x, C, P.s_t0), P.MulSV(w.z, y, P.s_t1), n.SolvePositionConstraints_s_P),
                            X = w.x * T + w.y + w.z * g,
                            Y = w.x * S + w.y + w.z * A;
                        return e.SelfMulSub(c, H), i -= _ * X, r.SelfMulAdd(u, H), s += f * Y, t.positions[this.m_indexA].a = i, t.positions[this.m_indexB].a = s, D <= l && B <= h
                    }, n.prototype.GetAnchorA = function(t) {
                        return this.m_bodyA.GetWorldPoint(this.m_localAnchorA, t)
                    }, n.prototype.GetAnchorB = function(t) {
                        return this.m_bodyB.GetWorldPoint(this.m_localAnchorB, t)
                    }, n.prototype.GetReactionForce = function(t, e) {
                        return e.x = t * (this.m_impulse.x * this.m_perp.x + (this.m_motorImpulse + this.m_impulse.z) * this.m_axis.x), e.y = t * (this.m_impulse.x * this.m_perp.y + (this.m_motorImpulse + this.m_impulse.z) * this.m_axis.y), e
                    }, n.prototype.GetReactionTorque = function(t) {
                        return t * this.m_impulse.y
                    }, n.prototype.GetLocalAnchorA = function() {
                        return this.m_localAnchorA
                    }, n.prototype.GetLocalAnchorB = function() {
                        return this.m_localAnchorB
                    }, n.prototype.GetLocalAxisA = function() {
                        return this.m_localXAxisA
                    }, n.prototype.GetReferenceAngle = function() {
                        return this.m_referenceAngle
                    }, n.prototype.GetJointTranslation = function() {
                        var t = this.m_bodyA.GetWorldPoint(this.m_localAnchorA, n.GetJointTranslation_s_pA),
                            e = this.m_bodyB.GetWorldPoint(this.m_localAnchorB, n.GetJointTranslation_s_pB),
                            i = P.SubVV(e, t, n.GetJointTranslation_s_d),
                            r = this.m_bodyA.GetWorldVector(this.m_localXAxisA, n.GetJointTranslation_s_axis);
                        return P.DotVV(i, r)
                    }, n.prototype.GetJointSpeed = function() {
                        var t = this.m_bodyA,
                            e = this.m_bodyB;
                        P.SubVV(this.m_localAnchorA, t.m_sweep.localCenter, this.m_lalcA);
                        var i = N.MulRV(t.m_xf.q, this.m_lalcA, this.m_rA);
                        P.SubVV(this.m_localAnchorB, e.m_sweep.localCenter, this.m_lalcB);
                        var n = N.MulRV(e.m_xf.q, this.m_lalcB, this.m_rB),
                            r = P.AddVV(t.m_sweep.c, i, P.s_t0),
                            s = P.AddVV(e.m_sweep.c, n, P.s_t1),
                            o = P.SubVV(s, r, P.s_t2),
                            a = t.GetWorldVector(this.m_localXAxisA, this.m_axis),
                            l = t.m_linearVelocity,
                            h = e.m_linearVelocity,
                            c = t.m_angularVelocity,
                            u = e.m_angularVelocity;
                        return P.DotVV(o, P.CrossSV(c, a, P.s_t0)) + P.DotVV(a, P.SubVV(P.AddVCrossSV(h, u, n, P.s_t0), P.AddVCrossSV(l, c, i, P.s_t1), P.s_t0))
                    }, n.prototype.IsLimitEnabled = function() {
                        return this.m_enableLimit
                    }, n.prototype.EnableLimit = function(t) {
                        t !== this.m_enableLimit && (this.m_bodyA.SetAwake(!0), this.m_bodyB.SetAwake(!0), this.m_enableLimit = t, this.m_impulse.z = 0)
                    }, n.prototype.GetLowerLimit = function() {
                        return this.m_lowerTranslation
                    }, n.prototype.GetUpperLimit = function() {
                        return this.m_upperTranslation
                    }, n.prototype.SetLimits = function(t, e) {
                        t === this.m_lowerTranslation && e === this.m_upperTranslation || (this.m_bodyA.SetAwake(!0), this.m_bodyB.SetAwake(!0), this.m_lowerTranslation = t, this.m_upperTranslation = e, this.m_impulse.z = 0)
                    }, n.prototype.IsMotorEnabled = function() {
                        return this.m_enableMotor
                    }, n.prototype.EnableMotor = function(t) {
                        t !== this.m_enableMotor && (this.m_bodyA.SetAwake(!0), this.m_bodyB.SetAwake(!0), this.m_enableMotor = t)
                    }, n.prototype.SetMotorSpeed = function(t) {
                        t !== this.m_motorSpeed && (this.m_bodyA.SetAwake(!0), this.m_bodyB.SetAwake(!0), this.m_motorSpeed = t)
                    }, n.prototype.GetMotorSpeed = function() {
                        return this.m_motorSpeed
                    }, n.prototype.SetMaxMotorForce = function(t) {
                        t !== this.m_maxMotorForce && (this.m_bodyA.SetAwake(!0), this.m_bodyB.SetAwake(!0), this.m_maxMotorForce = t)
                    }, n.prototype.GetMaxMotorForce = function() {
                        return this.m_maxMotorForce
                    }, n.prototype.GetMotorForce = function(t) {
                        return t * this.m_motorImpulse
                    }, n.prototype.Dump = function(t) {
                        var e = this.m_bodyA.m_islandIndex,
                            i = this.m_bodyB.m_islandIndex;
                        t("  const jd: b2PrismaticJointDef = new b2PrismaticJointDef();\n"), t("  jd.bodyA = bodies[%d];\n", e), t("  jd.bodyB = bodies[%d];\n", i), t("  jd.collideConnected = %s;\n", this.m_collideConnected ? "true" : "false"), t("  jd.localAnchorA.Set(%.15f, %.15f);\n", this.m_localAnchorA.x, this.m_localAnchorA.y), t("  jd.localAnchorB.Set(%.15f, %.15f);\n", this.m_localAnchorB.x, this.m_localAnchorB.y), t("  jd.localAxisA.Set(%.15f, %.15f);\n", this.m_localXAxisA.x, this.m_localXAxisA.y), t("  jd.referenceAngle = %.15f;\n", this.m_referenceAngle), t("  jd.enableLimit = %s;\n", this.m_enableLimit ? "true" : "false"), t("  jd.lowerTranslation = %.15f;\n", this.m_lowerTranslation), t("  jd.upperTranslation = %.15f;\n", this.m_upperTranslation), t("  jd.enableMotor = %s;\n", this.m_enableMotor ? "true" : "false"), t("  jd.motorSpeed = %.15f;\n", this.m_motorSpeed), t("  jd.maxMotorForce = %.15f;\n", this.m_maxMotorForce), t("  joints[%d] = this.m_world.CreateJoint(jd);\n", this.m_index)
                    }, n.InitVelocityConstraints_s_d = new P, n.InitVelocityConstraints_s_P = new P, n.SolveVelocityConstraints_s_P = new P, n.SolveVelocityConstraints_s_f2r = new P, n.SolveVelocityConstraints_s_f1 = new O, n.SolveVelocityConstraints_s_df3 = new O, n.SolveVelocityConstraints_s_df2 = new P, n.SolvePositionConstraints_s_d = new P, n.SolvePositionConstraints_s_impulse = new O, n.SolvePositionConstraints_s_impulse1 = new P, n.SolvePositionConstraints_s_P = new P, n.GetJointTranslation_s_pA = new P, n.GetJointTranslation_s_pB = new P, n.GetJointTranslation_s_d = new P, n.GetJointTranslation_s_axis = new P, n
                })(fi),
                Mi = (function(e) {
                    function i() {
                        var i = e.call(this, t.b2JointType.e_pulleyJoint) || this;
                        return i.groundAnchorA = new P(-1, 1), i.groundAnchorB = new P(1, 1), i.localAnchorA = new P(-1, 0), i.localAnchorB = new P(1, 0), i.lengthA = 0, i.lengthB = 0, i.ratio = 1, i.collideConnected = !0, i
                    }
                    return $e(i, e), i.prototype.Initialize = function(t, e, i, n, r, s, o) {
                        this.bodyA = t, this.bodyB = e, this.groundAnchorA.Copy(i), this.groundAnchorB.Copy(n), this.bodyA.GetLocalPoint(r, this.localAnchorA), this.bodyB.GetLocalPoint(s, this.localAnchorB), this.lengthA = P.DistanceVV(r, i), this.lengthB = P.DistanceVV(s, n), this.ratio = o
                    }, i
                })(_i),
                Di = (function(t) {
                    function i(i) {
                        var n = t.call(this, i) || this;
                        return n.m_groundAnchorA = new P, n.m_groundAnchorB = new P, n.m_lengthA = 0, n.m_lengthB = 0, n.m_localAnchorA = new P, n.m_localAnchorB = new P, n.m_constant = 0, n.m_ratio = 0, n.m_impulse = 0, n.m_indexA = 0, n.m_indexB = 0, n.m_uA = new P, n.m_uB = new P, n.m_rA = new P, n.m_rB = new P, n.m_localCenterA = new P, n.m_localCenterB = new P, n.m_invMassA = 0, n.m_invMassB = 0, n.m_invIA = 0, n.m_invIB = 0, n.m_mass = 0, n.m_qA = new N, n.m_qB = new N, n.m_lalcA = new P, n.m_lalcB = new P, n.m_groundAnchorA.Copy(e(i.groundAnchorA, new P(-1, 1))), n.m_groundAnchorB.Copy(e(i.groundAnchorB, new P(1, 0))), n.m_localAnchorA.Copy(e(i.localAnchorA, new P(-1, 0))), n.m_localAnchorB.Copy(e(i.localAnchorB, new P(1, 0))), n.m_lengthA = e(i.lengthA, 0), n.m_lengthB = e(i.lengthB, 0), n.m_ratio = e(i.ratio, 1), n.m_constant = e(i.lengthA, 0) + n.m_ratio * e(i.lengthB, 0), n.m_impulse = 0, n
                    }
                    return $e(i, t), i.prototype.InitVelocityConstraints = function(t) {
                        this.m_indexA = this.m_bodyA.m_islandIndex, this.m_indexB = this.m_bodyB.m_islandIndex, this.m_localCenterA.Copy(this.m_bodyA.m_sweep.localCenter), this.m_localCenterB.Copy(this.m_bodyB.m_sweep.localCenter), this.m_invMassA = this.m_bodyA.m_invMass, this.m_invMassB = this.m_bodyB.m_invMass, this.m_invIA = this.m_bodyA.m_invI, this.m_invIB = this.m_bodyB.m_invI;
                        var e = t.positions[this.m_indexA].c,
                            n = t.positions[this.m_indexA].a,
                            r = t.velocities[this.m_indexA].v,
                            s = t.velocities[this.m_indexA].w,
                            o = t.positions[this.m_indexB].c,
                            a = t.positions[this.m_indexB].a,
                            h = t.velocities[this.m_indexB].v,
                            c = t.velocities[this.m_indexB].w,
                            u = this.m_qA.SetAngle(n),
                            _ = this.m_qB.SetAngle(a);
                        P.SubVV(this.m_localAnchorA, this.m_localCenterA, this.m_lalcA), N.MulRV(u, this.m_lalcA, this.m_rA), P.SubVV(this.m_localAnchorB, this.m_localCenterB, this.m_lalcB), N.MulRV(_, this.m_lalcB, this.m_rB), this.m_uA.Copy(e).SelfAdd(this.m_rA).SelfSub(this.m_groundAnchorA), this.m_uB.Copy(o).SelfAdd(this.m_rB).SelfSub(this.m_groundAnchorB);
                        var f = this.m_uA.Length(),
                            d = this.m_uB.Length();
                        f > 10 * l ? this.m_uA.SelfMul(1 / f) : this.m_uA.SetZero(), d > 10 * l ? this.m_uB.SelfMul(1 / d) : this.m_uB.SetZero();
                        var p = P.CrossVV(this.m_rA, this.m_uA),
                            m = P.CrossVV(this.m_rB, this.m_uB),
                            y = this.m_invMassA + this.m_invIA * p * p,
                            v = this.m_invMassB + this.m_invIB * m * m;
                        if (this.m_mass = y + this.m_ratio * this.m_ratio * v, this.m_mass > 0 && (this.m_mass = 1 / this.m_mass), t.step.warmStarting) {
                            this.m_impulse *= t.step.dtRatio;
                            var g = P.MulSV(-this.m_impulse, this.m_uA, i.InitVelocityConstraints_s_PA),
                                x = P.MulSV(-this.m_ratio * this.m_impulse, this.m_uB, i.InitVelocityConstraints_s_PB);
                            r.SelfMulAdd(this.m_invMassA, g), s += this.m_invIA * P.CrossVV(this.m_rA, g), h.SelfMulAdd(this.m_invMassB, x), c += this.m_invIB * P.CrossVV(this.m_rB, x)
                        } else this.m_impulse = 0;
                        t.velocities[this.m_indexA].w = s, t.velocities[this.m_indexB].w = c
                    }, i.prototype.SolveVelocityConstraints = function(t) {
                        var e = t.velocities[this.m_indexA].v,
                            n = t.velocities[this.m_indexA].w,
                            r = t.velocities[this.m_indexB].v,
                            s = t.velocities[this.m_indexB].w,
                            o = P.AddVCrossSV(e, n, this.m_rA, i.SolveVelocityConstraints_s_vpA),
                            a = P.AddVCrossSV(r, s, this.m_rB, i.SolveVelocityConstraints_s_vpB),
                            l = -P.DotVV(this.m_uA, o) - this.m_ratio * P.DotVV(this.m_uB, a),
                            h = -this.m_mass * l;
                        this.m_impulse += h;
                        var c = P.MulSV(-h, this.m_uA, i.SolveVelocityConstraints_s_PA),
                            u = P.MulSV(-this.m_ratio * h, this.m_uB, i.SolveVelocityConstraints_s_PB);
                        e.SelfMulAdd(this.m_invMassA, c), n += this.m_invIA * P.CrossVV(this.m_rA, c), r.SelfMulAdd(this.m_invMassB, u), s += this.m_invIB * P.CrossVV(this.m_rB, u), t.velocities[this.m_indexA].w = n, t.velocities[this.m_indexB].w = s
                    }, i.prototype.SolvePositionConstraints = function(t) {
                        var e = t.positions[this.m_indexA].c,
                            n = t.positions[this.m_indexA].a,
                            r = t.positions[this.m_indexB].c,
                            s = t.positions[this.m_indexB].a,
                            o = this.m_qA.SetAngle(n),
                            a = this.m_qB.SetAngle(s);
                        P.SubVV(this.m_localAnchorA, this.m_localCenterA, this.m_lalcA);
                        var h = N.MulRV(o, this.m_lalcA, this.m_rA);
                        P.SubVV(this.m_localAnchorB, this.m_localCenterB, this.m_lalcB);
                        var c = N.MulRV(a, this.m_lalcB, this.m_rB),
                            u = this.m_uA.Copy(e).SelfAdd(h).SelfSub(this.m_groundAnchorA),
                            _ = this.m_uB.Copy(r).SelfAdd(c).SelfSub(this.m_groundAnchorB),
                            f = u.Length(),
                            d = _.Length();
                        f > 10 * l ? u.SelfMul(1 / f) : u.SetZero(), d > 10 * l ? _.SelfMul(1 / d) : _.SetZero();
                        var p = P.CrossVV(h, u),
                            m = P.CrossVV(c, _),
                            y = this.m_invMassA + this.m_invIA * p * p,
                            g = this.m_invMassB + this.m_invIB * m * m,
                            x = y + this.m_ratio * this.m_ratio * g;
                        x > 0 && (x = 1 / x);
                        var b = this.m_constant - f - this.m_ratio * d,
                            A = v(b),
                            C = -x * b,
                            T = P.MulSV(-C, u, i.SolvePositionConstraints_s_PA),
                            S = P.MulSV(-this.m_ratio * C, _, i.SolvePositionConstraints_s_PB);
                        return e.SelfMulAdd(this.m_invMassA, T), n += this.m_invIA * P.CrossVV(h, T), r.SelfMulAdd(this.m_invMassB, S), s += this.m_invIB * P.CrossVV(c, S), t.positions[this.m_indexA].a = n, t.positions[this.m_indexB].a = s, A < l
                    }, i.prototype.GetAnchorA = function(t) {
                        return this.m_bodyA.GetWorldPoint(this.m_localAnchorA, t)
                    }, i.prototype.GetAnchorB = function(t) {
                        return this.m_bodyB.GetWorldPoint(this.m_localAnchorB, t)
                    }, i.prototype.GetReactionForce = function(t, e) {
                        return e.x = t * this.m_impulse * this.m_uB.x, e.y = t * this.m_impulse * this.m_uB.y, e
                    }, i.prototype.GetReactionTorque = function(t) {
                        return 0
                    }, i.prototype.GetGroundAnchorA = function() {
                        return this.m_groundAnchorA
                    }, i.prototype.GetGroundAnchorB = function() {
                        return this.m_groundAnchorB
                    }, i.prototype.GetLengthA = function() {
                        return this.m_lengthA
                    }, i.prototype.GetLengthB = function() {
                        return this.m_lengthB
                    }, i.prototype.GetRatio = function() {
                        return this.m_ratio
                    }, i.prototype.GetCurrentLengthA = function() {
                        var t = this.m_bodyA.GetWorldPoint(this.m_localAnchorA, i.GetCurrentLengthA_s_p),
                            e = this.m_groundAnchorA;
                        return P.DistanceVV(t, e)
                    }, i.prototype.GetCurrentLengthB = function() {
                        var t = this.m_bodyB.GetWorldPoint(this.m_localAnchorB, i.GetCurrentLengthB_s_p),
                            e = this.m_groundAnchorB;
                        return P.DistanceVV(t, e)
                    }, i.prototype.Dump = function(t) {
                        var e = this.m_bodyA.m_islandIndex,
                            i = this.m_bodyB.m_islandIndex;
                        t("  const jd: b2PulleyJointDef = new b2PulleyJointDef();\n"), t("  jd.bodyA = bodies[%d];\n", e), t("  jd.bodyB = bodies[%d];\n", i), t("  jd.collideConnected = %s;\n", this.m_collideConnected ? "true" : "false"), t("  jd.groundAnchorA.Set(%.15f, %.15f);\n", this.m_groundAnchorA.x, this.m_groundAnchorA.y), t("  jd.groundAnchorB.Set(%.15f, %.15f);\n", this.m_groundAnchorB.x, this.m_groundAnchorB.y), t("  jd.localAnchorA.Set(%.15f, %.15f);\n", this.m_localAnchorA.x, this.m_localAnchorA.y), t("  jd.localAnchorB.Set(%.15f, %.15f);\n", this.m_localAnchorB.x, this.m_localAnchorB.y), t("  jd.lengthA = %.15f;\n", this.m_lengthA), t("  jd.lengthB = %.15f;\n", this.m_lengthB), t("  jd.ratio = %.15f;\n", this.m_ratio), t("  joints[%d] = this.m_world.CreateJoint(jd);\n", this.m_index)
                    }, i.prototype.ShiftOrigin = function(t) {
                        this.m_groundAnchorA.SelfSub(t), this.m_groundAnchorB.SelfSub(t)
                    }, i.InitVelocityConstraints_s_PA = new P, i.InitVelocityConstraints_s_PB = new P, i.SolveVelocityConstraints_s_vpA = new P, i.SolveVelocityConstraints_s_vpB = new P, i.SolveVelocityConstraints_s_PA = new P, i.SolveVelocityConstraints_s_PB = new P, i.SolvePositionConstraints_s_PA = new P, i.SolvePositionConstraints_s_PB = new P, i.GetCurrentLengthA_s_p = new P, i.GetCurrentLengthB_s_p = new P, i
                })(fi),
                Bi = (function(e) {
                    function i() {
                        var i = e.call(this, t.b2JointType.e_revoluteJoint) || this;
                        return i.localAnchorA = new P(0, 0), i.localAnchorB = new P(0, 0), i.referenceAngle = 0, i.enableLimit = !1, i.lowerAngle = 0, i.upperAngle = 0, i.enableMotor = !1, i.motorSpeed = 0, i.maxMotorTorque = 0, i
                    }
                    return $e(i, e), i.prototype.Initialize = function(t, e, i) {
                        this.bodyA = t, this.bodyB = e, this.bodyA.GetLocalPoint(i, this.localAnchorA), this.bodyB.GetLocalPoint(i, this.localAnchorB), this.referenceAngle = this.bodyB.GetAngle() - this.bodyA.GetAngle()
                    }, i
                })(_i),
                Ii = (function(i) {
                    function n(n) {
                        var r = i.call(this, n) || this;
                        return r.m_localAnchorA = new P, r.m_localAnchorB = new P, r.m_impulse = new O, r.m_motorImpulse = 0, r.m_enableMotor = !1, r.m_maxMotorTorque = 0, r.m_motorSpeed = 0, r.m_enableLimit = !1, r.m_referenceAngle = 0, r.m_lowerAngle = 0, r.m_upperAngle = 0, r.m_indexA = 0, r.m_indexB = 0, r.m_rA = new P, r.m_rB = new P, r.m_localCenterA = new P, r.m_localCenterB = new P, r.m_invMassA = 0, r.m_invMassB = 0, r.m_invIA = 0, r.m_invIB = 0, r.m_mass = new F, r.m_motorMass = 0, r.m_limitState = t.b2LimitState.e_inactiveLimit, r.m_qA = new N, r.m_qB = new N, r.m_lalcA = new P, r.m_lalcB = new P, r.m_K = new L, r.m_localAnchorA.Copy(e(n.localAnchorA, P.ZERO)), r.m_localAnchorB.Copy(e(n.localAnchorB, P.ZERO)), r.m_referenceAngle = e(n.referenceAngle, 0), r.m_impulse.SetZero(), r.m_motorImpulse = 0, r.m_lowerAngle = e(n.lowerAngle, 0), r.m_upperAngle = e(n.upperAngle, 0), r.m_maxMotorTorque = e(n.maxMotorTorque, 0), r.m_motorSpeed = e(n.motorSpeed, 0), r.m_enableLimit = e(n.enableLimit, !1), r.m_enableMotor = e(n.enableMotor, !1), r.m_limitState = t.b2LimitState.e_inactiveLimit, r
                    }
                    return $e(n, i), n.prototype.InitVelocityConstraints = function(e) {
                        this.m_indexA = this.m_bodyA.m_islandIndex, this.m_indexB = this.m_bodyB.m_islandIndex, this.m_localCenterA.Copy(this.m_bodyA.m_sweep.localCenter), this.m_localCenterB.Copy(this.m_bodyB.m_sweep.localCenter), this.m_invMassA = this.m_bodyA.m_invMass, this.m_invMassB = this.m_bodyB.m_invMass, this.m_invIA = this.m_bodyA.m_invI, this.m_invIB = this.m_bodyB.m_invI;
                        var i = e.positions[this.m_indexA].a,
                            r = e.velocities[this.m_indexA].v,
                            s = e.velocities[this.m_indexA].w,
                            o = e.positions[this.m_indexB].a,
                            a = e.velocities[this.m_indexB].v,
                            l = e.velocities[this.m_indexB].w,
                            c = this.m_qA.SetAngle(i),
                            u = this.m_qB.SetAngle(o);
                        P.SubVV(this.m_localAnchorA, this.m_localCenterA, this.m_lalcA), N.MulRV(c, this.m_lalcA, this.m_rA), P.SubVV(this.m_localAnchorB, this.m_localCenterB, this.m_lalcB), N.MulRV(u, this.m_lalcB, this.m_rB);
                        var _ = this.m_invMassA,
                            f = this.m_invMassB,
                            d = this.m_invIA,
                            p = this.m_invIB,
                            m = d + p === 0;
                        if (this.m_mass.ex.x = _ + f + this.m_rA.y * this.m_rA.y * d + this.m_rB.y * this.m_rB.y * p, this.m_mass.ey.x = -this.m_rA.y * this.m_rA.x * d - this.m_rB.y * this.m_rB.x * p, this.m_mass.ez.x = -this.m_rA.y * d - this.m_rB.y * p, this.m_mass.ex.y = this.m_mass.ey.x, this.m_mass.ey.y = _ + f + this.m_rA.x * this.m_rA.x * d + this.m_rB.x * this.m_rB.x * p, this.m_mass.ez.y = this.m_rA.x * d + this.m_rB.x * p, this.m_mass.ex.z = this.m_mass.ez.x, this.m_mass.ey.z = this.m_mass.ez.y, this.m_mass.ez.z = d + p, this.m_motorMass = d + p, this.m_motorMass > 0 && (this.m_motorMass = 1 / this.m_motorMass), this.m_enableMotor && !m || (this.m_motorImpulse = 0), this.m_enableLimit && !m) {
                            var y = o - i - this.m_referenceAngle;
                            v(this.m_upperAngle - this.m_lowerAngle) < 2 * h ? this.m_limitState = t.b2LimitState.e_equalLimits : y <= this.m_lowerAngle ? (this.m_limitState !== t.b2LimitState.e_atLowerLimit && (this.m_impulse.z = 0), this.m_limitState = t.b2LimitState.e_atLowerLimit) : y >= this.m_upperAngle ? (this.m_limitState !== t.b2LimitState.e_atUpperLimit && (this.m_impulse.z = 0), this.m_limitState = t.b2LimitState.e_atUpperLimit) : (this.m_limitState = t.b2LimitState.e_inactiveLimit, this.m_impulse.z = 0)
                        } else this.m_limitState = t.b2LimitState.e_inactiveLimit;
                        if (e.step.warmStarting) {
                            this.m_impulse.SelfMul(e.step.dtRatio), this.m_motorImpulse *= e.step.dtRatio;
                            var g = n.InitVelocityConstraints_s_P.Set(this.m_impulse.x, this.m_impulse.y);
                            r.SelfMulSub(_, g), s -= d * (P.CrossVV(this.m_rA, g) + this.m_motorImpulse + this.m_impulse.z), a.SelfMulAdd(f, g), l += p * (P.CrossVV(this.m_rB, g) + this.m_motorImpulse + this.m_impulse.z)
                        } else this.m_impulse.SetZero(), this.m_motorImpulse = 0;
                        e.velocities[this.m_indexA].w = s, e.velocities[this.m_indexB].w = l
                    }, n.prototype.SolveVelocityConstraints = function(e) {
                        var i = e.velocities[this.m_indexA].v,
                            r = e.velocities[this.m_indexA].w,
                            s = e.velocities[this.m_indexB].v,
                            o = e.velocities[this.m_indexB].w,
                            a = this.m_invMassA,
                            l = this.m_invMassB,
                            h = this.m_invIA,
                            c = this.m_invIB,
                            u = h + c === 0;
                        if (this.m_enableMotor && this.m_limitState !== t.b2LimitState.e_equalLimits && !u) {
                            var _ = o - r - this.m_motorSpeed,
                                f = -this.m_motorMass * _,
                                d = this.m_motorImpulse,
                                p = e.step.dt * this.m_maxMotorTorque;
                            this.m_motorImpulse = b(this.m_motorImpulse + f, -p, p), r -= h * (f = this.m_motorImpulse - d), o += c * f
                        }
                        if (this.m_enableLimit && this.m_limitState !== t.b2LimitState.e_inactiveLimit && !u) {
                            var m = P.SubVV(P.AddVCrossSV(s, o, this.m_rB, P.s_t0), P.AddVCrossSV(i, r, this.m_rA, P.s_t1), n.SolveVelocityConstraints_s_Cdot1),
                                y = o - r,
                                v = this.m_mass.Solve33(m.x, m.y, y, n.SolveVelocityConstraints_s_impulse_v3).SelfNeg();
                            if (this.m_limitState === t.b2LimitState.e_equalLimits) this.m_impulse.SelfAdd(v);
                            else if (this.m_limitState === t.b2LimitState.e_atLowerLimit) {
                                if (this.m_impulse.z + v.z < 0) {
                                    var g = -m.x + this.m_impulse.z * this.m_mass.ez.x,
                                        x = -m.y + this.m_impulse.z * this.m_mass.ez.y,
                                        A = this.m_mass.Solve22(g, x, n.SolveVelocityConstraints_s_reduced_v2);
                                    v.x = A.x, v.y = A.y, v.z = -this.m_impulse.z, this.m_impulse.x += A.x, this.m_impulse.y += A.y, this.m_impulse.z = 0
                                } else this.m_impulse.SelfAdd(v)
                            } else if (this.m_limitState === t.b2LimitState.e_atUpperLimit) {
                                if (this.m_impulse.z + v.z > 0) {
                                    g = -m.x + this.m_impulse.z * this.m_mass.ez.x, x = -m.y + this.m_impulse.z * this.m_mass.ez.y, A = this.m_mass.Solve22(g, x, n.SolveVelocityConstraints_s_reduced_v2);
                                    v.x = A.x, v.y = A.y, v.z = -this.m_impulse.z, this.m_impulse.x += A.x, this.m_impulse.y += A.y, this.m_impulse.z = 0
                                } else this.m_impulse.SelfAdd(v)
                            }
                            var C = n.SolveVelocityConstraints_s_P.Set(v.x, v.y);
                            i.SelfMulSub(a, C), r -= h * (P.CrossVV(this.m_rA, C) + v.z), s.SelfMulAdd(l, C), o += c * (P.CrossVV(this.m_rB, C) + v.z)
                        } else {
                            var T = P.SubVV(P.AddVCrossSV(s, o, this.m_rB, P.s_t0), P.AddVCrossSV(i, r, this.m_rA, P.s_t1), n.SolveVelocityConstraints_s_Cdot_v2),
                                S = this.m_mass.Solve22(-T.x, -T.y, n.SolveVelocityConstraints_s_impulse_v2);
                            this.m_impulse.x += S.x, this.m_impulse.y += S.y, i.SelfMulSub(a, S), r -= h * P.CrossVV(this.m_rA, S), s.SelfMulAdd(l, S), o += c * P.CrossVV(this.m_rB, S)
                        }
                        e.velocities[this.m_indexA].w = r, e.velocities[this.m_indexB].w = o
                    }, n.prototype.SolvePositionConstraints = function(e) {
                        var i, r = e.positions[this.m_indexA].c,
                            s = e.positions[this.m_indexA].a,
                            o = e.positions[this.m_indexB].c,
                            a = e.positions[this.m_indexB].a,
                            c = this.m_qA.SetAngle(s),
                            u = this.m_qB.SetAngle(a),
                            _ = 0,
                            f = this.m_invIA + this.m_invIB === 0;
                        if (this.m_enableLimit && this.m_limitState !== t.b2LimitState.e_inactiveLimit && !f) {
                            var d = a - s - this.m_referenceAngle,
                                p = 0;
                            if (this.m_limitState === t.b2LimitState.e_equalLimits) {
                                var m = b(d - this.m_lowerAngle, -.13962634015955555, .13962634015955555);
                                p = -this.m_motorMass * m, _ = v(m)
                            } else if (this.m_limitState === t.b2LimitState.e_atLowerLimit) {
                                _ = -(m = d - this.m_lowerAngle), m = b(m + h, -.13962634015955555, 0), p = -this.m_motorMass * m
                            } else if (this.m_limitState === t.b2LimitState.e_atUpperLimit) {
                                _ = m = d - this.m_upperAngle, m = b(m - h, 0, .13962634015955555), p = -this.m_motorMass * m
                            }
                            s -= this.m_invIA * p, a += this.m_invIB * p
                        }
                        c.SetAngle(s), u.SetAngle(a), P.SubVV(this.m_localAnchorA, this.m_localCenterA, this.m_lalcA);
                        var y = N.MulRV(c, this.m_lalcA, this.m_rA);
                        P.SubVV(this.m_localAnchorB, this.m_localCenterB, this.m_lalcB);
                        var g = N.MulRV(u, this.m_lalcB, this.m_rB),
                            x = P.SubVV(P.AddVV(o, g, P.s_t0), P.AddVV(r, y, P.s_t1), n.SolvePositionConstraints_s_C_v2);
                        i = x.Length();
                        var A = this.m_invMassA,
                            C = this.m_invMassB,
                            T = this.m_invIA,
                            S = this.m_invIB,
                            w = this.m_K;
                        w.ex.x = A + C + T * y.y * y.y + S * g.y * g.y, w.ex.y = -T * y.x * y.y - S * g.x * g.y, w.ey.x = w.ex.y, w.ey.y = A + C + T * y.x * y.x + S * g.x * g.x;
                        var E = w.Solve(x.x, x.y, n.SolvePositionConstraints_s_impulse).SelfNeg();
                        return r.SelfMulSub(A, E), s -= T * P.CrossVV(y, E), o.SelfMulAdd(C, E), a += S * P.CrossVV(g, E), e.positions[this.m_indexA].a = s, e.positions[this.m_indexB].a = a, i <= l && _ <= h
                    }, n.prototype.GetAnchorA = function(t) {
                        return this.m_bodyA.GetWorldPoint(this.m_localAnchorA, t)
                    }, n.prototype.GetAnchorB = function(t) {
                        return this.m_bodyB.GetWorldPoint(this.m_localAnchorB, t)
                    }, n.prototype.GetReactionForce = function(t, e) {
                        return e.x = t * this.m_impulse.x, e.y = t * this.m_impulse.y, e
                    }, n.prototype.GetReactionTorque = function(t) {
                        return t * this.m_impulse.z
                    }, n.prototype.GetLocalAnchorA = function() {
                        return this.m_localAnchorA
                    }, n.prototype.GetLocalAnchorB = function() {
                        return this.m_localAnchorB
                    }, n.prototype.GetReferenceAngle = function() {
                        return this.m_referenceAngle
                    }, n.prototype.GetJointAngle = function() {
                        return this.m_bodyB.m_sweep.a - this.m_bodyA.m_sweep.a - this.m_referenceAngle
                    }, n.prototype.GetJointSpeed = function() {
                        return this.m_bodyB.m_angularVelocity - this.m_bodyA.m_angularVelocity
                    }, n.prototype.IsMotorEnabled = function() {
                        return this.m_enableMotor
                    }, n.prototype.EnableMotor = function(t) {
                        t !== this.m_enableMotor && (this.m_bodyA.SetAwake(!0), this.m_bodyB.SetAwake(!0), this.m_enableMotor = t)
                    }, n.prototype.GetMotorTorque = function(t) {
                        return t * this.m_motorImpulse
                    }, n.prototype.GetMotorSpeed = function() {
                        return this.m_motorSpeed
                    }, n.prototype.SetMaxMotorTorque = function(t) {
                        t !== this.m_maxMotorTorque && (this.m_bodyA.SetAwake(!0), this.m_bodyB.SetAwake(!0), this.m_maxMotorTorque = t)
                    }, n.prototype.GetMaxMotorTorque = function() {
                        return this.m_maxMotorTorque
                    }, n.prototype.IsLimitEnabled = function() {
                        return this.m_enableLimit
                    }, n.prototype.EnableLimit = function(t) {
                        t !== this.m_enableLimit && (this.m_bodyA.SetAwake(!0), this.m_bodyB.SetAwake(!0), this.m_enableLimit = t, this.m_impulse.z = 0)
                    }, n.prototype.GetLowerLimit = function() {
                        return this.m_lowerAngle
                    }, n.prototype.GetUpperLimit = function() {
                        return this.m_upperAngle
                    }, n.prototype.SetLimits = function(t, e) {
                        t === this.m_lowerAngle && e === this.m_upperAngle || (this.m_bodyA.SetAwake(!0), this.m_bodyB.SetAwake(!0), this.m_impulse.z = 0, this.m_lowerAngle = t, this.m_upperAngle = e)
                    }, n.prototype.SetMotorSpeed = function(t) {
                        t !== this.m_motorSpeed && (this.m_bodyA.SetAwake(!0), this.m_bodyB.SetAwake(!0), this.m_motorSpeed = t)
                    }, n.prototype.Dump = function(t) {
                        var e = this.m_bodyA.m_islandIndex,
                            i = this.m_bodyB.m_islandIndex;
                        t("  const jd: b2RevoluteJointDef = new b2RevoluteJointDef();\n"), t("  jd.bodyA = bodies[%d];\n", e), t("  jd.bodyB = bodies[%d];\n", i), t("  jd.collideConnected = %s;\n", this.m_collideConnected ? "true" : "false"), t("  jd.localAnchorA.Set(%.15f, %.15f);\n", this.m_localAnchorA.x, this.m_localAnchorA.y), t("  jd.localAnchorB.Set(%.15f, %.15f);\n", this.m_localAnchorB.x, this.m_localAnchorB.y), t("  jd.referenceAngle = %.15f;\n", this.m_referenceAngle), t("  jd.enableLimit = %s;\n", this.m_enableLimit ? "true" : "false"), t("  jd.lowerAngle = %.15f;\n", this.m_lowerAngle), t("  jd.upperAngle = %.15f;\n", this.m_upperAngle), t("  jd.enableMotor = %s;\n", this.m_enableMotor ? "true" : "false"), t("  jd.motorSpeed = %.15f;\n", this.m_motorSpeed), t("  jd.maxMotorTorque = %.15f;\n", this.m_maxMotorTorque), t("  joints[%d] = this.m_world.CreateJoint(jd);\n", this.m_index)
                    }, n.InitVelocityConstraints_s_P = new P, n.SolveVelocityConstraints_s_P = new P, n.SolveVelocityConstraints_s_Cdot_v2 = new P, n.SolveVelocityConstraints_s_Cdot1 = new P, n.SolveVelocityConstraints_s_impulse_v3 = new O, n.SolveVelocityConstraints_s_reduced_v2 = new P, n.SolveVelocityConstraints_s_impulse_v2 = new P, n.SolvePositionConstraints_s_C_v2 = new P, n.SolvePositionConstraints_s_impulse = new P, n
                })(fi),
                Pi = (function(e) {
                    function i() {
                        var i = e.call(this, t.b2JointType.e_ropeJoint) || this;
                        return i.localAnchorA = new P(-1, 0), i.localAnchorB = new P(1, 0), i.maxLength = 0, i
                    }
                    return $e(i, e), i
                })(_i),
                Ri = (function(i) {
                    function n(n) {
                        var r = i.call(this, n) || this;
                        return r.m_localAnchorA = new P, r.m_localAnchorB = new P, r.m_maxLength = 0, r.m_length = 0, r.m_impulse = 0, r.m_indexA = 0, r.m_indexB = 0, r.m_u = new P, r.m_rA = new P, r.m_rB = new P, r.m_localCenterA = new P, r.m_localCenterB = new P, r.m_invMassA = 0, r.m_invMassB = 0, r.m_invIA = 0, r.m_invIB = 0, r.m_mass = 0, r.m_state = t.b2LimitState.e_inactiveLimit, r.m_qA = new N, r.m_qB = new N, r.m_lalcA = new P, r.m_lalcB = new P, r.m_localAnchorA.Copy(e(n.localAnchorA, new P(-1, 0))), r.m_localAnchorB.Copy(e(n.localAnchorB, new P(1, 0))), r.m_maxLength = e(n.maxLength, 0), r
                    }
                    return $e(n, i), n.prototype.InitVelocityConstraints = function(e) {
                        this.m_indexA = this.m_bodyA.m_islandIndex, this.m_indexB = this.m_bodyB.m_islandIndex, this.m_localCenterA.Copy(this.m_bodyA.m_sweep.localCenter), this.m_localCenterB.Copy(this.m_bodyB.m_sweep.localCenter), this.m_invMassA = this.m_bodyA.m_invMass, this.m_invMassB = this.m_bodyB.m_invMass, this.m_invIA = this.m_bodyA.m_invI, this.m_invIB = this.m_bodyB.m_invI;
                        var i = e.positions[this.m_indexA].c,
                            r = e.positions[this.m_indexA].a,
                            s = e.velocities[this.m_indexA].v,
                            o = e.velocities[this.m_indexA].w,
                            a = e.positions[this.m_indexB].c,
                            h = e.positions[this.m_indexB].a,
                            c = e.velocities[this.m_indexB].v,
                            u = e.velocities[this.m_indexB].w,
                            _ = this.m_qA.SetAngle(r),
                            f = this.m_qB.SetAngle(h);
                        P.SubVV(this.m_localAnchorA, this.m_localCenterA, this.m_lalcA), N.MulRV(_, this.m_lalcA, this.m_rA), P.SubVV(this.m_localAnchorB, this.m_localCenterB, this.m_lalcB), N.MulRV(f, this.m_lalcB, this.m_rB), this.m_u.Copy(a).SelfAdd(this.m_rB).SelfSub(i).SelfSub(this.m_rA), this.m_length = this.m_u.Length();
                        var d = this.m_length - this.m_maxLength;
                        if (this.m_state = d > 0 ? t.b2LimitState.e_atUpperLimit : t.b2LimitState.e_inactiveLimit, !(this.m_length > l)) return this.m_u.SetZero(), this.m_mass = 0, void(this.m_impulse = 0);
                        this.m_u.SelfMul(1 / this.m_length);
                        var p = P.CrossVV(this.m_rA, this.m_u),
                            m = P.CrossVV(this.m_rB, this.m_u),
                            y = this.m_invMassA + this.m_invIA * p * p + this.m_invMassB + this.m_invIB * m * m;
                        if (this.m_mass = 0 !== y ? 1 / y : 0, e.step.warmStarting) {
                            this.m_impulse *= e.step.dtRatio;
                            var v = P.MulSV(this.m_impulse, this.m_u, n.InitVelocityConstraints_s_P);
                            s.SelfMulSub(this.m_invMassA, v), o -= this.m_invIA * P.CrossVV(this.m_rA, v), c.SelfMulAdd(this.m_invMassB, v), u += this.m_invIB * P.CrossVV(this.m_rB, v)
                        } else this.m_impulse = 0;
                        e.velocities[this.m_indexA].w = o, e.velocities[this.m_indexB].w = u
                    }, n.prototype.SolveVelocityConstraints = function(t) {
                        var e = t.velocities[this.m_indexA].v,
                            i = t.velocities[this.m_indexA].w,
                            r = t.velocities[this.m_indexB].v,
                            s = t.velocities[this.m_indexB].w,
                            o = P.AddVCrossSV(e, i, this.m_rA, n.SolveVelocityConstraints_s_vpA),
                            a = P.AddVCrossSV(r, s, this.m_rB, n.SolveVelocityConstraints_s_vpB),
                            l = this.m_length - this.m_maxLength,
                            h = P.DotVV(this.m_u, P.SubVV(a, o, P.s_t0));
                        l < 0 && (h += t.step.inv_dt * l);
                        var c = -this.m_mass * h,
                            u = this.m_impulse;
                        this.m_impulse = g(0, this.m_impulse + c), c = this.m_impulse - u;
                        var _ = P.MulSV(c, this.m_u, n.SolveVelocityConstraints_s_P);
                        e.SelfMulSub(this.m_invMassA, _), i -= this.m_invIA * P.CrossVV(this.m_rA, _), r.SelfMulAdd(this.m_invMassB, _), s += this.m_invIB * P.CrossVV(this.m_rB, _), t.velocities[this.m_indexA].w = i, t.velocities[this.m_indexB].w = s
                    }, n.prototype.SolvePositionConstraints = function(t) {
                        var e = t.positions[this.m_indexA].c,
                            i = t.positions[this.m_indexA].a,
                            r = t.positions[this.m_indexB].c,
                            s = t.positions[this.m_indexB].a,
                            o = this.m_qA.SetAngle(i),
                            a = this.m_qB.SetAngle(s);
                        P.SubVV(this.m_localAnchorA, this.m_localCenterA, this.m_lalcA);
                        var h = N.MulRV(o, this.m_lalcA, this.m_rA);
                        P.SubVV(this.m_localAnchorB, this.m_localCenterB, this.m_lalcB);
                        var c = N.MulRV(a, this.m_lalcB, this.m_rB),
                            u = this.m_u.Copy(r).SelfAdd(c).SelfSub(e).SelfSub(h),
                            _ = u.Normalize(),
                            f = _ - this.m_maxLength;
                        f = b(f, 0, .2);
                        var d = -this.m_mass * f,
                            p = P.MulSV(d, u, n.SolvePositionConstraints_s_P);
                        return e.SelfMulSub(this.m_invMassA, p), i -= this.m_invIA * P.CrossVV(h, p), r.SelfMulAdd(this.m_invMassB, p), s += this.m_invIB * P.CrossVV(c, p), t.positions[this.m_indexA].a = i, t.positions[this.m_indexB].a = s, _ - this.m_maxLength < l
                    }, n.prototype.GetAnchorA = function(t) {
                        return this.m_bodyA.GetWorldPoint(this.m_localAnchorA, t)
                    }, n.prototype.GetAnchorB = function(t) {
                        return this.m_bodyB.GetWorldPoint(this.m_localAnchorB, t)
                    }, n.prototype.GetReactionForce = function(t, e) {
                        return P.MulSV(t * this.m_impulse, this.m_u, e)
                    }, n.prototype.GetReactionTorque = function(t) {
                        return 0
                    }, n.prototype.GetLocalAnchorA = function() {
                        return this.m_localAnchorA
                    }, n.prototype.GetLocalAnchorB = function() {
                        return this.m_localAnchorB
                    }, n.prototype.SetMaxLength = function(t) {
                        this.m_maxLength = t
                    }, n.prototype.GetMaxLength = function() {
                        return this.m_maxLength
                    }, n.prototype.GetLimitState = function() {
                        return this.m_state
                    }, n.prototype.Dump = function(t) {
                        var e = this.m_bodyA.m_islandIndex,
                            i = this.m_bodyB.m_islandIndex;
                        t("  const jd: b2RopeJointDef = new b2RopeJointDef();\n"), t("  jd.bodyA = bodies[%d];\n", e), t("  jd.bodyB = bodies[%d];\n", i), t("  jd.collideConnected = %s;\n", this.m_collideConnected ? "true" : "false"), t("  jd.localAnchorA.Set(%.15f, %.15f);\n", this.m_localAnchorA.x, this.m_localAnchorA.y), t("  jd.localAnchorB.Set(%.15f, %.15f);\n", this.m_localAnchorB.x, this.m_localAnchorB.y), t("  jd.maxLength = %.15f;\n", this.m_maxLength), t("  joints[%d] = this.m_world.CreateJoint(jd);\n", this.m_index)
                    }, n.InitVelocityConstraints_s_P = new P, n.SolveVelocityConstraints_s_vpA = new P, n.SolveVelocityConstraints_s_vpB = new P, n.SolveVelocityConstraints_s_P = new P, n.SolvePositionConstraints_s_P = new P, n
                })(fi),
                Oi = (function(e) {
                    function i() {
                        var i = e.call(this, t.b2JointType.e_weldJoint) || this;
                        return i.localAnchorA = new P, i.localAnchorB = new P, i.referenceAngle = 0, i.frequencyHz = 0, i.dampingRatio = 0, i
                    }
                    return $e(i, e), i.prototype.Initialize = function(t, e, i) {
                        this.bodyA = t, this.bodyB = e, this.bodyA.GetLocalPoint(i, this.localAnchorA), this.bodyB.GetLocalPoint(i, this.localAnchorB), this.referenceAngle = this.bodyB.GetAngle() - this.bodyA.GetAngle()
                    }, i
                })(_i),
                Li = (function(t) {
                    function i(i) {
                        var n = t.call(this, i) || this;
                        return n.m_frequencyHz = 0, n.m_dampingRatio = 0, n.m_bias = 0, n.m_localAnchorA = new P, n.m_localAnchorB = new P, n.m_referenceAngle = 0, n.m_gamma = 0, n.m_impulse = new O(0, 0, 0), n.m_indexA = 0, n.m_indexB = 0, n.m_rA = new P, n.m_rB = new P, n.m_localCenterA = new P, n.m_localCenterB = new P, n.m_invMassA = 0, n.m_invMassB = 0, n.m_invIA = 0, n.m_invIB = 0, n.m_mass = new F, n.m_qA = new N, n.m_qB = new N, n.m_lalcA = new P, n.m_lalcB = new P, n.m_K = new F, n.m_frequencyHz = e(i.frequencyHz, 0), n.m_dampingRatio = e(i.dampingRatio, 0), n.m_localAnchorA.Copy(e(i.localAnchorA, P.ZERO)), n.m_localAnchorB.Copy(e(i.localAnchorB, P.ZERO)), n.m_referenceAngle = e(i.referenceAngle, 0), n.m_impulse.SetZero(), n
                    }
                    return $e(i, t), i.prototype.InitVelocityConstraints = function(t) {
                        this.m_indexA = this.m_bodyA.m_islandIndex, this.m_indexB = this.m_bodyB.m_islandIndex, this.m_localCenterA.Copy(this.m_bodyA.m_sweep.localCenter), this.m_localCenterB.Copy(this.m_bodyB.m_sweep.localCenter), this.m_invMassA = this.m_bodyA.m_invMass, this.m_invMassB = this.m_bodyB.m_invMass, this.m_invIA = this.m_bodyA.m_invI, this.m_invIB = this.m_bodyB.m_invI;
                        var e = t.positions[this.m_indexA].a,
                            n = t.velocities[this.m_indexA].v,
                            r = t.velocities[this.m_indexA].w,
                            o = t.positions[this.m_indexB].a,
                            a = t.velocities[this.m_indexB].v,
                            l = t.velocities[this.m_indexB].w,
                            h = this.m_qA.SetAngle(e),
                            c = this.m_qB.SetAngle(o);
                        P.SubVV(this.m_localAnchorA, this.m_localCenterA, this.m_lalcA), N.MulRV(h, this.m_lalcA, this.m_rA), P.SubVV(this.m_localAnchorB, this.m_localCenterB, this.m_lalcB), N.MulRV(c, this.m_lalcB, this.m_rB);
                        var u = this.m_invMassA,
                            _ = this.m_invMassB,
                            f = this.m_invIA,
                            d = this.m_invIB,
                            p = this.m_K;
                        if (p.ex.x = u + _ + this.m_rA.y * this.m_rA.y * f + this.m_rB.y * this.m_rB.y * d, p.ey.x = -this.m_rA.y * this.m_rA.x * f - this.m_rB.y * this.m_rB.x * d, p.ez.x = -this.m_rA.y * f - this.m_rB.y * d, p.ex.y = p.ey.x, p.ey.y = u + _ + this.m_rA.x * this.m_rA.x * f + this.m_rB.x * this.m_rB.x * d, p.ez.y = this.m_rA.x * f + this.m_rB.x * d, p.ex.z = p.ez.x, p.ey.z = p.ez.y, p.ez.z = f + d, this.m_frequencyHz > 0) {
                            p.GetInverse22(this.m_mass);
                            var m = f + d,
                                y = m > 0 ? 1 / m : 0,
                                v = o - e - this.m_referenceAngle,
                                g = 2 * s * this.m_frequencyHz,
                                x = 2 * y * this.m_dampingRatio * g,
                                b = y * g * g,
                                A = t.step.dt;
                            this.m_gamma = A * (x + A * b), this.m_gamma = 0 !== this.m_gamma ? 1 / this.m_gamma : 0, this.m_bias = v * A * b * this.m_gamma, m += this.m_gamma, this.m_mass.ez.z = 0 !== m ? 1 / m : 0
                        } else p.GetSymInverse33(this.m_mass), this.m_gamma = 0, this.m_bias = 0;
                        if (t.step.warmStarting) {
                            this.m_impulse.SelfMul(t.step.dtRatio);
                            var C = i.InitVelocityConstraints_s_P.Set(this.m_impulse.x, this.m_impulse.y);
                            n.SelfMulSub(u, C), r -= f * (P.CrossVV(this.m_rA, C) + this.m_impulse.z), a.SelfMulAdd(_, C), l += d * (P.CrossVV(this.m_rB, C) + this.m_impulse.z)
                        } else this.m_impulse.SetZero();
                        t.velocities[this.m_indexA].w = r, t.velocities[this.m_indexB].w = l
                    }, i.prototype.SolveVelocityConstraints = function(t) {
                        var e = t.velocities[this.m_indexA].v,
                            n = t.velocities[this.m_indexA].w,
                            r = t.velocities[this.m_indexB].v,
                            s = t.velocities[this.m_indexB].w,
                            o = this.m_invMassA,
                            a = this.m_invMassB,
                            l = this.m_invIA,
                            h = this.m_invIB;
                        if (this.m_frequencyHz > 0) {
                            var c = s - n,
                                u = -this.m_mass.ez.z * (c + this.m_bias + this.m_gamma * this.m_impulse.z);
                            this.m_impulse.z += u, n -= l * u, s += h * u;
                            var _ = P.SubVV(P.AddVCrossSV(r, s, this.m_rB, P.s_t0), P.AddVCrossSV(e, n, this.m_rA, P.s_t1), i.SolveVelocityConstraints_s_Cdot1),
                                f = F.MulM33XY(this.m_mass, _.x, _.y, i.SolveVelocityConstraints_s_impulse1).SelfNeg();
                            this.m_impulse.x += f.x, this.m_impulse.y += f.y;
                            var d = f;
                            e.SelfMulSub(o, d), n -= l * P.CrossVV(this.m_rA, d), r.SelfMulAdd(a, d), s += h * P.CrossVV(this.m_rB, d)
                        } else {
                            _ = P.SubVV(P.AddVCrossSV(r, s, this.m_rB, P.s_t0), P.AddVCrossSV(e, n, this.m_rA, P.s_t1), i.SolveVelocityConstraints_s_Cdot1), c = s - n;
                            var p = F.MulM33XYZ(this.m_mass, _.x, _.y, c, i.SolveVelocityConstraints_s_impulse).SelfNeg();
                            this.m_impulse.SelfAdd(p);
                            d = i.SolveVelocityConstraints_s_P.Set(p.x, p.y);
                            e.SelfMulSub(o, d), n -= l * (P.CrossVV(this.m_rA, d) + p.z), r.SelfMulAdd(a, d), s += h * (P.CrossVV(this.m_rB, d) + p.z)
                        }
                        t.velocities[this.m_indexA].w = n, t.velocities[this.m_indexB].w = s
                    }, i.prototype.SolvePositionConstraints = function(t) {
                        var e = t.positions[this.m_indexA].c,
                            n = t.positions[this.m_indexA].a,
                            r = t.positions[this.m_indexB].c,
                            s = t.positions[this.m_indexB].a,
                            o = this.m_qA.SetAngle(n),
                            a = this.m_qB.SetAngle(s),
                            c = this.m_invMassA,
                            u = this.m_invMassB,
                            _ = this.m_invIA,
                            f = this.m_invIB;
                        P.SubVV(this.m_localAnchorA, this.m_localCenterA, this.m_lalcA);
                        var d = N.MulRV(o, this.m_lalcA, this.m_rA);
                        P.SubVV(this.m_localAnchorB, this.m_localCenterB, this.m_lalcB);
                        var p, m, y = N.MulRV(a, this.m_lalcB, this.m_rB),
                            g = this.m_K;
                        if (g.ex.x = c + u + d.y * d.y * _ + y.y * y.y * f, g.ey.x = -d.y * d.x * _ - y.y * y.x * f, g.ez.x = -d.y * _ - y.y * f, g.ex.y = g.ey.x, g.ey.y = c + u + d.x * d.x * _ + y.x * y.x * f, g.ez.y = d.x * _ + y.x * f, g.ex.z = g.ez.x, g.ey.z = g.ez.y, g.ez.z = _ + f, this.m_frequencyHz > 0) {
                            p = (b = P.SubVV(P.AddVV(r, y, P.s_t0), P.AddVV(e, d, P.s_t1), i.SolvePositionConstraints_s_C1)).Length(), m = 0;
                            var x = g.Solve22(b.x, b.y, i.SolvePositionConstraints_s_P).SelfNeg();
                            e.SelfMulSub(c, x), n -= _ * P.CrossVV(d, x), r.SelfMulAdd(u, x), s += f * P.CrossVV(y, x)
                        } else {
                            var b = P.SubVV(P.AddVV(r, y, P.s_t0), P.AddVV(e, d, P.s_t1), i.SolvePositionConstraints_s_C1),
                                A = s - n - this.m_referenceAngle;
                            p = b.Length(), m = v(A);
                            var C = g.Solve33(b.x, b.y, A, i.SolvePositionConstraints_s_impulse).SelfNeg();
                            x = i.SolvePositionConstraints_s_P.Set(C.x, C.y);
                            e.SelfMulSub(c, x), n -= _ * (P.CrossVV(this.m_rA, x) + C.z), r.SelfMulAdd(u, x), s += f * (P.CrossVV(this.m_rB, x) + C.z)
                        }
                        return t.positions[this.m_indexA].a = n, t.positions[this.m_indexB].a = s, p <= l && m <= h
                    }, i.prototype.GetAnchorA = function(t) {
                        return this.m_bodyA.GetWorldPoint(this.m_localAnchorA, t)
                    }, i.prototype.GetAnchorB = function(t) {
                        return this.m_bodyB.GetWorldPoint(this.m_localAnchorB, t)
                    }, i.prototype.GetReactionForce = function(t, e) {
                        return e.x = t * this.m_impulse.x, e.y = t * this.m_impulse.y, e
                    }, i.prototype.GetReactionTorque = function(t) {
                        return t * this.m_impulse.z
                    }, i.prototype.GetLocalAnchorA = function() {
                        return this.m_localAnchorA
                    }, i.prototype.GetLocalAnchorB = function() {
                        return this.m_localAnchorB
                    }, i.prototype.GetReferenceAngle = function() {
                        return this.m_referenceAngle
                    }, i.prototype.SetFrequency = function(t) {
                        this.m_frequencyHz = t
                    }, i.prototype.GetFrequency = function() {
                        return this.m_frequencyHz
                    }, i.prototype.SetDampingRatio = function(t) {
                        this.m_dampingRatio = t
                    }, i.prototype.GetDampingRatio = function() {
                        return this.m_dampingRatio
                    }, i.prototype.Dump = function(t) {
                        var e = this.m_bodyA.m_islandIndex,
                            i = this.m_bodyB.m_islandIndex;
                        t("  const jd: b2WeldJointDef = new b2WeldJointDef();\n"), t("  jd.bodyA = bodies[%d];\n", e), t("  jd.bodyB = bodies[%d];\n", i), t("  jd.collideConnected = %s;\n", this.m_collideConnected ? "true" : "false"), t("  jd.localAnchorA.Set(%.15f, %.15f);\n", this.m_localAnchorA.x, this.m_localAnchorA.y), t("  jd.localAnchorB.Set(%.15f, %.15f);\n", this.m_localAnchorB.x, this.m_localAnchorB.y), t("  jd.referenceAngle = %.15f;\n", this.m_referenceAngle), t("  jd.frequencyHz = %.15f;\n", this.m_frequencyHz), t("  jd.dampingRatio = %.15f;\n", this.m_dampingRatio), t("  joints[%d] = this.m_world.CreateJoint(jd);\n", this.m_index)
                    }, i.InitVelocityConstraints_s_P = new P, i.SolveVelocityConstraints_s_Cdot1 = new P, i.SolveVelocityConstraints_s_impulse1 = new P, i.SolveVelocityConstraints_s_impulse = new O, i.SolveVelocityConstraints_s_P = new P, i.SolvePositionConstraints_s_C1 = new P, i.SolvePositionConstraints_s_P = new P, i.SolvePositionConstraints_s_impulse = new O, i
                })(fi),
                Fi = (function(e) {
                    function i() {
                        var i = e.call(this, t.b2JointType.e_wheelJoint) || this;
                        return i.localAnchorA = new P(0, 0), i.localAnchorB = new P(0, 0), i.localAxisA = new P(1, 0), i.enableMotor = !1, i.maxMotorTorque = 0, i.motorSpeed = 0, i.frequencyHz = 2, i.dampingRatio = .7, i
                    }
                    return $e(i, e), i.prototype.Initialize = function(t, e, i, n) {
                        this.bodyA = t, this.bodyB = e, this.bodyA.GetLocalPoint(i, this.localAnchorA), this.bodyB.GetLocalPoint(i, this.localAnchorB), this.bodyA.GetLocalVector(n, this.localAxisA)
                    }, i
                })(_i),
                Ni = (function(t) {
                    function i(i) {
                        var n = t.call(this, i) || this;
                        return n.m_frequencyHz = 0, n.m_dampingRatio = 0, n.m_localAnchorA = new P, n.m_localAnchorB = new P, n.m_localXAxisA = new P, n.m_localYAxisA = new P, n.m_impulse = 0, n.m_motorImpulse = 0, n.m_springImpulse = 0, n.m_maxMotorTorque = 0, n.m_motorSpeed = 0, n.m_enableMotor = !1, n.m_indexA = 0, n.m_indexB = 0, n.m_localCenterA = new P, n.m_localCenterB = new P, n.m_invMassA = 0, n.m_invMassB = 0, n.m_invIA = 0, n.m_invIB = 0, n.m_ax = new P, n.m_ay = new P, n.m_sAx = 0, n.m_sBx = 0, n.m_sAy = 0, n.m_sBy = 0, n.m_mass = 0, n.m_motorMass = 0, n.m_springMass = 0, n.m_bias = 0, n.m_gamma = 0, n.m_qA = new N, n.m_qB = new N, n.m_lalcA = new P, n.m_lalcB = new P, n.m_rA = new P, n.m_rB = new P, n.m_frequencyHz = e(i.frequencyHz, 2), n.m_dampingRatio = e(i.dampingRatio, .7), n.m_localAnchorA.Copy(e(i.localAnchorA, P.ZERO)), n.m_localAnchorB.Copy(e(i.localAnchorB, P.ZERO)), n.m_localXAxisA.Copy(e(i.localAxisA, P.UNITX)), P.CrossOneV(n.m_localXAxisA, n.m_localYAxisA), n.m_maxMotorTorque = e(i.maxMotorTorque, 0), n.m_motorSpeed = e(i.motorSpeed, 0), n.m_enableMotor = e(i.enableMotor, !1), n.m_ax.SetZero(), n.m_ay.SetZero(), n
                    }
                    return $e(i, t), i.prototype.GetMotorSpeed = function() {
                        return this.m_motorSpeed
                    }, i.prototype.GetMaxMotorTorque = function() {
                        return this.m_maxMotorTorque
                    }, i.prototype.SetSpringFrequencyHz = function(t) {
                        this.m_frequencyHz = t
                    }, i.prototype.GetSpringFrequencyHz = function() {
                        return this.m_frequencyHz
                    }, i.prototype.SetSpringDampingRatio = function(t) {
                        this.m_dampingRatio = t
                    }, i.prototype.GetSpringDampingRatio = function() {
                        return this.m_dampingRatio
                    }, i.prototype.InitVelocityConstraints = function(t) {
                        this.m_indexA = this.m_bodyA.m_islandIndex, this.m_indexB = this.m_bodyB.m_islandIndex, this.m_localCenterA.Copy(this.m_bodyA.m_sweep.localCenter), this.m_localCenterB.Copy(this.m_bodyB.m_sweep.localCenter), this.m_invMassA = this.m_bodyA.m_invMass, this.m_invMassB = this.m_bodyB.m_invMass, this.m_invIA = this.m_bodyA.m_invI, this.m_invIB = this.m_bodyB.m_invI;
                        var e = this.m_invMassA,
                            n = this.m_invMassB,
                            r = this.m_invIA,
                            o = this.m_invIB,
                            a = t.positions[this.m_indexA].c,
                            l = t.positions[this.m_indexA].a,
                            h = t.velocities[this.m_indexA].v,
                            c = t.velocities[this.m_indexA].w,
                            u = t.positions[this.m_indexB].c,
                            _ = t.positions[this.m_indexB].a,
                            f = t.velocities[this.m_indexB].v,
                            d = t.velocities[this.m_indexB].w,
                            p = this.m_qA.SetAngle(l),
                            m = this.m_qB.SetAngle(_);
                        P.SubVV(this.m_localAnchorA, this.m_localCenterA, this.m_lalcA);
                        var y = N.MulRV(p, this.m_lalcA, this.m_rA);
                        P.SubVV(this.m_localAnchorB, this.m_localCenterB, this.m_lalcB);
                        var v = N.MulRV(m, this.m_lalcB, this.m_rB),
                            g = P.SubVV(P.AddVV(u, v, P.s_t0), P.AddVV(a, y, P.s_t1), i.InitVelocityConstraints_s_d);
                        if (N.MulRV(p, this.m_localYAxisA, this.m_ay), this.m_sAy = P.CrossVV(P.AddVV(g, y, P.s_t0), this.m_ay), this.m_sBy = P.CrossVV(v, this.m_ay), this.m_mass = e + n + r * this.m_sAy * this.m_sAy + o * this.m_sBy * this.m_sBy, this.m_mass > 0 && (this.m_mass = 1 / this.m_mass), this.m_springMass = 0, this.m_bias = 0, this.m_gamma = 0, this.m_frequencyHz > 0) {
                            N.MulRV(p, this.m_localXAxisA, this.m_ax), this.m_sAx = P.CrossVV(P.AddVV(g, y, P.s_t0), this.m_ax), this.m_sBx = P.CrossVV(v, this.m_ax);
                            var x = e + n + r * this.m_sAx * this.m_sAx + o * this.m_sBx * this.m_sBx;
                            if (x > 0) {
                                this.m_springMass = 1 / x;
                                var b = P.DotVV(g, this.m_ax),
                                    A = 2 * s * this.m_frequencyHz,
                                    C = 2 * this.m_springMass * this.m_dampingRatio * A,
                                    T = this.m_springMass * A * A,
                                    S = t.step.dt;
                                this.m_gamma = S * (C + S * T), this.m_gamma > 0 && (this.m_gamma = 1 / this.m_gamma), this.m_bias = b * S * T * this.m_gamma, this.m_springMass = x + this.m_gamma, this.m_springMass > 0 && (this.m_springMass = 1 / this.m_springMass)
                            }
                        } else this.m_springImpulse = 0;
                        if (this.m_enableMotor ? (this.m_motorMass = r + o, this.m_motorMass > 0 && (this.m_motorMass = 1 / this.m_motorMass)) : (this.m_motorMass = 0, this.m_motorImpulse = 0), t.step.warmStarting) {
                            this.m_impulse *= t.step.dtRatio, this.m_springImpulse *= t.step.dtRatio, this.m_motorImpulse *= t.step.dtRatio;
                            var w = P.AddVV(P.MulSV(this.m_impulse, this.m_ay, P.s_t0), P.MulSV(this.m_springImpulse, this.m_ax, P.s_t1), i.InitVelocityConstraints_s_P),
                                E = this.m_impulse * this.m_sAy + this.m_springImpulse * this.m_sAx + this.m_motorImpulse,
                                M = this.m_impulse * this.m_sBy + this.m_springImpulse * this.m_sBx + this.m_motorImpulse;
                            h.SelfMulSub(this.m_invMassA, w), c -= this.m_invIA * E, f.SelfMulAdd(this.m_invMassB, w), d += this.m_invIB * M
                        } else this.m_impulse = 0, this.m_springImpulse = 0, this.m_motorImpulse = 0;
                        t.velocities[this.m_indexA].w = c, t.velocities[this.m_indexB].w = d
                    }, i.prototype.SolveVelocityConstraints = function(t) {
                        var e = this.m_invMassA,
                            n = this.m_invMassB,
                            r = this.m_invIA,
                            s = this.m_invIB,
                            o = t.velocities[this.m_indexA].v,
                            a = t.velocities[this.m_indexA].w,
                            l = t.velocities[this.m_indexB].v,
                            h = t.velocities[this.m_indexB].w,
                            c = P.DotVV(this.m_ax, P.SubVV(l, o, P.s_t0)) + this.m_sBx * h - this.m_sAx * a,
                            u = -this.m_springMass * (c + this.m_bias + this.m_gamma * this.m_springImpulse);
                        this.m_springImpulse += u;
                        var _ = P.MulSV(u, this.m_ax, i.SolveVelocityConstraints_s_P),
                            f = u * this.m_sAx,
                            d = u * this.m_sBx;
                        o.SelfMulSub(e, _), a -= r * f, l.SelfMulAdd(n, _);
                        c = (h += s * d) - a - this.m_motorSpeed, u = -this.m_motorMass * c;
                        var p = this.m_motorImpulse,
                            m = t.step.dt * this.m_maxMotorTorque;
                        this.m_motorImpulse = b(this.m_motorImpulse + u, -m, m), a -= r * (u = this.m_motorImpulse - p), h += s * u;
                        c = P.DotVV(this.m_ay, P.SubVV(l, o, P.s_t0)) + this.m_sBy * h - this.m_sAy * a, u = -this.m_mass * c;
                        this.m_impulse += u;
                        _ = P.MulSV(u, this.m_ay, i.SolveVelocityConstraints_s_P), f = u * this.m_sAy, d = u * this.m_sBy;
                        o.SelfMulSub(e, _), a -= r * f, l.SelfMulAdd(n, _), h += s * d, t.velocities[this.m_indexA].w = a, t.velocities[this.m_indexB].w = h
                    }, i.prototype.SolvePositionConstraints = function(t) {
                        var e = t.positions[this.m_indexA].c,
                            n = t.positions[this.m_indexA].a,
                            r = t.positions[this.m_indexB].c,
                            s = t.positions[this.m_indexB].a,
                            o = this.m_qA.SetAngle(n),
                            a = this.m_qB.SetAngle(s);
                        P.SubVV(this.m_localAnchorA, this.m_localCenterA, this.m_lalcA);
                        var h = N.MulRV(o, this.m_lalcA, this.m_rA);
                        P.SubVV(this.m_localAnchorB, this.m_localCenterB, this.m_lalcB);
                        var c, u = N.MulRV(a, this.m_lalcB, this.m_rB),
                            _ = P.AddVV(P.SubVV(r, e, P.s_t0), P.SubVV(u, h, P.s_t1), i.SolvePositionConstraints_s_d),
                            f = N.MulRV(o, this.m_localYAxisA, this.m_ay),
                            d = P.CrossVV(P.AddVV(_, h, P.s_t0), f),
                            p = P.CrossVV(u, f),
                            m = P.DotVV(_, this.m_ay),
                            y = this.m_invMassA + this.m_invMassB + this.m_invIA * this.m_sAy * this.m_sAy + this.m_invIB * this.m_sBy * this.m_sBy;
                        c = 0 !== y ? -m / y : 0;
                        var g = P.MulSV(c, f, i.SolvePositionConstraints_s_P),
                            x = c * d,
                            b = c * p;
                        return e.SelfMulSub(this.m_invMassA, g), n -= this.m_invIA * x, r.SelfMulAdd(this.m_invMassB, g), s += this.m_invIB * b, t.positions[this.m_indexA].a = n, t.positions[this.m_indexB].a = s, v(m) <= l
                    }, i.prototype.GetDefinition = function(t) {
                        return t
                    }, i.prototype.GetAnchorA = function(t) {
                        return this.m_bodyA.GetWorldPoint(this.m_localAnchorA, t)
                    }, i.prototype.GetAnchorB = function(t) {
                        return this.m_bodyB.GetWorldPoint(this.m_localAnchorB, t)
                    }, i.prototype.GetReactionForce = function(t, e) {
                        return e.x = t * (this.m_impulse * this.m_ay.x + this.m_springImpulse * this.m_ax.x), e.y = t * (this.m_impulse * this.m_ay.y + this.m_springImpulse * this.m_ax.y), e
                    }, i.prototype.GetReactionTorque = function(t) {
                        return t * this.m_motorImpulse
                    }, i.prototype.GetLocalAnchorA = function() {
                        return this.m_localAnchorA
                    }, i.prototype.GetLocalAnchorB = function() {
                        return this.m_localAnchorB
                    }, i.prototype.GetLocalAxisA = function() {
                        return this.m_localXAxisA
                    }, i.prototype.GetJointTranslation = function() {
                        return this.GetPrismaticJointTranslation()
                    }, i.prototype.GetJointLinearSpeed = function() {
                        return this.GetPrismaticJointSpeed()
                    }, i.prototype.GetJointAngle = function() {
                        return this.GetRevoluteJointAngle()
                    }, i.prototype.GetJointAngularSpeed = function() {
                        return this.GetRevoluteJointSpeed()
                    }, i.prototype.GetPrismaticJointTranslation = function() {
                        var t = this.m_bodyA,
                            e = this.m_bodyB,
                            i = t.GetWorldPoint(this.m_localAnchorA, new P),
                            n = e.GetWorldPoint(this.m_localAnchorB, new P),
                            r = P.SubVV(n, i, new P),
                            s = t.GetWorldVector(this.m_localXAxisA, new P);
                        return P.DotVV(r, s)
                    }, i.prototype.GetPrismaticJointSpeed = function() {
                        var t = this.m_bodyA,
                            e = this.m_bodyB;
                        P.SubVV(this.m_localAnchorA, t.m_sweep.localCenter, this.m_lalcA);
                        var i = N.MulRV(t.m_xf.q, this.m_lalcA, this.m_rA);
                        P.SubVV(this.m_localAnchorB, e.m_sweep.localCenter, this.m_lalcB);
                        var n = N.MulRV(e.m_xf.q, this.m_lalcB, this.m_rB),
                            r = P.AddVV(t.m_sweep.c, i, P.s_t0),
                            s = P.AddVV(e.m_sweep.c, n, P.s_t1),
                            o = P.SubVV(s, r, P.s_t2),
                            a = t.GetWorldVector(this.m_localXAxisA, new P),
                            l = t.m_linearVelocity,
                            h = e.m_linearVelocity,
                            c = t.m_angularVelocity,
                            u = e.m_angularVelocity;
                        return P.DotVV(o, P.CrossSV(c, a, P.s_t0)) + P.DotVV(a, P.SubVV(P.AddVCrossSV(h, u, n, P.s_t0), P.AddVCrossSV(l, c, i, P.s_t1), P.s_t0))
                    }, i.prototype.GetRevoluteJointAngle = function() {
                        return this.m_bodyB.m_sweep.a - this.m_bodyA.m_sweep.a
                    }, i.prototype.GetRevoluteJointSpeed = function() {
                        var t = this.m_bodyA.m_angularVelocity;
                        return this.m_bodyB.m_angularVelocity - t
                    }, i.prototype.IsMotorEnabled = function() {
                        return this.m_enableMotor
                    }, i.prototype.EnableMotor = function(t) {
                        t !== this.m_enableMotor && (this.m_bodyA.SetAwake(!0), this.m_bodyB.SetAwake(!0), this.m_enableMotor = t)
                    }, i.prototype.SetMotorSpeed = function(t) {
                        t !== this.m_motorSpeed && (this.m_bodyA.SetAwake(!0), this.m_bodyB.SetAwake(!0), this.m_motorSpeed = t)
                    }, i.prototype.SetMaxMotorTorque = function(t) {
                        t !== this.m_maxMotorTorque && (this.m_bodyA.SetAwake(!0), this.m_bodyB.SetAwake(!0), this.m_maxMotorTorque = t)
                    }, i.prototype.GetMotorTorque = function(t) {
                        return t * this.m_motorImpulse
                    }, i.prototype.Dump = function(t) {
                        var e = this.m_bodyA.m_islandIndex,
                            i = this.m_bodyB.m_islandIndex;
                        t("  const jd: b2WheelJointDef = new b2WheelJointDef();\n"), t("  jd.bodyA = bodies[%d];\n", e), t("  jd.bodyB = bodies[%d];\n", i), t("  jd.collideConnected = %s;\n", this.m_collideConnected ? "true" : "false"), t("  jd.localAnchorA.Set(%.15f, %.15f);\n", this.m_localAnchorA.x, this.m_localAnchorA.y), t("  jd.localAnchorB.Set(%.15f, %.15f);\n", this.m_localAnchorB.x, this.m_localAnchorB.y), t("  jd.localAxisA.Set(%.15f, %.15f);\n", this.m_localXAxisA.x, this.m_localXAxisA.y), t("  jd.enableMotor = %s;\n", this.m_enableMotor ? "true" : "false"), t("  jd.motorSpeed = %.15f;\n", this.m_motorSpeed), t("  jd.maxMotorTorque = %.15f;\n", this.m_maxMotorTorque), t("  jd.frequencyHz = %.15f;\n", this.m_frequencyHz), t("  jd.dampingRatio = %.15f;\n", this.m_dampingRatio), t("  joints[%d] = this.m_world.CreateJoint(jd);\n", this.m_index)
                    }, i.InitVelocityConstraints_s_d = new P, i.InitVelocityConstraints_s_P = new P, i.SolveVelocityConstraints_s_P = new P, i.SolvePositionConstraints_s_d = new P, i.SolvePositionConstraints_s_P = new P, i
                })(fi);

            function Vi(t, e) {
                return S(t * e)
            }

            function ki(t, e) {
                return t > e ? t : e
            }
            var Gi = (function() {
                    return function(t) {
                        this.prev = null, this.next = null, this.contact = t
                    }
                })(),
                Ui = (function() {
                    function t() {
                        this.m_islandFlag = !1, this.m_touchingFlag = !1, this.m_enabledFlag = !1, this.m_filterFlag = !1, this.m_bulletHitFlag = !1, this.m_toiFlag = !1, this.m_prev = null, this.m_next = null, this.m_indexA = 0, this.m_indexB = 0, this.m_manifold = new bt, this.m_toiCount = 0, this.m_toi = 0, this.m_friction = 0, this.m_restitution = 0, this.m_tangentSpeed = 0, this.m_oldManifold = new bt, this.m_nodeA = new Gi(this), this.m_nodeB = new Gi(this)
                    }
                    return t.prototype.GetManifold = function() {
                        return this.m_manifold
                    }, t.prototype.GetWorldManifold = function(t) {
                        var e = this.m_fixtureA.GetBody(),
                            i = this.m_fixtureB.GetBody(),
                            n = this.m_fixtureA.GetShape(),
                            r = this.m_fixtureB.GetShape();
                        t.Initialize(this.m_manifold, e.GetTransform(), n.m_radius, i.GetTransform(), r.m_radius)
                    }, t.prototype.IsTouching = function() {
                        return this.m_touchingFlag
                    }, t.prototype.SetEnabled = function(t) {
                        this.m_enabledFlag = t
                    }, t.prototype.IsEnabled = function() {
                        return this.m_enabledFlag
                    }, t.prototype.GetNext = function() {
                        return this.m_next
                    }, t.prototype.GetFixtureA = function() {
                        return this.m_fixtureA
                    }, t.prototype.GetChildIndexA = function() {
                        return this.m_indexA
                    }, t.prototype.GetFixtureB = function() {
                        return this.m_fixtureB
                    }, t.prototype.GetChildIndexB = function() {
                        return this.m_indexB
                    }, t.prototype.FlagForFiltering = function() {
                        this.m_filterFlag = !0
                    }, t.prototype.SetFriction = function(t) {
                        this.m_friction = t
                    }, t.prototype.GetFriction = function() {
                        return this.m_friction
                    }, t.prototype.ResetFriction = function() {
                        this.m_friction = Vi(this.m_fixtureA.m_friction, this.m_fixtureB.m_friction)
                    }, t.prototype.SetRestitution = function(t) {
                        this.m_restitution = t
                    }, t.prototype.GetRestitution = function() {
                        return this.m_restitution
                    }, t.prototype.ResetRestitution = function() {
                        this.m_restitution = ki(this.m_fixtureA.m_restitution, this.m_fixtureB.m_restitution)
                    }, t.prototype.SetTangentSpeed = function(t) {
                        this.m_tangentSpeed = t
                    }, t.prototype.GetTangentSpeed = function() {
                        return this.m_tangentSpeed
                    }, t.prototype.Reset = function(t, e, i, n) {
                        this.m_islandFlag = !1, this.m_touchingFlag = !1, this.m_enabledFlag = !0, this.m_filterFlag = !1, this.m_bulletHitFlag = !1, this.m_toiFlag = !1, this.m_fixtureA = t, this.m_fixtureB = i, this.m_indexA = e, this.m_indexB = n, this.m_manifold.pointCount = 0, this.m_prev = null, this.m_next = null, delete this.m_nodeA.contact, this.m_nodeA.prev = null, this.m_nodeA.next = null, delete this.m_nodeA.other, delete this.m_nodeB.contact, this.m_nodeB.prev = null, this.m_nodeB.next = null, delete this.m_nodeB.other, this.m_toiCount = 0, this.m_friction = Vi(this.m_fixtureA.m_friction, this.m_fixtureB.m_friction), this.m_restitution = ki(this.m_fixtureA.m_restitution, this.m_fixtureB.m_restitution)
                    }, t.prototype.Update = function(t) {
                        var e = this.m_oldManifold;
                        this.m_oldManifold = this.m_manifold, this.m_manifold = e, this.m_enabledFlag = !0;
                        var i = !1,
                            n = this.m_touchingFlag,
                            r = this.m_fixtureA.IsSensor(),
                            s = this.m_fixtureB.IsSensor(),
                            o = r || s,
                            a = this.m_fixtureA.GetBody(),
                            l = this.m_fixtureB.GetBody(),
                            h = a.GetTransform(),
                            c = l.GetTransform();
                        if (o) {
                            var u = this.m_fixtureA.GetShape(),
                                _ = this.m_fixtureB.GetShape();
                            i = Pt(u, this.m_indexA, _, this.m_indexB, h, c), this.m_manifold.pointCount = 0
                        } else {
                            this.Evaluate(this.m_manifold, h, c), i = this.m_manifold.pointCount > 0;
                            for (var f = 0; f < this.m_manifold.pointCount; ++f) {
                                var d = this.m_manifold.points[f];
                                d.normalImpulse = 0, d.tangentImpulse = 0;
                                for (var p = d.id, m = 0; m < this.m_oldManifold.pointCount; ++m) {
                                    var y = this.m_oldManifold.points[m];
                                    if (y.id.key === p.key) {
                                        d.normalImpulse = y.normalImpulse, d.tangentImpulse = y.tangentImpulse;
                                        break
                                    }
                                }
                            }
                            i !== n && (a.SetAwake(!0), l.SetAwake(!0))
                        }
                        this.m_touchingFlag = i, !n && i && t && t.BeginContact(this), n && !i && t && t.EndContact(this), !o && i && t && t.PreSolve(this, this.m_oldManifold)
                    }, t.prototype.ComputeTOI = function(e, i) {
                        var n = t.ComputeTOI_s_input;
                        n.proxyA.SetShape(this.m_fixtureA.GetShape(), this.m_indexA), n.proxyB.SetShape(this.m_fixtureB.GetShape(), this.m_indexB), n.sweepA.Copy(e), n.sweepB.Copy(i), n.tMax = l;
                        var r = t.ComputeTOI_s_output;
                        return re(r, n), r.t
                    }, t.ComputeTOI_s_input = new Xt, t.ComputeTOI_s_output = new Yt, t
                })(),
                zi = (function(t) {
                    function e() {
                        return t.call(this) || this
                    }
                    return $e(e, t), e.Create = function(t) {
                        return new e
                    }, e.Destroy = function(t, e) {}, e.prototype.Reset = function(e, i, n, r) {
                        t.prototype.Reset.call(this, e, i, n, r)
                    }, e.prototype.Evaluate = function(t, e, i) {
                        ae(t, this.m_fixtureA.GetShape(), e, this.m_fixtureB.GetShape(), i)
                    }, e
                })(Ui),
                ji = (function(t) {
                    function e() {
                        return t.call(this) || this
                    }
                    return $e(e, t), e.Create = function(t) {
                        return new e
                    }, e.Destroy = function(t, e) {}, e.prototype.Reset = function(e, i, n, r) {
                        t.prototype.Reset.call(this, e, i, n, r)
                    }, e.prototype.Evaluate = function(t, e, i) {
                        Le(t, this.m_fixtureA.GetShape(), e, this.m_fixtureB.GetShape(), i)
                    }, e
                })(Ui),
                Wi = (function(t) {
                    function e() {
                        return t.call(this) || this
                    }
                    return $e(e, t), e.Create = function(t) {
                        return new e
                    }, e.Destroy = function(t, e) {}, e.prototype.Reset = function(e, i, n, r) {
                        t.prototype.Reset.call(this, e, i, n, r)
                    }, e.prototype.Evaluate = function(t, e, i) {
                        ue(t, this.m_fixtureA.GetShape(), e, this.m_fixtureB.GetShape(), i)
                    }, e
                })(Ui),
                Hi = (function(t) {
                    function e() {
                        return t.call(this) || this
                    }
                    return $e(e, t), e.Create = function(t) {
                        return new e
                    }, e.Destroy = function(t, e) {}, e.prototype.Reset = function(e, i, n, r) {
                        t.prototype.Reset.call(this, e, i, n, r)
                    }, e.prototype.Evaluate = function(t, e, i) {
                        We(t, this.m_fixtureA.GetShape(), e, this.m_fixtureB.GetShape(), i)
                    }, e
                })(Ui),
                Xi = (function(t) {
                    function e() {
                        return t.call(this) || this
                    }
                    return $e(e, t), e.Create = function(t) {
                        return new e
                    }, e.Destroy = function(t, e) {}, e.prototype.Reset = function(e, i, n, r) {
                        t.prototype.Reset.call(this, e, i, n, r)
                    }, e.prototype.Evaluate = function(t, e, i) {
                        Je(t, this.m_fixtureA.GetShape(), e, this.m_fixtureB.GetShape(), i)
                    }, e
                })(Ui),
                Yi = (function(t) {
                    function e() {
                        return t.call(this) || this
                    }
                    return $e(e, t), e.Create = function(t) {
                        return new e
                    }, e.Destroy = function(t, e) {}, e.prototype.Reset = function(e, i, n, r) {
                        t.prototype.Reset.call(this, e, i, n, r)
                    }, e.prototype.Evaluate = function(t, i, n) {
                        var r = this.m_fixtureA.GetShape(),
                            s = this.m_fixtureB.GetShape(),
                            o = r,
                            a = e.Evaluate_s_edge;
                        o.GetChildEdge(a, this.m_indexA), We(t, a, i, s, n)
                    }, e.Evaluate_s_edge = new ii, e
                })(Ui),
                qi = (function(t) {
                    function e() {
                        return t.call(this) || this
                    }
                    return $e(e, t), e.Create = function(t) {
                        return new e
                    }, e.Destroy = function(t, e) {}, e.prototype.Reset = function(e, i, n, r) {
                        t.prototype.Reset.call(this, e, i, n, r)
                    }, e.prototype.Evaluate = function(t, i, n) {
                        var r = this.m_fixtureA.GetShape(),
                            s = this.m_fixtureB.GetShape(),
                            o = r,
                            a = e.Evaluate_s_edge;
                        o.GetChildEdge(a, this.m_indexA), Je(t, a, i, s, n)
                    }, e.Evaluate_s_edge = new ii, e
                })(Ui),
                Ji = (function() {
                    return function() {
                        this.createFcn = null, this.destroyFcn = null, this.primary = !1
                    }
                })(),
                Zi = (function() {
                    function e(t) {
                        this.m_allocator = null, this.m_allocator = t, this.InitializeRegisters()
                    }
                    return e.prototype.AddType = function(t, e, i, n) {
                        var r = this,
                            s = d(256, (function(e) {
                                return t(r.m_allocator)
                            }));

                        function o(e) {
                            return s.pop() || t(e)
                        }

                        function a(t, e) {
                            s.push(t)
                        }
                        this.m_registers[i][n].createFcn = o, this.m_registers[i][n].destroyFcn = a, this.m_registers[i][n].primary = !0, i !== n && (this.m_registers[n][i].createFcn = o, this.m_registers[n][i].destroyFcn = a, this.m_registers[n][i].primary = !1)
                    }, e.prototype.InitializeRegisters = function() {
                        this.m_registers = [];
                        for (var e = 0; e < t.b2ShapeType.e_shapeTypeCount; e++) {
                            this.m_registers[e] = [];
                            for (var i = 0; i < t.b2ShapeType.e_shapeTypeCount; i++) this.m_registers[e][i] = new Ji
                        }
                        this.AddType(zi.Create, zi.Destroy, t.b2ShapeType.e_circleShape, t.b2ShapeType.e_circleShape), this.AddType(Wi.Create, Wi.Destroy, t.b2ShapeType.e_polygonShape, t.b2ShapeType.e_circleShape), this.AddType(ji.Create, ji.Destroy, t.b2ShapeType.e_polygonShape, t.b2ShapeType.e_polygonShape), this.AddType(Hi.Create, Hi.Destroy, t.b2ShapeType.e_edgeShape, t.b2ShapeType.e_circleShape), this.AddType(Xi.Create, Xi.Destroy, t.b2ShapeType.e_edgeShape, t.b2ShapeType.e_polygonShape), this.AddType(Yi.Create, Yi.Destroy, t.b2ShapeType.e_chainShape, t.b2ShapeType.e_circleShape), this.AddType(qi.Create, qi.Destroy, t.b2ShapeType.e_chainShape, t.b2ShapeType.e_polygonShape)
                    }, e.prototype.Create = function(t, e, i, n) {
                        var r = t.GetType(),
                            s = i.GetType(),
                            o = this.m_registers[r][s];
                        if (o.createFcn) {
                            var a = o.createFcn(this.m_allocator);
                            return o.primary ? a.Reset(t, e, i, n) : a.Reset(i, n, t, e), a
                        }
                        return null
                    }, e.prototype.Destroy = function(t) {
                        var e = t.m_fixtureA,
                            i = t.m_fixtureB;
                        t.m_manifold.pointCount > 0 && !e.IsSensor() && !i.IsSensor() && (e.GetBody().SetAwake(!0), i.GetBody().SetAwake(!0));
                        var n = e.GetType(),
                            r = i.GetType(),
                            s = this.m_registers[n][r];
                        s.destroyFcn && s.destroyFcn(t, this.m_allocator)
                    }, e
                })(),
                Ki = (function() {
                    function t() {}
                    return t.prototype.SayGoodbyeJoint = function(t) {}, t.prototype.SayGoodbyeFixture = function(t) {}, t.prototype.SayGoodbyeParticleGroup = function(t) {}, t.prototype.SayGoodbyeParticle = function(t, e) {}, t
                })(),
                Qi = (function() {
                    function e() {}
                    return e.prototype.ShouldCollide = function(e, i) {
                        var n = e.GetBody(),
                            r = i.GetBody();
                        if (r.GetType() === t.b2BodyType.b2_staticBody && n.GetType() === t.b2BodyType.b2_staticBody) return !1;
                        if (!r.ShouldCollideConnected(n)) return !1;
                        var s = e.GetFilterData(),
                            o = i.GetFilterData();
                        return s.groupIndex === o.groupIndex && 0 !== s.groupIndex ? s.groupIndex > 0 : 0 != (s.maskBits & o.categoryBits) && 0 != (s.categoryBits & o.maskBits)
                    }, e.prototype.ShouldCollideFixtureParticle = function(t, e, i) {
                        return !0
                    }, e.prototype.ShouldCollideParticleParticle = function(t, e, i) {
                        return !0
                    }, e.b2_defaultFilter = new e, e
                })(),
                $i = (function() {
                    return function() {
                        this.normalImpulses = p(o), this.tangentImpulses = p(o), this.count = 0
                    }
                })(),
                tn = (function() {
                    function t() {}
                    return t.prototype.BeginContact = function(t) {}, t.prototype.EndContact = function(t) {}, t.prototype.BeginContactFixtureParticle = function(t, e) {}, t.prototype.EndContactFixtureParticle = function(t, e) {}, t.prototype.BeginContactParticleParticle = function(t, e) {}, t.prototype.EndContactParticleParticle = function(t, e) {}, t.prototype.PreSolve = function(t, e) {}, t.prototype.PostSolve = function(t, e) {}, t.b2_defaultListener = new t, t
                })(),
                en = (function() {
                    function t() {}
                    return t.prototype.ReportFixture = function(t) {
                        return !0
                    }, t.prototype.ReportParticle = function(t, e) {
                        return !1
                    }, t.prototype.ShouldQueryParticleSystem = function(t) {
                        return !0
                    }, t
                })(),
                nn = (function() {
                    function t() {}
                    return t.prototype.ReportFixture = function(t, e, i, n) {
                        return n
                    }, t.prototype.ReportParticle = function(t, e, i, n, r) {
                        return 0
                    }, t.prototype.ShouldQueryParticleSystem = function(t) {
                        return !0
                    }, t
                })(),
                rn = (function() {
                    function e() {
                        this.m_broadPhase = new Nt, this.m_contactList = null, this.m_contactCount = 0, this.m_contactFilter = Qi.b2_defaultFilter, this.m_contactListener = tn.b2_defaultListener, this.m_allocator = null, this.m_contactFactory = new Zi(this.m_allocator)
                    }
                    return e.prototype.AddPair = function(t, e) {
                        var i = t.fixture,
                            n = e.fixture,
                            r = t.childIndex,
                            s = e.childIndex,
                            o = i.GetBody(),
                            a = n.GetBody();
                        if (o !== a) {
                            for (var l = a.GetContactList(); l;) {
                                if (l.other === o) {
                                    var h = l.contact.GetFixtureA(),
                                        c = l.contact.GetFixtureB(),
                                        u = l.contact.GetChildIndexA(),
                                        _ = l.contact.GetChildIndexB();
                                    if (h === i && c === n && u === r && _ === s) return;
                                    if (h === n && c === i && u === s && _ === r) return
                                }
                                l = l.next
                            }
                            if (!this.m_contactFilter || this.m_contactFilter.ShouldCollide(i, n)) {
                                var f = this.m_contactFactory.Create(i, r, n, s);
                                null !== f && (i = f.GetFixtureA(), n = f.GetFixtureB(), r = f.GetChildIndexA(), s = f.GetChildIndexB(), o = i.m_body, a = n.m_body, f.m_prev = null, f.m_next = this.m_contactList, null !== this.m_contactList && (this.m_contactList.m_prev = f), this.m_contactList = f, f.m_nodeA.contact = f, f.m_nodeA.other = a, f.m_nodeA.prev = null, f.m_nodeA.next = o.m_contactList, null !== o.m_contactList && (o.m_contactList.prev = f.m_nodeA), o.m_contactList = f.m_nodeA, f.m_nodeB.contact = f, f.m_nodeB.other = o, f.m_nodeB.prev = null, f.m_nodeB.next = a.m_contactList, null !== a.m_contactList && (a.m_contactList.prev = f.m_nodeB), a.m_contactList = f.m_nodeB, i.IsSensor() || n.IsSensor() || (o.SetAwake(!0), a.SetAwake(!0)), ++this.m_contactCount)
                            }
                        }
                    }, e.prototype.FindNewContacts = function() {
                        var t = this;
                        this.m_broadPhase.UpdatePairs((function(e, i) {
                            t.AddPair(e, i)
                        }))
                    }, e.prototype.Destroy = function(t) {
                        var e = t.GetFixtureA(),
                            i = t.GetFixtureB(),
                            n = e.GetBody(),
                            r = i.GetBody();
                        this.m_contactListener && t.IsTouching() && this.m_contactListener.EndContact(t), t.m_prev && (t.m_prev.m_next = t.m_next), t.m_next && (t.m_next.m_prev = t.m_prev), t === this.m_contactList && (this.m_contactList = t.m_next), t.m_nodeA.prev && (t.m_nodeA.prev.next = t.m_nodeA.next), t.m_nodeA.next && (t.m_nodeA.next.prev = t.m_nodeA.prev), t.m_nodeA === n.m_contactList && (n.m_contactList = t.m_nodeA.next), t.m_nodeB.prev && (t.m_nodeB.prev.next = t.m_nodeB.next), t.m_nodeB.next && (t.m_nodeB.next.prev = t.m_nodeB.prev), t.m_nodeB === r.m_contactList && (r.m_contactList = t.m_nodeB.next), this.m_contactFactory.Destroy(t), --this.m_contactCount
                    }, e.prototype.Collide = function() {
                        for (var e = this.m_contactList; e;) {
                            var i = e.GetFixtureA(),
                                n = e.GetFixtureB(),
                                r = e.GetChildIndexA(),
                                s = e.GetChildIndexB(),
                                o = i.GetBody(),
                                a = n.GetBody();
                            if (e.m_filterFlag) {
                                if (this.m_contactFilter && !this.m_contactFilter.ShouldCollide(i, n)) {
                                    e = (c = e).m_next, this.Destroy(c);
                                    continue
                                }
                                e.m_filterFlag = !1
                            }
                            var l = o.IsAwake() && o.m_type !== t.b2BodyType.b2_staticBody,
                                h = a.IsAwake() && a.m_type !== t.b2BodyType.b2_staticBody;
                            if (l || h) {
                                var c, u = i.m_proxies[r].treeNode,
                                    _ = n.m_proxies[s].treeNode;
                                if (Et(u.aabb, _.aabb)) e.Update(this.m_contactListener), e = e.m_next;
                                else e = (c = e).m_next, this.Destroy(c)
                            } else e = e.m_next
                        }
                    }, e
                })(),
                sn = (function() {
                    function t() {
                        this.step = 0, this.collide = 0, this.solve = 0, this.solveInit = 0, this.solveVelocity = 0, this.solvePosition = 0, this.broadphase = 0, this.solveTOI = 0
                    }
                    return t.prototype.Reset = function() {
                        return this.step = 0, this.collide = 0, this.solve = 0, this.solveInit = 0, this.solveVelocity = 0, this.solvePosition = 0, this.broadphase = 0, this.solveTOI = 0, this
                    }, t
                })(),
                on = (function() {
                    function t() {
                        this.dt = 0, this.inv_dt = 0, this.dtRatio = 0, this.velocityIterations = 0, this.positionIterations = 0, this.particleIterations = 0, this.warmStarting = !1
                    }
                    return t.prototype.Copy = function(t) {
                        return this.dt = t.dt, this.inv_dt = t.inv_dt, this.dtRatio = t.dtRatio, this.positionIterations = t.positionIterations, this.velocityIterations = t.velocityIterations, this.particleIterations = t.particleIterations, this.warmStarting = t.warmStarting, this
                    }, t
                })(),
                an = (function() {
                    function t() {
                        this.c = new P, this.a = 0
                    }
                    return t.MakeArray = function(e) {
                        return d(e, (function(e) {
                            return new t
                        }))
                    }, t
                })(),
                ln = (function() {
                    function t() {
                        this.v = new P, this.w = 0
                    }
                    return t.MakeArray = function(e) {
                        return d(e, (function(e) {
                            return new t
                        }))
                    }, t
                })(),
                hn = (function() {
                    return function() {
                        this.step = new on
                    }
                })(),
                cn = (function() {
                    function t() {
                        this.rA = new P, this.rB = new P, this.normalImpulse = 0, this.tangentImpulse = 0, this.normalMass = 0, this.tangentMass = 0, this.velocityBias = 0
                    }
                    return t.MakeArray = function(e) {
                        return d(e, (function(e) {
                            return new t
                        }))
                    }, t
                })(),
                un = (function() {
                    function t() {
                        this.points = cn.MakeArray(o), this.normal = new P, this.tangent = new P, this.normalMass = new L, this.K = new L, this.indexA = 0, this.indexB = 0, this.invMassA = 0, this.invMassB = 0, this.invIA = 0, this.invIB = 0, this.friction = 0, this.restitution = 0, this.tangentSpeed = 0, this.pointCount = 0, this.contactIndex = 0
                    }
                    return t.MakeArray = function(e) {
                        return d(e, (function(e) {
                            return new t
                        }))
                    }, t
                })(),
                _n = (function() {
                    function e() {
                        this.localPoints = P.MakeArray(o), this.localNormal = new P, this.localPoint = new P, this.indexA = 0, this.indexB = 0, this.invMassA = 0, this.invMassB = 0, this.localCenterA = new P, this.localCenterB = new P, this.invIA = 0, this.invIB = 0, this.type = t.b2ManifoldType.e_unknown, this.radiusA = 0, this.radiusB = 0, this.pointCount = 0
                    }
                    return e.MakeArray = function(t) {
                        return d(t, (function(t) {
                            return new e
                        }))
                    }, e
                })(),
                fn = (function() {
                    return function() {
                        this.step = new on, this.count = 0, this.allocator = null
                    }
                })(),
                dn = (function() {
                    function e() {
                        this.normal = new P, this.point = new P, this.separation = 0
                    }
                    return e.prototype.Initialize = function(i, n, r, s) {
                        var o = e.Initialize_s_pointA,
                            a = e.Initialize_s_pointB,
                            l = e.Initialize_s_planePoint,
                            h = e.Initialize_s_clipPoint;
                        switch (i.type) {
                            case t.b2ManifoldType.e_circles:
                                V.MulXV(n, i.localPoint, o), V.MulXV(r, i.localPoints[0], a), P.SubVV(a, o, this.normal).SelfNormalize(), P.MidVV(o, a, this.point), this.separation = P.DotVV(P.SubVV(a, o, P.s_t0), this.normal) - i.radiusA - i.radiusB;
                                break;
                            case t.b2ManifoldType.e_faceA:
                                N.MulRV(n.q, i.localNormal, this.normal), V.MulXV(n, i.localPoint, l), V.MulXV(r, i.localPoints[s], h), this.separation = P.DotVV(P.SubVV(h, l, P.s_t0), this.normal) - i.radiusA - i.radiusB, this.point.Copy(h);
                                break;
                            case t.b2ManifoldType.e_faceB:
                                N.MulRV(r.q, i.localNormal, this.normal), V.MulXV(r, i.localPoint, l), V.MulXV(n, i.localPoints[s], h), this.separation = P.DotVV(P.SubVV(h, l, P.s_t0), this.normal) - i.radiusA - i.radiusB, this.point.Copy(h), this.normal.SelfNeg()
                        }
                    }, e.Initialize_s_pointA = new P, e.Initialize_s_pointB = new P, e.Initialize_s_planePoint = new P, e.Initialize_s_clipPoint = new P, e
                })(),
                pn = (function() {
                    function t() {
                        this.m_step = new on, this.m_allocator = null, this.m_positionConstraints = _n.MakeArray(1024), this.m_velocityConstraints = un.MakeArray(1024), this.m_count = 0
                    }
                    return t.prototype.Initialize = function(t) {
                        if (this.m_step.Copy(t.step), this.m_allocator = t.allocator, this.m_count = t.count, this.m_positionConstraints.length < this.m_count)
                            for (var e = x(2 * this.m_positionConstraints.length, this.m_count); this.m_positionConstraints.length < e;) this.m_positionConstraints[this.m_positionConstraints.length] = new _n;
                        if (this.m_velocityConstraints.length < this.m_count)
                            for (e = x(2 * this.m_velocityConstraints.length, this.m_count); this.m_velocityConstraints.length < e;) this.m_velocityConstraints[this.m_velocityConstraints.length] = new un;
                        this.m_positions = t.positions, this.m_velocities = t.velocities, this.m_contacts = t.contacts;
                        for (var i = 0; i < this.m_count; ++i) {
                            var n = this.m_contacts[i],
                                r = n.m_fixtureA,
                                s = n.m_fixtureB,
                                o = r.GetShape(),
                                a = s.GetShape(),
                                l = o.m_radius,
                                h = a.m_radius,
                                c = r.GetBody(),
                                u = s.GetBody(),
                                _ = n.GetManifold(),
                                f = _.pointCount,
                                d = this.m_velocityConstraints[i];
                            d.friction = n.m_friction, d.restitution = n.m_restitution, d.tangentSpeed = n.m_tangentSpeed, d.indexA = c.m_islandIndex, d.indexB = u.m_islandIndex, d.invMassA = c.m_invMass, d.invMassB = u.m_invMass, d.invIA = c.m_invI, d.invIB = u.m_invI, d.contactIndex = i, d.pointCount = f, d.K.SetZero(), d.normalMass.SetZero();
                            var p = this.m_positionConstraints[i];
                            p.indexA = c.m_islandIndex, p.indexB = u.m_islandIndex, p.invMassA = c.m_invMass, p.invMassB = u.m_invMass, p.localCenterA.Copy(c.m_sweep.localCenter), p.localCenterB.Copy(u.m_sweep.localCenter), p.invIA = c.m_invI, p.invIB = u.m_invI, p.localNormal.Copy(_.localNormal), p.localPoint.Copy(_.localPoint), p.pointCount = f, p.radiusA = l, p.radiusB = h, p.type = _.type;
                            for (var m = 0; m < f; ++m) {
                                var y = _.points[m],
                                    v = d.points[m];
                                this.m_step.warmStarting ? (v.normalImpulse = this.m_step.dtRatio * y.normalImpulse, v.tangentImpulse = this.m_step.dtRatio * y.tangentImpulse) : (v.normalImpulse = 0, v.tangentImpulse = 0), v.rA.SetZero(), v.rB.SetZero(), v.normalMass = 0, v.tangentMass = 0, v.velocityBias = 0, p.localPoints[m].Copy(y.localPoint)
                            }
                        }
                        return this
                    }, t.prototype.InitializeVelocityConstraints = function() {
                        for (var e = t.InitializeVelocityConstraints_s_xfA, i = t.InitializeVelocityConstraints_s_xfB, n = t.InitializeVelocityConstraints_s_worldManifold, r = 0; r < this.m_count; ++r) {
                            var s = this.m_velocityConstraints[r],
                                o = this.m_positionConstraints[r],
                                a = o.radiusA,
                                l = o.radiusB,
                                h = this.m_contacts[s.contactIndex].GetManifold(),
                                c = s.indexA,
                                u = s.indexB,
                                _ = s.invMassA,
                                f = s.invMassB,
                                d = s.invIA,
                                p = s.invIB,
                                m = o.localCenterA,
                                y = o.localCenterB,
                                v = this.m_positions[c].c,
                                g = this.m_positions[c].a,
                                x = this.m_velocities[c].v,
                                b = this.m_velocities[c].w,
                                A = this.m_positions[u].c,
                                C = this.m_positions[u].a,
                                T = this.m_velocities[u].v,
                                S = this.m_velocities[u].w;
                            e.q.SetAngle(g), i.q.SetAngle(C), P.SubVV(v, N.MulRV(e.q, m, P.s_t0), e.p), P.SubVV(A, N.MulRV(i.q, y, P.s_t0), i.p), n.Initialize(h, e, a, i, l), s.normal.Copy(n.normal), P.CrossVOne(s.normal, s.tangent);
                            for (var w = s.pointCount, E = 0; E < w; ++E) {
                                var M = s.points[E];
                                P.SubVV(n.points[E], v, M.rA), P.SubVV(n.points[E], A, M.rB);
                                var D = P.CrossVV(M.rA, s.normal),
                                    B = P.CrossVV(M.rB, s.normal),
                                    I = _ + f + d * D * D + p * B * B;
                                M.normalMass = I > 0 ? 1 / I : 0;
                                var R = s.tangent,
                                    O = P.CrossVV(M.rA, R),
                                    L = P.CrossVV(M.rB, R),
                                    F = _ + f + d * O * O + p * L * L;
                                M.tangentMass = F > 0 ? 1 / F : 0, M.velocityBias = 0;
                                var V = P.DotVV(s.normal, P.SubVV(P.AddVCrossSV(T, S, M.rB, P.s_t0), P.AddVCrossSV(x, b, M.rA, P.s_t1), P.s_t0));
                                V < -1 && (M.velocityBias += -s.restitution * V)
                            }
                            s.pointCount
                        }
                    }, t.prototype.WarmStart = function() {
                        for (var e = t.WarmStart_s_P, i = 0; i < this.m_count; ++i) {
                            for (var n = this.m_velocityConstraints[i], r = n.indexA, s = n.indexB, o = n.invMassA, a = n.invIA, l = n.invMassB, h = n.invIB, c = n.pointCount, u = this.m_velocities[r].v, _ = this.m_velocities[r].w, f = this.m_velocities[s].v, d = this.m_velocities[s].w, p = n.normal, m = n.tangent, y = 0; y < c; ++y) {
                                var v = n.points[y];
                                P.AddVV(P.MulSV(v.normalImpulse, p, P.s_t0), P.MulSV(v.tangentImpulse, m, P.s_t1), e), _ -= a * P.CrossVV(v.rA, e), u.SelfMulSub(o, e), d += h * P.CrossVV(v.rB, e), f.SelfMulAdd(l, e)
                            }
                            this.m_velocities[r].w = _, this.m_velocities[s].w = d
                        }
                    }, t.prototype.SolveVelocityConstraints = function() {
                        for (var e = t.SolveVelocityConstraints_s_dv, i = (t.SolveVelocityConstraints_s_dv1, t.SolveVelocityConstraints_s_dv2, t.SolveVelocityConstraints_s_P), n = (t.SolveVelocityConstraints_s_a, t.SolveVelocityConstraints_s_b, t.SolveVelocityConstraints_s_x, t.SolveVelocityConstraints_s_d, t.SolveVelocityConstraints_s_P1, t.SolveVelocityConstraints_s_P2, t.SolveVelocityConstraints_s_P1P2, 0); n < this.m_count; ++n) {
                            for (var r = this.m_velocityConstraints[n], s = r.indexA, o = r.indexB, a = r.invMassA, l = r.invIA, h = r.invMassB, c = r.invIB, u = r.pointCount, _ = this.m_velocities[s].v, f = this.m_velocities[s].w, d = this.m_velocities[o].v, p = this.m_velocities[o].w, m = r.normal, y = r.tangent, v = r.friction, g = 0; g < u; ++g) {
                                var A = r.points[g];
                                P.SubVV(P.AddVCrossSV(d, p, A.rB, P.s_t0), P.AddVCrossSV(_, f, A.rA, P.s_t1), e);
                                var C = P.DotVV(e, y) - r.tangentSpeed,
                                    T = A.tangentMass * -C,
                                    S = v * A.normalImpulse;
                                T = (w = b(A.tangentImpulse + T, -S, S)) - A.tangentImpulse, A.tangentImpulse = w, P.MulSV(T, y, i), _.SelfMulSub(a, i), f -= l * P.CrossVV(A.rA, i), d.SelfMulAdd(h, i), p += c * P.CrossVV(A.rB, i)
                            }
                            r.pointCount;
                            for (g = 0; g < u; ++g) {
                                A = r.points[g];
                                P.SubVV(P.AddVCrossSV(d, p, A.rB, P.s_t0), P.AddVCrossSV(_, f, A.rA, P.s_t1), e);
                                var w, E = P.DotVV(e, m);
                                T = -A.normalMass * (E - A.velocityBias);
                                T = (w = x(A.normalImpulse + T, 0)) - A.normalImpulse, A.normalImpulse = w, P.MulSV(T, m, i), _.SelfMulSub(a, i), f -= l * P.CrossVV(A.rA, i), d.SelfMulAdd(h, i), p += c * P.CrossVV(A.rB, i)
                            }
                            this.m_velocities[s].w = f, this.m_velocities[o].w = p
                        }
                    }, t.prototype.StoreImpulses = function() {
                        for (var t = 0; t < this.m_count; ++t)
                            for (var e = this.m_velocityConstraints[t], i = this.m_contacts[e.contactIndex].GetManifold(), n = 0; n < e.pointCount; ++n) i.points[n].normalImpulse = e.points[n].normalImpulse, i.points[n].tangentImpulse = e.points[n].tangentImpulse
                    }, t.prototype.SolvePositionConstraints = function() {
                        for (var e = t.SolvePositionConstraints_s_xfA, i = t.SolvePositionConstraints_s_xfB, n = t.SolvePositionConstraints_s_psm, r = t.SolvePositionConstraints_s_rA, s = t.SolvePositionConstraints_s_rB, o = t.SolvePositionConstraints_s_P, a = 0, h = 0; h < this.m_count; ++h) {
                            for (var c = this.m_positionConstraints[h], u = c.indexA, _ = c.indexB, f = c.localCenterA, d = c.invMassA, p = c.invIA, m = c.localCenterB, y = c.invMassB, v = c.invIB, x = c.pointCount, A = this.m_positions[u].c, C = this.m_positions[u].a, T = this.m_positions[_].c, S = this.m_positions[_].a, w = 0; w < x; ++w) {
                                e.q.SetAngle(C), i.q.SetAngle(S), P.SubVV(A, N.MulRV(e.q, f, P.s_t0), e.p), P.SubVV(T, N.MulRV(i.q, m, P.s_t0), i.p), n.Initialize(c, e, i, w);
                                var E = n.normal,
                                    M = n.point,
                                    D = n.separation;
                                P.SubVV(M, A, r), P.SubVV(M, T, s), a = g(a, D);
                                var B = b(.2 * (D + l), -.2, 0),
                                    I = P.CrossVV(r, E),
                                    R = P.CrossVV(s, E),
                                    O = d + y + p * I * I + v * R * R,
                                    L = O > 0 ? -B / O : 0;
                                P.MulSV(L, E, o), A.SelfMulSub(d, o), C -= p * P.CrossVV(r, o), T.SelfMulAdd(y, o), S += v * P.CrossVV(s, o)
                            }
                            this.m_positions[u].a = C, this.m_positions[_].a = S
                        }
                        return a > -3 * l
                    }, t.prototype.SolveTOIPositionConstraints = function(e, i) {
                        for (var n = t.SolveTOIPositionConstraints_s_xfA, r = t.SolveTOIPositionConstraints_s_xfB, s = t.SolveTOIPositionConstraints_s_psm, o = t.SolveTOIPositionConstraints_s_rA, a = t.SolveTOIPositionConstraints_s_rB, h = t.SolveTOIPositionConstraints_s_P, c = 0, u = 0; u < this.m_count; ++u) {
                            var _ = this.m_positionConstraints[u],
                                f = _.indexA,
                                d = _.indexB,
                                p = _.localCenterA,
                                m = _.localCenterB,
                                y = _.pointCount,
                                v = 0,
                                x = 0;
                            f !== e && f !== i || (v = _.invMassA, x = _.invIA);
                            var A = 0,
                                C = 0;
                            d !== e && d !== i || (A = _.invMassB, C = _.invIB);
                            for (var T = this.m_positions[f].c, S = this.m_positions[f].a, w = this.m_positions[d].c, E = this.m_positions[d].a, M = 0; M < y; ++M) {
                                n.q.SetAngle(S), r.q.SetAngle(E), P.SubVV(T, N.MulRV(n.q, p, P.s_t0), n.p), P.SubVV(w, N.MulRV(r.q, m, P.s_t0), r.p), s.Initialize(_, n, r, M);
                                var D = s.normal,
                                    B = s.point,
                                    I = s.separation;
                                P.SubVV(B, T, o), P.SubVV(B, w, a), c = g(c, I);
                                var R = b(.75 * (I + l), -.2, 0),
                                    O = P.CrossVV(o, D),
                                    L = P.CrossVV(a, D),
                                    F = v + A + x * O * O + C * L * L,
                                    V = F > 0 ? -R / F : 0;
                                P.MulSV(V, D, h), T.SelfMulSub(v, h), S -= x * P.CrossVV(o, h), w.SelfMulAdd(A, h), E += C * P.CrossVV(a, h)
                            }
                            this.m_positions[f].a = S, this.m_positions[d].a = E
                        }
                        return c >= -1.5 * l
                    }, t.InitializeVelocityConstraints_s_xfA = new V, t.InitializeVelocityConstraints_s_xfB = new V, t.InitializeVelocityConstraints_s_worldManifold = new At, t.WarmStart_s_P = new P, t.SolveVelocityConstraints_s_dv = new P, t.SolveVelocityConstraints_s_dv1 = new P, t.SolveVelocityConstraints_s_dv2 = new P, t.SolveVelocityConstraints_s_P = new P, t.SolveVelocityConstraints_s_a = new P, t.SolveVelocityConstraints_s_b = new P, t.SolveVelocityConstraints_s_x = new P, t.SolveVelocityConstraints_s_d = new P, t.SolveVelocityConstraints_s_P1 = new P, t.SolveVelocityConstraints_s_P2 = new P, t.SolveVelocityConstraints_s_P1P2 = new P, t.SolvePositionConstraints_s_xfA = new V, t.SolvePositionConstraints_s_xfB = new V, t.SolvePositionConstraints_s_psm = new dn, t.SolvePositionConstraints_s_rA = new P, t.SolvePositionConstraints_s_rB = new P, t.SolvePositionConstraints_s_P = new P, t.SolveTOIPositionConstraints_s_xfA = new V, t.SolveTOIPositionConstraints_s_xfB = new V, t.SolveTOIPositionConstraints_s_psm = new dn, t.SolveTOIPositionConstraints_s_rA = new P, t.SolveTOIPositionConstraints_s_rB = new P, t.SolveTOIPositionConstraints_s_P = new P, t
                })(),
                mn = (function() {
                    function e() {
                        this.m_allocator = null, this.m_bodies = [], this.m_contacts = [], this.m_joints = [], this.m_positions = an.MakeArray(1024), this.m_velocities = ln.MakeArray(1024), this.m_bodyCount = 0, this.m_jointCount = 0, this.m_contactCount = 0, this.m_bodyCapacity = 0, this.m_contactCapacity = 0, this.m_jointCapacity = 0
                    }
                    return e.prototype.Initialize = function(t, e, i, n, r) {
                        if (this.m_bodyCapacity = t, this.m_contactCapacity = e, this.m_jointCapacity = i, this.m_bodyCount = 0, this.m_contactCount = 0, this.m_jointCount = 0, this.m_allocator = n, this.m_listener = r, this.m_positions.length < t)
                            for (var s = x(2 * this.m_positions.length, t); this.m_positions.length < s;) this.m_positions[this.m_positions.length] = new an;
                        if (this.m_velocities.length < t)
                            for (s = x(2 * this.m_velocities.length, t); this.m_velocities.length < s;) this.m_velocities[this.m_velocities.length] = new ln
                    }, e.prototype.Clear = function() {
                        this.m_bodyCount = 0, this.m_contactCount = 0, this.m_jointCount = 0
                    }, e.prototype.AddBody = function(t) {
                        t.m_islandIndex = this.m_bodyCount, this.m_bodies[this.m_bodyCount++] = t
                    }, e.prototype.AddContact = function(t) {
                        this.m_contacts[this.m_contactCount++] = t
                    }, e.prototype.AddJoint = function(t) {
                        this.m_joints[this.m_jointCount++] = t
                    }, e.prototype.Solve = function(n, r, s, o) {
                        for (var a = e.s_timer.Reset(), l = r.dt, h = 0; h < this.m_bodyCount; ++h) {
                            var c = this.m_bodies[h];
                            this.m_positions[h].c.Copy(c.m_sweep.c);
                            var u = c.m_sweep.a,
                                _ = this.m_velocities[h].v.Copy(c.m_linearVelocity),
                                f = c.m_angularVelocity;
                            c.m_sweep.c0.Copy(c.m_sweep.c), c.m_sweep.a0 = c.m_sweep.a, c.m_type === t.b2BodyType.b2_dynamicBody && (_.x += l * (c.m_gravityScale * s.x + c.m_invMass * c.m_force.x), _.y += l * (c.m_gravityScale * s.y + c.m_invMass * c.m_force.y), f += l * c.m_invI * c.m_torque, _.SelfMul(1 / (1 + l * c.m_linearDamping)), f *= 1 / (1 + l * c.m_angularDamping)), this.m_positions[h].a = u, this.m_velocities[h].w = f
                        }
                        a.Reset();
                        var d = e.s_solverData;
                        d.step.Copy(r), d.positions = this.m_positions, d.velocities = this.m_velocities;
                        var p = e.s_contactSolverDef;
                        p.step.Copy(r), p.contacts = this.m_contacts, p.count = this.m_contactCount, p.positions = this.m_positions, p.velocities = this.m_velocities, p.allocator = this.m_allocator;
                        var m = e.s_contactSolver.Initialize(p);
                        m.InitializeVelocityConstraints(), r.warmStarting && m.WarmStart();
                        for (h = 0; h < this.m_jointCount; ++h) this.m_joints[h].InitVelocityConstraints(d);
                        n.solveInit = a.GetMilliseconds(), a.Reset();
                        for (h = 0; h < r.velocityIterations; ++h) {
                            for (var y = 0; y < this.m_jointCount; ++y) this.m_joints[y].SolveVelocityConstraints(d);
                            m.SolveVelocityConstraints()
                        }
                        m.StoreImpulses(), n.solveVelocity = a.GetMilliseconds();
                        for (h = 0; h < this.m_bodyCount; ++h) {
                            var x = this.m_positions[h].c,
                                b = (u = this.m_positions[h].a, _ = this.m_velocities[h].v, f = this.m_velocities[h].w, P.MulSV(l, _, e.s_translation));
                            if (P.DotVV(b, b) > 4) {
                                var A = 2 / b.Length();
                                _.SelfMul(A)
                            }
                            var C = l * f;
                            if (C * C > 2.4674011002726646) f *= A = 1.570796326795 / v(C);
                            x.x += l * _.x, x.y += l * _.y, u += l * f, this.m_positions[h].a = u, this.m_velocities[h].w = f
                        }
                        a.Reset();
                        var T = !1;
                        for (h = 0; h < r.positionIterations; ++h) {
                            var S = m.SolvePositionConstraints(),
                                w = !0;
                            for (y = 0; y < this.m_jointCount; ++y) {
                                var E = this.m_joints[y].SolvePositionConstraints(d);
                                w = w && E
                            }
                            if (S && w) {
                                T = !0;
                                break
                            }
                        }
                        for (h = 0; h < this.m_bodyCount; ++h) {
                            var M = this.m_bodies[h];
                            M.m_sweep.c.Copy(this.m_positions[h].c), M.m_sweep.a = this.m_positions[h].a, M.m_linearVelocity.Copy(this.m_velocities[h].v), M.m_angularVelocity = this.m_velocities[h].w, M.SynchronizeTransform()
                        }
                        if (n.solvePosition = a.GetMilliseconds(), this.Report(m.m_velocityConstraints), o) {
                            var D = i;
                            for (h = 0; h < this.m_bodyCount; ++h) {
                                (c = this.m_bodies[h]).GetType() !== t.b2BodyType.b2_staticBody && (!c.m_autoSleepFlag || c.m_angularVelocity * c.m_angularVelocity > .0012184696791469947 || P.DotVV(c.m_linearVelocity, c.m_linearVelocity) > 1e-4 ? (c.m_sleepTime = 0, D = 0) : (c.m_sleepTime += l, D = g(D, c.m_sleepTime)))
                            }
                            if (D >= .5 && T)
                                for (h = 0; h < this.m_bodyCount; ++h) {
                                    (c = this.m_bodies[h]).SetAwake(!1)
                                }
                        }
                    }, e.prototype.SolveTOI = function(t, i, n) {
                        for (var r = 0; r < this.m_bodyCount; ++r) {
                            var s = this.m_bodies[r];
                            this.m_positions[r].c.Copy(s.m_sweep.c), this.m_positions[r].a = s.m_sweep.a, this.m_velocities[r].v.Copy(s.m_linearVelocity), this.m_velocities[r].w = s.m_angularVelocity
                        }
                        var o = e.s_contactSolverDef;
                        o.contacts = this.m_contacts, o.count = this.m_contactCount, o.allocator = this.m_allocator, o.step.Copy(t), o.positions = this.m_positions, o.velocities = this.m_velocities;
                        var a = e.s_contactSolver.Initialize(o);
                        for (r = 0; r < t.positionIterations; ++r) {
                            if (a.SolveTOIPositionConstraints(i, n)) break
                        }
                        this.m_bodies[i].m_sweep.c0.Copy(this.m_positions[i].c), this.m_bodies[i].m_sweep.a0 = this.m_positions[i].a, this.m_bodies[n].m_sweep.c0.Copy(this.m_positions[n].c), this.m_bodies[n].m_sweep.a0 = this.m_positions[n].a, a.InitializeVelocityConstraints();
                        for (r = 0; r < t.velocityIterations; ++r) a.SolveVelocityConstraints();
                        var l = t.dt;
                        for (r = 0; r < this.m_bodyCount; ++r) {
                            var h = this.m_positions[r].c,
                                c = this.m_positions[r].a,
                                u = this.m_velocities[r].v,
                                _ = this.m_velocities[r].w,
                                f = P.MulSV(l, u, e.s_translation);
                            if (P.DotVV(f, f) > 4) {
                                var d = 2 / f.Length();
                                u.SelfMul(d)
                            }
                            var p = l * _;
                            if (p * p > 2.4674011002726646) _ *= d = 1.570796326795 / v(p);
                            h.SelfMulAdd(l, u), c += l * _, this.m_positions[r].a = c, this.m_velocities[r].w = _;
                            var m = this.m_bodies[r];
                            m.m_sweep.c.Copy(h), m.m_sweep.a = c, m.m_linearVelocity.Copy(u), m.m_angularVelocity = _, m.SynchronizeTransform()
                        }
                        this.Report(a.m_velocityConstraints)
                    }, e.prototype.Report = function(t) {
                        if (null !== this.m_listener)
                            for (var i = 0; i < this.m_contactCount; ++i) {
                                var n = this.m_contacts[i];
                                if (n) {
                                    var r = t[i],
                                        s = e.s_impulse;
                                    s.count = r.pointCount;
                                    for (var o = 0; o < r.pointCount; ++o) s.normalImpulses[o] = r.points[o].normalImpulse, s.tangentImpulses[o] = r.points[o].tangentImpulse;
                                    this.m_listener.PostSolve(n, s)
                                }
                            }
                    }, e.s_timer = new z, e.s_solverData = new hn, e.s_contactSolverDef = new fn, e.s_contactSolver = new pn, e.s_translation = new P, e.s_impulse = new $i, e
                })();
            (function(t) {
                t[t.b2_waterParticle = 0] = "b2_waterParticle", t[t.b2_zombieParticle = 2] = "b2_zombieParticle", t[t.b2_wallParticle = 4] = "b2_wallParticle", t[t.b2_springParticle = 8] = "b2_springParticle", t[t.b2_elasticParticle = 16] = "b2_elasticParticle", t[t.b2_viscousParticle = 32] = "b2_viscousParticle", t[t.b2_powderParticle = 64] = "b2_powderParticle", t[t.b2_tensileParticle = 128] = "b2_tensileParticle", t[t.b2_colorMixingParticle = 256] = "b2_colorMixingParticle", t[t.b2_destructionListenerParticle = 512] = "b2_destructionListenerParticle", t[t.b2_barrierParticle = 1024] = "b2_barrierParticle", t[t.b2_staticPressureParticle = 2048] = "b2_staticPressureParticle", t[t.b2_reactiveParticle = 4096] = "b2_reactiveParticle", t[t.b2_repulsiveParticle = 8192] = "b2_repulsiveParticle", t[t.b2_fixtureContactListenerParticle = 16384] = "b2_fixtureContactListenerParticle", t[t.b2_particleContactListenerParticle = 32768] = "b2_particleContactListenerParticle", t[t.b2_fixtureContactFilterParticle = 65536] = "b2_fixtureContactFilterParticle", t[t.b2_particleContactFilterParticle = 131072] = "b2_particleContactFilterParticle"
            })(t.b2ParticleFlag || (t.b2ParticleFlag = {}));
            var yn = (function() {
                return function() {
                    this.flags = 0, this.position = new P, this.velocity = new P, this.color = new G(0, 0, 0, 0), this.lifetime = 0, this.userData = null, this.group = null
                }
            })();

            function vn(t, e, i) {
                return b(Math.ceil(Math.sqrt(t / (.01 * e)) * i), 1, 8)
            }
            var gn = (function() {
                function t() {
                    this.m_index = u
                }
                return t.prototype.GetIndex = function() {
                    return this.m_index
                }, t.prototype.SetIndex = function(t) {
                    this.m_index = t
                }, t
            })();
            (function(t) {
                t[t.b2_solidParticleGroup = 1] = "b2_solidParticleGroup", t[t.b2_rigidParticleGroup = 2] = "b2_rigidParticleGroup", t[t.b2_particleGroupCanBeEmpty = 4] = "b2_particleGroupCanBeEmpty", t[t.b2_particleGroupWillBeDestroyed = 8] = "b2_particleGroupWillBeDestroyed", t[t.b2_particleGroupNeedsUpdateDepth = 16] = "b2_particleGroupNeedsUpdateDepth", t[t.b2_particleGroupInternalMask = 24] = "b2_particleGroupInternalMask"
            })(t.b2ParticleGroupFlag || (t.b2ParticleGroupFlag = {}));
            var xn = (function() {
                    return function() {
                        this.flags = 0, this.groupFlags = 0, this.position = new P, this.angle = 0, this.linearVelocity = new P, this.angularVelocity = 0, this.color = new G, this.strength = 1, this.shapeCount = 0, this.stride = 0, this.particleCount = 0, this.lifetime = 0, this.userData = null, this.group = null
                    }
                })(),
                bn = (function() {
                    function e(t) {
                        this.m_firstIndex = 0, this.m_lastIndex = 0, this.m_groupFlags = 0, this.m_strength = 1, this.m_prev = null, this.m_next = null, this.m_timestamp = -1, this.m_mass = 0, this.m_inertia = 0, this.m_center = new P, this.m_linearVelocity = new P, this.m_angularVelocity = 0, this.m_transform = new V, this.m_userData = null, this.m_system = t
                    }
                    return e.prototype.GetNext = function() {
                        return this.m_next
                    }, e.prototype.GetParticleSystem = function() {
                        return this.m_system
                    }, e.prototype.GetParticleCount = function() {
                        return this.m_lastIndex - this.m_firstIndex
                    }, e.prototype.GetBufferIndex = function() {
                        return this.m_firstIndex
                    }, e.prototype.ContainsParticle = function(t) {
                        return this.m_firstIndex <= t && t < this.m_lastIndex
                    }, e.prototype.GetAllParticleFlags = function() {
                        if (!this.m_system.m_flagsBuffer.data) throw new Error;
                        for (var t = 0, e = this.m_firstIndex; e < this.m_lastIndex; e++) t |= this.m_system.m_flagsBuffer.data[e];
                        return t
                    }, e.prototype.GetGroupFlags = function() {
                        return this.m_groupFlags
                    }, e.prototype.SetGroupFlags = function(e) {
                        e |= this.m_groupFlags & t.b2ParticleGroupFlag.b2_particleGroupInternalMask, this.m_system.SetGroupFlags(this, e)
                    }, e.prototype.GetMass = function() {
                        return this.UpdateStatistics(), this.m_mass
                    }, e.prototype.GetInertia = function() {
                        return this.UpdateStatistics(), this.m_inertia
                    }, e.prototype.GetCenter = function() {
                        return this.UpdateStatistics(), this.m_center
                    }, e.prototype.GetLinearVelocity = function() {
                        return this.UpdateStatistics(), this.m_linearVelocity
                    }, e.prototype.GetAngularVelocity = function() {
                        return this.UpdateStatistics(), this.m_angularVelocity
                    }, e.prototype.GetTransform = function() {
                        return this.m_transform
                    }, e.prototype.GetPosition = function() {
                        return this.m_transform.p
                    }, e.prototype.GetAngle = function() {
                        return this.m_transform.q.GetAngle()
                    }, e.prototype.GetLinearVelocityFromWorldPoint = function(t, i) {
                        var n = e.GetLinearVelocityFromWorldPoint_s_t0;
                        return this.UpdateStatistics(), P.AddVCrossSV(this.m_linearVelocity, this.m_angularVelocity, P.SubVV(t, this.m_center, n), i)
                    }, e.prototype.GetUserData = function() {
                        return this.m_userData
                    }, e.prototype.SetUserData = function(t) {
                        this.m_userData = t
                    }, e.prototype.ApplyForce = function(t) {
                        this.m_system.ApplyForce(this.m_firstIndex, this.m_lastIndex, t)
                    }, e.prototype.ApplyLinearImpulse = function(t) {
                        this.m_system.ApplyLinearImpulse(this.m_firstIndex, this.m_lastIndex, t)
                    }, e.prototype.DestroyParticles = function(t) {
                        if (this.m_system.m_world.IsLocked()) throw new Error;
                        for (var e = this.m_firstIndex; e < this.m_lastIndex; e++) this.m_system.DestroyParticle(e, t)
                    }, e.prototype.UpdateStatistics = function() {
                        if (!this.m_system.m_positionBuffer.data) throw new Error;
                        if (!this.m_system.m_velocityBuffer.data) throw new Error;
                        var t = new P,
                            e = new P;
                        if (this.m_timestamp !== this.m_system.m_timestamp) {
                            var i = this.m_system.GetParticleMass();
                            this.m_mass = i * (this.m_lastIndex - this.m_firstIndex), this.m_center.SetZero(), this.m_linearVelocity.SetZero();
                            for (var n = this.m_firstIndex; n < this.m_lastIndex; n++) this.m_center.SelfMulAdd(i, this.m_system.m_positionBuffer.data[n]), this.m_linearVelocity.SelfMulAdd(i, this.m_system.m_velocityBuffer.data[n]);
                            if (this.m_mass > 0) {
                                var r = 1 / this.m_mass;
                                this.m_center.SelfMul(r), this.m_linearVelocity.SelfMul(r)
                            }
                            this.m_inertia = 0, this.m_angularVelocity = 0;
                            for (n = this.m_firstIndex; n < this.m_lastIndex; n++) P.SubVV(this.m_system.m_positionBuffer.data[n], this.m_center, t), P.SubVV(this.m_system.m_velocityBuffer.data[n], this.m_linearVelocity, e), this.m_inertia += i * P.DotVV(t, t), this.m_angularVelocity += i * P.CrossVV(t, e);
                            this.m_inertia > 0 && (this.m_angularVelocity *= 1 / this.m_inertia), this.m_timestamp = this.m_system.m_timestamp
                        }
                    }, e.GetLinearVelocityFromWorldPoint_s_t0 = new P, e
                })(),
                An = (function() {
                    function t(t) {
                        this.m_front = 0, this.m_back = 0, this.m_capacity = 0, this.m_buffer = d(t, (function(t) {
                            return null
                        })), this.m_capacity = t
                    }
                    return t.prototype.Push = function(t) {
                        if (this.m_back >= this.m_capacity) {
                            for (var e = this.m_front; e < this.m_back; e++) this.m_buffer[e - this.m_front] = this.m_buffer[e];
                            this.m_back -= this.m_front, this.m_front = 0, this.m_back >= this.m_capacity && (this.m_capacity > 0 ? (this.m_buffer.concat(d(this.m_capacity, (function(t) {
                                return null
                            }))), this.m_capacity *= 2) : (this.m_buffer.concat(d(1, (function(t) {
                                return null
                            }))), this.m_capacity = 1))
                        }
                        this.m_buffer[this.m_back] = t, this.m_back++
                    }, t.prototype.Pop = function() {
                        this.m_buffer[this.m_front] = null, this.m_front++
                    }, t.prototype.Empty = function() {
                        return this.m_front === this.m_back
                    }, t.prototype.Front = function() {
                        var t = this.m_buffer[this.m_front];
                        if (!t) throw new Error;
                        return t
                    }, t
                })(),
                Cn = (function() {
                    function t(e) {
                        this.m_generatorCapacity = 0, this.m_generatorCount = 0, this.m_countX = 0, this.m_countY = 0, this.m_diagram = [], this.m_generatorBuffer = d(e, (function(e) {
                            return new t.Generator
                        })), this.m_generatorCapacity = e
                    }
                    return t.prototype.AddGenerator = function(t, e, i) {
                        var n = this.m_generatorBuffer[this.m_generatorCount++];
                        n.center.Copy(t), n.tag = e, n.necessary = i
                    }, t.prototype.Generate = function(e, n) {
                        for (var r = 1 / e, s = new P(+i, +i), o = new P(-i, -i), a = 0, l = 0; l < this.m_generatorCount; l++) {
                            (f = this.m_generatorBuffer[l]).necessary && (P.MinV(s, f.center, s), P.MaxV(o, f.center, o), ++a)
                        }
                        if (0 === a) return this.m_countX = 0, void(this.m_countY = 0);
                        s.x -= n, s.y -= n, o.x += n, o.y += n, this.m_countX = 1 + Math.floor(r * (o.x - s.x)), this.m_countY = 1 + Math.floor(r * (o.y - s.y)), this.m_diagram = [];
                        var h = new An(4 * this.m_countX * this.m_countY);
                        for (l = 0; l < this.m_generatorCount; l++) {
                            (f = this.m_generatorBuffer[l]).center.SelfSub(s).SelfMul(r);
                            var c = Math.floor(f.center.x),
                                u = Math.floor(f.center.y);
                            c >= 0 && u >= 0 && c < this.m_countX && u < this.m_countY && h.Push(new t.Task(c, u, c + u * this.m_countX, f))
                        }
                        for (; !h.Empty();) {
                            c = (d = h.Front()).m_x, u = d.m_y;
                            var _ = d.m_i,
                                f = d.m_generator;
                            h.Pop(), this.m_diagram[_] || (this.m_diagram[_] = f, c > 0 && h.Push(new t.Task(c - 1, u, _ - 1, f)), u > 0 && h.Push(new t.Task(c, u - 1, _ - this.m_countX, f)), c < this.m_countX - 1 && h.Push(new t.Task(c + 1, u, _ + 1, f)), u < this.m_countY - 1 && h.Push(new t.Task(c, u + 1, _ + this.m_countX, f)))
                        }
                        for (u = 0; u < this.m_countY; u++)
                            for (c = 0; c < this.m_countX - 1; c++) {
                                _ = c + u * this.m_countX;
                                (p = this.m_diagram[_]) !== (m = this.m_diagram[_ + 1]) && (h.Push(new t.Task(c, u, _, m)), h.Push(new t.Task(c + 1, u, _ + 1, p)))
                            }
                        for (u = 0; u < this.m_countY - 1; u++)
                            for (c = 0; c < this.m_countX; c++) {
                                _ = c + u * this.m_countX;
                                (p = this.m_diagram[_]) !== (m = this.m_diagram[_ + this.m_countX]) && (h.Push(new t.Task(c, u, _, m)), h.Push(new t.Task(c, u + 1, _ + this.m_countX, p)))
                            }
                        for (; !h.Empty();) {
                            var d, p, m;
                            c = (d = h.Front()).m_x, u = d.m_y, _ = d.m_i, l = d.m_generator;
                            if (h.Pop(), (p = this.m_diagram[_]) !== (m = l)) {
                                var y = p.center.x - c,
                                    v = p.center.y - u,
                                    g = m.center.x - c,
                                    x = m.center.y - u;
                                y * y + v * v > g * g + x * x && (this.m_diagram[_] = m, c > 0 && h.Push(new t.Task(c - 1, u, _ - 1, m)), u > 0 && h.Push(new t.Task(c, u - 1, _ - this.m_countX, m)), c < this.m_countX - 1 && h.Push(new t.Task(c + 1, u, _ + 1, m)), u < this.m_countY - 1 && h.Push(new t.Task(c, u + 1, _ + this.m_countX, m)))
                            }
                        }
                    }, t.prototype.GetNodes = function(t) {
                        for (var e = 0; e < this.m_countY - 1; e++)
                            for (var i = 0; i < this.m_countX - 1; i++) {
                                var n = i + e * this.m_countX,
                                    r = this.m_diagram[n],
                                    s = this.m_diagram[n + 1],
                                    o = this.m_diagram[n + this.m_countX],
                                    a = this.m_diagram[n + 1 + this.m_countX];
                                s !== o && (r !== s && r !== o && (r.necessary || s.necessary || o.necessary) && t(r.tag, s.tag, o.tag), a !== s && a !== o && (r.necessary || s.necessary || o.necessary) && t(s.tag, a.tag, o.tag))
                            }
                    }, t
                })();

            function Tn(t, e, i) {
                var n = t[e];
                t[e] = t[i], t[i] = n
            }

            function Sn(t, e) {
                return t < e
            }

            function wn(t, e, i, n) {
                void 0 === e && (e = 0), void 0 === i && (i = t.length - e), void 0 === n && (n = Sn);
                for (var r = e, s = [], o = 0;;) {
                    for (; r + 1 < i; i++) {
                        var a = t[r + Math.floor(Math.random() * (i - r))];
                        s[o++] = i;
                        for (var l = r - 1;;) {
                            for (; n(t[++l], a););
                            for (; n(a, t[--i]););
                            if (l >= i) break;
                            Tn(t, l, i)
                        }
                    }
                    if (0 === o) break;
                    r = i, i = s[--o]
                }
                return t
            }

            function En(t, e, i, n) {
                return void 0 === e && (e = 0), void 0 === i && (i = t.length - e), void 0 === n && (n = Sn), wn(t, e, i, n)
            }

            function Mn(t, e, i) {
                void 0 === i && (i = t.length);
                for (var n = 0, r = 0; r < i; ++r) e(t[r]) || (r !== n ? Tn(t, n++, r) : ++n);
                return n
            }

            function Dn(t, e, i, n, r) {
                void 0 === r && (r = Sn);
                for (var s = i - e; s > 0;) {
                    var o = Math.floor(s / 2),
                        a = e + o;
                    r(t[a], n) ? (e = ++a, s -= o + 1) : s = o
                }
                return e
            }

            function Bn(t, e, i, n, r) {
                void 0 === r && (r = Sn);
                for (var s = i - e; s > 0;) {
                    var o = Math.floor(s / 2),
                        a = e + o;
                    r(n, t[a]) ? s = o : (e = ++a, s -= o + 1)
                }
                return e
            }

            function In(t, e, i, n) {
                for (var r = i; e !== r;) Tn(t, e++, r++), r === n ? r = i : e === i && (i = r)
            }

            function Pn(t, e, i, n) {
                if (e === i) return i;
                for (var r = e; ++e !== i;) n(t[r], t[e]) || Tn(t, ++r, e);
                return ++r
            }(function(t) {
                var e = (function() {
                    return function() {
                        this.center = new P, this.tag = 0, this.necessary = !1
                    }
                })();
                t.Generator = e;
                var i = (function() {
                    return function(t, e, i, n) {
                        this.m_x = t, this.m_y = e, this.m_i = i, this.m_generator = n
                    }
                })();
                t.Task = i
            })(Cn || (Cn = {}));
            var Rn = (function() {
                    function t(t) {
                        this.data = [], this.count = 0, this.capacity = 0, this.allocator = t
                    }
                    return t.prototype.Append = function() {
                        return this.count >= this.capacity && this.Grow(), this.count++
                    }, t.prototype.Reserve = function(t) {
                        if (!(this.capacity >= t)) {
                            for (var e = this.capacity; e < t; ++e) this.data[e] = this.allocator();
                            this.capacity = t
                        }
                    }, t.prototype.Grow = function() {
                        var t = this.capacity ? 2 * this.capacity : 256;
                        this.Reserve(t)
                    }, t.prototype.Free = function() {
                        0 !== this.data.length && (this.data = [], this.capacity = 0, this.count = 0)
                    }, t.prototype.Shorten = function(t) {}, t.prototype.Data = function() {
                        return this.data
                    }, t.prototype.GetCount = function() {
                        return this.count
                    }, t.prototype.SetCount = function(t) {
                        this.count = t
                    }, t.prototype.GetCapacity = function() {
                        return this.capacity
                    }, t.prototype.RemoveIf = function(t) {
                        this.count = Mn(this.data, t, this.count)
                    }, t.prototype.Unique = function(t) {
                        this.count = Pn(this.data, 0, this.count, t)
                    }, t
                })(),
                On = (function(t) {
                    function e(e) {
                        var i = t.call(this) || this;
                        return i.m_system = e, i
                    }
                    return $e(e, t), e.prototype.ShouldQueryParticleSystem = function(t) {
                        return !1
                    }, e.prototype.ReportFixture = function(t) {
                        if (t.IsSensor()) return !0;
                        for (var e = t.GetShape().GetChildCount(), i = 0; i < e; i++)
                            for (var n = t.GetAABB(i), r = this.m_system.GetInsideBoundsEnumerator(n), s = void 0;
                                (s = r.GetNext()) >= 0;) this.ReportFixtureAndParticle(t, i, s);
                        return !0
                    }, e.prototype.ReportParticle = function(t, e) {
                        return !1
                    }, e.prototype.ReportFixtureAndParticle = function(t, e, i) {}, e
                })(en),
                Ln = (function() {
                    function t() {
                        this.indexA = 0, this.indexB = 0, this.weight = 0, this.normal = new P, this.flags = 0
                    }
                    return t.prototype.SetIndices = function(t, e) {
                        this.indexA = t, this.indexB = e
                    }, t.prototype.SetWeight = function(t) {
                        this.weight = t
                    }, t.prototype.SetNormal = function(t) {
                        this.normal.Copy(t)
                    }, t.prototype.SetFlags = function(t) {
                        this.flags = t
                    }, t.prototype.GetIndexA = function() {
                        return this.indexA
                    }, t.prototype.GetIndexB = function() {
                        return this.indexB
                    }, t.prototype.GetWeight = function() {
                        return this.weight
                    }, t.prototype.GetNormal = function() {
                        return this.normal
                    }, t.prototype.GetFlags = function() {
                        return this.flags
                    }, t.prototype.IsEqual = function(t) {
                        return this.indexA === t.indexA && this.indexB === t.indexB && this.flags === t.flags && this.weight === t.weight && this.normal.x === t.normal.x && this.normal.y === t.normal.y
                    }, t.prototype.IsNotEqual = function(t) {
                        return !this.IsEqual(t)
                    }, t.prototype.ApproximatelyEqual = function(t) {
                        return this.indexA === t.indexA && this.indexB === t.indexB && this.flags === t.flags && v(this.weight - t.weight) < .01 && P.DistanceSquaredVV(this.normal, t.normal) < 1e-4
                    }, t
                })(),
                Fn = (function() {
                    return function() {
                        this.index = 0, this.weight = 0, this.normal = new P, this.mass = 0
                    }
                })(),
                Nn = (function() {
                    return function() {
                        this.indexA = 0, this.indexB = 0, this.flags = 0, this.strength = 0, this.distance = 0
                    }
                })(),
                Vn = (function() {
                    return function() {
                        this.indexA = 0, this.indexB = 0, this.indexC = 0, this.flags = 0, this.strength = 0, this.pa = new P(0, 0), this.pb = new P(0, 0), this.pc = new P(0, 0), this.ka = 0, this.kb = 0, this.kc = 0, this.s = 0
                    }
                })(),
                kn = (function() {
                    function t() {
                        this.strictContactCheck = !1, this.density = 1, this.gravityScale = 1, this.radius = 1, this.maxCount = 0, this.pressureStrength = .005, this.dampingStrength = 1, this.elasticStrength = .25, this.springStrength = .25, this.viscousStrength = .25, this.surfaceTensionPressureStrength = .2, this.surfaceTensionNormalStrength = .2, this.repulsiveStrength = 1, this.powderStrength = .5, this.ejectionStrength = .5, this.staticPressureStrength = .2, this.staticPressureRelaxation = .2, this.staticPressureIterations = 8, this.colorMixingStrength = .5, this.destroyByAge = !0, this.lifetimeGranularity = 1 / 60
                    }
                    return t.prototype.Copy = function(t) {
                        return this.strictContactCheck = t.strictContactCheck, this.density = t.density, this.gravityScale = t.gravityScale, this.radius = t.radius, this.maxCount = t.maxCount, this.pressureStrength = t.pressureStrength, this.dampingStrength = t.dampingStrength, this.elasticStrength = t.elasticStrength, this.springStrength = t.springStrength, this.viscousStrength = t.viscousStrength, this.surfaceTensionPressureStrength = t.surfaceTensionPressureStrength, this.surfaceTensionNormalStrength = t.surfaceTensionNormalStrength, this.repulsiveStrength = t.repulsiveStrength, this.powderStrength = t.powderStrength, this.ejectionStrength = t.ejectionStrength, this.staticPressureStrength = t.staticPressureStrength, this.staticPressureRelaxation = t.staticPressureRelaxation, this.staticPressureIterations = t.staticPressureIterations, this.colorMixingStrength = t.colorMixingStrength, this.destroyByAge = t.destroyByAge, this.lifetimeGranularity = t.lifetimeGranularity, this
                    }, t.prototype.Clone = function() {
                        return (new t).Copy(this)
                    }, t
                })();
            t.b2ParticleSystem = (function() {
                function n(t, e) {
                    this.m_paused = !1, this.m_timestamp = 0, this.m_allParticleFlags = 0, this.m_needsUpdateAllParticleFlags = !1, this.m_allGroupFlags = 0, this.m_needsUpdateAllGroupFlags = !1, this.m_hasForce = !1, this.m_iterationIndex = 0, this.m_inverseDensity = 0, this.m_particleDiameter = 0, this.m_inverseDiameter = 0, this.m_squaredDiameter = 0, this.m_count = 0, this.m_internalAllocatedCapacity = 0, this.m_handleIndexBuffer = new n.UserOverridableBuffer, this.m_flagsBuffer = new n.UserOverridableBuffer, this.m_positionBuffer = new n.UserOverridableBuffer, this.m_velocityBuffer = new n.UserOverridableBuffer, this.m_forceBuffer = [], this.m_weightBuffer = [], this.m_staticPressureBuffer = [], this.m_accumulationBuffer = [], this.m_accumulation2Buffer = [], this.m_depthBuffer = [], this.m_colorBuffer = new n.UserOverridableBuffer, this.m_groupBuffer = [], this.m_userDataBuffer = new n.UserOverridableBuffer, this.m_stuckThreshold = 0, this.m_lastBodyContactStepBuffer = new n.UserOverridableBuffer, this.m_bodyContactCountBuffer = new n.UserOverridableBuffer, this.m_consecutiveContactStepsBuffer = new n.UserOverridableBuffer, this.m_stuckParticleBuffer = new Rn(function() {
                        return 0
                    }), this.m_proxyBuffer = new Rn(function() {
                        return new n.Proxy
                    }), this.m_contactBuffer = new Rn(function() {
                        return new Ln
                    }), this.m_bodyContactBuffer = new Rn(function() {
                        return new Fn
                    }), this.m_pairBuffer = new Rn(function() {
                        return new Nn
                    }), this.m_triadBuffer = new Rn(function() {
                        return new Vn
                    }), this.m_expirationTimeBuffer = new n.UserOverridableBuffer, this.m_indexByExpirationTimeBuffer = new n.UserOverridableBuffer, this.m_timeElapsed = 0, this.m_expirationTimeBufferRequiresSorting = !1, this.m_groupCount = 0, this.m_groupList = null, this.m_def = new kn, this.m_prev = null, this.m_next = null, this.SetStrictContactCheck(t.strictContactCheck), this.SetDensity(t.density), this.SetGravityScale(t.gravityScale), this.SetRadius(t.radius), this.SetMaxParticleCount(t.maxCount), this.m_def = t.Clone(), this.m_world = e, this.SetDestructionByAge(this.m_def.destroyByAge)
                }
                return n.computeTag = function(t, e) {
                    return (e + n.yOffset >>> 0 << n.yShift) + (n.xScale * t + n.xOffset >>> 0) >>> 0
                }, n.computeRelativeTag = function(t, e, i) {
                    return t + (i << n.yShift) + (e << n.xShift) >>> 0
                }, n.prototype.Drop = function() {
                    for (; this.m_groupList;) this.DestroyParticleGroup(this.m_groupList);
                    this.FreeUserOverridableBuffer(this.m_handleIndexBuffer), this.FreeUserOverridableBuffer(this.m_flagsBuffer), this.FreeUserOverridableBuffer(this.m_lastBodyContactStepBuffer), this.FreeUserOverridableBuffer(this.m_bodyContactCountBuffer), this.FreeUserOverridableBuffer(this.m_consecutiveContactStepsBuffer), this.FreeUserOverridableBuffer(this.m_positionBuffer), this.FreeUserOverridableBuffer(this.m_velocityBuffer), this.FreeUserOverridableBuffer(this.m_colorBuffer), this.FreeUserOverridableBuffer(this.m_userDataBuffer), this.FreeUserOverridableBuffer(this.m_expirationTimeBuffer), this.FreeUserOverridableBuffer(this.m_indexByExpirationTimeBuffer), this.FreeBuffer(this.m_forceBuffer, this.m_internalAllocatedCapacity), this.FreeBuffer(this.m_weightBuffer, this.m_internalAllocatedCapacity), this.FreeBuffer(this.m_staticPressureBuffer, this.m_internalAllocatedCapacity), this.FreeBuffer(this.m_accumulationBuffer, this.m_internalAllocatedCapacity), this.FreeBuffer(this.m_accumulation2Buffer, this.m_internalAllocatedCapacity), this.FreeBuffer(this.m_depthBuffer, this.m_internalAllocatedCapacity), this.FreeBuffer(this.m_groupBuffer, this.m_internalAllocatedCapacity)
                }, n.prototype.CreateParticle = function(t) {
                    if (this.m_world.IsLocked()) throw new Error;
                    if (this.m_count >= this.m_internalAllocatedCapacity) {
                        var i = this.m_count ? 2 * this.m_count : 256;
                        this.ReallocateInternalAllocatedBuffers(i)
                    }
                    if (this.m_count >= this.m_internalAllocatedCapacity) {
                        if (!this.m_def.destroyByAge) return u;
                        this.DestroyOldestParticle(0, !1), this.SolveZombie()
                    }
                    var n = this.m_count++;
                    if (!this.m_flagsBuffer.data) throw new Error;
                    if (this.m_flagsBuffer.data[n] = 0, this.m_lastBodyContactStepBuffer.data && (this.m_lastBodyContactStepBuffer.data[n] = 0), this.m_bodyContactCountBuffer.data && (this.m_bodyContactCountBuffer.data[n] = 0), this.m_consecutiveContactStepsBuffer.data && (this.m_consecutiveContactStepsBuffer.data[n] = 0), !this.m_positionBuffer.data) throw new Error;
                    if (!this.m_velocityBuffer.data) throw new Error;
                    this.m_positionBuffer.data[n] = (this.m_positionBuffer.data[n] || new P).Copy(e(t.position, P.ZERO)), this.m_velocityBuffer.data[n] = (this.m_velocityBuffer.data[n] || new P).Copy(e(t.velocity, P.ZERO)), this.m_weightBuffer[n] = 0, this.m_forceBuffer[n] = (this.m_forceBuffer[n] || new P).SetZero(), this.m_staticPressureBuffer && (this.m_staticPressureBuffer[n] = 0), this.m_depthBuffer && (this.m_depthBuffer[n] = 0);
                    var r = (new G).Copy(e(t.color, G.ZERO));
                    !this.m_colorBuffer.data && r.IsZero() || (this.m_colorBuffer.data = this.RequestBuffer(this.m_colorBuffer.data), this.m_colorBuffer.data[n] = (this.m_colorBuffer.data[n] || new G).Copy(r)), (this.m_userDataBuffer.data || t.userData) && (this.m_userDataBuffer.data = this.RequestBuffer(this.m_userDataBuffer.data), this.m_userDataBuffer.data[n] = t.userData), this.m_handleIndexBuffer.data && (this.m_handleIndexBuffer.data[n] = null);
                    var s = this.m_proxyBuffer.data[this.m_proxyBuffer.Append()],
                        o = e(t.lifetime, 0),
                        a = o > 0;
                    if (this.m_expirationTimeBuffer.data || a) {
                        if (this.SetParticleLifetime(n, a ? o : this.ExpirationTimeToLifetime(-this.GetQuantizedTimeElapsed())), !this.m_indexByExpirationTimeBuffer.data) throw new Error;
                        this.m_indexByExpirationTimeBuffer.data[n] = n
                    }
                    s.index = n;
                    var l = e(t.group, null);
                    return this.m_groupBuffer[n] = l, l && (l.m_firstIndex < l.m_lastIndex ? (this.RotateBuffer(l.m_firstIndex, l.m_lastIndex, n), l.m_lastIndex = n + 1) : (l.m_firstIndex = n, l.m_lastIndex = n + 1)), this.SetParticleFlags(n, e(t.flags, 0)), n
                }, n.prototype.GetParticleHandleFromIndex = function(t) {
                    this.m_handleIndexBuffer.data = this.RequestBuffer(this.m_handleIndexBuffer.data);
                    var e = this.m_handleIndexBuffer.data[t];
                    return e || ((e = new gn).SetIndex(t), this.m_handleIndexBuffer.data[t] = e, e)
                }, n.prototype.DestroyParticle = function(e, i) {
                    if (void 0 === i && (i = !1), !this.m_flagsBuffer.data) throw new Error;
                    var n = t.b2ParticleFlag.b2_zombieParticle;
                    i && (n |= t.b2ParticleFlag.b2_destructionListenerParticle), this.SetParticleFlags(e, this.m_flagsBuffer.data[e] | n)
                }, n.prototype.DestroyOldestParticle = function(t, e) {
                    void 0 === e && (e = !1);
                    var i = this.GetParticleCount();
                    if (!this.m_indexByExpirationTimeBuffer.data) throw new Error;
                    if (!this.m_expirationTimeBuffer.data) throw new Error;
                    var n = this.m_indexByExpirationTimeBuffer.data[i - (t + 1)],
                        r = this.m_indexByExpirationTimeBuffer.data[t];
                    this.DestroyParticle(this.m_expirationTimeBuffer.data[n] > 0 ? n : r, e)
                }, n.prototype.DestroyParticlesInShape = function(t, e, i) {
                    void 0 === i && (i = !1);
                    var r = n.DestroyParticlesInShape_s_aabb;
                    if (this.m_world.IsLocked()) throw new Error;
                    var s = new n.DestroyParticlesInShapeCallback(this, t, e, i),
                        o = r;
                    return t.ComputeAABB(o, e, 0), this.m_world.QueryAABB(s, o), s.Destroyed()
                }, n.prototype.CreateParticleGroup = function(t) {
                    var i = n.CreateParticleGroup_s_transform;
                    if (this.m_world.IsLocked()) throw new Error;
                    var r = i;
                    r.SetPositionAngle(e(t.position, P.ZERO), e(t.angle, 0));
                    var s = this.m_count;
                    if (t.shape && this.CreateParticlesWithShapeForGroup(t.shape, t, r), t.shapes && this.CreateParticlesWithShapesForGroup(t.shapes, e(t.shapeCount, t.shapes.length), t, r), t.positionData)
                        for (var o = e(t.particleCount, t.positionData.length), a = 0; a < o; a++) {
                            var l = t.positionData[a];
                            this.CreateParticleForGroup(t, r, l)
                        }
                    var h = this.m_count,
                        c = new bn(this);
                    c.m_firstIndex = s, c.m_lastIndex = h, c.m_strength = e(t.strength, 1), c.m_userData = t.userData, c.m_transform.Copy(r), c.m_prev = null, c.m_next = this.m_groupList, this.m_groupList && (this.m_groupList.m_prev = c), this.m_groupList = c, ++this.m_groupCount;
                    for (a = s; a < h; a++) this.m_groupBuffer[a] = c;
                    this.SetGroupFlags(c, e(t.groupFlags, 0));
                    var u = new n.ConnectionFilter;
                    return this.UpdateContacts(!0), this.UpdatePairsAndTriads(s, h, u), t.group && (this.JoinParticleGroups(t.group, c), c = t.group), c
                }, n.prototype.JoinParticleGroups = function(t, e) {
                    if (this.m_world.IsLocked()) throw new Error;
                    this.RotateBuffer(e.m_firstIndex, e.m_lastIndex, this.m_count), this.RotateBuffer(t.m_firstIndex, t.m_lastIndex, e.m_firstIndex);
                    var i = new n.JoinParticleGroupsFilter(e.m_firstIndex);
                    this.UpdateContacts(!0), this.UpdatePairsAndTriads(t.m_firstIndex, e.m_lastIndex, i);
                    for (var r = e.m_firstIndex; r < e.m_lastIndex; r++) this.m_groupBuffer[r] = t;
                    var s = t.m_groupFlags | e.m_groupFlags;
                    this.SetGroupFlags(t, s), t.m_lastIndex = e.m_lastIndex, e.m_firstIndex = e.m_lastIndex, this.DestroyParticleGroup(e)
                }, n.prototype.SplitParticleGroup = function(t) {
                    this.UpdateContacts(!0);
                    var e = d(t.GetParticleCount(), (function(t) {
                        return new n.ParticleListNode
                    }));
                    n.InitializeParticleLists(t, e), this.MergeParticleListsInContact(t, e);
                    var i = n.FindLongestParticleList(t, e);
                    this.MergeZombieParticleListNodes(t, e, i), this.CreateParticleGroupsFromParticleList(t, e, i), this.UpdatePairsAndTriadsWithParticleList(t, e)
                }, n.prototype.GetParticleGroupList = function() {
                    return this.m_groupList
                }, n.prototype.GetParticleGroupCount = function() {
                    return this.m_groupCount
                }, n.prototype.GetParticleCount = function() {
                    return this.m_count
                }, n.prototype.GetMaxParticleCount = function() {
                    return this.m_def.maxCount
                }, n.prototype.SetMaxParticleCount = function(t) {
                    this.m_def.maxCount = t
                }, n.prototype.GetAllParticleFlags = function() {
                    return this.m_allParticleFlags
                }, n.prototype.GetAllGroupFlags = function() {
                    return this.m_allGroupFlags
                }, n.prototype.SetPaused = function(t) {
                    this.m_paused = t
                }, n.prototype.GetPaused = function() {
                    return this.m_paused
                }, n.prototype.SetDensity = function(t) {
                    this.m_def.density = t, this.m_inverseDensity = 1 / this.m_def.density
                }, n.prototype.GetDensity = function() {
                    return this.m_def.density
                }, n.prototype.SetGravityScale = function(t) {
                    this.m_def.gravityScale = t
                }, n.prototype.GetGravityScale = function() {
                    return this.m_def.gravityScale
                }, n.prototype.SetDamping = function(t) {
                    this.m_def.dampingStrength = t
                }, n.prototype.GetDamping = function() {
                    return this.m_def.dampingStrength
                }, n.prototype.SetStaticPressureIterations = function(t) {
                    this.m_def.staticPressureIterations = t
                }, n.prototype.GetStaticPressureIterations = function() {
                    return this.m_def.staticPressureIterations
                }, n.prototype.SetRadius = function(t) {
                    this.m_particleDiameter = 2 * t, this.m_squaredDiameter = this.m_particleDiameter * this.m_particleDiameter, this.m_inverseDiameter = 1 / this.m_particleDiameter
                }, n.prototype.GetRadius = function() {
                    return this.m_particleDiameter / 2
                }, n.prototype.GetPositionBuffer = function() {
                    if (!this.m_positionBuffer.data) throw new Error;
                    return this.m_positionBuffer.data
                }, n.prototype.GetVelocityBuffer = function() {
                    if (!this.m_velocityBuffer.data) throw new Error;
                    return this.m_velocityBuffer.data
                }, n.prototype.GetColorBuffer = function() {
                    return this.m_colorBuffer.data = this.RequestBuffer(this.m_colorBuffer.data), this.m_colorBuffer.data
                }, n.prototype.GetGroupBuffer = function() {
                    return this.m_groupBuffer
                }, n.prototype.GetWeightBuffer = function() {
                    return this.m_weightBuffer
                }, n.prototype.GetUserDataBuffer = function() {
                    return this.m_userDataBuffer.data = this.RequestBuffer(this.m_userDataBuffer.data), this.m_userDataBuffer.data
                }, n.prototype.GetFlagsBuffer = function() {
                    if (!this.m_flagsBuffer.data) throw new Error;
                    return this.m_flagsBuffer.data
                }, n.prototype.SetParticleFlags = function(e, i) {
                    if (!this.m_flagsBuffer.data) throw new Error;
                    this.m_flagsBuffer.data[e] & ~i && (this.m_needsUpdateAllParticleFlags = !0), ~this.m_allParticleFlags & i && (i & t.b2ParticleFlag.b2_tensileParticle && (this.m_accumulation2Buffer = this.RequestBuffer(this.m_accumulation2Buffer)), i & t.b2ParticleFlag.b2_colorMixingParticle && (this.m_colorBuffer.data = this.RequestBuffer(this.m_colorBuffer.data)), this.m_allParticleFlags |= i), this.m_flagsBuffer.data[e] = i
                }, n.prototype.GetParticleFlags = function(t) {
                    if (!this.m_flagsBuffer.data) throw new Error;
                    return this.m_flagsBuffer.data[t]
                }, n.prototype.SetFlagsBuffer = function(t, e) {
                    this.SetUserOverridableBuffer(this.m_flagsBuffer, t, e)
                }, n.prototype.SetPositionBuffer = function(t, e) {
                    this.SetUserOverridableBuffer(this.m_positionBuffer, t, e)
                }, n.prototype.SetVelocityBuffer = function(t, e) {
                    this.SetUserOverridableBuffer(this.m_velocityBuffer, t, e)
                }, n.prototype.SetColorBuffer = function(t, e) {
                    this.SetUserOverridableBuffer(this.m_colorBuffer, t, e)
                }, n.prototype.SetUserDataBuffer = function(t, e) {
                    this.SetUserOverridableBuffer(this.m_userDataBuffer, t, e)
                }, n.prototype.GetContacts = function() {
                    return this.m_contactBuffer.data
                }, n.prototype.GetContactCount = function() {
                    return this.m_contactBuffer.count
                }, n.prototype.GetBodyContacts = function() {
                    return this.m_bodyContactBuffer.data
                }, n.prototype.GetBodyContactCount = function() {
                    return this.m_bodyContactBuffer.count
                }, n.prototype.GetPairs = function() {
                    return this.m_pairBuffer.data
                }, n.prototype.GetPairCount = function() {
                    return this.m_pairBuffer.count
                }, n.prototype.GetTriads = function() {
                    return this.m_triadBuffer.data
                }, n.prototype.GetTriadCount = function() {
                    return this.m_triadBuffer.count
                }, n.prototype.SetStuckThreshold = function(t) {
                    this.m_stuckThreshold = t, t > 0 && (this.m_lastBodyContactStepBuffer.data = this.RequestBuffer(this.m_lastBodyContactStepBuffer.data), this.m_bodyContactCountBuffer.data = this.RequestBuffer(this.m_bodyContactCountBuffer.data), this.m_consecutiveContactStepsBuffer.data = this.RequestBuffer(this.m_consecutiveContactStepsBuffer.data))
                }, n.prototype.GetStuckCandidates = function() {
                    return this.m_stuckParticleBuffer.Data()
                }, n.prototype.GetStuckCandidateCount = function() {
                    return this.m_stuckParticleBuffer.GetCount()
                }, n.prototype.ComputeCollisionEnergy = function() {
                    if (!this.m_velocityBuffer.data) throw new Error;
                    for (var t = n.ComputeCollisionEnergy_s_v, e = this.m_velocityBuffer.data, i = 0, r = 0; r < this.m_contactBuffer.count; r++) {
                        var s = this.m_contactBuffer.data[r],
                            o = s.indexA,
                            a = s.indexB,
                            l = s.normal,
                            h = P.SubVV(e[a], e[o], t),
                            c = P.DotVV(h, l);
                        c < 0 && (i += c * c)
                    }
                    return .5 * this.GetParticleMass() * i
                }, n.prototype.SetStrictContactCheck = function(t) {
                    this.m_def.strictContactCheck = t
                }, n.prototype.GetStrictContactCheck = function() {
                    return this.m_def.strictContactCheck
                }, n.prototype.SetParticleLifetime = function(t, e) {
                    var i = null === this.m_indexByExpirationTimeBuffer.data;
                    if (this.m_expirationTimeBuffer.data = this.RequestBuffer(this.m_expirationTimeBuffer.data), this.m_indexByExpirationTimeBuffer.data = this.RequestBuffer(this.m_indexByExpirationTimeBuffer.data), i)
                        for (var n = this.GetParticleCount(), r = 0; r < n; ++r) this.m_indexByExpirationTimeBuffer.data[r] = r;
                    var s = e / this.m_def.lifetimeGranularity,
                        o = s > 0 ? this.GetQuantizedTimeElapsed() + s : s;
                    o !== this.m_expirationTimeBuffer.data[t] && (this.m_expirationTimeBuffer.data[t] = o, this.m_expirationTimeBufferRequiresSorting = !0)
                }, n.prototype.GetParticleLifetime = function(t) {
                    return this.ExpirationTimeToLifetime(this.GetExpirationTimeBuffer()[t])
                }, n.prototype.SetDestructionByAge = function(t) {
                    t && this.GetExpirationTimeBuffer(), this.m_def.destroyByAge = t
                }, n.prototype.GetDestructionByAge = function() {
                    return this.m_def.destroyByAge
                }, n.prototype.GetExpirationTimeBuffer = function() {
                    return this.m_expirationTimeBuffer.data = this.RequestBuffer(this.m_expirationTimeBuffer.data), this.m_expirationTimeBuffer.data
                }, n.prototype.ExpirationTimeToLifetime = function(t) {
                    return (t > 0 ? t - this.GetQuantizedTimeElapsed() : t) * this.m_def.lifetimeGranularity
                }, n.prototype.GetIndexByExpirationTimeBuffer = function() {
                    if (this.GetParticleCount() ? this.SetParticleLifetime(0, this.GetParticleLifetime(0)) : this.m_indexByExpirationTimeBuffer.data = this.RequestBuffer(this.m_indexByExpirationTimeBuffer.data), !this.m_indexByExpirationTimeBuffer.data) throw new Error;
                    return this.m_indexByExpirationTimeBuffer.data
                }, n.prototype.ParticleApplyLinearImpulse = function(t, e) {
                    this.ApplyLinearImpulse(t, t + 1, e)
                }, n.prototype.ApplyLinearImpulse = function(t, e, i) {
                    if (!this.m_velocityBuffer.data) throw new Error;
                    for (var n = this.m_velocityBuffer.data, r = (e - t) * this.GetParticleMass(), s = (new P).Copy(i).SelfMul(1 / r), o = t; o < e; o++) n[o].SelfAdd(s)
                }, n.IsSignificantForce = function(t) {
                    return 0 !== t.x || 0 !== t.y
                }, n.prototype.ParticleApplyForce = function(t, e) {
                    if (!this.m_flagsBuffer.data) throw new Error;
                    n.IsSignificantForce(e) && this.ForceCanBeApplied(this.m_flagsBuffer.data[t]) && (this.PrepareForceBuffer(), this.m_forceBuffer[t].SelfAdd(e))
                }, n.prototype.ApplyForce = function(t, e, i) {
                    var r = (new P).Copy(i).SelfMul(1 / (e - t));
                    if (n.IsSignificantForce(r)) {
                        this.PrepareForceBuffer();
                        for (var s = t; s < e; s++) this.m_forceBuffer[s].SelfAdd(r)
                    }
                }, n.prototype.GetNext = function() {
                    return this.m_next
                }, n.prototype.QueryAABB = function(t, e) {
                    if (0 !== this.m_proxyBuffer.count) {
                        var i = this.m_proxyBuffer.count,
                            r = Dn(this.m_proxyBuffer.data, 0, i, n.computeTag(this.m_inverseDiameter * e.lowerBound.x, this.m_inverseDiameter * e.lowerBound.y), n.Proxy.CompareProxyTag),
                            s = Bn(this.m_proxyBuffer.data, r, i, n.computeTag(this.m_inverseDiameter * e.upperBound.x, this.m_inverseDiameter * e.upperBound.y), n.Proxy.CompareTagProxy);
                        if (!this.m_positionBuffer.data) throw new Error;
                        for (var o = this.m_positionBuffer.data, a = r; a < s; ++a) {
                            var l = this.m_proxyBuffer.data[a].index,
                                h = o[l];
                            if (e.lowerBound.x < h.x && h.x < e.upperBound.x && e.lowerBound.y < h.y && h.y < e.upperBound.y && !t.ReportParticle(this, l)) break
                        }
                    }
                }, n.prototype.QueryShapeAABB = function(t, e, i, r) {
                    void 0 === r && (r = 0);
                    var s = n.QueryShapeAABB_s_aabb;
                    e.ComputeAABB(s, i, r), this.QueryAABB(t, s)
                }, n.prototype.QueryPointAABB = function(t, e, i) {
                    void 0 === i && (i = l);
                    var r = n.QueryPointAABB_s_aabb;
                    r.lowerBound.Set(e.x - i, e.y - i), r.upperBound.Set(e.x + i, e.y + i), this.QueryAABB(t, r)
                }, n.prototype.RayCast = function(t, e, i) {
                    var r = n.RayCast_s_aabb,
                        s = n.RayCast_s_p,
                        o = n.RayCast_s_v,
                        a = n.RayCast_s_n,
                        l = n.RayCast_s_point;
                    if (0 !== this.m_proxyBuffer.count) {
                        if (!this.m_positionBuffer.data) throw new Error;
                        var h = this.m_positionBuffer.data,
                            c = r;
                        P.MinV(e, i, c.lowerBound), P.MaxV(e, i, c.upperBound);
                        for (var u, _ = 1, f = P.SubVV(i, e, o), d = P.DotVV(f, f), p = this.GetInsideBoundsEnumerator(c);
                            (u = p.GetNext()) >= 0;) {
                            var m = P.SubVV(e, h[u], s),
                                y = P.DotVV(m, f),
                                v = y * y - d * (P.DotVV(m, m) - this.m_squaredDiameter);
                            if (v >= 0) {
                                var x = S(v),
                                    b = (-y - x) / d;
                                if (b > _) continue;
                                if (b < 0 && ((b = (-y + x) / d) < 0 || b > _)) continue;
                                var A = P.AddVMulSV(m, b, f, a);
                                A.Normalize();
                                var C = t.ReportParticle(this, u, P.AddVMulSV(e, b, f, l), A, b);
                                if ((_ = g(_, C)) <= 0) break
                            }
                        }
                    }
                }, n.prototype.ComputeAABB = function(t) {
                    var e = this.GetParticleCount();
                    if (t.lowerBound.x = +i, t.lowerBound.y = +i, t.upperBound.x = -i, t.upperBound.y = -i, !this.m_positionBuffer.data) throw new Error;
                    for (var n = this.m_positionBuffer.data, r = 0; r < e; r++) {
                        var s = n[r];
                        P.MinV(t.lowerBound, s, t.lowerBound), P.MaxV(t.upperBound, s, t.upperBound)
                    }
                    t.lowerBound.x -= this.m_particleDiameter, t.lowerBound.y -= this.m_particleDiameter, t.upperBound.x += this.m_particleDiameter, t.upperBound.y += this.m_particleDiameter
                }, n.prototype.FreeBuffer = function(t, e) {
                    null !== t && (t.length = 0)
                }, n.prototype.FreeUserOverridableBuffer = function(t) {
                    0 === t.userSuppliedCapacity && this.FreeBuffer(t.data, this.m_internalAllocatedCapacity)
                }, n.prototype.ReallocateBuffer3 = function(t, e, i) {
                    if (i <= e) throw new Error;
                    var n = t ? t.slice() : [];
                    return n.length = i, n
                }, n.prototype.ReallocateBuffer5 = function(t, e, i, n, r) {
                    if (n <= i) throw new Error;
                    if (e && !(n <= e)) throw new Error;
                    return r && !t || e || (t = this.ReallocateBuffer3(t, i, n)), t
                }, n.prototype.ReallocateBuffer4 = function(t, e, i, n) {
                    return this.ReallocateBuffer5(t.data, t.userSuppliedCapacity, e, i, n)
                }, n.prototype.RequestBuffer = function(t) {
                    return t || (0 === this.m_internalAllocatedCapacity && this.ReallocateInternalAllocatedBuffers(256), (t = []).length = this.m_internalAllocatedCapacity), t
                }, n.prototype.ReallocateHandleBuffers = function(t) {
                    this.m_handleIndexBuffer.data = this.ReallocateBuffer4(this.m_handleIndexBuffer, this.m_internalAllocatedCapacity, t, !0)
                }, n.prototype.ReallocateInternalAllocatedBuffers = function(t) {
                    function e(t, e) {
                        return e && t > e ? e : t
                    }
                    if (t = e(t = e(t = e(t = e(t = e(t = e(t, this.m_def.maxCount), this.m_flagsBuffer.userSuppliedCapacity), this.m_positionBuffer.userSuppliedCapacity), this.m_velocityBuffer.userSuppliedCapacity), this.m_colorBuffer.userSuppliedCapacity), this.m_userDataBuffer.userSuppliedCapacity), this.m_internalAllocatedCapacity < t) {
                        this.ReallocateHandleBuffers(t), this.m_flagsBuffer.data = this.ReallocateBuffer4(this.m_flagsBuffer, this.m_internalAllocatedCapacity, t, !1);
                        var i = this.m_stuckThreshold > 0;
                        this.m_lastBodyContactStepBuffer.data = this.ReallocateBuffer4(this.m_lastBodyContactStepBuffer, this.m_internalAllocatedCapacity, t, i), this.m_bodyContactCountBuffer.data = this.ReallocateBuffer4(this.m_bodyContactCountBuffer, this.m_internalAllocatedCapacity, t, i), this.m_consecutiveContactStepsBuffer.data = this.ReallocateBuffer4(this.m_consecutiveContactStepsBuffer, this.m_internalAllocatedCapacity, t, i), this.m_positionBuffer.data = this.ReallocateBuffer4(this.m_positionBuffer, this.m_internalAllocatedCapacity, t, !1), this.m_velocityBuffer.data = this.ReallocateBuffer4(this.m_velocityBuffer, this.m_internalAllocatedCapacity, t, !1), this.m_forceBuffer = this.ReallocateBuffer5(this.m_forceBuffer, 0, this.m_internalAllocatedCapacity, t, !1), this.m_weightBuffer = this.ReallocateBuffer5(this.m_weightBuffer, 0, this.m_internalAllocatedCapacity, t, !1), this.m_staticPressureBuffer = this.ReallocateBuffer5(this.m_staticPressureBuffer, 0, this.m_internalAllocatedCapacity, t, !0), this.m_accumulationBuffer = this.ReallocateBuffer5(this.m_accumulationBuffer, 0, this.m_internalAllocatedCapacity, t, !1), this.m_accumulation2Buffer = this.ReallocateBuffer5(this.m_accumulation2Buffer, 0, this.m_internalAllocatedCapacity, t, !0), this.m_depthBuffer = this.ReallocateBuffer5(this.m_depthBuffer, 0, this.m_internalAllocatedCapacity, t, !0), this.m_colorBuffer.data = this.ReallocateBuffer4(this.m_colorBuffer, this.m_internalAllocatedCapacity, t, !0), this.m_groupBuffer = this.ReallocateBuffer5(this.m_groupBuffer, 0, this.m_internalAllocatedCapacity, t, !1), this.m_userDataBuffer.data = this.ReallocateBuffer4(this.m_userDataBuffer, this.m_internalAllocatedCapacity, t, !0), this.m_expirationTimeBuffer.data = this.ReallocateBuffer4(this.m_expirationTimeBuffer, this.m_internalAllocatedCapacity, t, !0), this.m_indexByExpirationTimeBuffer.data = this.ReallocateBuffer4(this.m_indexByExpirationTimeBuffer, this.m_internalAllocatedCapacity, t, !1), this.m_internalAllocatedCapacity = t
                    }
                }, n.prototype.CreateParticleForGroup = function(t, i, n) {
                    var r = new yn;
                    r.flags = e(t.flags, 0), V.MulXV(i, n, r.position), P.AddVV(e(t.linearVelocity, P.ZERO), P.CrossSV(e(t.angularVelocity, 0), P.SubVV(r.position, e(t.position, P.ZERO), P.s_t0), P.s_t0), r.velocity), r.color.Copy(e(t.color, G.ZERO)), r.lifetime = e(t.lifetime, 0), r.userData = t.userData, this.CreateParticle(r)
                }, n.prototype.CreateParticlesStrokeShapeForGroup = function(i, r, s) {
                    var o = n.CreateParticlesStrokeShapeForGroup_s_edge,
                        a = n.CreateParticlesStrokeShapeForGroup_s_d,
                        l = n.CreateParticlesStrokeShapeForGroup_s_p,
                        h = e(r.stride, 0);
                    0 === h && (h = this.GetParticleStride());
                    for (var c = 0, u = i.GetChildCount(), _ = 0; _ < u; _++) {
                        var f = null;
                        i.GetType() === t.b2ShapeType.e_edgeShape ? f = i : (f = o, i.GetChildEdge(f, _));
                        for (var d = P.SubVV(f.m_vertex2, f.m_vertex1, a), p = d.Length(); c < p;) {
                            var m = P.AddVMulSV(f.m_vertex1, c / p, d, l);
                            this.CreateParticleForGroup(r, s, m), c += h
                        }
                        c -= p
                    }
                }, n.prototype.CreateParticlesFillShapeForGroup = function(t, i, r) {
                    var s = n.CreateParticlesFillShapeForGroup_s_aabb,
                        o = n.CreateParticlesFillShapeForGroup_s_p,
                        a = e(i.stride, 0);
                    0 === a && (a = this.GetParticleStride());
                    var l = V.IDENTITY,
                        h = s;
                    t.ComputeAABB(h, l, 0);
                    for (var c = Math.floor(h.lowerBound.y / a) * a; c < h.upperBound.y; c += a)
                        for (var u = Math.floor(h.lowerBound.x / a) * a; u < h.upperBound.x; u += a) {
                            var _ = o.Set(u, c);
                            t.TestPoint(l, _) && this.CreateParticleForGroup(i, r, _)
                        }
                }, n.prototype.CreateParticlesWithShapeForGroup = function(e, i, n) {
                    switch (e.GetType()) {
                        case t.b2ShapeType.e_edgeShape:
                        case t.b2ShapeType.e_chainShape:
                            this.CreateParticlesStrokeShapeForGroup(e, i, n);
                            break;
                        case t.b2ShapeType.e_polygonShape:
                        case t.b2ShapeType.e_circleShape:
                            this.CreateParticlesFillShapeForGroup(e, i, n)
                    }
                }, n.prototype.CreateParticlesWithShapesForGroup = function(t, e, i, r) {
                    var s = new n.CompositeShape(t, e);
                    this.CreateParticlesFillShapeForGroup(s, i, r)
                }, n.prototype.CloneParticle = function(t, e) {
                    var i = new yn;
                    if (!this.m_flagsBuffer.data) throw new Error;
                    if (!this.m_positionBuffer.data) throw new Error;
                    if (!this.m_velocityBuffer.data) throw new Error;
                    i.flags = this.m_flagsBuffer.data[t], i.position.Copy(this.m_positionBuffer.data[t]), i.velocity.Copy(this.m_velocityBuffer.data[t]), this.m_colorBuffer.data && i.color.Copy(this.m_colorBuffer.data[t]), this.m_userDataBuffer.data && (i.userData = this.m_userDataBuffer.data[t]), i.group = e;
                    var n = this.CreateParticle(i);
                    if (this.m_handleIndexBuffer.data) {
                        var r = this.m_handleIndexBuffer.data[t];
                        r && r.SetIndex(n), this.m_handleIndexBuffer.data[n] = r, this.m_handleIndexBuffer.data[t] = null
                    }
                    return this.m_lastBodyContactStepBuffer.data && (this.m_lastBodyContactStepBuffer.data[n] = this.m_lastBodyContactStepBuffer.data[t]), this.m_bodyContactCountBuffer.data && (this.m_bodyContactCountBuffer.data[n] = this.m_bodyContactCountBuffer.data[t]), this.m_consecutiveContactStepsBuffer.data && (this.m_consecutiveContactStepsBuffer.data[n] = this.m_consecutiveContactStepsBuffer.data[t]), this.m_hasForce && this.m_forceBuffer[n].Copy(this.m_forceBuffer[t]), this.m_staticPressureBuffer && (this.m_staticPressureBuffer[n] = this.m_staticPressureBuffer[t]), this.m_depthBuffer && (this.m_depthBuffer[n] = this.m_depthBuffer[t]), this.m_expirationTimeBuffer.data && (this.m_expirationTimeBuffer.data[n] = this.m_expirationTimeBuffer.data[t]), n
                }, n.prototype.DestroyParticlesInGroup = function(t, e) {
                    void 0 === e && (e = !1);
                    for (var i = t.m_firstIndex; i < t.m_lastIndex; i++) this.DestroyParticle(i, e)
                }, n.prototype.DestroyParticleGroup = function(t) {
                    this.m_world.m_destructionListener && this.m_world.m_destructionListener.SayGoodbyeParticleGroup(t), this.SetGroupFlags(t, 0);
                    for (var e = t.m_firstIndex; e < t.m_lastIndex; e++) this.m_groupBuffer[e] = null;
                    t.m_prev && (t.m_prev.m_next = t.m_next), t.m_next && (t.m_next.m_prev = t.m_prev), t === this.m_groupList && (this.m_groupList = t.m_next), --this.m_groupCount
                }, n.ParticleCanBeConnected = function(e, i) {
                    return 0 != (e & (t.b2ParticleFlag.b2_wallParticle | t.b2ParticleFlag.b2_springParticle | t.b2ParticleFlag.b2_elasticParticle)) || null !== i && 0 != (i.GetGroupFlags() & t.b2ParticleGroupFlag.b2_rigidParticleGroup)
                }, n.prototype.UpdatePairsAndTriads = function(e, i, r) {
                    var s = n.UpdatePairsAndTriads_s_dab,
                        o = n.UpdatePairsAndTriads_s_dbc,
                        a = n.UpdatePairsAndTriads_s_dca;
                    if (!this.m_flagsBuffer.data) throw new Error;
                    if (!this.m_positionBuffer.data) throw new Error;
                    if (!this.m_velocityBuffer.data) throw new Error;
                    for (var l = this.m_positionBuffer.data, h = 0, c = e; c < i; c++) h |= this.m_flagsBuffer.data[c];
                    if (h & n.k_pairFlags)
                        for (var u = 0; u < this.m_contactBuffer.count; u++) {
                            var _ = this.m_contactBuffer.data[u],
                                f = _.indexA,
                                d = _.indexB,
                                p = this.m_flagsBuffer.data[f],
                                m = this.m_flagsBuffer.data[d],
                                y = this.m_groupBuffer[f],
                                v = this.m_groupBuffer[d];
                            if (f >= e && f < i && d >= e && d < i && !((p | m) & t.b2ParticleFlag.b2_zombieParticle) && (p | m) & n.k_pairFlags && (r.IsNecessary(f) || r.IsNecessary(d)) && n.ParticleCanBeConnected(p, y) && n.ParticleCanBeConnected(m, v) && r.ShouldCreatePair(f, d)) {
                                var x = this.m_pairBuffer.data[this.m_pairBuffer.Append()];
                                x.indexA = f, x.indexB = d, x.flags = _.flags, x.strength = g(y ? y.m_strength : 1, v ? v.m_strength : 1), x.distance = P.DistanceVV(l[f], l[d])
                            }
                            En(this.m_pairBuffer.data, 0, this.m_pairBuffer.count, n.ComparePairIndices), this.m_pairBuffer.Unique(n.MatchPairIndices)
                        }
                    if (h & n.k_triadFlags) {
                        var b = new Cn(i - e);
                        for (c = e; c < i; c++) {
                            var A = this.m_flagsBuffer.data[c],
                                C = this.m_groupBuffer[c];
                            A & t.b2ParticleFlag.b2_zombieParticle || !n.ParticleCanBeConnected(A, C) || b.AddGenerator(l[c], c, r.IsNecessary(c))
                        }
                        var T = this.GetParticleStride();
                        b.Generate(T / 2, 2 * T);
                        var S = this;
                        b.GetNodes((function(t, e, i) {
                            if (!S.m_flagsBuffer.data) throw new Error;
                            var h = S.m_flagsBuffer.data[t],
                                c = S.m_flagsBuffer.data[e],
                                u = S.m_flagsBuffer.data[i];
                            if ((h | c | u) & n.k_triadFlags && r.ShouldCreateTriad(t, e, i)) {
                                var _ = l[t],
                                    f = l[e],
                                    d = l[i],
                                    p = P.SubVV(_, f, s),
                                    m = P.SubVV(f, d, o),
                                    y = P.SubVV(d, _, a),
                                    v = 4 * S.m_squaredDiameter;
                                if (P.DotVV(p, p) > v || P.DotVV(m, m) > v || P.DotVV(y, y) > v) return;
                                var x = S.m_groupBuffer[t],
                                    b = S.m_groupBuffer[e],
                                    A = S.m_groupBuffer[i],
                                    C = S.m_triadBuffer.data[S.m_triadBuffer.Append()];
                                C.indexA = t, C.indexB = e, C.indexC = i, C.flags = h | c | u, C.strength = g(g(x ? x.m_strength : 1, b ? b.m_strength : 1), A ? A.m_strength : 1);
                                var T = (_.x + f.x + d.x) / 3,
                                    w = (_.y + f.y + d.y) / 3;
                                C.pa.x = _.x - T, C.pa.y = _.y - w, C.pb.x = f.x - T, C.pb.y = f.y - w, C.pc.x = d.x - T, C.pc.y = d.y - w, C.ka = -P.DotVV(y, p), C.kb = -P.DotVV(p, m), C.kc = -P.DotVV(m, y), C.s = P.CrossVV(_, f) + P.CrossVV(f, d) + P.CrossVV(d, _)
                            }
                        })), En(this.m_triadBuffer.data, 0, this.m_triadBuffer.count, n.CompareTriadIndices), this.m_triadBuffer.Unique(n.MatchTriadIndices)
                    }
                }, n.prototype.UpdatePairsAndTriadsWithReactiveParticles = function() {
                    var e = new n.ReactiveFilter(this.m_flagsBuffer);
                    if (this.UpdatePairsAndTriads(0, this.m_count, e), !this.m_flagsBuffer.data) throw new Error;
                    for (var i = 0; i < this.m_count; i++) this.m_flagsBuffer.data[i] &= ~t.b2ParticleFlag.b2_reactiveParticle;
                    this.m_allParticleFlags &= ~t.b2ParticleFlag.b2_reactiveParticle
                }, n.ComparePairIndices = function(t, e) {
                    var i = t.indexA - e.indexA;
                    return 0 !== i ? i < 0 : t.indexB < e.indexB
                }, n.MatchPairIndices = function(t, e) {
                    return t.indexA === e.indexA && t.indexB === e.indexB
                }, n.CompareTriadIndices = function(t, e) {
                    var i = t.indexA - e.indexA;
                    if (0 !== i) return i < 0;
                    var n = t.indexB - e.indexB;
                    return 0 !== n ? n < 0 : t.indexC < e.indexC
                }, n.MatchTriadIndices = function(t, e) {
                    return t.indexA === e.indexA && t.indexB === e.indexB && t.indexC === e.indexC
                }, n.InitializeParticleLists = function(t, e) {
                    for (var i = t.GetBufferIndex(), n = t.GetParticleCount(), r = 0; r < n; r++) {
                        var s = e[r];
                        s.list = s, s.next = null, s.count = 1, s.index = r + i
                    }
                }, n.prototype.MergeParticleListsInContact = function(t, e) {
                    for (var i = t.GetBufferIndex(), r = 0; r < this.m_contactBuffer.count; r++) {
                        var s = this.m_contactBuffer.data[r],
                            o = s.indexA,
                            a = s.indexB;
                        if (t.ContainsParticle(o) && t.ContainsParticle(a)) {
                            var l = e[o - i].list,
                                h = e[a - i].list;
                            if (l !== h) {
                                if (l.count < h.count) {
                                    var c = l;
                                    l = h, h = c
                                }
                                n.MergeParticleLists(l, h)
                            }
                        }
                    }
                }, n.MergeParticleLists = function(t, e) {
                    for (var i = e;;) {
                        i.list = t;
                        var n = i.next;
                        if (!n) {
                            i.next = t.next;
                            break
                        }
                        i = n
                    }
                    t.next = e, t.count += e.count, e.count = 0
                }, n.FindLongestParticleList = function(t, e) {
                    for (var i = t.GetParticleCount(), n = e[0], r = 0; r < i; r++) {
                        var s = e[r];
                        n.count < s.count && (n = s)
                    }
                    return n
                }, n.prototype.MergeZombieParticleListNodes = function(e, i, r) {
                    if (!this.m_flagsBuffer.data) throw new Error;
                    for (var s = e.GetParticleCount(), o = 0; o < s; o++) {
                        var a = i[o];
                        a !== r && this.m_flagsBuffer.data[a.index] & t.b2ParticleFlag.b2_zombieParticle && n.MergeParticleListAndNode(r, a)
                    }
                }, n.MergeParticleListAndNode = function(t, e) {
                    e.list = t, e.next = t.next, t.next = e, t.count++, e.count = 0
                }, n.prototype.CreateParticleGroupsFromParticleList = function(e, i, n) {
                    if (!this.m_flagsBuffer.data) throw new Error;
                    var r = e.GetParticleCount(),
                        s = new xn;
                    s.groupFlags = e.GetGroupFlags(), s.userData = e.GetUserData();
                    for (var o = 0; o < r; o++) {
                        var a = i[o];
                        if (a.count && a !== n)
                            for (var l = this.CreateParticleGroup(s), h = a; h; h = h.next) {
                                var c = h.index,
                                    u = this.CloneParticle(c, l);
                                this.m_flagsBuffer.data[c] |= t.b2ParticleFlag.b2_zombieParticle, h.index = u
                            }
                    }
                }, n.prototype.UpdatePairsAndTriadsWithParticleList = function(t, e) {
                    for (var i = t.GetBufferIndex(), n = 0; n < this.m_pairBuffer.count; n++) {
                        var r = this.m_pairBuffer.data[n],
                            s = r.indexA,
                            o = r.indexB;
                        t.ContainsParticle(s) && (r.indexA = e[s - i].index), t.ContainsParticle(o) && (r.indexB = e[o - i].index)
                    }
                    for (n = 0; n < this.m_triadBuffer.count; n++) {
                        var a = this.m_triadBuffer.data[n],
                            l = (s = a.indexA, o = a.indexB, a.indexC);
                        t.ContainsParticle(s) && (a.indexA = e[s - i].index), t.ContainsParticle(o) && (a.indexB = e[o - i].index), t.ContainsParticle(l) && (a.indexC = e[l - i].index)
                    }
                }, n.prototype.ComputeDepth = function() {
                    for (var e = [], n = 0, r = 0; r < this.m_contactBuffer.count; r++) {
                        var s = (v = this.m_contactBuffer.data[r]).indexA,
                            o = v.indexB,
                            a = this.m_groupBuffer[s],
                            l = this.m_groupBuffer[o];
                        a && a === l && a.m_groupFlags & t.b2ParticleGroupFlag.b2_particleGroupNeedsUpdateDepth && (e[n++] = v)
                    }
                    for (var h = [], c = 0, u = this.m_groupList; u; u = u.GetNext())
                        if (u.m_groupFlags & t.b2ParticleGroupFlag.b2_particleGroupNeedsUpdateDepth) {
                            h[c++] = u, this.SetGroupFlags(u, u.m_groupFlags & ~t.b2ParticleGroupFlag.b2_particleGroupNeedsUpdateDepth);
                            for (var _ = u.m_firstIndex; _ < u.m_lastIndex; _++) this.m_accumulationBuffer[_] = 0
                        }
                    for (r = 0; r < n; r++) {
                        s = (v = e[r]).indexA, o = v.indexB;
                        var f = v.weight;
                        this.m_accumulationBuffer[s] += f, this.m_accumulationBuffer[o] += f
                    }
                    for (_ = 0; _ < c; _++)
                        for (var d = (u = h[_]).m_firstIndex; d < u.m_lastIndex; d++) {
                            f = this.m_accumulationBuffer[d];
                            this.m_depthBuffer[d] = f < .8 ? 0 : i
                        }
                    for (var p = S(this.m_count) >> 0, m = 0; m < p; m++) {
                        var y = !1;
                        for (r = 0; r < n; r++) {
                            s = (v = e[r]).indexA, o = v.indexB;
                            var v, g = 1 - v.weight,
                                x = this.m_depthBuffer[s],
                                b = this.m_depthBuffer[o],
                                A = b + g,
                                C = x + g;
                            x > A && (this.m_depthBuffer[s] = A, y = !0), b > C && (this.m_depthBuffer[o] = C, y = !0)
                        }
                        if (!y) break
                    }
                    for (_ = 0; _ < c; _++)
                        for (var T = (u = h[_]).m_firstIndex; T < u.m_lastIndex; T++) this.m_depthBuffer[T] < i ? this.m_depthBuffer[T] *= this.m_particleDiameter : this.m_depthBuffer[T] = 0
                }, n.prototype.GetInsideBoundsEnumerator = function(t) {
                    var e = n.computeTag(this.m_inverseDiameter * t.lowerBound.x - 1, this.m_inverseDiameter * t.lowerBound.y - 1),
                        i = n.computeTag(this.m_inverseDiameter * t.upperBound.x + 1, this.m_inverseDiameter * t.upperBound.y + 1),
                        r = this.m_proxyBuffer.count,
                        s = Dn(this.m_proxyBuffer.data, 0, r, e, n.Proxy.CompareProxyTag),
                        o = Bn(this.m_proxyBuffer.data, 0, r, i, n.Proxy.CompareTagProxy);
                    return new n.InsideBoundsEnumerator(this, e, i, s, o)
                }, n.prototype.UpdateAllParticleFlags = function() {
                    if (!this.m_flagsBuffer.data) throw new Error;
                    this.m_allParticleFlags = 0;
                    for (var t = 0; t < this.m_count; t++) this.m_allParticleFlags |= this.m_flagsBuffer.data[t];
                    this.m_needsUpdateAllParticleFlags = !1
                }, n.prototype.UpdateAllGroupFlags = function() {
                    this.m_allGroupFlags = 0;
                    for (var t = this.m_groupList; t; t = t.GetNext()) this.m_allGroupFlags |= t.m_groupFlags;
                    this.m_needsUpdateAllGroupFlags = !1
                }, n.prototype.AddContact = function(t, e, i) {
                    if (!this.m_flagsBuffer.data) throw new Error;
                    if (!this.m_positionBuffer.data) throw new Error;
                    var r = n.AddContact_s_d,
                        s = this.m_positionBuffer.data,
                        o = P.SubVV(s[e], s[t], r),
                        a = P.DotVV(o, o);
                    if (a < this.m_squaredDiameter) {
                        var l = T(a);
                        isFinite(l) || (l = 198177537e11);
                        var h = this.m_contactBuffer.data[this.m_contactBuffer.Append()];
                        h.indexA = t, h.indexB = e, h.flags = this.m_flagsBuffer.data[t] | this.m_flagsBuffer.data[e], h.weight = 1 - a * l * this.m_inverseDiameter, P.MulSV(l, o, h.normal)
                    }
                }, n.prototype.FindContacts_Reference = function(t) {
                    var e = this.m_proxyBuffer.count;
                    this.m_contactBuffer.count = 0;
                    for (var i = 0, r = 0; i < e; i++) {
                        for (var s = n.computeRelativeTag(this.m_proxyBuffer.data[i].tag, 1, 0), o = i + 1; o < e && !(s < this.m_proxyBuffer.data[o].tag); o++) this.AddContact(this.m_proxyBuffer.data[i].index, this.m_proxyBuffer.data[o].index, this.m_contactBuffer);
                        for (var a = n.computeRelativeTag(this.m_proxyBuffer.data[i].tag, -1, 1); r < e && !(a <= this.m_proxyBuffer.data[r].tag); r++);
                        var l = n.computeRelativeTag(this.m_proxyBuffer.data[i].tag, 1, 1);
                        for (o = r; o < e && !(l < this.m_proxyBuffer.data[o].tag); o++) this.AddContact(this.m_proxyBuffer.data[i].index, this.m_proxyBuffer.data[o].index, this.m_contactBuffer)
                    }
                }, n.prototype.FindContacts = function(t) {
                    this.FindContacts_Reference(t)
                }, n.prototype.UpdateProxies_Reference = function(t) {
                    if (!this.m_positionBuffer.data) throw new Error;
                    for (var e = this.m_positionBuffer.data, i = this.m_inverseDiameter, r = 0; r < this.m_proxyBuffer.count; ++r) {
                        var s = this.m_proxyBuffer.data[r],
                            o = e[s.index];
                        s.tag = n.computeTag(i * o.x, i * o.y)
                    }
                }, n.prototype.UpdateProxies = function(t) {
                    this.UpdateProxies_Reference(t)
                }, n.prototype.SortProxies = function(t) {
                    wn(this.m_proxyBuffer.data, 0, this.m_proxyBuffer.count, n.Proxy.CompareProxyProxy)
                }, n.prototype.FilterContacts = function(e) {
                    var i = this.GetParticleContactFilter();
                    if (null !== i) {
                        var n = this;
                        this.m_contactBuffer.RemoveIf((function(e) {
                            return 0 != (e.flags & t.b2ParticleFlag.b2_particleContactFilterParticle) && !i.ShouldCollideParticleParticle(n, e.indexA, e.indexB)
                        }))
                    }
                }, n.prototype.NotifyContactListenerPreContact = function(t) {
                    if (null !== this.GetParticleContactListener()) throw t.Initialize(this.m_contactBuffer, this.m_flagsBuffer), new Error
                }, n.prototype.NotifyContactListenerPostContact = function(t) {
                    var e = this.GetParticleContactListener();
                    if (null !== e) {
                        for (var i = 0; i < this.m_contactBuffer.count; ++i) {
                            var n = this.m_contactBuffer.data[i];
                            e.BeginContactParticleParticle(this, n)
                        }
                        throw new Error
                    }
                }, n.b2ParticleContactIsZombie = function(e) {
                    return (e.flags & t.b2ParticleFlag.b2_zombieParticle) === t.b2ParticleFlag.b2_zombieParticle
                }, n.prototype.UpdateContacts = function(t) {
                    this.UpdateProxies(this.m_proxyBuffer), this.SortProxies(this.m_proxyBuffer);
                    var e = new n.b2ParticlePairSet;
                    this.NotifyContactListenerPreContact(e), this.FindContacts(this.m_contactBuffer), this.FilterContacts(this.m_contactBuffer), this.NotifyContactListenerPostContact(e), t && this.m_contactBuffer.RemoveIf(n.b2ParticleContactIsZombie)
                }, n.prototype.NotifyBodyContactListenerPreContact = function(t) {
                    if (null !== this.GetFixtureContactListener()) throw t.Initialize(this.m_bodyContactBuffer, this.m_flagsBuffer), new Error
                }, n.prototype.NotifyBodyContactListenerPostContact = function(t) {
                    var e = this.GetFixtureContactListener();
                    if (null !== e) {
                        for (var i = 0; i < this.m_bodyContactBuffer.count; i++) {
                            var n = this.m_bodyContactBuffer.data[i];
                            e.BeginContactFixtureParticle(this, n)
                        }
                        throw new Error
                    }
                }, n.prototype.UpdateBodyContacts = function() {
                    var t = n.UpdateBodyContacts_s_aabb,
                        e = new n.FixtureParticleSet;
                    if (this.NotifyBodyContactListenerPreContact(e), this.m_stuckThreshold > 0) {
                        if (!this.m_bodyContactCountBuffer.data) throw new Error;
                        if (!this.m_lastBodyContactStepBuffer.data) throw new Error;
                        if (!this.m_consecutiveContactStepsBuffer.data) throw new Error;
                        for (var i = this.GetParticleCount(), r = 0; r < i; r++) this.m_bodyContactCountBuffer.data[r] = 0, this.m_timestamp > this.m_lastBodyContactStepBuffer.data[r] + 1 && (this.m_consecutiveContactStepsBuffer.data[r] = 0)
                    }
                    this.m_bodyContactBuffer.SetCount(0), this.m_stuckParticleBuffer.SetCount(0);
                    var s = t;
                    this.ComputeAABB(s);
                    var o = new n.UpdateBodyContactsCallback(this, this.GetFixtureContactFilter());
                    this.m_world.QueryAABB(o, s), this.m_def.strictContactCheck && this.RemoveSpuriousBodyContacts(), this.NotifyBodyContactListenerPostContact(e)
                }, n.prototype.Solve = function(e) {
                    var i = n.Solve_s_subStep;
                    if (0 !== this.m_count && (this.m_expirationTimeBuffer.data && this.SolveLifetimes(e), this.m_allParticleFlags & t.b2ParticleFlag.b2_zombieParticle && this.SolveZombie(), this.m_needsUpdateAllParticleFlags && this.UpdateAllParticleFlags(), this.m_needsUpdateAllGroupFlags && this.UpdateAllGroupFlags(), !this.m_paused))
                        for (this.m_iterationIndex = 0; this.m_iterationIndex < e.particleIterations; this.m_iterationIndex++) {
                            ++this.m_timestamp;
                            var r = i.Copy(e);
                            if (r.dt /= e.particleIterations, r.inv_dt *= e.particleIterations, this.UpdateContacts(!1), this.UpdateBodyContacts(), this.ComputeWeight(), this.m_allGroupFlags & t.b2ParticleGroupFlag.b2_particleGroupNeedsUpdateDepth && this.ComputeDepth(), this.m_allParticleFlags & t.b2ParticleFlag.b2_reactiveParticle && this.UpdatePairsAndTriadsWithReactiveParticles(), this.m_hasForce && this.SolveForce(r), this.m_allParticleFlags & t.b2ParticleFlag.b2_viscousParticle && this.SolveViscous(), this.m_allParticleFlags & t.b2ParticleFlag.b2_repulsiveParticle && this.SolveRepulsive(r), this.m_allParticleFlags & t.b2ParticleFlag.b2_powderParticle && this.SolvePowder(r), this.m_allParticleFlags & t.b2ParticleFlag.b2_tensileParticle && this.SolveTensile(r), this.m_allGroupFlags & t.b2ParticleGroupFlag.b2_solidParticleGroup && this.SolveSolid(r), this.m_allParticleFlags & t.b2ParticleFlag.b2_colorMixingParticle && this.SolveColorMixing(), this.SolveGravity(r), this.m_allParticleFlags & t.b2ParticleFlag.b2_staticPressureParticle && this.SolveStaticPressure(r), this.SolvePressure(r), this.SolveDamping(r), this.m_allParticleFlags & n.k_extraDampingFlags && this.SolveExtraDamping(), this.m_allParticleFlags & t.b2ParticleFlag.b2_elasticParticle && this.SolveElastic(r), this.m_allParticleFlags & t.b2ParticleFlag.b2_springParticle && this.SolveSpring(r), this.LimitVelocity(r), this.m_allGroupFlags & t.b2ParticleGroupFlag.b2_rigidParticleGroup && this.SolveRigidDamping(), this.m_allParticleFlags & t.b2ParticleFlag.b2_barrierParticle && this.SolveBarrier(r), this.SolveCollision(r), this.m_allGroupFlags & t.b2ParticleGroupFlag.b2_rigidParticleGroup && this.SolveRigid(r), this.m_allParticleFlags & t.b2ParticleFlag.b2_wallParticle && this.SolveWall(), !this.m_positionBuffer.data) throw new Error;
                            if (!this.m_velocityBuffer.data) throw new Error;
                            for (var s = 0; s < this.m_count; s++) this.m_positionBuffer.data[s].SelfMulAdd(r.dt, this.m_velocityBuffer.data[s])
                        }
                }, n.prototype.SolveCollision = function(t) {
                    var e = n.SolveCollision_s_aabb;
                    if (!this.m_positionBuffer.data) throw new Error;
                    if (!this.m_velocityBuffer.data) throw new Error;
                    var r = this.m_positionBuffer.data,
                        s = this.m_velocityBuffer.data,
                        o = e;
                    o.lowerBound.x = +i, o.lowerBound.y = +i, o.upperBound.x = -i, o.upperBound.y = -i;
                    for (var a = 0; a < this.m_count; a++) {
                        var l = s[a],
                            h = r[a],
                            c = h.x + t.dt * l.x,
                            u = h.y + t.dt * l.y;
                        o.lowerBound.x = g(o.lowerBound.x, g(h.x, c)), o.lowerBound.y = g(o.lowerBound.y, g(h.y, u)), o.upperBound.x = x(o.upperBound.x, x(h.x, c)), o.upperBound.y = x(o.upperBound.y, x(h.y, u))
                    }
                    var _ = new n.SolveCollisionCallback(this, t);
                    this.m_world.QueryAABB(_, o)
                }, n.prototype.LimitVelocity = function(t) {
                    if (!this.m_velocityBuffer.data) throw new Error;
                    for (var e = this.m_velocityBuffer.data, i = this.GetCriticalVelocitySquared(t), n = 0; n < this.m_count; n++) {
                        var r = e[n],
                            s = P.DotVV(r, r);
                        s > i && r.SelfMul(S(i / s))
                    }
                }, n.prototype.SolveGravity = function(t) {
                    if (!this.m_velocityBuffer.data) throw new Error;
                    for (var e = n.SolveGravity_s_gravity, i = this.m_velocityBuffer.data, r = P.MulSV(t.dt * this.m_def.gravityScale, this.m_world.GetGravity(), e), s = 0; s < this.m_count; s++) i[s].SelfAdd(r)
                }, n.prototype.SolveBarrier = function(e) {
                    var i = n.SolveBarrier_s_aabb,
                        r = n.SolveBarrier_s_va,
                        s = n.SolveBarrier_s_vb,
                        o = n.SolveBarrier_s_pba,
                        a = n.SolveBarrier_s_vba,
                        l = n.SolveBarrier_s_vc,
                        h = n.SolveBarrier_s_pca,
                        c = n.SolveBarrier_s_vca,
                        u = n.SolveBarrier_s_qba,
                        _ = n.SolveBarrier_s_qca,
                        f = n.SolveBarrier_s_dv,
                        d = n.SolveBarrier_s_f;
                    if (!this.m_flagsBuffer.data) throw new Error;
                    if (!this.m_positionBuffer.data) throw new Error;
                    if (!this.m_velocityBuffer.data) throw new Error;
                    for (var p = this.m_positionBuffer.data, m = this.m_velocityBuffer.data, y = 0; y < this.m_count; y++) {
                        0 != (this.m_flagsBuffer.data[y] & n.k_barrierWallFlags) && m[y].SetZero()
                    }
                    for (var v = 2.5 * e.dt, g = this.GetParticleMass(), x = 0; x < this.m_pairBuffer.count; x++) {
                        var b = this.m_pairBuffer.data[x];
                        if (b.flags & t.b2ParticleFlag.b2_barrierParticle) {
                            var A = b.indexA,
                                C = b.indexB,
                                T = p[A],
                                w = p[C],
                                E = i;
                            P.MinV(T, w, E.lowerBound), P.MaxV(T, w, E.upperBound);
                            for (var M = this.m_groupBuffer[A], D = this.m_groupBuffer[C], B = this.GetLinearVelocity(M, A, T, r), I = this.GetLinearVelocity(D, C, w, s), R = P.SubVV(w, T, o), O = P.SubVV(I, B, a), L = this.GetInsideBoundsEnumerator(E), F = void 0;
                                (F = L.GetNext()) >= 0;) {
                                var N = p[F],
                                    V = this.m_groupBuffer[F];
                                if (M !== V && D !== V) {
                                    var k = this.GetLinearVelocity(V, F, N, l),
                                        G = P.SubVV(N, T, h),
                                        U = P.SubVV(k, B, c),
                                        z = P.CrossVV(O, U),
                                        j = P.CrossVV(R, U) - P.CrossVV(G, O),
                                        W = P.CrossVV(R, G),
                                        H = void 0,
                                        X = void 0,
                                        Y = u,
                                        q = _;
                                    if (0 === z) {
                                        if (0 === j) continue;
                                        if (!((X = -W / j) >= 0 && X < v)) continue;
                                        if (P.AddVMulSV(R, X, O, Y), P.AddVMulSV(G, X, U, q), !((H = P.DotVV(Y, q) / P.DotVV(Y, Y)) >= 0 && H <= 1)) continue
                                    } else {
                                        var J = j * j - 4 * W * z;
                                        if (J < 0) continue;
                                        var Z = S(J),
                                            K = (-j - Z) / (2 * z),
                                            Q = (-j + Z) / (2 * z);
                                        if (K > Q) {
                                            var $ = K;
                                            K = Q, Q = $
                                        }
                                        if (X = K, P.AddVMulSV(R, X, O, Y), P.AddVMulSV(G, X, U, q), H = P.DotVV(Y, q) / P.DotVV(Y, Y), !(X >= 0 && X < v && H >= 0 && H <= 1)) {
                                            if (!((X = Q) >= 0 && X < v)) continue;
                                            if (P.AddVMulSV(R, X, O, Y), P.AddVMulSV(G, X, U, q), !((H = P.DotVV(Y, q) / P.DotVV(Y, Y)) >= 0 && H <= 1)) continue
                                        }
                                    }
                                    var tt = f;
                                    tt.x = B.x + H * O.x - k.x, tt.y = B.y + H * O.y - k.y;
                                    var et = P.MulSV(g, tt, d);
                                    if (V && this.IsRigidGroup(V)) {
                                        var it = V.GetMass(),
                                            nt = V.GetInertia();
                                        it > 0 && V.m_linearVelocity.SelfMulAdd(1 / it, et), nt > 0 && (V.m_angularVelocity += P.CrossVV(P.SubVV(N, V.GetCenter(), P.s_t0), et) / nt)
                                    } else m[F].SelfAdd(tt);
                                    this.ParticleApplyForce(F, et.SelfMul(-e.inv_dt))
                                }
                            }
                        }
                    }
                }, n.prototype.SolveStaticPressure = function(e) {
                    if (!this.m_flagsBuffer.data) throw new Error;
                    this.m_staticPressureBuffer = this.RequestBuffer(this.m_staticPressureBuffer);
                    for (var i = this.GetCriticalPressure(e), n = this.m_def.staticPressureStrength * i, r = .25 * i, s = this.m_def.staticPressureRelaxation, o = 0; o < this.m_def.staticPressureIterations; o++) {
                        for (var a = 0; a < this.m_count; a++) this.m_accumulationBuffer[a] = 0;
                        for (var l = 0; l < this.m_contactBuffer.count; l++) {
                            var h = this.m_contactBuffer.data[l];
                            if (h.flags & t.b2ParticleFlag.b2_staticPressureParticle) {
                                var c = h.indexA,
                                    u = h.indexB,
                                    _ = h.weight;
                                this.m_accumulationBuffer[c] += _ * this.m_staticPressureBuffer[u], this.m_accumulationBuffer[u] += _ * this.m_staticPressureBuffer[c]
                            }
                        }
                        for (a = 0; a < this.m_count; a++) {
                            _ = this.m_weightBuffer[a];
                            if (this.m_flagsBuffer.data[a] & t.b2ParticleFlag.b2_staticPressureParticle) {
                                var f = (this.m_accumulationBuffer[a] + n * (_ - 1)) / (_ + s);
                                this.m_staticPressureBuffer[a] = b(f, 0, r)
                            } else this.m_staticPressureBuffer[a] = 0
                        }
                    }
                }, n.prototype.ComputeWeight = function() {
                    for (var t = 0; t < this.m_count; t++) this.m_weightBuffer[t] = 0;
                    for (t = 0; t < this.m_bodyContactBuffer.count; t++) {
                        var e = (n = this.m_bodyContactBuffer.data[t]).index,
                            i = n.weight;
                        this.m_weightBuffer[e] += i
                    }
                    for (t = 0; t < this.m_contactBuffer.count; t++) {
                        e = (n = this.m_contactBuffer.data[t]).indexA;
                        var n, r = n.indexB;
                        i = n.weight;
                        this.m_weightBuffer[e] += i, this.m_weightBuffer[r] += i
                    }
                }, n.prototype.SolvePressure = function(e) {
                    var i = n.SolvePressure_s_f;
                    if (!this.m_flagsBuffer.data) throw new Error;
                    if (!this.m_positionBuffer.data) throw new Error;
                    if (!this.m_velocityBuffer.data) throw new Error;
                    for (var r = this.m_positionBuffer.data, s = this.m_velocityBuffer.data, o = this.GetCriticalPressure(e), a = this.m_def.pressureStrength * o, l = .25 * o, h = 0; h < this.m_count; h++) {
                        var c = this.m_weightBuffer[h],
                            u = a * x(0, c - 1);
                        this.m_accumulationBuffer[h] = g(u, l)
                    }
                    if (this.m_allParticleFlags & n.k_noPressureFlags)
                        for (h = 0; h < this.m_count; h++) this.m_flagsBuffer.data[h] & n.k_noPressureFlags && (this.m_accumulationBuffer[h] = 0);
                    if (this.m_allParticleFlags & t.b2ParticleFlag.b2_staticPressureParticle)
                        for (h = 0; h < this.m_count; h++) this.m_flagsBuffer.data[h] & t.b2ParticleFlag.b2_staticPressureParticle && (this.m_accumulationBuffer[h] += this.m_staticPressureBuffer[h]);
                    for (var _ = e.dt / (this.m_def.density * this.m_particleDiameter), f = this.GetParticleInvMass(), d = 0; d < this.m_bodyContactBuffer.count; d++) {
                        var p = (C = this.m_bodyContactBuffer.data[d]).index,
                            m = C.body,
                            y = (c = C.weight, C.mass),
                            v = C.normal,
                            b = r[p],
                            A = (u = this.m_accumulationBuffer[p] + a * c, P.MulSV(_ * c * y * u, v, i));
                        s[p].SelfMulSub(f, A), m.ApplyLinearImpulse(A, b, !0)
                    }
                    for (d = 0; d < this.m_contactBuffer.count; d++) {
                        var C;
                        p = (C = this.m_contactBuffer.data[d]).indexA, m = C.indexB, c = C.weight, v = C.normal, u = this.m_accumulationBuffer[p] + this.m_accumulationBuffer[m], A = P.MulSV(_ * c * u, v, i);
                        s[p].SelfSub(A), s[m].SelfAdd(A)
                    }
                }, n.prototype.SolveDamping = function(t) {
                    var e = n.SolveDamping_s_v,
                        i = n.SolveDamping_s_f;
                    if (!this.m_positionBuffer.data) throw new Error;
                    if (!this.m_velocityBuffer.data) throw new Error;
                    for (var r = this.m_positionBuffer.data, s = this.m_velocityBuffer.data, o = this.m_def.dampingStrength, a = 1 / this.GetCriticalVelocity(t), l = this.GetParticleInvMass(), h = 0; h < this.m_bodyContactBuffer.count; h++) {
                        var c = (b = this.m_bodyContactBuffer.data[h]).index,
                            u = b.body,
                            _ = b.weight,
                            f = b.mass,
                            d = b.normal,
                            p = r[c],
                            m = P.SubVV(u.GetLinearVelocityFromWorldPoint(p, P.s_t0), s[c], e);
                        if ((A = P.DotVV(m, d)) < 0) {
                            var y = x(o * _, g(-a * A, .5)),
                                v = P.MulSV(y * f * A, d, i);
                            s[c].SelfMulAdd(l, v), u.ApplyLinearImpulse(v.SelfNeg(), p, !0)
                        }
                    }
                    for (h = 0; h < this.m_contactBuffer.count; h++) {
                        var b, A;
                        c = (b = this.m_contactBuffer.data[h]).indexA, u = b.indexB, _ = b.weight, d = b.normal, m = P.SubVV(s[u], s[c], e);
                        if ((A = P.DotVV(m, d)) < 0) {
                            y = x(o * _, g(-a * A, .5)), v = P.MulSV(y * A, d, i);
                            s[c].SelfAdd(v), s[u].SelfSub(v)
                        }
                    }
                }, n.prototype.SolveRigidDamping = function() {
                    var t = n.SolveRigidDamping_s_t0,
                        e = n.SolveRigidDamping_s_t1,
                        i = n.SolveRigidDamping_s_p,
                        r = n.SolveRigidDamping_s_v,
                        s = [0],
                        o = [0],
                        a = [0],
                        l = [0],
                        h = [0],
                        c = [0];
                    if (!this.m_positionBuffer.data) throw new Error;
                    for (var u = this.m_positionBuffer.data, _ = this.m_def.dampingStrength, f = 0; f < this.m_bodyContactBuffer.count; f++) {
                        var d = (A = this.m_bodyContactBuffer.data[f]).index;
                        if ((C = this.m_groupBuffer[d]) && this.IsRigidGroup(C)) {
                            var p = A.body,
                                m = A.normal,
                                y = A.weight,
                                v = u[d],
                                x = P.SubVV(p.GetLinearVelocityFromWorldPoint(v, t), C.GetLinearVelocityFromWorldPoint(v, e), r);
                            if ((E = P.DotVV(x, m)) < 0) {
                                this.InitDampingParameterWithRigidGroupOrParticle(s, o, a, !0, C, d, v, m), this.InitDampingParameter(l, h, c, p.GetMass(), p.GetInertia() - p.GetMass() * p.GetLocalCenter().LengthSquared(), p.GetWorldCenter(), v, m);
                                var b = _ * g(y, 1) * this.ComputeDampingImpulse(s[0], o[0], a[0], l[0], h[0], c[0], E);
                                this.ApplyDamping(s[0], o[0], a[0], !0, C, d, b, m), p.ApplyLinearImpulse(P.MulSV(-b, m, P.s_t0), v, !0)
                            }
                        }
                    }
                    for (f = 0; f < this.m_contactBuffer.count; f++) {
                        d = (A = this.m_contactBuffer.data[f]).indexA, p = A.indexB, m = A.normal, y = A.weight;
                        var A, C = this.m_groupBuffer[d],
                            T = this.m_groupBuffer[p],
                            S = this.IsRigidGroup(C),
                            w = this.IsRigidGroup(T);
                        if (C !== T && (S || w)) {
                            var E;
                            v = P.MidVV(u[d], u[p], i), x = P.SubVV(this.GetLinearVelocity(T, p, v, t), this.GetLinearVelocity(C, d, v, e), r);
                            if ((E = P.DotVV(x, m)) < 0) {
                                this.InitDampingParameterWithRigidGroupOrParticle(s, o, a, S, C, d, v, m), this.InitDampingParameterWithRigidGroupOrParticle(l, h, c, w, T, p, v, m);
                                b = _ * y * this.ComputeDampingImpulse(s[0], o[0], a[0], l[0], h[0], c[0], E);
                                this.ApplyDamping(s[0], o[0], a[0], S, C, d, b, m), this.ApplyDamping(l[0], h[0], c[0], w, T, p, -b, m)
                            }
                        }
                    }
                }, n.prototype.SolveExtraDamping = function() {
                    var t = n.SolveExtraDamping_s_v,
                        e = n.SolveExtraDamping_s_f;
                    if (!this.m_flagsBuffer.data) throw new Error;
                    if (!this.m_positionBuffer.data) throw new Error;
                    if (!this.m_velocityBuffer.data) throw new Error;
                    for (var i = this.m_velocityBuffer.data, r = this.m_positionBuffer.data, s = this.GetParticleInvMass(), o = 0; o < this.m_bodyContactBuffer.count; o++) {
                        var a = this.m_bodyContactBuffer.data[o],
                            l = a.index;
                        if (this.m_flagsBuffer.data[l] & n.k_extraDampingFlags) {
                            var h = a.body,
                                c = a.mass,
                                u = a.normal,
                                _ = r[l],
                                f = P.SubVV(h.GetLinearVelocityFromWorldPoint(_, P.s_t0), i[l], t),
                                d = P.DotVV(f, u);
                            if (d < 0) {
                                var p = P.MulSV(.5 * c * d, u, e);
                                i[l].SelfMulAdd(s, p), h.ApplyLinearImpulse(p.SelfNeg(), _, !0)
                            }
                        }
                    }
                }, n.prototype.SolveWall = function() {
                    if (!this.m_flagsBuffer.data) throw new Error;
                    if (!this.m_velocityBuffer.data) throw new Error;
                    for (var e = this.m_velocityBuffer.data, i = 0; i < this.m_count; i++) this.m_flagsBuffer.data[i] & t.b2ParticleFlag.b2_wallParticle && e[i].SetZero()
                }, n.prototype.SolveRigid = function(e) {
                    var i = n.SolveRigid_s_position,
                        r = n.SolveRigid_s_rotation,
                        s = n.SolveRigid_s_transform,
                        o = n.SolveRigid_s_velocityTransform;
                    if (!this.m_positionBuffer.data) throw new Error;
                    if (!this.m_velocityBuffer.data) throw new Error;
                    for (var a = this.m_positionBuffer.data, l = this.m_velocityBuffer.data, h = this.m_groupList; h; h = h.GetNext())
                        if (h.m_groupFlags & t.b2ParticleGroupFlag.b2_rigidParticleGroup) {
                            h.UpdateStatistics();
                            var c = r;
                            c.SetAngle(e.dt * h.m_angularVelocity);
                            var u = P.AddVV(h.m_center, P.SubVV(P.MulSV(e.dt, h.m_linearVelocity, P.s_t0), N.MulRV(c, h.m_center, P.s_t1), P.s_t0), i),
                                _ = s;
                            _.SetPositionRotation(u, c), V.MulXX(_, h.m_transform, h.m_transform);
                            var f = o;
                            f.p.x = e.inv_dt * _.p.x, f.p.y = e.inv_dt * _.p.y, f.q.s = e.inv_dt * _.q.s, f.q.c = e.inv_dt * (_.q.c - 1);
                            for (var d = h.m_firstIndex; d < h.m_lastIndex; d++) V.MulXV(f, a[d], l[d])
                        }
                }, n.prototype.SolveElastic = function(e) {
                    var i = n.SolveElastic_s_pa,
                        r = n.SolveElastic_s_pb,
                        s = n.SolveElastic_s_pc,
                        o = n.SolveElastic_s_r,
                        a = n.SolveElastic_s_t0;
                    if (!this.m_positionBuffer.data) throw new Error;
                    if (!this.m_velocityBuffer.data) throw new Error;
                    for (var l = this.m_positionBuffer.data, h = this.m_velocityBuffer.data, c = e.inv_dt * this.m_def.elasticStrength, u = 0; u < this.m_triadBuffer.count; u++) {
                        var _ = this.m_triadBuffer.data[u];
                        if (_.flags & t.b2ParticleFlag.b2_elasticParticle) {
                            var f = _.indexA,
                                d = _.indexB,
                                p = _.indexC,
                                m = _.pa,
                                y = _.pb,
                                v = _.pc,
                                g = i.Copy(l[f]),
                                x = r.Copy(l[d]),
                                b = s.Copy(l[p]),
                                A = h[f],
                                C = h[d],
                                S = h[p];
                            g.SelfMulAdd(e.dt, A), x.SelfMulAdd(e.dt, C), b.SelfMulAdd(e.dt, S);
                            var w = (g.x + x.x + b.x) / 3,
                                E = (g.y + x.y + b.y) / 3;
                            g.x -= w, g.y -= E, x.x -= w, x.y -= E, b.x -= w, b.y -= E;
                            var M = o;
                            M.s = P.CrossVV(m, g) + P.CrossVV(y, x) + P.CrossVV(v, b), M.c = P.DotVV(m, g) + P.DotVV(y, x) + P.DotVV(v, b);
                            var D = T(M.s * M.s + M.c * M.c);
                            isFinite(D) || (D = 198177537e11), M.s *= D, M.c *= D;
                            var B = c * _.strength;
                            N.MulRV(M, m, a), P.SubVV(a, g, a), P.MulSV(B, a, a), A.SelfAdd(a), N.MulRV(M, y, a), P.SubVV(a, x, a), P.MulSV(B, a, a), C.SelfAdd(a), N.MulRV(M, v, a), P.SubVV(a, b, a), P.MulSV(B, a, a), S.SelfAdd(a)
                        }
                    }
                }, n.prototype.SolveSpring = function(e) {
                    var i = n.SolveSpring_s_pa,
                        r = n.SolveSpring_s_pb,
                        s = n.SolveSpring_s_d,
                        o = n.SolveSpring_s_f;
                    if (!this.m_positionBuffer.data) throw new Error;
                    if (!this.m_velocityBuffer.data) throw new Error;
                    for (var a = this.m_positionBuffer.data, l = this.m_velocityBuffer.data, h = e.inv_dt * this.m_def.springStrength, c = 0; c < this.m_pairBuffer.count; c++) {
                        var u = this.m_pairBuffer.data[c];
                        if (u.flags & t.b2ParticleFlag.b2_springParticle) {
                            var _ = u.indexA,
                                f = u.indexB,
                                d = i.Copy(a[_]),
                                p = r.Copy(a[f]),
                                m = l[_],
                                y = l[f];
                            d.SelfMulAdd(e.dt, m), p.SelfMulAdd(e.dt, y);
                            var v = P.SubVV(p, d, s),
                                g = u.distance,
                                x = v.Length(),
                                b = h * u.strength,
                                A = P.MulSV(b * (g - x) / x, v, o);
                            m.SelfSub(A), y.SelfAdd(A)
                        }
                    }
                }, n.prototype.SolveTensile = function(e) {
                    var i = n.SolveTensile_s_weightedNormal,
                        r = n.SolveTensile_s_s,
                        s = n.SolveTensile_s_f;
                    if (!this.m_velocityBuffer.data) throw new Error;
                    for (var o = this.m_velocityBuffer.data, a = 0; a < this.m_count; a++) this.m_accumulation2Buffer[a] = new P, this.m_accumulation2Buffer[a].SetZero();
                    for (var l = 0; l < this.m_contactBuffer.count; l++) {
                        if ((v = this.m_contactBuffer.data[l]).flags & t.b2ParticleFlag.b2_tensileParticle) {
                            var h = v.indexA,
                                c = v.indexB,
                                u = v.weight,
                                _ = v.normal,
                                f = P.MulSV((1 - u) * u, _, i);
                            this.m_accumulation2Buffer[h].SelfSub(f), this.m_accumulation2Buffer[c].SelfAdd(f)
                        }
                    }
                    var d = this.GetCriticalVelocity(e),
                        p = this.m_def.surfaceTensionPressureStrength * d,
                        m = this.m_def.surfaceTensionNormalStrength * d,
                        y = .5 * d;
                    for (l = 0; l < this.m_contactBuffer.count; l++) {
                        var v;
                        if ((v = this.m_contactBuffer.data[l]).flags & t.b2ParticleFlag.b2_tensileParticle) {
                            h = v.indexA, c = v.indexB, u = v.weight, _ = v.normal;
                            var x = this.m_weightBuffer[h] + this.m_weightBuffer[c],
                                b = P.SubVV(this.m_accumulation2Buffer[c], this.m_accumulation2Buffer[h], r),
                                A = g(p * (x - 2) + m * P.DotVV(b, _), y) * u,
                                C = P.MulSV(A, _, s);
                            o[h].SelfSub(C), o[c].SelfAdd(C)
                        }
                    }
                }, n.prototype.SolveViscous = function() {
                    var e = n.SolveViscous_s_v,
                        i = n.SolveViscous_s_f;
                    if (!this.m_flagsBuffer.data) throw new Error;
                    if (!this.m_positionBuffer.data) throw new Error;
                    if (!this.m_velocityBuffer.data) throw new Error;
                    for (var r = this.m_positionBuffer.data, s = this.m_velocityBuffer.data, o = this.m_def.viscousStrength, a = this.GetParticleInvMass(), l = 0; l < this.m_bodyContactBuffer.count; l++) {
                        var h = (m = this.m_bodyContactBuffer.data[l]).index;
                        if (this.m_flagsBuffer.data[h] & t.b2ParticleFlag.b2_viscousParticle) {
                            var c = m.body,
                                u = m.weight,
                                _ = m.mass,
                                f = r[h],
                                d = P.SubVV(c.GetLinearVelocityFromWorldPoint(f, P.s_t0), s[h], e),
                                p = P.MulSV(o * _ * u, d, i);
                            s[h].SelfMulAdd(a, p), c.ApplyLinearImpulse(p.SelfNeg(), f, !0)
                        }
                    }
                    for (l = 0; l < this.m_contactBuffer.count; l++) {
                        var m;
                        if ((m = this.m_contactBuffer.data[l]).flags & t.b2ParticleFlag.b2_viscousParticle) {
                            h = m.indexA, c = m.indexB, u = m.weight, d = P.SubVV(s[c], s[h], e), p = P.MulSV(o * u, d, i);
                            s[h].SelfAdd(p), s[c].SelfSub(p)
                        }
                    }
                }, n.prototype.SolveRepulsive = function(e) {
                    var i = n.SolveRepulsive_s_f;
                    if (!this.m_velocityBuffer.data) throw new Error;
                    for (var r = this.m_velocityBuffer.data, s = this.m_def.repulsiveStrength * this.GetCriticalVelocity(e), o = 0; o < this.m_contactBuffer.count; o++) {
                        var a = this.m_contactBuffer.data[o];
                        if (a.flags & t.b2ParticleFlag.b2_repulsiveParticle) {
                            var l = a.indexA,
                                h = a.indexB;
                            if (this.m_groupBuffer[l] !== this.m_groupBuffer[h]) {
                                var c = a.weight,
                                    u = a.normal,
                                    _ = P.MulSV(s * c, u, i);
                                r[l].SelfSub(_), r[h].SelfAdd(_)
                            }
                        }
                    }
                }, n.prototype.SolvePowder = function(e) {
                    var i = n.SolvePowder_s_f;
                    if (!this.m_flagsBuffer.data) throw new Error;
                    if (!this.m_positionBuffer.data) throw new Error;
                    if (!this.m_velocityBuffer.data) throw new Error;
                    for (var r = this.m_positionBuffer.data, s = this.m_velocityBuffer.data, o = this.m_def.powderStrength * this.GetCriticalVelocity(e), a = this.GetParticleInvMass(), l = 0; l < this.m_bodyContactBuffer.count; l++) {
                        var h = (p = this.m_bodyContactBuffer.data[l]).index;
                        if (this.m_flagsBuffer.data[h] & t.b2ParticleFlag.b2_powderParticle)
                            if ((m = p.weight) > .25) {
                                var c = p.body,
                                    u = p.mass,
                                    _ = r[h],
                                    f = p.normal,
                                    d = P.MulSV(o * u * (m - .25), f, i);
                                s[h].SelfMulSub(a, d), c.ApplyLinearImpulse(d, _, !0)
                            }
                    }
                    for (l = 0; l < this.m_contactBuffer.count; l++) {
                        var p, m;
                        if ((p = this.m_contactBuffer.data[l]).flags & t.b2ParticleFlag.b2_powderParticle)
                            if ((m = p.weight) > .25) {
                                h = p.indexA, c = p.indexB, f = p.normal, d = P.MulSV(o * (m - .25), f, i);
                                s[h].SelfSub(d), s[c].SelfAdd(d)
                            }
                    }
                }, n.prototype.SolveSolid = function(t) {
                    var e = n.SolveSolid_s_f;
                    if (!this.m_velocityBuffer.data) throw new Error;
                    var i = this.m_velocityBuffer.data;
                    this.m_depthBuffer = this.RequestBuffer(this.m_depthBuffer);
                    for (var r = t.inv_dt * this.m_def.ejectionStrength, s = 0; s < this.m_contactBuffer.count; s++) {
                        var o = this.m_contactBuffer.data[s],
                            a = o.indexA,
                            l = o.indexB;
                        if (this.m_groupBuffer[a] !== this.m_groupBuffer[l]) {
                            var h = o.weight,
                                c = o.normal,
                                u = this.m_depthBuffer[a] + this.m_depthBuffer[l],
                                _ = P.MulSV(r * u * h, c, e);
                            i[a].SelfSub(_), i[l].SelfAdd(_)
                        }
                    }
                }, n.prototype.SolveForce = function(t) {
                    if (!this.m_velocityBuffer.data) throw new Error;
                    for (var e = this.m_velocityBuffer.data, i = t.dt * this.GetParticleInvMass(), n = 0; n < this.m_count; n++) e[n].SelfMulAdd(i, this.m_forceBuffer[n]);
                    this.m_hasForce = !1
                }, n.prototype.SolveColorMixing = function() {
                    if (!this.m_flagsBuffer.data) throw new Error;
                    if (!this.m_colorBuffer.data) throw new Error;
                    var e = .5 * this.m_def.colorMixingStrength;
                    if (e)
                        for (var i = 0; i < this.m_contactBuffer.count; i++) {
                            var n = this.m_contactBuffer.data[i],
                                r = n.indexA,
                                s = n.indexB;
                            if (this.m_flagsBuffer.data[r] & this.m_flagsBuffer.data[s] & t.b2ParticleFlag.b2_colorMixingParticle) {
                                var o = this.m_colorBuffer.data[r],
                                    a = this.m_colorBuffer.data[s];
                                G.MixColors(o, a, e)
                            }
                        }
                }, n.prototype.SolveZombie = function() {
                    if (!this.m_flagsBuffer.data) throw new Error;
                    if (!this.m_positionBuffer.data) throw new Error;
                    if (!this.m_velocityBuffer.data) throw new Error;
                    for (var e = 0, i = [], n = 0; n < this.m_count; n++) i[n] = u;
                    var r = 0;
                    for (n = 0; n < this.m_count; n++) {
                        var s = this.m_flagsBuffer.data[n];
                        if (s & t.b2ParticleFlag.b2_zombieParticle) {
                            var o = this.m_world.m_destructionListener;
                            if (s & t.b2ParticleFlag.b2_destructionListenerParticle && o && o.SayGoodbyeParticle(this, n), this.m_handleIndexBuffer.data)(a = this.m_handleIndexBuffer.data[n]) && (a.SetIndex(u), this.m_handleIndexBuffer.data[n] = null);
                            i[n] = u
                        } else {
                            if (i[n] = e, n !== e) {
                                var a;
                                if (this.m_handleIndexBuffer.data)(a = this.m_handleIndexBuffer.data[n]) && a.SetIndex(e), this.m_handleIndexBuffer.data[e] = a;
                                this.m_flagsBuffer.data[e] = this.m_flagsBuffer.data[n], this.m_lastBodyContactStepBuffer.data && (this.m_lastBodyContactStepBuffer.data[e] = this.m_lastBodyContactStepBuffer.data[n]), this.m_bodyContactCountBuffer.data && (this.m_bodyContactCountBuffer.data[e] = this.m_bodyContactCountBuffer.data[n]), this.m_consecutiveContactStepsBuffer.data && (this.m_consecutiveContactStepsBuffer.data[e] = this.m_consecutiveContactStepsBuffer.data[n]), this.m_positionBuffer.data[e].Copy(this.m_positionBuffer.data[n]), this.m_velocityBuffer.data[e].Copy(this.m_velocityBuffer.data[n]), this.m_groupBuffer[e] = this.m_groupBuffer[n], this.m_hasForce && this.m_forceBuffer[e].Copy(this.m_forceBuffer[n]), this.m_staticPressureBuffer && (this.m_staticPressureBuffer[e] = this.m_staticPressureBuffer[n]), this.m_depthBuffer && (this.m_depthBuffer[e] = this.m_depthBuffer[n]), this.m_colorBuffer.data && this.m_colorBuffer.data[e].Copy(this.m_colorBuffer.data[n]), this.m_userDataBuffer.data && (this.m_userDataBuffer.data[e] = this.m_userDataBuffer.data[n]), this.m_expirationTimeBuffer.data && (this.m_expirationTimeBuffer.data[e] = this.m_expirationTimeBuffer.data[n])
                            }
                            e++, r |= s
                        }
                    }
                    for (var l = function(t) {
                            return t.index < 0
                        }, h = function(t) {
                            return t.indexA < 0 || t.indexB < 0
                        }, c = function(t) {
                            return t.index < 0
                        }, _ = function(t) {
                            return t.indexA < 0 || t.indexB < 0
                        }, f = function(t) {
                            return t.indexA < 0 || t.indexB < 0 || t.indexC < 0
                        }, d = 0; d < this.m_proxyBuffer.count; d++) {
                        var p = this.m_proxyBuffer.data[d];
                        p.index = i[p.index]
                    }
                    this.m_proxyBuffer.RemoveIf(l);
                    for (d = 0; d < this.m_contactBuffer.count; d++) {
                        (m = this.m_contactBuffer.data[d]).indexA = i[m.indexA], m.indexB = i[m.indexB]
                    }
                    this.m_contactBuffer.RemoveIf(h);
                    for (d = 0; d < this.m_bodyContactBuffer.count; d++) {
                        var m;
                        (m = this.m_bodyContactBuffer.data[d]).index = i[m.index]
                    }
                    this.m_bodyContactBuffer.RemoveIf(c);
                    for (d = 0; d < this.m_pairBuffer.count; d++) {
                        var y = this.m_pairBuffer.data[d];
                        y.indexA = i[y.indexA], y.indexB = i[y.indexB]
                    }
                    this.m_pairBuffer.RemoveIf(_);
                    for (d = 0; d < this.m_triadBuffer.count; d++) {
                        var v = this.m_triadBuffer.data[d];
                        v.indexA = i[v.indexA], v.indexB = i[v.indexB], v.indexC = i[v.indexC]
                    }
                    if (this.m_triadBuffer.RemoveIf(f), this.m_indexByExpirationTimeBuffer.data)
                        for (var b = 0, A = 0; A < this.m_count; A++) {
                            var C = i[this.m_indexByExpirationTimeBuffer.data[A]];
                            C !== u && (this.m_indexByExpirationTimeBuffer.data[b++] = C)
                        }
                    for (var T = this.m_groupList; T; T = T.GetNext()) {
                        var S = e,
                            w = 0,
                            E = !1;
                        for (n = T.m_firstIndex; n < T.m_lastIndex; n++) {
                            var M = i[n];
                            M >= 0 ? (S = g(S, M), w = x(w, M + 1)) : E = !0
                        }
                        S < w ? (T.m_firstIndex = S, T.m_lastIndex = w, E && T.m_groupFlags & t.b2ParticleGroupFlag.b2_solidParticleGroup && this.SetGroupFlags(T, T.m_groupFlags | t.b2ParticleGroupFlag.b2_particleGroupNeedsUpdateDepth)) : (T.m_firstIndex = 0, T.m_lastIndex = 0, T.m_groupFlags & t.b2ParticleGroupFlag.b2_particleGroupCanBeEmpty || this.SetGroupFlags(T, T.m_groupFlags | t.b2ParticleGroupFlag.b2_particleGroupWillBeDestroyed))
                    }
                    this.m_count = e, this.m_allParticleFlags = r, this.m_needsUpdateAllParticleFlags = !1;
                    for (T = this.m_groupList; T;) {
                        var D = T.GetNext();
                        T.m_groupFlags & t.b2ParticleGroupFlag.b2_particleGroupWillBeDestroyed && this.DestroyParticleGroup(T), T = D
                    }
                }, n.prototype.SolveLifetimes = function(t) {
                    if (!this.m_expirationTimeBuffer.data) throw new Error;
                    if (!this.m_indexByExpirationTimeBuffer.data) throw new Error;
                    this.m_timeElapsed = this.LifetimeToExpirationTime(t.dt);
                    var e = this.GetQuantizedTimeElapsed(),
                        i = this.m_expirationTimeBuffer.data,
                        n = this.m_indexByExpirationTimeBuffer.data,
                        r = this.GetParticleCount();
                    if (this.m_expirationTimeBufferRequiresSorting) {
                        wn(n, 0, r, (function(t, e) {
                            var n = i[t],
                                r = i[e],
                                s = n <= 0;
                            return s === r <= 0 ? n > r : s
                        })), this.m_expirationTimeBufferRequiresSorting = !1
                    }
                    for (var s = r - 1; s >= 0; --s) {
                        var o = n[s],
                            a = i[o];
                        if (e < a || a <= 0) break;
                        this.DestroyParticle(o)
                    }
                }, n.prototype.RotateBuffer = function(t, e, i) {
                    if (t !== e && e !== i) {
                        if (!this.m_flagsBuffer.data) throw new Error;
                        if (!this.m_positionBuffer.data) throw new Error;
                        if (!this.m_velocityBuffer.data) throw new Error;
                        if (In(this.m_flagsBuffer.data, t, e, i), this.m_lastBodyContactStepBuffer.data && In(this.m_lastBodyContactStepBuffer.data, t, e, i), this.m_bodyContactCountBuffer.data && In(this.m_bodyContactCountBuffer.data, t, e, i), this.m_consecutiveContactStepsBuffer.data && In(this.m_consecutiveContactStepsBuffer.data, t, e, i), In(this.m_positionBuffer.data, t, e, i), In(this.m_velocityBuffer.data, t, e, i), In(this.m_groupBuffer, t, e, i), this.m_hasForce && In(this.m_forceBuffer, t, e, i), this.m_staticPressureBuffer && In(this.m_staticPressureBuffer, t, e, i), this.m_depthBuffer && In(this.m_depthBuffer, t, e, i), this.m_colorBuffer.data && In(this.m_colorBuffer.data, t, e, i), this.m_userDataBuffer.data && In(this.m_userDataBuffer.data, t, e, i), this.m_handleIndexBuffer.data) {
                            In(this.m_handleIndexBuffer.data, t, e, i);
                            for (var n = t; n < i; ++n) {
                                var r = this.m_handleIndexBuffer.data[n];
                                r && r.SetIndex(f(r.GetIndex()))
                            }
                        }
                        if (this.m_expirationTimeBuffer.data) {
                            In(this.m_expirationTimeBuffer.data, t, e, i);
                            var s = this.GetParticleCount();
                            if (!this.m_indexByExpirationTimeBuffer.data) throw new Error;
                            var o = this.m_indexByExpirationTimeBuffer.data;
                            for (n = 0; n < s; ++n) o[n] = f(o[n])
                        }
                        for (var a = 0; a < this.m_proxyBuffer.count; a++) {
                            var l = this.m_proxyBuffer.data[a];
                            l.index = f(l.index)
                        }
                        for (a = 0; a < this.m_contactBuffer.count; a++) {
                            (h = this.m_contactBuffer.data[a]).indexA = f(h.indexA), h.indexB = f(h.indexB)
                        }
                        for (a = 0; a < this.m_bodyContactBuffer.count; a++) {
                            var h;
                            (h = this.m_bodyContactBuffer.data[a]).index = f(h.index)
                        }
                        for (a = 0; a < this.m_pairBuffer.count; a++) {
                            var c = this.m_pairBuffer.data[a];
                            c.indexA = f(c.indexA), c.indexB = f(c.indexB)
                        }
                        for (a = 0; a < this.m_triadBuffer.count; a++) {
                            var u = this.m_triadBuffer.data[a];
                            u.indexA = f(u.indexA), u.indexB = f(u.indexB), u.indexC = f(u.indexC)
                        }
                        for (var _ = this.m_groupList; _; _ = _.GetNext()) _.m_firstIndex = f(_.m_firstIndex), _.m_lastIndex = f(_.m_lastIndex - 1) + 1
                    }

                    function f(n) {
                        return n < t ? n : n < e ? n + i - e : n < i ? n + t - e : n
                    }
                }, n.prototype.GetCriticalVelocity = function(t) {
                    return this.m_particleDiameter * t.inv_dt
                }, n.prototype.GetCriticalVelocitySquared = function(t) {
                    var e = this.GetCriticalVelocity(t);
                    return e * e
                }, n.prototype.GetCriticalPressure = function(t) {
                    return this.m_def.density * this.GetCriticalVelocitySquared(t)
                }, n.prototype.GetParticleStride = function() {
                    return .75 * this.m_particleDiameter
                }, n.prototype.GetParticleMass = function() {
                    var t = this.GetParticleStride();
                    return this.m_def.density * t * t
                }, n.prototype.GetParticleInvMass = function() {
                    var t = this.m_inverseDiameter * (1 / .75);
                    return this.m_inverseDensity * t * t
                }, n.prototype.GetFixtureContactFilter = function() {
                    return this.m_allParticleFlags & t.b2ParticleFlag.b2_fixtureContactFilterParticle ? this.m_world.m_contactManager.m_contactFilter : null
                }, n.prototype.GetParticleContactFilter = function() {
                    return this.m_allParticleFlags & t.b2ParticleFlag.b2_particleContactFilterParticle ? this.m_world.m_contactManager.m_contactFilter : null
                }, n.prototype.GetFixtureContactListener = function() {
                    return this.m_allParticleFlags & t.b2ParticleFlag.b2_fixtureContactListenerParticle ? this.m_world.m_contactManager.m_contactListener : null
                }, n.prototype.GetParticleContactListener = function() {
                    return this.m_allParticleFlags & t.b2ParticleFlag.b2_particleContactListenerParticle ? this.m_world.m_contactManager.m_contactListener : null
                }, n.prototype.SetUserOverridableBuffer = function(t, e, i) {
                    t.data = e, t.userSuppliedCapacity = i
                }, n.prototype.SetGroupFlags = function(e, i) {
                    var n = e.m_groupFlags;
                    (n ^ i) & t.b2ParticleGroupFlag.b2_solidParticleGroup && (i |= t.b2ParticleGroupFlag.b2_particleGroupNeedsUpdateDepth), n & ~i && (this.m_needsUpdateAllGroupFlags = !0), ~this.m_allGroupFlags & i && (i & t.b2ParticleGroupFlag.b2_solidParticleGroup && (this.m_depthBuffer = this.RequestBuffer(this.m_depthBuffer)), this.m_allGroupFlags |= i), e.m_groupFlags = i
                }, n.BodyContactCompare = function(t, e) {
                    return t.index === e.index ? t.weight > e.weight : t.index < e.index
                }, n.prototype.RemoveSpuriousBodyContacts = function() {
                    wn(this.m_bodyContactBuffer.data, 0, this.m_bodyContactBuffer.count, n.BodyContactCompare);
                    var t = n.RemoveSpuriousBodyContacts_s_n,
                        e = n.RemoveSpuriousBodyContacts_s_pos,
                        i = n.RemoveSpuriousBodyContacts_s_normal,
                        r = this,
                        s = -1,
                        o = 0;
                    this.m_bodyContactBuffer.count = Mn(this.m_bodyContactBuffer.data, (function(n) {
                        if (n.index !== s && (o = 0, s = n.index), o++ > 3) return !0;
                        var a = t.Copy(n.normal);
                        if (a.SelfMul(r.m_particleDiameter * (1 - n.weight)), !r.m_positionBuffer.data) throw new Error;
                        var h = P.AddVV(r.m_positionBuffer.data[n.index], a, e);
                        if (!n.fixture.TestPoint(h)) {
                            for (var c = n.fixture.GetShape().GetChildCount(), u = 0; u < c; u++) {
                                var _ = i;
                                if (n.fixture.ComputeDistance(h, _, u) < l) return !1
                            }
                            return !0
                        }
                        return !1
                    }), this.m_bodyContactBuffer.count)
                }, n.prototype.DetectStuckParticle = function(t) {
                    if (!(this.m_stuckThreshold <= 0)) {
                        if (!this.m_bodyContactCountBuffer.data) throw new Error;
                        if (!this.m_consecutiveContactStepsBuffer.data) throw new Error;
                        if (!this.m_lastBodyContactStepBuffer.data) throw new Error;
                        ++this.m_bodyContactCountBuffer.data[t], 2 === this.m_bodyContactCountBuffer.data[t] && (++this.m_consecutiveContactStepsBuffer.data[t], this.m_consecutiveContactStepsBuffer.data[t] > this.m_stuckThreshold && (this.m_stuckParticleBuffer.data[this.m_stuckParticleBuffer.Append()] = t)), this.m_lastBodyContactStepBuffer.data[t] = this.m_timestamp
                    }
                }, n.prototype.ValidateParticleIndex = function(t) {
                    return t >= 0 && t < this.GetParticleCount() && t !== u
                }, n.prototype.GetQuantizedTimeElapsed = function() {
                    return Math.floor(this.m_timeElapsed / 4294967296)
                }, n.prototype.LifetimeToExpirationTime = function(t) {
                    return this.m_timeElapsed + Math.floor(t / this.m_def.lifetimeGranularity * 4294967296)
                }, n.prototype.ForceCanBeApplied = function(e) {
                    return !(e & t.b2ParticleFlag.b2_wallParticle)
                }, n.prototype.PrepareForceBuffer = function() {
                    if (!this.m_hasForce) {
                        for (var t = 0; t < this.m_count; t++) this.m_forceBuffer[t].SetZero();
                        this.m_hasForce = !0
                    }
                }, n.prototype.IsRigidGroup = function(e) {
                    return null !== e && 0 != (e.m_groupFlags & t.b2ParticleGroupFlag.b2_rigidParticleGroup)
                }, n.prototype.GetLinearVelocity = function(t, e, i, n) {
                    if (t && this.IsRigidGroup(t)) return t.GetLinearVelocityFromWorldPoint(i, n);
                    if (!this.m_velocityBuffer.data) throw new Error;
                    return n.Copy(this.m_velocityBuffer.data[e])
                }, n.prototype.InitDampingParameter = function(t, e, i, n, r, s, o, a) {
                    t[0] = n > 0 ? 1 / n : 0, e[0] = r > 0 ? 1 / r : 0, i[0] = P.CrossVV(P.SubVV(o, s, P.s_t0), a)
                }, n.prototype.InitDampingParameterWithRigidGroupOrParticle = function(e, i, n, r, s, o, a, l) {
                    if (s && r) this.InitDampingParameter(e, i, n, s.GetMass(), s.GetInertia(), s.GetCenter(), a, l);
                    else {
                        if (!this.m_flagsBuffer.data) throw new Error;
                        var h = this.m_flagsBuffer.data[o];
                        this.InitDampingParameter(e, i, n, h & t.b2ParticleFlag.b2_wallParticle ? 0 : this.GetParticleMass(), 0, a, a, l)
                    }
                }, n.prototype.ComputeDampingImpulse = function(t, e, i, n, r, s, o) {
                    var a = t + e * i * i + n + r * s * s;
                    return a > 0 ? o / a : 0
                }, n.prototype.ApplyDamping = function(t, e, i, n, r, s, o, a) {
                    if (r && n) r.m_linearVelocity.SelfMulAdd(o * t, a), r.m_angularVelocity += o * i * e;
                    else {
                        if (!this.m_velocityBuffer.data) throw new Error;
                        this.m_velocityBuffer.data[s].SelfMulAdd(o * t, a)
                    }
                }, n.xTruncBits = 12, n.yTruncBits = 12, n.tagBits = 32, n.yOffset = 1 << n.yTruncBits - 1, n.yShift = n.tagBits - n.yTruncBits, n.xShift = n.tagBits - n.yTruncBits - n.xTruncBits, n.xScale = 1 << n.xShift, n.xOffset = n.xScale * (1 << n.xTruncBits - 1), n.yMask = (1 << n.yTruncBits) - 1 << n.yShift, n.xMask = ~n.yMask, n.DestroyParticlesInShape_s_aabb = new wt, n.CreateParticleGroup_s_transform = new V, n.ComputeCollisionEnergy_s_v = new P, n.QueryShapeAABB_s_aabb = new wt, n.QueryPointAABB_s_aabb = new wt, n.RayCast_s_aabb = new wt, n.RayCast_s_p = new P, n.RayCast_s_v = new P, n.RayCast_s_n = new P, n.RayCast_s_point = new P, n.k_pairFlags = t.b2ParticleFlag.b2_springParticle, n.k_triadFlags = t.b2ParticleFlag.b2_elasticParticle, n.k_noPressureFlags = t.b2ParticleFlag.b2_powderParticle | t.b2ParticleFlag.b2_tensileParticle, n.k_extraDampingFlags = t.b2ParticleFlag.b2_staticPressureParticle, n.k_barrierWallFlags = t.b2ParticleFlag.b2_barrierParticle | t.b2ParticleFlag.b2_wallParticle, n.CreateParticlesStrokeShapeForGroup_s_edge = new ii, n.CreateParticlesStrokeShapeForGroup_s_d = new P, n.CreateParticlesStrokeShapeForGroup_s_p = new P, n.CreateParticlesFillShapeForGroup_s_aabb = new wt, n.CreateParticlesFillShapeForGroup_s_p = new P, n.UpdatePairsAndTriads_s_dab = new P, n.UpdatePairsAndTriads_s_dbc = new P, n.UpdatePairsAndTriads_s_dca = new P, n.AddContact_s_d = new P, n.UpdateBodyContacts_s_aabb = new wt, n.Solve_s_subStep = new on, n.SolveCollision_s_aabb = new wt, n.SolveGravity_s_gravity = new P, n.SolveBarrier_s_aabb = new wt, n.SolveBarrier_s_va = new P, n.SolveBarrier_s_vb = new P, n.SolveBarrier_s_pba = new P, n.SolveBarrier_s_vba = new P, n.SolveBarrier_s_vc = new P, n.SolveBarrier_s_pca = new P, n.SolveBarrier_s_vca = new P, n.SolveBarrier_s_qba = new P, n.SolveBarrier_s_qca = new P, n.SolveBarrier_s_dv = new P, n.SolveBarrier_s_f = new P, n.SolvePressure_s_f = new P, n.SolveDamping_s_v = new P, n.SolveDamping_s_f = new P, n.SolveRigidDamping_s_t0 = new P, n.SolveRigidDamping_s_t1 = new P, n.SolveRigidDamping_s_p = new P, n.SolveRigidDamping_s_v = new P, n.SolveExtraDamping_s_v = new P, n.SolveExtraDamping_s_f = new P, n.SolveRigid_s_position = new P, n.SolveRigid_s_rotation = new N, n.SolveRigid_s_transform = new V, n.SolveRigid_s_velocityTransform = new V, n.SolveElastic_s_pa = new P, n.SolveElastic_s_pb = new P, n.SolveElastic_s_pc = new P, n.SolveElastic_s_r = new N, n.SolveElastic_s_t0 = new P, n.SolveSpring_s_pa = new P, n.SolveSpring_s_pb = new P, n.SolveSpring_s_d = new P, n.SolveSpring_s_f = new P, n.SolveTensile_s_weightedNormal = new P, n.SolveTensile_s_s = new P, n.SolveTensile_s_f = new P, n.SolveViscous_s_v = new P, n.SolveViscous_s_f = new P, n.SolveRepulsive_s_f = new P, n.SolvePowder_s_f = new P, n.SolveSolid_s_f = new P, n.RemoveSpuriousBodyContacts_s_n = new P, n.RemoveSpuriousBodyContacts_s_pos = new P, n.RemoveSpuriousBodyContacts_s_normal = new P, n
            })(), (function(e) {
                var n = (function() {
                    return function() {
                        this.data = null, this.userSuppliedCapacity = 0
                    }
                })();
                e.UserOverridableBuffer = n;
                var r = (function() {
                    function t() {
                        this.index = u, this.tag = 0
                    }
                    return t.CompareProxyProxy = function(t, e) {
                        return t.tag < e.tag
                    }, t.CompareTagProxy = function(t, e) {
                        return t < e.tag
                    }, t.CompareProxyTag = function(t, e) {
                        return t.tag < e
                    }, t
                })();
                e.Proxy = r;
                var s = (function() {
                    function t(t, i, n, r, s) {
                        this.m_system = t, this.m_xLower = (i & e.xMask) >>> 0, this.m_xUpper = (n & e.xMask) >>> 0, this.m_yLower = (i & e.yMask) >>> 0, this.m_yUpper = (n & e.yMask) >>> 0, this.m_first = r, this.m_last = s
                    }
                    return t.prototype.GetNext = function() {
                        for (; this.m_first < this.m_last;) {
                            var t = (this.m_system.m_proxyBuffer.data[this.m_first].tag & e.xMask) >>> 0;
                            if (t >= this.m_xLower && t <= this.m_xUpper) return this.m_system.m_proxyBuffer.data[this.m_first++].index;
                            this.m_first++
                        }
                        return u
                    }, t
                })();
                e.InsideBoundsEnumerator = s;
                var o = (function() {
                    return function() {
                        this.next = null, this.count = 0, this.index = 0
                    }
                })();
                e.ParticleListNode = o;
                var a = (function() {
                    function t() {}
                    return t.prototype.Allocate = function(t, e) {
                        return e
                    }, t.prototype.Clear = function() {}, t.prototype.GetCount = function() {
                        return 0
                    }, t.prototype.Invalidate = function(t) {}, t.prototype.GetValidBuffer = function() {
                        return []
                    }, t.prototype.GetBuffer = function() {
                        return []
                    }, t.prototype.SetCount = function(t) {}, t
                })();
                e.FixedSetAllocator = a;
                var h = (function() {
                    return function(t, e) {
                        this.second = u, this.first = t, this.second = e
                    }
                })();
                e.FixtureParticle = h;
                var c = (function(t) {
                    function e() {
                        return null !== t && t.apply(this, arguments) || this
                    }
                    return $e(e, t), e.prototype.Initialize = function(t, e) {}, e.prototype.Find = function(t) {
                        return u
                    }, e
                })(e.FixedSetAllocator);
                e.FixtureParticleSet = c;
                var _ = (function() {
                    return function(t, e) {
                        this.first = u, this.second = u, this.first = t, this.second = e
                    }
                })();
                e.ParticlePair = _;
                var f = (function(t) {
                    function e() {
                        return null !== t && t.apply(this, arguments) || this
                    }
                    return $e(e, t), e.prototype.Initialize = function(t, e) {}, e.prototype.Find = function(t) {
                        return u
                    }, e
                })(e.FixedSetAllocator);
                e.b2ParticlePairSet = f;
                var d = (function() {
                    function t() {}
                    return t.prototype.IsNecessary = function(t) {
                        return !0
                    }, t.prototype.ShouldCreatePair = function(t, e) {
                        return !0
                    }, t.prototype.ShouldCreateTriad = function(t, e, i) {
                        return !0
                    }, t
                })();
                e.ConnectionFilter = d;
                var p = (function(t) {
                    function e(e, i, n, r) {
                        var s = t.call(this) || this;
                        return s.m_callDestructionListener = !1, s.m_destroyed = 0, s.m_system = e, s.m_shape = i, s.m_xf = n, s.m_callDestructionListener = r, s.m_destroyed = 0, s
                    }
                    return $e(e, t), e.prototype.ReportFixture = function(t) {
                        return !1
                    }, e.prototype.ReportParticle = function(t, e) {
                        if (t !== this.m_system) return !1;
                        if (!this.m_system.m_positionBuffer.data) throw new Error;
                        return this.m_shape.TestPoint(this.m_xf, this.m_system.m_positionBuffer.data[e]) && (this.m_system.DestroyParticle(e, this.m_callDestructionListener), this.m_destroyed++), !0
                    }, e.prototype.Destroyed = function() {
                        return this.m_destroyed
                    }, e
                })(en);
                e.DestroyParticlesInShapeCallback = p;
                var m = (function(t) {
                    function e(e) {
                        var i = t.call(this) || this;
                        return i.m_threshold = 0, i.m_threshold = e, i
                    }
                    return $e(e, t), e.prototype.ShouldCreatePair = function(t, e) {
                        return t < this.m_threshold && this.m_threshold <= e || e < this.m_threshold && this.m_threshold <= t
                    }, e.prototype.ShouldCreateTriad = function(t, e, i) {
                        return (t < this.m_threshold || e < this.m_threshold || i < this.m_threshold) && (this.m_threshold <= t || this.m_threshold <= e || this.m_threshold <= i)
                    }, e
                })(e.ConnectionFilter);
                e.JoinParticleGroupsFilter = m;
                var y = (function(e) {
                    function n(i, n) {
                        void 0 === n && (n = i.length);
                        var r = e.call(this, t.b2ShapeType.e_unknown, 0) || this;
                        return r.m_shapeCount = 0, r.m_shapes = i, r.m_shapeCount = n, r
                    }
                    return $e(n, e), n.prototype.Clone = function() {
                        throw new Error
                    }, n.prototype.GetChildCount = function() {
                        return 1
                    }, n.prototype.TestPoint = function(t, e) {
                        for (var i = 0; i < this.m_shapeCount; i++)
                            if (this.m_shapes[i].TestPoint(t, e)) return !0;
                        return !1
                    }, n.prototype.ComputeDistance = function(t, e, i, n) {
                        return 0
                    }, n.prototype.RayCast = function(t, e, i, n) {
                        return !1
                    }, n.prototype.ComputeAABB = function(t, e, n) {
                        var r = new wt;
                        t.lowerBound.x = +i, t.lowerBound.y = +i, t.upperBound.x = -i, t.upperBound.y = -i;
                        for (var s = 0; s < this.m_shapeCount; s++)
                            for (var o = this.m_shapes[s].GetChildCount(), a = 0; a < o; a++) {
                                var l = r;
                                this.m_shapes[s].ComputeAABB(l, e, a), t.Combine1(l)
                            }
                    }, n.prototype.ComputeMass = function(t, e) {}, n.prototype.SetupDistanceProxy = function(t, e) {}, n.prototype.ComputeSubmergedArea = function(t, e, i, n) {
                        return 0
                    }, n.prototype.Dump = function(t) {}, n
                })(Ke);
                e.CompositeShape = y;
                var v = (function(e) {
                    function i(t) {
                        var i = e.call(this) || this;
                        return i.m_flagsBuffer = t, i
                    }
                    return $e(i, e), i.prototype.IsNecessary = function(e) {
                        if (!this.m_flagsBuffer.data) throw new Error;
                        return 0 != (this.m_flagsBuffer.data[e] & t.b2ParticleFlag.b2_reactiveParticle)
                    }, i
                })(e.ConnectionFilter);
                e.ReactiveFilter = v;
                var g = (function(i) {
                    function n(t, e) {
                        var n = i.call(this, t) || this;
                        return n.m_contactFilter = e, n
                    }
                    return $e(n, i), n.prototype.ShouldCollideFixtureParticle = function(e, i, n) {
                        if (this.m_contactFilter && this.m_system.GetFlagsBuffer()[n] & t.b2ParticleFlag.b2_fixtureContactFilterParticle) return this.m_contactFilter.ShouldCollideFixtureParticle(e, this.m_system, n);
                        return !0
                    }, n.prototype.ReportFixtureAndParticle = function(i, n, r) {
                        var s = e.UpdateBodyContactsCallback.ReportFixtureAndParticle_s_n,
                            o = e.UpdateBodyContactsCallback.ReportFixtureAndParticle_s_rp;
                        if (!this.m_system.m_flagsBuffer.data) throw new Error;
                        if (!this.m_system.m_positionBuffer.data) throw new Error;
                        var a = this.m_system.m_positionBuffer.data[r],
                            l = s,
                            h = i.ComputeDistance(a, l, n);
                        if (h < this.m_system.m_particleDiameter && this.ShouldCollideFixtureParticle(i, this.m_system, r)) {
                            var c = i.GetBody(),
                                u = c.GetWorldCenter(),
                                _ = c.GetMass(),
                                f = c.GetInertia() - _ * c.GetLocalCenter().LengthSquared(),
                                d = _ > 0 ? 1 / _ : 0,
                                p = f > 0 ? 1 / f : 0,
                                m = this.m_system.m_flagsBuffer.data[r] & t.b2ParticleFlag.b2_wallParticle ? 0 : this.m_system.GetParticleInvMass(),
                                y = P.SubVV(a, u, o),
                                v = P.CrossVV(y, l),
                                g = m + d + p * v * v,
                                x = this.m_system.m_bodyContactBuffer.data[this.m_system.m_bodyContactBuffer.Append()];
                            x.index = r, x.body = c, x.fixture = i, x.weight = 1 - h * this.m_system.m_inverseDiameter, x.normal.Copy(l.SelfNeg()), x.mass = g > 0 ? 1 / g : 0, this.m_system.DetectStuckParticle(r)
                        }
                    }, n.ReportFixtureAndParticle_s_n = new P, n.ReportFixtureAndParticle_s_rp = new P, n
                })(On);
                e.UpdateBodyContactsCallback = g;
                var x = (function(i) {
                    function n(t, e) {
                        var n = i.call(this, t) || this;
                        return n.m_step = e, n
                    }
                    return $e(n, i), n.prototype.ReportFixtureAndParticle = function(i, n, r) {
                        var s = e.SolveCollisionCallback.ReportFixtureAndParticle_s_p1,
                            o = e.SolveCollisionCallback.ReportFixtureAndParticle_s_output,
                            a = e.SolveCollisionCallback.ReportFixtureAndParticle_s_input,
                            h = e.SolveCollisionCallback.ReportFixtureAndParticle_s_p,
                            c = e.SolveCollisionCallback.ReportFixtureAndParticle_s_v,
                            u = e.SolveCollisionCallback.ReportFixtureAndParticle_s_f,
                            _ = i.GetBody();
                        if (!this.m_system.m_positionBuffer.data) throw new Error;
                        if (!this.m_system.m_velocityBuffer.data) throw new Error;
                        var f = this.m_system.m_positionBuffer.data[r],
                            d = this.m_system.m_velocityBuffer.data[r],
                            p = o,
                            m = a;
                        if (0 === this.m_system.m_iterationIndex) {
                            var y = V.MulTXV(_.m_xf0, f, s);
                            i.GetShape().GetType() === t.b2ShapeType.e_circleShape && (y.SelfSub(_.GetLocalCenter()), N.MulRV(_.m_xf0.q, y, y), N.MulTRV(_.m_xf.q, y, y), y.SelfAdd(_.GetLocalCenter())), V.MulXV(_.m_xf, y, m.p1)
                        } else m.p1.Copy(f);
                        if (P.AddVMulSV(f, this.m_step.dt, d, m.p2), m.maxFraction = 1, i.RayCast(p, m, n)) {
                            var v = p.normal,
                                g = h;
                            g.x = (1 - p.fraction) * m.p1.x + p.fraction * m.p2.x + l * v.x, g.y = (1 - p.fraction) * m.p1.y + p.fraction * m.p2.y + l * v.y;
                            var x = c;
                            x.x = this.m_step.inv_dt * (g.x - f.x), x.y = this.m_step.inv_dt * (g.y - f.y), this.m_system.m_velocityBuffer.data[r].Copy(x);
                            var b = u;
                            b.x = this.m_step.inv_dt * this.m_system.GetParticleMass() * (d.x - x.x), b.y = this.m_step.inv_dt * this.m_system.GetParticleMass() * (d.y - x.y), this.m_system.ParticleApplyForce(r, b)
                        }
                    }, n.prototype.ReportParticle = function(t, e) {
                        return !1
                    }, n.ReportFixtureAndParticle_s_p1 = new P, n.ReportFixtureAndParticle_s_output = new St, n.ReportFixtureAndParticle_s_input = new Tt, n.ReportFixtureAndParticle_s_p = new P, n.ReportFixtureAndParticle_s_v = new P, n.ReportFixtureAndParticle_s_f = new P, n
                })(On);
                e.SolveCollisionCallback = x
            })(t.b2ParticleSystem || (t.b2ParticleSystem = {}));
            var Gn = (function() {
                    function e(t) {
                        this.m_newFixture = !1, this.m_locked = !1, this.m_clearForces = !0, this.m_contactManager = new rn, this.m_bodyList = null, this.m_jointList = null, this.m_particleSystemList = null, this.m_bodyCount = 0, this.m_jointCount = 0, this.m_gravity = new P, this.m_allowSleep = !0, this.m_destructionListener = null, this.m_debugDraw = null, this.m_inv_dt0 = 0, this.m_warmStarting = !0, this.m_continuousPhysics = !0, this.m_subStepping = !1, this.m_stepComplete = !0, this.m_profile = new sn, this.m_island = new mn, this.s_stack = [], this.m_controllerList = null, this.m_controllerCount = 0, this.m_gravity.Copy(t)
                    }
                    return e.prototype.SetDestructionListener = function(t) {
                        this.m_destructionListener = t
                    }, e.prototype.SetContactFilter = function(t) {
                        this.m_contactManager.m_contactFilter = t
                    }, e.prototype.SetContactListener = function(t) {
                        this.m_contactManager.m_contactListener = t
                    }, e.prototype.SetDebugDraw = function(t) {
                        this.m_debugDraw = t
                    }, e.prototype.CreateBody = function(t) {
                        if (void 0 === t && (t = {}), this.IsLocked()) throw new Error;
                        var e = new hi(t, this);
                        return e.m_prev = null, e.m_next = this.m_bodyList, this.m_bodyList && (this.m_bodyList.m_prev = e), this.m_bodyList = e, ++this.m_bodyCount, e
                    }, e.prototype.DestroyBody = function(t) {
                        if (this.IsLocked()) throw new Error;
                        for (var e = t.m_jointList; e;) {
                            var i = e;
                            e = e.next, this.m_destructionListener && this.m_destructionListener.SayGoodbyeJoint(i.joint), this.DestroyJoint(i.joint), t.m_jointList = e
                        }
                        t.m_jointList = null;
                        for (var n = t.m_controllerList; n;) {
                            var r = n;
                            n = n.nextController, r.controller.RemoveBody(t)
                        }
                        for (var s = t.m_contactList; s;) {
                            var o = s;
                            s = s.next, this.m_contactManager.Destroy(o.contact)
                        }
                        t.m_contactList = null;
                        for (var a = t.m_fixtureList; a;) {
                            var l = a;
                            a = a.m_next, this.m_destructionListener && this.m_destructionListener.SayGoodbyeFixture(l), l.DestroyProxies(), l.Destroy(), t.m_fixtureList = a, t.m_fixtureCount -= 1
                        }
                        t.m_fixtureList = null, t.m_fixtureCount = 0, t.m_prev && (t.m_prev.m_next = t.m_next), t.m_next && (t.m_next.m_prev = t.m_prev), t === this.m_bodyList && (this.m_bodyList = t.m_next), --this.m_bodyCount
                    }, e._Joint_Create = function(e, i) {
                        switch (e.type) {
                            case t.b2JointType.e_distanceJoint:
                                return new pi(e);
                            case t.b2JointType.e_mouseJoint:
                                return new Si(e);
                            case t.b2JointType.e_prismaticJoint:
                                return new Ei(e);
                            case t.b2JointType.e_revoluteJoint:
                                return new Ii(e);
                            case t.b2JointType.e_pulleyJoint:
                                return new Di(e);
                            case t.b2JointType.e_gearJoint:
                                return new bi(e);
                            case t.b2JointType.e_wheelJoint:
                                return new Ni(e);
                            case t.b2JointType.e_weldJoint:
                                return new Li(e);
                            case t.b2JointType.e_frictionJoint:
                                return new gi(e);
                            case t.b2JointType.e_ropeJoint:
                                return new Ri(e);
                            case t.b2JointType.e_motorJoint:
                                return new Ci(e);
                            case t.b2JointType.e_areaJoint:
                                return new yi(e)
                        }
                        throw new Error
                    }, e._Joint_Destroy = function(t, e) {}, e.prototype.CreateJoint = function(t) {
                        if (this.IsLocked()) throw new Error;
                        var i = e._Joint_Create(t, null);
                        i.m_prev = null, i.m_next = this.m_jointList, this.m_jointList && (this.m_jointList.m_prev = i), this.m_jointList = i, ++this.m_jointCount, i.m_edgeA.prev = null, i.m_edgeA.next = i.m_bodyA.m_jointList, i.m_bodyA.m_jointList && (i.m_bodyA.m_jointList.prev = i.m_edgeA), i.m_bodyA.m_jointList = i.m_edgeA, i.m_edgeB.prev = null, i.m_edgeB.next = i.m_bodyB.m_jointList, i.m_bodyB.m_jointList && (i.m_bodyB.m_jointList.prev = i.m_edgeB), i.m_bodyB.m_jointList = i.m_edgeB;
                        var n = t.bodyA,
                            r = t.bodyB;
                        if (!t.collideConnected)
                            for (var s = r.GetContactList(); s;) s.other === n && s.contact.FlagForFiltering(), s = s.next;
                        return i
                    }, e.prototype.DestroyJoint = function(t) {
                        if (this.IsLocked()) throw new Error;
                        var i = t.m_collideConnected;
                        t.m_prev && (t.m_prev.m_next = t.m_next), t.m_next && (t.m_next.m_prev = t.m_prev), t === this.m_jointList && (this.m_jointList = t.m_next);
                        var n = t.m_bodyA,
                            r = t.m_bodyB;
                        if (n.SetAwake(!0), r.SetAwake(!0), t.m_edgeA.prev && (t.m_edgeA.prev.next = t.m_edgeA.next), t.m_edgeA.next && (t.m_edgeA.next.prev = t.m_edgeA.prev), t.m_edgeA === n.m_jointList && (n.m_jointList = t.m_edgeA.next), t.m_edgeA.prev = null, t.m_edgeA.next = null, t.m_edgeB.prev && (t.m_edgeB.prev.next = t.m_edgeB.next), t.m_edgeB.next && (t.m_edgeB.next.prev = t.m_edgeB.prev), t.m_edgeB === r.m_jointList && (r.m_jointList = t.m_edgeB.next), t.m_edgeB.prev = null, t.m_edgeB.next = null, e._Joint_Destroy(t, null), --this.m_jointCount, !i)
                            for (var s = r.GetContactList(); s;) s.other === n && s.contact.FlagForFiltering(), s = s.next
                    }, e.prototype.CreateParticleSystem = function(e) {
                        if (this.IsLocked()) throw new Error;
                        var i = new t.b2ParticleSystem(e, this);
                        return i.m_prev = null, i.m_next = this.m_particleSystemList, this.m_particleSystemList && (this.m_particleSystemList.m_prev = i), this.m_particleSystemList = i, i
                    }, e.prototype.DestroyParticleSystem = function(t) {
                        if (this.IsLocked()) throw new Error;
                        t.m_prev && (t.m_prev.m_next = t.m_next), t.m_next && (t.m_next.m_prev = t.m_prev), t === this.m_particleSystemList && (this.m_particleSystemList = t.m_next)
                    }, e.prototype.CalculateReasonableParticleIterations = function(t) {
                        if (null === this.m_particleSystemList) return 1;
                        return vn(this.m_gravity.Length(), (function(t) {
                            for (var e = i, n = t.GetParticleSystemList(); null !== n; n = n.m_next) e = g(e, n.GetRadius());
                            return e
                        })(this), t)
                    }, e.prototype.Step = function(t, i, n, r) {
                        void 0 === r && (r = this.CalculateReasonableParticleIterations(t));
                        var s = e.Step_s_stepTimer.Reset();
                        this.m_newFixture && (this.m_contactManager.FindNewContacts(), this.m_newFixture = !1), this.m_locked = !0;
                        var o = e.Step_s_step;
                        o.dt = t, o.velocityIterations = i, o.positionIterations = n, o.particleIterations = r, o.inv_dt = t > 0 ? 1 / t : 0, o.dtRatio = this.m_inv_dt0 * t, o.warmStarting = this.m_warmStarting;
                        var a = e.Step_s_timer.Reset();
                        if (this.m_contactManager.Collide(), this.m_profile.collide = a.GetMilliseconds(), this.m_stepComplete && o.dt > 0) {
                            for (var l = e.Step_s_timer.Reset(), h = this.m_particleSystemList; h; h = h.m_next) h.Solve(o);
                            this.Solve(o), this.m_profile.solve = l.GetMilliseconds()
                        }
                        if (this.m_continuousPhysics && o.dt > 0) {
                            var c = e.Step_s_timer.Reset();
                            this.SolveTOI(o), this.m_profile.solveTOI = c.GetMilliseconds()
                        }
                        o.dt > 0 && (this.m_inv_dt0 = o.inv_dt), this.m_clearForces && this.ClearForces(), this.m_locked = !1, this.m_profile.step = s.GetMilliseconds()
                    }, e.prototype.ClearForces = function() {
                        for (var t = this.m_bodyList; t; t = t.m_next) t.m_force.SetZero(), t.m_torque = 0
                    }, e.prototype.DrawParticleSystem = function(t) {
                        if (null !== this.m_debugDraw) {
                            var e = t.GetParticleCount();
                            if (e) {
                                var i = t.GetRadius(),
                                    n = t.GetPositionBuffer();
                                if (t.m_colorBuffer.data) {
                                    var r = t.GetColorBuffer();
                                    this.m_debugDraw.DrawParticles(n, i, r, e)
                                } else this.m_debugDraw.DrawParticles(n, i, null, e)
                            }
                        }
                    }, e.prototype.DrawDebugData = function() {
                        if (null !== this.m_debugDraw) {
                            var i = this.m_debugDraw.GetFlags(),
                                n = e.DrawDebugData_s_color.SetRGB(0, 0, 0);
                            if (i & t.b2DrawFlags.e_shapeBit)
                                for (var r = this.m_bodyList; r; r = r.m_next) {
                                    var s = r.m_xf;
                                    this.m_debugDraw.PushTransform(s);
                                    for (var o = r.GetFixtureList(); o; o = o.m_next) r.IsActive() ? r.GetType() === t.b2BodyType.b2_staticBody ? (n.SetRGB(.5, .9, .5), this.DrawShape(o, n)) : r.GetType() === t.b2BodyType.b2_kinematicBody ? (n.SetRGB(.5, .5, .9), this.DrawShape(o, n)) : r.IsAwake() ? (n.SetRGB(.9, .7, .7), this.DrawShape(o, n)) : (n.SetRGB(.6, .6, .6), this.DrawShape(o, n)) : (n.SetRGB(.5, .5, .3), this.DrawShape(o, n));
                                    this.m_debugDraw.PopTransform(s)
                                }
                            if (i & t.b2DrawFlags.e_particleBit)
                                for (var a = this.m_particleSystemList; a; a = a.m_next) this.DrawParticleSystem(a);
                            if (i & t.b2DrawFlags.e_jointBit)
                                for (var l = this.m_jointList; l; l = l.m_next) this.DrawJoint(l);
                            if (i & t.b2DrawFlags.e_aabbBit) {
                                n.SetRGB(.9, .3, .9);
                                var h = e.DrawDebugData_s_vs;
                                for (r = this.m_bodyList; r; r = r.m_next)
                                    if (r.IsActive())
                                        for (o = r.GetFixtureList(); o; o = o.m_next)
                                            for (var c = 0; c < o.m_proxyCount; ++c) {
                                                var u = o.m_proxies[c].treeNode.aabb;
                                                h[0].Set(u.lowerBound.x, u.lowerBound.y), h[1].Set(u.upperBound.x, u.lowerBound.y), h[2].Set(u.upperBound.x, u.upperBound.y), h[3].Set(u.lowerBound.x, u.upperBound.y), this.m_debugDraw.DrawPolygon(h, 4, n)
                                            }
                            }
                            if (i & t.b2DrawFlags.e_centerOfMassBit)
                                for (r = this.m_bodyList; r; r = r.m_next) {
                                    (s = e.DrawDebugData_s_xf).q.Copy(r.m_xf.q), s.p.Copy(r.GetWorldCenter()), this.m_debugDraw.DrawTransform(s)
                                }
                            if (i & t.b2DrawFlags.e_controllerBit)
                                for (var _ = this.m_controllerList; _; _ = _.m_next) _.Draw(this.m_debugDraw)
                        }
                    }, e.prototype.QueryAABB = function(t, e, i) {
                        if (this.m_contactManager.m_broadPhase.Query(e, (function(e) {
                                var n = e.userData.fixture;
                                return t ? t.ReportFixture(n) : !i || i(n)
                            })), t instanceof en)
                            for (var n = this.m_particleSystemList; n; n = n.m_next) t.ShouldQueryParticleSystem(n) && n.QueryAABB(t, e)
                    }, e.prototype.QueryAllAABB = function(t, e) {
                        return void 0 === e && (e = []), this.QueryAABB(null, t, (function(t) {
                            return e.push(t), !0
                        })), e
                    }, e.prototype.QueryPointAABB = function(t, e, i) {
                        if (this.m_contactManager.m_broadPhase.QueryPoint(e, (function(e) {
                                var n = e.userData.fixture;
                                return t ? t.ReportFixture(n) : !i || i(n)
                            })), t instanceof en)
                            for (var n = this.m_particleSystemList; n; n = n.m_next) t.ShouldQueryParticleSystem(n) && n.QueryPointAABB(t, e)
                    }, e.prototype.QueryAllPointAABB = function(t, e) {
                        return void 0 === e && (e = []), this.QueryPointAABB(null, t, (function(t) {
                            return e.push(t), !0
                        })), e
                    }, e.prototype.QueryFixtureShape = function(t, i, n, r, s) {
                        var o = e.QueryFixtureShape_s_aabb;
                        if (i.ComputeAABB(o, r, n), this.m_contactManager.m_broadPhase.Query(o, (function(e) {
                                var o = e.userData,
                                    a = o.fixture;
                                if (Pt(i, n, a.GetShape(), o.childIndex, r, a.GetBody().GetTransform())) {
                                    if (t) return t.ReportFixture(a);
                                    if (s) return s(a)
                                }
                                return !0
                            })), t instanceof en)
                            for (var a = this.m_particleSystemList; a; a = a.m_next) t.ShouldQueryParticleSystem(a) && a.QueryAABB(t, o)
                    }, e.prototype.QueryAllFixtureShape = function(t, e, i, n) {
                        return void 0 === n && (n = []), this.QueryFixtureShape(null, t, e, i, (function(t) {
                            return n.push(t), !0
                        })), n
                    }, e.prototype.QueryFixturePoint = function(t, e, i) {
                        if (this.m_contactManager.m_broadPhase.QueryPoint(e, (function(n) {
                                var r = n.userData.fixture;
                                if (r.TestPoint(e)) {
                                    if (t) return t.ReportFixture(r);
                                    if (i) return i(r)
                                }
                                return !0
                            })), t)
                            for (var n = this.m_particleSystemList; n; n = n.m_next) t.ShouldQueryParticleSystem(n) && n.QueryPointAABB(t, e)
                    }, e.prototype.QueryAllFixturePoint = function(t, e) {
                        return void 0 === e && (e = []), this.QueryFixturePoint(null, t, (function(t) {
                            return e.push(t), !0
                        })), e
                    }, e.prototype.RayCast = function(t, i, n, r) {
                        var s = e.RayCast_s_input;
                        if (s.maxFraction = 1, s.p1.Copy(i), s.p2.Copy(n), this.m_contactManager.m_broadPhase.RayCast(s, (function(s, o) {
                                var a = o.userData,
                                    l = a.fixture,
                                    h = a.childIndex,
                                    c = e.RayCast_s_output;
                                if (l.RayCast(c, s, h)) {
                                    var u = c.fraction,
                                        _ = e.RayCast_s_point;
                                    if (_.Set((1 - u) * i.x + u * n.x, (1 - u) * i.y + u * n.y), t) return t.ReportFixture(l, _, c.normal, u);
                                    if (r) return r(l, _, c.normal, u)
                                }
                                return s.maxFraction
                            })), t)
                            for (var o = this.m_particleSystemList; o; o = o.m_next) t.ShouldQueryParticleSystem(o) && o.RayCast(t, i, n)
                    }, e.prototype.RayCastOne = function(t, e) {
                        var i = null,
                            n = 1;
                        return this.RayCast(null, t, e, (function(t, e, r, s) {
                            return s < n && (n = s, i = t), n
                        })), i
                    }, e.prototype.RayCastAll = function(t, e, i) {
                        return void 0 === i && (i = []), this.RayCast(null, t, e, (function(t, e, n, r) {
                            return i.push(t), 1
                        })), i
                    }, e.prototype.GetBodyList = function() {
                        return this.m_bodyList
                    }, e.prototype.GetJointList = function() {
                        return this.m_jointList
                    }, e.prototype.GetParticleSystemList = function() {
                        return this.m_particleSystemList
                    }, e.prototype.GetContactList = function() {
                        return this.m_contactManager.m_contactList
                    }, e.prototype.SetAllowSleeping = function(t) {
                        if (t !== this.m_allowSleep && (this.m_allowSleep = t, !this.m_allowSleep))
                            for (var e = this.m_bodyList; e; e = e.m_next) e.SetAwake(!0)
                    }, e.prototype.GetAllowSleeping = function() {
                        return this.m_allowSleep
                    }, e.prototype.SetWarmStarting = function(t) {
                        this.m_warmStarting = t
                    }, e.prototype.GetWarmStarting = function() {
                        return this.m_warmStarting
                    }, e.prototype.SetContinuousPhysics = function(t) {
                        this.m_continuousPhysics = t
                    }, e.prototype.GetContinuousPhysics = function() {
                        return this.m_continuousPhysics
                    }, e.prototype.SetSubStepping = function(t) {
                        this.m_subStepping = t
                    }, e.prototype.GetSubStepping = function() {
                        return this.m_subStepping
                    }, e.prototype.GetProxyCount = function() {
                        return this.m_contactManager.m_broadPhase.GetProxyCount()
                    }, e.prototype.GetBodyCount = function() {
                        return this.m_bodyCount
                    }, e.prototype.GetJointCount = function() {
                        return this.m_jointCount
                    }, e.prototype.GetContactCount = function() {
                        return this.m_contactManager.m_contactCount
                    }, e.prototype.GetTreeHeight = function() {
                        return this.m_contactManager.m_broadPhase.GetTreeHeight()
                    }, e.prototype.GetTreeBalance = function() {
                        return this.m_contactManager.m_broadPhase.GetTreeBalance()
                    }, e.prototype.GetTreeQuality = function() {
                        return this.m_contactManager.m_broadPhase.GetTreeQuality()
                    }, e.prototype.SetGravity = function(t, e) {
                        if (void 0 === e && (e = !0), !P.IsEqualToV(this.m_gravity, t) && (this.m_gravity.Copy(t), e))
                            for (var i = this.m_bodyList; i; i = i.m_next) i.SetAwake(!0)
                    }, e.prototype.GetGravity = function() {
                        return this.m_gravity
                    }, e.prototype.IsLocked = function() {
                        return this.m_locked
                    }, e.prototype.SetAutoClearForces = function(t) {
                        this.m_clearForces = t
                    }, e.prototype.GetAutoClearForces = function() {
                        return this.m_clearForces
                    }, e.prototype.ShiftOrigin = function(t) {
                        if (this.IsLocked()) throw new Error;
                        for (var e = this.m_bodyList; e; e = e.m_next) e.m_xf.p.SelfSub(t), e.m_sweep.c0.SelfSub(t), e.m_sweep.c.SelfSub(t);
                        for (var i = this.m_jointList; i; i = i.m_next) i.ShiftOrigin(t);
                        this.m_contactManager.m_broadPhase.ShiftOrigin(t)
                    }, e.prototype.GetContactManager = function() {
                        return this.m_contactManager
                    }, e.prototype.GetProfile = function() {
                        return this.m_profile
                    }, e.prototype.Dump = function(e) {
                        if (!this.m_locked) {
                            e("const g: b2Vec2 = new b2Vec2(%.15f, %.15f);\n", this.m_gravity.x, this.m_gravity.y), e("this.m_world.SetGravity(g);\n"), e("const bodies: b2Body[] = [];\n"), e("const joints: b2Joint[] = [];\n");
                            for (var i = 0, n = this.m_bodyList; n; n = n.m_next) n.m_islandIndex = i, n.Dump(e), ++i;
                            i = 0;
                            for (var r = this.m_jointList; r; r = r.m_next) r.m_index = i, ++i;
                            for (r = this.m_jointList; r; r = r.m_next) r.m_type !== t.b2JointType.e_gearJoint && (e("{\n"), r.Dump(e), e("}\n"));
                            for (r = this.m_jointList; r; r = r.m_next) r.m_type === t.b2JointType.e_gearJoint && (e("{\n"), r.Dump(e), e("}\n"))
                        }
                    }, e.prototype.DrawJoint = function(i) {
                        if (null !== this.m_debugDraw) {
                            var n = i.GetBodyA(),
                                r = i.GetBodyB(),
                                s = n.m_xf,
                                o = r.m_xf,
                                a = s.p,
                                l = o.p,
                                h = i.GetAnchorA(e.DrawJoint_s_p1),
                                c = i.GetAnchorB(e.DrawJoint_s_p2),
                                u = e.DrawJoint_s_color.SetRGB(.5, .8, .8);
                            switch (i.m_type) {
                                case t.b2JointType.e_distanceJoint:
                                    this.m_debugDraw.DrawSegment(h, c, u);
                                    break;
                                case t.b2JointType.e_pulleyJoint:
                                    var _ = i,
                                        f = _.GetGroundAnchorA(),
                                        d = _.GetGroundAnchorB();
                                    this.m_debugDraw.DrawSegment(f, h, u), this.m_debugDraw.DrawSegment(d, c, u), this.m_debugDraw.DrawSegment(f, d, u);
                                    break;
                                case t.b2JointType.e_mouseJoint:
                                    var p = e.DrawJoint_s_c;
                                    p.Set(0, 1, 0), this.m_debugDraw.DrawPoint(h, 4, p), this.m_debugDraw.DrawPoint(c, 4, p), p.Set(.8, .8, .8), this.m_debugDraw.DrawSegment(h, c, p);
                                    break;
                                default:
                                    this.m_debugDraw.DrawSegment(a, h, u), this.m_debugDraw.DrawSegment(h, c, u), this.m_debugDraw.DrawSegment(l, c, u)
                            }
                        }
                    }, e.prototype.DrawShape = function(i, n) {
                        if (null !== this.m_debugDraw) {
                            var r = i.GetShape();
                            switch (r.m_type) {
                                case t.b2ShapeType.e_circleShape:
                                    var s = r,
                                        o = s.m_p,
                                        a = s.m_radius,
                                        l = P.UNITX;
                                    this.m_debugDraw.DrawSolidCircle(o, a, l, n);
                                    break;
                                case t.b2ShapeType.e_edgeShape:
                                    var h = r,
                                        c = h.m_vertex1,
                                        u = h.m_vertex2;
                                    this.m_debugDraw.DrawSegment(c, u, n);
                                    break;
                                case t.b2ShapeType.e_chainShape:
                                    var _ = r,
                                        f = _.m_count,
                                        d = _.m_vertices,
                                        p = e.DrawShape_s_ghostColor.SetRGBA(.75 * n.r, .75 * n.g, .75 * n.b, n.a);
                                    c = d[0];
                                    if (this.m_debugDraw.DrawPoint(c, 4, n), _.m_hasPrevVertex) {
                                        var m = _.m_prevVertex;
                                        this.m_debugDraw.DrawSegment(m, c, p), this.m_debugDraw.DrawCircle(m, .1, p)
                                    }
                                    for (var y = 1; y < f; ++y) {
                                        u = d[y];
                                        this.m_debugDraw.DrawSegment(c, u, n), this.m_debugDraw.DrawPoint(u, 4, n), c = u
                                    }
                                    if (_.m_hasNextVertex) {
                                        var v = _.m_nextVertex;
                                        this.m_debugDraw.DrawSegment(v, c, p), this.m_debugDraw.DrawCircle(v, .1, p)
                                    }
                                    break;
                                case t.b2ShapeType.e_polygonShape:
                                    var g = r,
                                        x = g.m_count;
                                    d = g.m_vertices;
                                    this.m_debugDraw.DrawSolidPolygon(d, x, n)
                            }
                        }
                    }, e.prototype.Solve = function(e) {
                        for (var i = this.m_bodyList; i; i = i.m_next) i.m_xf0.Copy(i.m_xf);
                        for (var n = this.m_controllerList; n; n = n.m_next) n.Step(e);
                        this.m_profile.solveInit = 0, this.m_profile.solveVelocity = 0, this.m_profile.solvePosition = 0;
                        var r = this.m_island;
                        r.Initialize(this.m_bodyCount, this.m_contactManager.m_contactCount, this.m_jointCount, null, this.m_contactManager.m_contactListener);
                        for (i = this.m_bodyList; i; i = i.m_next) i.m_islandFlag = !1;
                        for (var s = this.m_contactManager.m_contactList; s; s = s.m_next) s.m_islandFlag = !1;
                        for (var o = this.m_jointList; o; o = o.m_next) o.m_islandFlag = !1;
                        for (var a = this.s_stack, l = this.m_bodyList; l; l = l.m_next)
                            if (!l.m_islandFlag && l.IsAwake() && l.IsActive() && l.GetType() !== t.b2BodyType.b2_staticBody) {
                                r.Clear();
                                var h = 0;
                                for (a[h++] = l, l.m_islandFlag = !0; h > 0;) {
                                    if (!(i = a[--h])) throw new Error;
                                    if (r.AddBody(i), i.m_awakeFlag = !0, i.GetType() !== t.b2BodyType.b2_staticBody) {
                                        for (var c = i.m_contactList; c; c = c.next) {
                                            var u = c.contact;
                                            if (!u.m_islandFlag && (u.IsEnabled() && u.IsTouching())) {
                                                var _ = u.m_fixtureA.m_isSensor,
                                                    f = u.m_fixtureB.m_isSensor;
                                                if (!_ && !f) {
                                                    if (r.AddContact(u), u.m_islandFlag = !0, !(p = c.other)) throw new Error;
                                                    p.m_islandFlag || (a[h++] = p, p.m_islandFlag = !0)
                                                }
                                            }
                                        }
                                        for (var d = i.m_jointList; d; d = d.next) {
                                            var p;
                                            if (!d.joint.m_islandFlag)(p = d.other).IsActive() && (r.AddJoint(d.joint), d.joint.m_islandFlag = !0, p.m_islandFlag || (a[h++] = p, p.m_islandFlag = !0))
                                        }
                                    }
                                }
                                var m = new sn;
                                r.Solve(m, e, this.m_gravity, this.m_allowSleep), this.m_profile.solveInit += m.solveInit, this.m_profile.solveVelocity += m.solveVelocity, this.m_profile.solvePosition += m.solvePosition;
                                for (var y = 0; y < r.m_bodyCount; ++y) {
                                    (i = r.m_bodies[y]).GetType() === t.b2BodyType.b2_staticBody && (i.m_islandFlag = !1)
                                }
                            }
                        for (y = 0; y < a.length && a[y]; ++y) a[y] = null;
                        var v = new z;
                        for (i = this.m_bodyList; i; i = i.m_next) i.m_islandFlag && i.GetType() !== t.b2BodyType.b2_staticBody && i.SynchronizeFixtures();
                        this.m_contactManager.FindNewContacts(), this.m_profile.broadphase = v.GetMilliseconds()
                    }, e.prototype.SolveTOI = function(i) {
                        var r = this.m_island;
                        if (r.Initialize(64, 32, 0, null, this.m_contactManager.m_contactListener), this.m_stepComplete) {
                            for (var s = this.m_bodyList; s; s = s.m_next) s.m_islandFlag = !1, s.m_sweep.alpha0 = 0;
                            for (var o = this.m_contactManager.m_contactList; o; o = o.m_next) o.m_toiFlag = !1, o.m_islandFlag = !1, o.m_toiCount = 0, o.m_toi = 1
                        }
                        for (;;) {
                            var a = null,
                                l = 1;
                            for (o = this.m_contactManager.m_contactList; o; o = o.m_next)
                                if (o.IsEnabled() && !(o.m_toiCount > 8)) {
                                    var h = 1;
                                    if (o.m_toiFlag) h = o.m_toi;
                                    else {
                                        var c = o.GetFixtureA(),
                                            u = o.GetFixtureB();
                                        if (c.IsSensor() || u.IsSensor()) continue;
                                        var _ = c.GetBody(),
                                            f = u.GetBody(),
                                            d = _.m_type,
                                            p = f.m_type,
                                            m = _.IsAwake() && d !== t.b2BodyType.b2_staticBody,
                                            y = f.IsAwake() && p !== t.b2BodyType.b2_staticBody;
                                        if (!m && !y) continue;
                                        var v = _.IsBullet() || d !== t.b2BodyType.b2_dynamicBody,
                                            x = f.IsBullet() || p !== t.b2BodyType.b2_dynamicBody;
                                        if (!v && !x) continue;
                                        var b = _.m_sweep.alpha0;
                                        _.m_sweep.alpha0 < f.m_sweep.alpha0 ? (b = f.m_sweep.alpha0, _.m_sweep.Advance(b)) : f.m_sweep.alpha0 < _.m_sweep.alpha0 && (b = _.m_sweep.alpha0, f.m_sweep.Advance(b));
                                        var A = o.GetChildIndexA(),
                                            C = o.GetChildIndexB(),
                                            T = e.SolveTOI_s_toi_input;
                                        T.proxyA.SetShape(c.GetShape(), A), T.proxyB.SetShape(u.GetShape(), C), T.sweepA.Copy(_.m_sweep), T.sweepB.Copy(f.m_sweep), T.tMax = 1;
                                        var S = e.SolveTOI_s_toi_output;
                                        re(S, T);
                                        var w = S.t;
                                        h = S.state === t.b2TOIOutputState.e_touching ? g(b + (1 - b) * w, 1) : 1, o.m_toi = h, o.m_toiFlag = !0
                                    }
                                    h < l && (a = o, l = h)
                                }
                            if (null === a || 1 - 10 * n < l) {
                                this.m_stepComplete = !0;
                                break
                            }
                            var E = a.GetFixtureA(),
                                M = a.GetFixtureB(),
                                D = E.GetBody(),
                                B = M.GetBody(),
                                I = e.SolveTOI_s_backup1.Copy(D.m_sweep),
                                P = e.SolveTOI_s_backup2.Copy(B.m_sweep);
                            if (D.Advance(l), B.Advance(l), a.Update(this.m_contactManager.m_contactListener), a.m_toiFlag = !1, ++a.m_toiCount, a.IsEnabled() && a.IsTouching()) {
                                D.SetAwake(!0), B.SetAwake(!0), r.Clear(), r.AddBody(D), r.AddBody(B), r.AddContact(a), D.m_islandFlag = !0, B.m_islandFlag = !0, a.m_islandFlag = !0;
                                for (var R = 0; R < 2; ++R) {
                                    if ((U = 0 === R ? D : B).m_type === t.b2BodyType.b2_dynamicBody)
                                        for (var O = U.m_contactList; O && r.m_bodyCount !== r.m_bodyCapacity && r.m_contactCount !== r.m_contactCapacity; O = O.next) {
                                            var L = O.contact;
                                            if (!L.m_islandFlag) {
                                                var F = O.other;
                                                if (F.m_type !== t.b2BodyType.b2_dynamicBody || U.IsBullet() || F.IsBullet()) {
                                                    var N = L.m_fixtureA.m_isSensor,
                                                        V = L.m_fixtureB.m_isSensor;
                                                    if (!N && !V) {
                                                        var k = e.SolveTOI_s_backup.Copy(F.m_sweep);
                                                        F.m_islandFlag || F.Advance(l), L.Update(this.m_contactManager.m_contactListener), L.IsEnabled() && L.IsTouching() ? (L.m_islandFlag = !0, r.AddContact(L), F.m_islandFlag || (F.m_islandFlag = !0, F.m_type !== t.b2BodyType.b2_staticBody && F.SetAwake(!0), r.AddBody(F))) : (F.m_sweep.Copy(k), F.SynchronizeTransform())
                                                    }
                                                }
                                            }
                                        }
                                }
                                var G = e.SolveTOI_s_subStep;
                                G.dt = (1 - l) * i.dt, G.inv_dt = 1 / G.dt, G.dtRatio = 1, G.positionIterations = 20, G.velocityIterations = i.velocityIterations, G.particleIterations = i.particleIterations, G.warmStarting = !1, r.SolveTOI(G, D.m_islandIndex, B.m_islandIndex);
                                for (R = 0; R < r.m_bodyCount; ++R) {
                                    var U;
                                    if ((U = r.m_bodies[R]).m_islandFlag = !1, U.m_type === t.b2BodyType.b2_dynamicBody) {
                                        U.SynchronizeFixtures();
                                        for (O = U.m_contactList; O; O = O.next) O.contact.m_toiFlag = !1, O.contact.m_islandFlag = !1
                                    }
                                }
                                if (this.m_contactManager.FindNewContacts(), this.m_subStepping) {
                                    this.m_stepComplete = !1;
                                    break
                                }
                            } else a.SetEnabled(!1), D.m_sweep.Copy(I), B.m_sweep.Copy(P), D.SynchronizeTransform(), B.SynchronizeTransform()
                        }
                    }, e.prototype.AddController = function(t) {
                        return t.m_next = this.m_controllerList, t.m_prev = null, this.m_controllerList && (this.m_controllerList.m_prev = t), this.m_controllerList = t, ++this.m_controllerCount, t
                    }, e.prototype.RemoveController = function(t) {
                        return t.m_prev && (t.m_prev.m_next = t.m_next), t.m_next && (t.m_next.m_prev = t.m_prev), this.m_controllerList === t && (this.m_controllerList = t.m_next), --this.m_controllerCount, t.m_prev = null, t.m_next = null, t
                    }, e.Step_s_step = new on, e.Step_s_stepTimer = new z, e.Step_s_timer = new z, e.DrawDebugData_s_color = new G(0, 0, 0), e.DrawDebugData_s_vs = P.MakeArray(4), e.DrawDebugData_s_xf = new V, e.QueryFixtureShape_s_aabb = new wt, e.RayCast_s_input = new Tt, e.RayCast_s_output = new St, e.RayCast_s_point = new P, e.DrawJoint_s_p1 = new P, e.DrawJoint_s_p2 = new P, e.DrawJoint_s_color = new G(.5, .8, .8), e.DrawJoint_s_c = new G, e.DrawShape_s_ghostColor = new G, e.SolveTOI_s_subStep = new on, e.SolveTOI_s_backup = new k, e.SolveTOI_s_backup1 = new k, e.SolveTOI_s_backup2 = new k, e.SolveTOI_s_toi_input = new Xt, e.SolveTOI_s_toi_output = new Yt, e
                })(),
                Un = (function() {
                    return function(t, e) {
                        this.prevBody = null, this.nextBody = null, this.prevController = null, this.nextController = null, this.controller = t, this.body = e
                    }
                })(),
                zn = (function() {
                    function t() {
                        this.m_bodyList = null, this.m_bodyCount = 0, this.m_prev = null, this.m_next = null
                    }
                    return t.prototype.GetNext = function() {
                        return this.m_next
                    }, t.prototype.GetPrev = function() {
                        return this.m_prev
                    }, t.prototype.GetBodyList = function() {
                        return this.m_bodyList
                    }, t.prototype.AddBody = function(t) {
                        var e = new Un(this, t);
                        e.nextBody = this.m_bodyList, e.prevBody = null, this.m_bodyList && (this.m_bodyList.prevBody = e), this.m_bodyList = e, ++this.m_bodyCount, e.nextController = t.m_controllerList, e.prevController = null, t.m_controllerList && (t.m_controllerList.prevController = e), t.m_controllerList = e, ++t.m_controllerCount
                    }, t.prototype.RemoveBody = function(t) {
                        if (this.m_bodyCount <= 0) throw new Error;
                        for (var e = this.m_bodyList; e && e.body !== t;) e = e.nextBody;
                        if (null === e) throw new Error;
                        e.prevBody && (e.prevBody.nextBody = e.nextBody), e.nextBody && (e.nextBody.prevBody = e.prevBody), this.m_bodyList === e && (this.m_bodyList = e.nextBody), --this.m_bodyCount, e.nextController && (e.nextController.prevController = e.prevController), e.prevController && (e.prevController.nextController = e.nextController), t.m_controllerList === e && (t.m_controllerList = e.nextController), --t.m_controllerCount
                    }, t.prototype.Clear = function() {
                        for (; this.m_bodyList;) this.RemoveBody(this.m_bodyList.body);
                        this.m_bodyCount = 0
                    }, t
                })(),
                jn = (function(t) {
                    function e() {
                        var e = null !== t && t.apply(this, arguments) || this;
                        return e.normal = new P(0, 1), e.offset = 0, e.density = 0, e.velocity = new P(0, 0), e.linearDrag = 0, e.angularDrag = 0, e.useDensity = !1, e.useWorldGravity = !0, e.gravity = new P(0, 0), e
                    }
                    return $e(e, t), e.prototype.Step = function(t) {
                        if (this.m_bodyList) {
                            this.useWorldGravity && this.gravity.Copy(this.m_bodyList.body.GetWorld().GetGravity());
                            for (var e = this.m_bodyList; e; e = e.nextBody) {
                                var i = e.body;
                                if (i.IsAwake()) {
                                    for (var r = new P, s = new P, o = 0, a = 0, l = i.GetFixtureList(); l; l = l.m_next) {
                                        var h = new P,
                                            c = l.GetShape().ComputeSubmergedArea(this.normal, this.offset, i.GetTransform(), h);
                                        o += c, r.x += c * h.x, r.y += c * h.y;
                                        var u = 0;
                                        a += c * (u = this.useDensity ? l.GetDensity() : 1), s.x += c * h.x * u, s.y += c * h.y * u
                                    }
                                    if (r.x /= o, r.y /= o, s.x /= a, s.y /= a, !(o < n)) {
                                        var _ = this.gravity.Clone().SelfNeg();
                                        _.SelfMul(this.density * o), i.ApplyForce(_, s);
                                        var f = i.GetLinearVelocityFromWorldPoint(r, new P);
                                        f.SelfSub(this.velocity), f.SelfMul(-this.linearDrag * o), i.ApplyForce(f, r), i.ApplyTorque(-i.GetInertia() / i.GetMass() * o * i.GetAngularVelocity() * this.angularDrag)
                                    }
                                }
                            }
                        }
                    }, e.prototype.Draw = function(t) {
                        var e = 100,
                            i = new P,
                            n = new P;
                        i.x = this.normal.x * this.offset + this.normal.y * e, i.y = this.normal.y * this.offset - this.normal.x * e, n.x = this.normal.x * this.offset - this.normal.y * e, n.y = this.normal.y * this.offset + this.normal.x * e;
                        var r = new G(0, 0, .8);
                        t.DrawSegment(i, n, r)
                    }, e
                })(zn),
                Wn = (function(t) {
                    function e() {
                        var e = null !== t && t.apply(this, arguments) || this;
                        return e.A = new P(0, 0), e
                    }
                    return $e(e, t), e.prototype.Step = function(t) {
                        for (var i = P.MulSV(t.dt, this.A, e.Step_s_dtA), n = this.m_bodyList; n; n = n.nextBody) {
                            var r = n.body;
                            r.IsAwake() && r.SetLinearVelocity(P.AddVV(r.GetLinearVelocity(), i, P.s_t0))
                        }
                    }, e.prototype.Draw = function(t) {}, e.Step_s_dtA = new P, e
                })(zn),
                Hn = (function(t) {
                    function e() {
                        var e = null !== t && t.apply(this, arguments) || this;
                        return e.F = new P(0, 0), e
                    }
                    return $e(e, t), e.prototype.Step = function(t) {
                        for (var e = this.m_bodyList; e; e = e.nextBody) {
                            var i = e.body;
                            i.IsAwake() && i.ApplyForce(this.F, i.GetWorldCenter())
                        }
                    }, e.prototype.Draw = function(t) {}, e
                })(zn),
                Xn = (function(t) {
                    function e() {
                        var e = null !== t && t.apply(this, arguments) || this;
                        return e.G = 1, e.invSqr = !0, e
                    }
                    return $e(e, t), e.prototype.Step = function(t) {
                        if (this.invSqr)
                            for (var i = this.m_bodyList; i; i = i.nextBody)
                                for (var r = (h = i.body).GetWorldCenter(), s = h.GetMass(), o = this.m_bodyList; o && o !== i; o = o.nextBody) {
                                    var a = (c = o.body).GetWorldCenter(),
                                        l = c.GetMass();
                                    if (!((f = (u = a.x - r.x) * u + (_ = a.y - r.y) * _) < n))(d = e.Step_s_f.Set(u, _)).SelfMul(this.G / f / S(f) * s * l), h.IsAwake() && h.ApplyForce(d, r), c.IsAwake() && c.ApplyForce(d.SelfMul(-1), a)
                                } else
                                    for (i = this.m_bodyList; i; i = i.nextBody) {
                                        var h;
                                        for (r = (h = i.body).GetWorldCenter(), s = h.GetMass(), o = this.m_bodyList; o && o !== i; o = o.nextBody) {
                                            var c, u, _, f, d;
                                            a = (c = o.body).GetWorldCenter(), l = c.GetMass();
                                            if (!((f = (u = a.x - r.x) * u + (_ = a.y - r.y) * _) < n))(d = e.Step_s_f.Set(u, _)).SelfMul(this.G / f * s * l), h.IsAwake() && h.ApplyForce(d, r), c.IsAwake() && c.ApplyForce(d.SelfMul(-1), a)
                                        }
                                    }
                    }, e.prototype.Draw = function(t) {}, e.Step_s_f = new P, e
                })(zn),
                Yn = (function(t) {
                    function e() {
                        var e = null !== t && t.apply(this, arguments) || this;
                        return e.T = new L, e.maxTimestep = 0, e
                    }
                    return $e(e, t), e.prototype.Step = function(t) {
                        var i = t.dt;
                        if (!(i <= n)) {
                            i > this.maxTimestep && this.maxTimestep > 0 && (i = this.maxTimestep);
                            for (var r = this.m_bodyList; r; r = r.nextBody) {
                                var s = r.body;
                                if (s.IsAwake()) {
                                    var o = s.GetWorldVector(L.MulMV(this.T, s.GetLocalVector(s.GetLinearVelocity(), P.s_t0), P.s_t1), e.Step_s_damping);
                                    s.SetLinearVelocity(P.AddVV(s.GetLinearVelocity(), P.MulSV(i, o, P.s_t0), P.s_t1))
                                }
                            }
                        }
                    }, e.prototype.Draw = function(t) {}, e.prototype.SetAxisAligned = function(t, e) {
                        this.T.ex.x = -t, this.T.ex.y = 0, this.T.ey.x = 0, this.T.ey.y = -e, this.maxTimestep = t > 0 || e > 0 ? 1 / x(t, e) : 0
                    }, e.Step_s_damping = new P, e
                })(zn),
                qn = (function() {
                    return function() {
                        this.vertices = [], this.count = 0, this.masses = [], this.gravity = new P(0, 0), this.damping = .1, this.k2 = .9, this.k3 = .1
                    }
                })(),
                Jn = (function() {
                    function t() {
                        this.m_count = 0, this.m_ps = [], this.m_p0s = [], this.m_vs = [], this.m_ims = [], this.m_Ls = [], this.m_as = [], this.m_gravity = new P, this.m_damping = 0, this.m_k2 = 1, this.m_k3 = .1
                    }
                    return t.prototype.GetVertexCount = function() {
                        return this.m_count
                    }, t.prototype.GetVertices = function() {
                        return this.m_ps
                    }, t.prototype.Initialize = function(t) {
                        this.m_count = t.count, this.m_ps = P.MakeArray(this.m_count), this.m_p0s = P.MakeArray(this.m_count), this.m_vs = P.MakeArray(this.m_count), this.m_ims = p(this.m_count);
                        for (var e = 0; e < this.m_count; ++e) {
                            this.m_ps[e].Copy(t.vertices[e]), this.m_p0s[e].Copy(t.vertices[e]), this.m_vs[e].SetZero();
                            var i = t.masses[e];
                            this.m_ims[e] = i > 0 ? 1 / i : 0
                        }
                        var n = this.m_count - 1,
                            r = this.m_count - 2;
                        this.m_Ls = p(n), this.m_as = p(r);
                        for (e = 0; e < n; ++e) {
                            var s = this.m_ps[e],
                                o = this.m_ps[e + 1];
                            this.m_Ls[e] = P.DistanceVV(s, o)
                        }
                        for (e = 0; e < r; ++e) {
                            s = this.m_ps[e], o = this.m_ps[e + 1];
                            var a = this.m_ps[e + 2],
                                l = P.SubVV(o, s, P.s_t0),
                                h = P.SubVV(a, o, P.s_t1),
                                c = P.CrossVV(l, h),
                                u = P.DotVV(l, h);
                            this.m_as[e] = I(c, u)
                        }
                        this.m_gravity.Copy(t.gravity), this.m_damping = t.damping, this.m_k2 = t.k2, this.m_k3 = t.k3
                    }, t.prototype.Step = function(t, e) {
                        if (0 !== t) {
                            for (var i = Math.exp(-t * this.m_damping), n = 0; n < this.m_count; ++n) this.m_p0s[n].Copy(this.m_ps[n]), this.m_ims[n] > 0 && this.m_vs[n].SelfMulAdd(t, this.m_gravity), this.m_vs[n].SelfMul(i), this.m_ps[n].SelfMulAdd(t, this.m_vs[n]);
                            for (n = 0; n < e; ++n) this.SolveC2(), this.SolveC3(), this.SolveC2();
                            var r = 1 / t;
                            for (n = 0; n < this.m_count; ++n) P.MulSV(r, P.SubVV(this.m_ps[n], this.m_p0s[n], P.s_t0), this.m_vs[n])
                        }
                    }, t.prototype.SolveC2 = function() {
                        for (var e = this.m_count - 1, i = 0; i < e; ++i) {
                            var n = this.m_ps[i],
                                r = this.m_ps[i + 1],
                                s = P.SubVV(r, n, t.s_d),
                                o = s.Normalize(),
                                a = this.m_ims[i],
                                l = this.m_ims[i + 1];
                            if (a + l !== 0) {
                                var h = a / (a + l),
                                    c = l / (a + l);
                                n.SelfMulSub(this.m_k2 * h * (this.m_Ls[i] - o), s), r.SelfMulAdd(this.m_k2 * c * (this.m_Ls[i] - o), s)
                            }
                        }
                    }, t.prototype.SetAngle = function(t) {
                        for (var e = this.m_count - 2, i = 0; i < e; ++i) this.m_as[i] = t
                    }, t.prototype.SolveC3 = function() {
                        for (var e = this.m_count - 2, i = 0; i < e; ++i) {
                            var n = this.m_ps[i],
                                r = this.m_ps[i + 1],
                                o = this.m_ps[i + 2],
                                a = this.m_ims[i],
                                l = this.m_ims[i + 1],
                                h = this.m_ims[i + 2],
                                c = P.SubVV(r, n, t.s_d1),
                                u = P.SubVV(o, r, t.s_d2),
                                _ = c.LengthSquared(),
                                f = u.LengthSquared();
                            if (_ * f != 0) {
                                var d = P.CrossVV(c, u),
                                    p = P.DotVV(c, u),
                                    m = I(d, p),
                                    y = P.MulSV(-1 / _, c.SelfSkew(), t.s_Jd1),
                                    v = P.MulSV(1 / f, u.SelfSkew(), t.s_Jd2),
                                    g = P.NegV(y, t.s_J1),
                                    x = P.SubVV(y, v, t.s_J2),
                                    b = v,
                                    A = a * P.DotVV(g, g) + l * P.DotVV(x, x) + h * P.DotVV(b, b);
                                if (0 !== A) {
                                    A = 1 / A;
                                    for (var C = m - this.m_as[i]; C > s;) C = (m -= 2 * s) - this.m_as[i];
                                    for (; C < -s;) C = (m += 2 * s) - this.m_as[i];
                                    var T = -this.m_k3 * A * C;
                                    n.SelfMulAdd(a * T, g), r.SelfMulAdd(l * T, x), o.SelfMulAdd(h * T, b)
                                }
                            }
                        }
                    }, t.prototype.Draw = function(t) {
                        for (var e = new G(.4, .5, .7), i = 0; i < this.m_count - 1; ++i) t.DrawSegment(this.m_ps[i], this.m_ps[i + 1], e)
                    }, t.s_d = new P, t.s_d1 = new P, t.s_d2 = new P, t.s_Jd1 = new P, t.s_Jd2 = new P, t.s_J1 = new P, t.s_J2 = new P, t
                })();
            t.b2Assert = function(t) {
                for (var e = [], i = 1; i < arguments.length; i++) e[i - 1] = arguments[i];
                if (!t) throw new(Error.bind.apply(Error, [void 0].concat(e)))
            }, t.b2Maybe = e, t.b2_maxFloat = i, t.b2_epsilon = n, t.b2_epsilon_sq = r, t.b2_pi = s, t.b2_maxManifoldPoints = o, t.b2_maxPolygonVertices = a, t.b2_aabbExtension = .1, t.b2_aabbMultiplier = 2, t.b2_linearSlop = l, t.b2_angularSlop = h, t.b2_polygonRadius = c, t.b2_maxSubSteps = 8, t.b2_maxTOIContacts = 32, t.b2_velocityThreshold = 1, t.b2_maxLinearCorrection = .2, t.b2_maxAngularCorrection = .13962634015955555, t.b2_maxTranslation = 2, t.b2_maxTranslationSquared = 4, t.b2_maxRotation = 1.570796326795, t.b2_maxRotationSquared = 2.4674011002726646, t.b2_baumgarte = .2, t.b2_toiBaumgarte = .75, t.b2_invalidParticleIndex = u, t.b2_maxParticleIndex = 2147483647, t.b2_particleStride = .75, t.b2_minParticleWeight = 1, t.b2_maxParticlePressure = .25, t.b2_maxParticleForce = .5, t.b2_maxTriadDistance = 2, t.b2_maxTriadDistanceSquared = 4, t.b2_minParticleSystemBufferCapacity = 256, t.b2_barrierCollisionTime = 2.5, t.b2_timeToSleep = .5, t.b2_linearSleepTolerance = .01, t.b2_angularSleepTolerance = .03490658503988889, t.b2Alloc = function(t) {
                return null
            }, t.b2Free = function(t) {}, t.b2Log = function(t) {
                for (var e = [], i = 1; i < arguments.length; i++) e[i - 1] = arguments[i]
            }, t.b2Version = _, t.b2_version = f, t.b2_branch = "master", t.b2_commit = "fbf51801d80fc389d43dc46524520e89043b6faf", t.b2ParseInt = function(t) {
                return parseInt(t, 10)
            }, t.b2ParseUInt = function(t) {
                return Math.abs(parseInt(t, 10))
            }, t.b2MakeArray = d, t.b2MakeNullArray = function(t) {
                for (var e = [], i = 0; i < t; ++i) e.push(null);
                return e
            }, t.b2MakeNumberArray = p, t.b2_pi_over_180 = m, t.b2_180_over_pi = y, t.b2_two_pi = 6.28318530718, t.b2Abs = v, t.b2Min = g, t.b2Max = x, t.b2Clamp = b, t.b2Swap = function(t, e) {
                var i = t[0];
                t[0] = e[0], e[0] = i
            }, t.b2IsValid = A, t.b2Sq = C, t.b2InvSqrt = T, t.b2Sqrt = S, t.b2Pow = w, t.b2DegToRad = function(t) {
                return t * m
            }, t.b2RadToDeg = function(t) {
                return t * y
            }, t.b2Cos = E, t.b2Sin = M, t.b2Acos = D, t.b2Asin = B, t.b2Atan2 = I, t.b2NextPowerOfTwo = function(t) {
                return t |= t >> 1 & 2147483647, t |= t >> 2 & 1073741823, t |= t >> 4 & 268435455, t |= t >> 8 & 16777215, 1 + (t |= t >> 16 & 65535)
            }, t.b2IsPowerOfTwo = function(t) {
                return t > 0 && 0 == (t & t - 1)
            }, t.b2Random = function() {
                return 2 * Math.random() - 1
            }, t.b2RandomRange = function(t, e) {
                return (e - t) * Math.random() + t
            }, t.b2Vec2 = P, t.b2Vec2_zero = R, t.b2Vec3 = O, t.b2Mat22 = L, t.b2Mat33 = F, t.b2Rot = N, t.b2Transform = V, t.b2Sweep = k, t.b2Color = G, t.b2Draw = U, t.b2Timer = z, t.b2Counter = j, t.b2GrowableStack = W, t.b2BlockAllocator = H, t.b2StackAllocator = X, t.b2ContactFeature = vt, t.b2ContactID = gt, t.b2ManifoldPoint = xt, t.b2Manifold = bt, t.b2WorldManifold = At, t.b2GetPointStates = function(e, i, n, r) {
                var s;
                for (s = 0; s < n.pointCount; ++s) {
                    var a = n.points[s].id.key;
                    e[s] = t.b2PointState.b2_removeState;
                    for (var l = 0, h = r.pointCount; l < h; ++l)
                        if (r.points[l].id.key === a) {
                            e[s] = t.b2PointState.b2_persistState;
                            break
                        }
                }
                for (; s < o; ++s) e[s] = t.b2PointState.b2_nullState;
                for (s = 0; s < r.pointCount; ++s)
                    for (a = r.points[s].id.key, i[s] = t.b2PointState.b2_addState, l = 0, h = n.pointCount; l < h; ++l)
                        if (n.points[l].id.key === a) {
                            i[s] = t.b2PointState.b2_persistState;
                            break
                        }
                for (; s < o; ++s) i[s] = t.b2PointState.b2_nullState
            }, t.b2ClipVertex = Ct, t.b2RayCastInput = Tt, t.b2RayCastOutput = St, t.b2AABB = wt, t.b2TestOverlapAABB = Et, t.b2ClipSegmentToLine = Mt, t.b2TestOverlapShape = Pt, t.b2DistanceProxy = Y, t.b2SimplexCache = q, t.b2DistanceInput = J, t.b2DistanceOutput = Z, t.b2ShapeCastInput = K, t.b2ShapeCastOutput = Q, t.b2_gjk_reset = function() {
                t.b2_gjkCalls = 0, t.b2_gjkIters = 0, t.b2_gjkMaxIters = 0
            }, t.b2SimplexVertex = $, t.b2Simplex = tt, t.b2Distance = ht, t.b2ShapeCast = function(t, e) {
                t.iterations = 0, t.lambda = 1, t.normal.SetZero(), t.point.SetZero();
                var i = e.proxyA,
                    n = e.proxyB,
                    r = x(i.m_radius, c) + x(n.m_radius, c),
                    s = e.transformA,
                    o = e.transformB,
                    a = e.translationB,
                    h = ct.Set(0, 0),
                    u = 0,
                    _ = ut;
                _.m_count = 0;
                for (var f = _.m_vertices, d = i.GetSupport(N.MulTRV(s.q, P.NegV(a, P.s_t1), P.s_t0)), p = V.MulXV(s, i.GetVertex(d), _t), m = n.GetSupport(N.MulTRV(o.q, a, P.s_t0)), y = V.MulXV(o, n.GetVertex(m), ft), g = P.SubVV(p, y, dt), b = x(c, r - c), A = .5 * l, C = 0; C < 20 && v(g.Length() - b) > A;) {
                    t.iterations += 1, d = i.GetSupport(N.MulTRV(s.q, P.NegV(g, P.s_t1), P.s_t0)), p = V.MulXV(s, i.GetVertex(d), _t), m = n.GetSupport(N.MulTRV(o.q, g, P.s_t0)), y = V.MulXV(o, n.GetVertex(m), ft);
                    var T = P.SubVV(p, y, pt);
                    g.Normalize();
                    var S = P.DotVV(g, T),
                        w = P.DotVV(g, a);
                    if (S - b > u * w) {
                        if (w <= 0) return !1;
                        if ((u = (S - b) / w) > 1) return !1;
                        h.Copy(g).SelfNeg(), _.m_count = 0
                    }
                    var E = f[_.m_count];
                    switch (E.indexA = m, E.wA.Copy(y).SelfMulAdd(u, a), E.indexB = d, E.wB.Copy(p), E.w.Copy(E.wB).SelfSub(E.wA), E.a = 1, _.m_count += 1, _.m_count) {
                        case 1:
                            break;
                        case 2:
                            _.Solve2();
                            break;
                        case 3:
                            _.Solve3()
                    }
                    if (3 === _.m_count) return !1;
                    _.GetClosestPoint(g), ++C
                }
                var M = mt,
                    D = yt;
                return _.GetWitnessPoints(M, D), g.LengthSquared() > 0 && (h.Copy(g).SelfNeg(), h.Normalize()), t.normal.Copy(h), t.lambda = u, t.iterations = C, !0
            }, t.b2Pair = Ft, t.b2BroadPhase = Nt, t.b2PairLessThan = Vt, t.b2TreeNode = Ot, t.b2DynamicTree = Lt, t.b2_toi_reset = function() {
                t.b2_toiTime = 0, t.b2_toiMaxTime = 0, t.b2_toiCalls = 0, t.b2_toiIters = 0, t.b2_toiMaxIters = 0, t.b2_toiRootIters = 0, t.b2_toiMaxRootIters = 0
            }, t.b2TOIInput = Xt, t.b2TOIOutput = Yt, t.b2SeparationFunction = qt, t.b2TimeOfImpact = re, t.b2CollideCircles = ae, t.b2CollidePolygonAndCircle = ue, t.b2CollidePolygons = Le, t.b2CollideEdgeAndCircle = We, t.b2CollideEdgeAndPolygon = Je, t.b2MassData = Ze, t.b2Shape = Ke, t.b2CircleShape = ti, t.b2PolygonShape = ei, t.b2EdgeShape = ii, t.b2ChainShape = ni, t.b2Filter = ri, t.b2FixtureDef = si, t.b2FixtureProxy = oi, t.b2Fixture = ai, t.b2BodyDef = li, t.b2Body = hi, t.b2World = Gn, t.b2DestructionListener = Ki, t.b2ContactFilter = Qi, t.b2ContactImpulse = $i, t.b2ContactListener = tn, t.b2QueryCallback = en, t.b2RayCastCallback = nn, t.b2Island = mn, t.b2Profile = sn, t.b2TimeStep = on, t.b2Position = an, t.b2Velocity = ln, t.b2SolverData = hn, t.b2ContactManager = rn, t.b2MixFriction = Vi, t.b2MixRestitution = ki, t.b2ContactEdge = Gi, t.b2Contact = Ui, t.b2ContactRegister = Ji, t.b2ContactFactory = Zi, t.g_blockSolve = !1, t.b2VelocityConstraintPoint = cn, t.b2ContactVelocityConstraint = un, t.b2ContactPositionConstraint = _n, t.b2ContactSolverDef = fn, t.b2PositionSolverManifold = dn, t.b2ContactSolver = pn, t.b2CircleContact = zi, t.b2PolygonContact = ji, t.b2PolygonAndCircleContact = Wi, t.b2EdgeAndCircleContact = Hi, t.b2EdgeAndPolygonContact = Xi, t.b2ChainAndCircleContact = Yi, t.b2ChainAndPolygonContact = qi, t.b2Jacobian = ci, t.b2JointEdge = ui, t.b2JointDef = _i, t.b2Joint = fi, t.b2AreaJointDef = mi, t.b2AreaJoint = yi, t.b2DistanceJointDef = di, t.b2DistanceJoint = pi, t.b2FrictionJointDef = vi, t.b2FrictionJoint = gi, t.b2GearJointDef = xi, t.b2GearJoint = bi, t.b2MotorJointDef = Ai, t.b2MotorJoint = Ci, t.b2MouseJointDef = Ti, t.b2MouseJoint = Si, t.b2PrismaticJointDef = wi, t.b2PrismaticJoint = Ei, t.b2_minPulleyLength = 2, t.b2PulleyJointDef = Mi, t.b2PulleyJoint = Di, t.b2RevoluteJointDef = Bi, t.b2RevoluteJoint = Ii, t.b2RopeJointDef = Pi, t.b2RopeJoint = Ri, t.b2WeldJointDef = Oi, t.b2WeldJoint = Li, t.b2WheelJointDef = Fi, t.b2WheelJoint = Ni, t.b2ControllerEdge = Un, t.b2Controller = zn, t.b2BuoyancyController = jn, t.b2ConstantAccelController = Wn, t.b2ConstantForceController = Hn, t.b2GravityController = Xn, t.b2TensorDampingController = Yn, t.b2ParticleDef = yn, t.b2CalculateParticleIterations = vn, t.b2ParticleHandle = gn, t.b2ParticleGroupDef = xn, t.b2ParticleGroup = bn, t.b2GrowableBuffer = Rn, t.b2FixtureParticleQueryCallback = On, t.b2ParticleContact = Ln, t.b2ParticleBodyContact = Fn, t.b2ParticlePair = Nn, t.b2ParticleTriad = Vn, t.b2ParticleSystemDef = kn, t.b2RopeDef = qn, t.b2Rope = Jn, Object.defineProperty(t, "__esModule", {
                value: !0
            })
        }))
    }), {}],
    422: [(function(t, e, i) {
        "use strict";
        var n = "undefined" == typeof window ? global : window;
        n.cc = n.cc || {}, n._cc = n._cc || {}, t("./predefine"), t("./polyfill/string"), t("./polyfill/misc"), t("./polyfill/array"), t("./polyfill/object"), t("./polyfill/array-buffer"), t("./polyfill/number"), t("./polyfill/typescript"), t("./cocos2d/core/predefine"), t("./cocos2d"), t("./extends"), e.exports = n.cc
    }), {
        "./cocos2d": 338,
        "./cocos2d/core/predefine": 223,
        "./extends": 399,
        "./package": void 0,
        "./polyfill/array": 424,
        "./polyfill/array-buffer": 423,
        "./polyfill/misc": 425,
        "./polyfill/number": 426,
        "./polyfill/object": 427,
        "./polyfill/string": 428,
        "./polyfill/typescript": 429,
        "./predefine": 430
    }],
    423: [(function(t, e, i) {
        "use strict";
        if (!ArrayBuffer.isView) {
            var n = Object.getPrototypeOf(Int8Array);
            ArrayBuffer.isView = "function" == typeof n ? function(t) {
                return t instanceof n
            } : function(t) {
                if ("object" != typeof t) return !1;
                var e = t.constructor;
                return e === Float32Array || e === Uint8Array || e === Uint32Array || e === Int8Array
            }
        }
    }), {}],
    424: [(function(t, e, i) {
        "use strict";
        Array.isArray || (Array.isArray = function(t) {
            return "[object Array]" === Object.prototype.toString.call(t)
        }), Array.prototype.find || (Array.prototype.find = function(t) {
            for (var e = this.length, i = 0; i < e; i++) {
                var n = this[i];
                if (t.call(this, n, i, this)) return n
            }
        }), Array.prototype.includes || (Array.prototype.includes = function(t) {
            return -1 !== this.indexOf(t)
        })
    }), {}],
    425: [(function(t, e, i) {
        "use strict";
        if (Math.sign || (Math.sign = function(t) {
                return 0 === (t = +t) || isNaN(t) ? t : t > 0 ? 1 : -1
            }), Math.log2 || (Math.log2 = function(t) {
                return Math.log(t) * Math.LOG2E
            }), Number.isInteger || (Number.isInteger = function(t) {
                return "number" == typeof t && isFinite(t) && Math.floor(t) === t
            }), !console.time) {
            var n = window.performance || Date,
                r = Object.create(null);
            console.time = function(t) {
                r[t] = n.now()
            }, console.timeEnd = function(t) {
                var e = r[t],
                    i = n.now() - e;
                console.log(t + ": " + i + "ms")
            }
        }
    }), {}],
    426: [(function(t, e, i) {
        "use strict";
        Number.parseFloat = Number.parseFloat || parseFloat, Number.parseInt = Number.parseInt || parseInt
    }), {}],
    427: [(function(t, e, i) {
        "use strict";
        Object.assign || (Object.assign = function(t, e) {
            return cc.js.mixin(t, e)
        }), Object.getOwnPropertyDescriptors || (Object.getOwnPropertyDescriptors = function(t) {
            var e = {},
                i = Object.getOwnPropertyNames(t);
            Object.getOwnPropertySymbols && (i = i.concat(Object.getOwnPropertySymbols(t)));
            for (var n = 0; n < i.length; ++n) {
                var r = i[n];
                e[r] = Object.getOwnPropertyDescriptor(t, r)
            }
            return e
        })
    }), {}],
    428: [(function(t, e, i) {
        "use strict";
        String.prototype.startsWith || (String.prototype.startsWith = function(t, e) {
            return e = e || 0, this.lastIndexOf(t, e) === e
        }), String.prototype.endsWith || (String.prototype.endsWith = function(t, e) {
            (void 0 === e || e > this.length) && (e = this.length), e -= t.length;
            var i = this.indexOf(t, e);
            return -1 !== i && i === e
        }), String.prototype.trimLeft || (String.prototype.trimLeft = function() {
            return this.replace(/^\s+/, "")
        })
    }), {}],
    429: [(function(t, e, i) {
        "use strict";
        var n = Object.setPrototypeOf || {
            __proto__: []
        }
        instanceof Array && function(t, e) {
            t.__proto__ = e
        } || function(t, e) {
            for (var i in e) e.hasOwnProperty(i) && (t[i] = e[i])
        };
        window.__extends = function(t, e) {
            function i() {
                this.constructor = t
            }
            n(t, e), t.prototype = null === e ? Object.create(e) : (i.prototype = e.prototype, new i)
        }, window.__assign = Object.assign || function(t) {
            for (var e, i = 1, n = arguments.length; i < n; i++)
                for (var r in e = arguments[i]) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r]);
            return t
        }, window.__rest = function(t, e) {
            var i = {};
            for (var n in t) Object.prototype.hasOwnProperty.call(t, n) && e.indexOf(n) < 0 && (i[n] = t[n]);
            if (null != t && "function" == typeof Object.getOwnPropertySymbols) {
                var r = 0;
                for (n = Object.getOwnPropertySymbols(t); r < n.length; r++) e.indexOf(n[r]) < 0 && (i[n[r]] = t[n[r]])
            }
            return i
        }, window.__decorate = function(t, e, i, n) {
            var r, s = arguments.length,
                o = s < 3 ? e : null === n ? n = Object.getOwnPropertyDescriptor(e, i) : n;
            if ("object" == typeof Reflect && "function" == typeof Reflect.decorate) o = Reflect.decorate(t, e, i, n);
            else
                for (var a = t.length - 1; a >= 0; a--)(r = t[a]) && (o = (s < 3 ? r(o) : s > 3 ? r(e, i, o) : r(e, i)) || o);
            return s > 3 && o && Object.defineProperty(e, i, o), o
        }, window.__param = function(t, e) {
            return function(i, n) {
                e(i, n, t)
            }
        }, window.__metadata = function(t, e) {
            if ("object" == typeof Reflect && "function" == typeof Reflect.metadata) return Reflect.metadata(t, e)
        }, window.__awaiter = function(t, e, i, n) {
            return new(i || (i = Promise))(function(r, s) {
                function o(t) {
                    try {
                        l(n.next(t))
                    } catch (t) {
                        s(t)
                    }
                }

                function a(t) {
                    try {
                        l(n.throw(t))
                    } catch (t) {
                        s(t)
                    }
                }

                function l(t) {
                    t.done ? r(t.value) : new i(function(e) {
                        e(t.value)
                    }).then(o, a)
                }
                l((n = n.apply(t, e || [])).next())
            })
        }, window.__generator = function(t, e) {
            var i, n, r, s, o = {
                label: 0,
                sent: function() {
                    if (1 & r[0]) throw r[1];
                    return r[1]
                },
                trys: [],
                ops: []
            };
            return s = {
                next: a(0),
                throw: a(1),
                return: a(2)
            }, "function" == typeof Symbol && (s[Symbol.iterator] = function() {
                return this
            }), s;

            function a(t) {
                return function(e) {
                    return l([t, e])
                }
            }

            function l(s) {
                if (i) throw new TypeError("Generator is already executing.");
                for (; o;) try {
                    if (i = 1, n && (r = 2 & s[0] ? n.return : s[0] ? n.throw || ((r = n.return) && r.call(n), 0) : n.next) && !(r = r.call(n, s[1])).done) return r;
                    switch (n = 0, r && (s = [2 & s[0], r.value]), s[0]) {
                        case 0:
                        case 1:
                            r = s;
                            break;
                        case 4:
                            return o.label++, {
                                value: s[1],
                                done: !1
                            };
                        case 5:
                            o.label++, n = s[1], s = [0];
                            continue;
                        case 7:
                            s = o.ops.pop(), o.trys.pop();
                            continue;
                        default:
                            if (!(r = (r = o.trys).length > 0 && r[r.length - 1]) && (6 === s[0] || 2 === s[0])) {
                                o = 0;
                                continue
                            }
                            if (3 === s[0] && (!r || s[1] > r[0] && s[1] < r[3])) {
                                o.label = s[1];
                                break
                            }
                            if (6 === s[0] && o.label < r[1]) {
                                o.label = r[1], r = s;
                                break
                            }
                            if (r && o.label < r[2]) {
                                o.label = r[2], o.ops.push(s);
                                break
                            }
                            r[2] && o.ops.pop(), o.trys.pop();
                            continue
                    }
                    s = e.call(t, o)
                } catch (t) {
                    s = [6, t], n = 0
                } finally {
                    i = r = 0
                }
                if (5 & s[0]) throw s[1];
                return {
                    value: s[0] ? s[1] : void 0,
                    done: !0
                }
            }
        }, window.__exportStar = function(t, e) {
            for (var i in t) e.hasOwnProperty(i) || (e[i] = t[i])
        }, window.__values = function(t) {
            var e = "function" == typeof Symbol && t[Symbol.iterator],
                i = 0;
            return e ? e.call(t) : {
                next: function() {
                    return t && i >= t.length && (t = void 0), {
                        value: t && t[i++],
                        done: !t
                    }
                }
            }
        }, window.__read = function(t, e) {
            var i = "function" == typeof Symbol && t[Symbol.iterator];
            if (!i) return t;
            var n, r, s = i.call(t),
                o = [];
            try {
                for (;
                    (void 0 === e || e-- > 0) && !(n = s.next()).done;) o.push(n.value)
            } catch (t) {
                r = {
                    error: t
                }
            } finally {
                try {
                    n && !n.done && (i = s.return) && i.call(s)
                } finally {
                    if (r) throw r.error
                }
            }
            return o
        }, window.__spread = function() {
            for (var t = [], e = 0; e < arguments.length; e++) t = t.concat(__read(arguments[e]));
            return t
        }, window.__await = function(t) {
            return this instanceof __await ? (this.v = t, this) : new __await(t)
        }, window.__asyncGenerator = function(t, e, i) {
            if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
            var n, r = i.apply(t, e || []),
                s = [];
            return n = {}, o("next"), o("throw"), o("return"), n[Symbol.asyncIterator] = function() {
                return this
            }, n;

            function o(t) {
                r[t] && (n[t] = function(e) {
                    return new Promise(function(i, n) {
                        s.push([t, e, i, n]) > 1 || a(t, e)
                    })
                })
            }

            function a(t, e) {
                try {
                    l(r[t](e))
                } catch (t) {
                    u(s[0][3], t)
                }
            }

            function l(t) {
                t.value instanceof __await ? Promise.resolve(t.value.v).then(h, c) : u(s[0][2], t)
            }

            function h(t) {
                a("next", t)
            }

            function c(t) {
                a("throw", t)
            }

            function u(t, e) {
                t(e), s.shift(), s.length && a(s[0][0], s[0][1])
            }
        }, window.__asyncDelegator = function(t) {
            var e, i;
            return e = {}, n("next"), n("throw", (function(t) {
                throw t
            })), n("return"), e[Symbol.iterator] = function() {
                return this
            }, e;

            function n(n, r) {
                e[n] = t[n] ? function(e) {
                    return (i = !i) ? {
                        value: __await(t[n](e)),
                        done: "return" === n
                    } : r ? r(e) : e
                } : r
            }
        }, window.__asyncValues = function(t) {
            if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
            var e, i = t[Symbol.asyncIterator];
            return i ? i.call(t) : (t = "function" == typeof __values ? __values(t) : t[Symbol.iterator](), e = {}, n("next"), n("throw"), n("return"), e[Symbol.asyncIterator] = function() {
                return this
            }, e);

            function n(i) {
                e[i] = t[i] && function(e) {
                    return new Promise(function(n, s) {
                        r(n, s, (e = t[i](e)).done, e.value)
                    })
                }
            }

            function r(t, e, i, n) {
                Promise.resolve(n).then((function(e) {
                    t({
                        value: e,
                        done: i
                    })
                }), e)
            }
        }, window.__makeTemplateObject = function(t, e) {
            return Object.defineProperty ? Object.defineProperty(t, "raw", {
                value: e
            }) : t.raw = e, t
        }, window.__importStar = function(t) {
            if (t && t.__esModule) return t;
            var e = {};
            if (null != t)
                for (var i in t) Object.hasOwnProperty.call(t, i) && (e[i] = t[i]);
            return e.default = t, e
        }, window.__importDefault = function(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }
    }), {}],
    430: [(function(t, e, i) {
        "use strict";
        var n = "undefined" == typeof window ? global : window;

        function r(t, e) {
            void 0 === n[t] && (n[t] = e)
        }

        function s(t, e) {
            void 0 === n[t] && Object.defineProperty(n, t, {
                get: function() {
                    var i = void 0;
                    return "CC_WECHATGAMESUB" === t ? i = "cc.sys.platform === cc.sys.WECHAT_GAME_SUB" : "CC_WECHATGAME" === t ? i = "cc.sys.platform === cc.sys.WECHAT_GAME" : "CC_QQPLAY" === t && (i = "cc.sys.platform === cc.sys.QQ_PLAY"), cc.warnID(1400, t, i), e
                }
            })
        }

        function o(t) {
            return "object" == typeof n[t]
        }
        r("CC_BUILD", !1), n.CC_BUILD = !0, n.CC_DEV = !1, n.CC_DEBUG = !1, n.CC_JSB = !1, n.CC_NATIVERENDERER = !1, n.CC_SUPPORT_JIT = !0, r("CC_TEST", o("tap") || o("QUnit")), r("CC_EDITOR", o("Editor") && o("process") && "electron" in process.versions), r("CC_PREVIEW", !0), r("CC_RUNTIME", "function" == typeof loadRuntime), r("CC_JSB", o("jsb") && !0);
        var a = !(!o("wx") || !wx.getSharedCanvas),
            l = !(!o("wx") || !wx.getSystemInfoSync && !wx.getSharedCanvas),
            h = o("bk");
        s("CC_WECHATGAMESUB", a), s("CC_WECHATGAME", l), s("CC_QQPLAY", h);
        n.CocosEngine = cc.ENGINE_VERSION = "2.2.2"
    }), {}]
}, {}, [422]);