(function outer(modules, cache, entry) {
  function newRequire(name, jumped) {
    var module = cache[name];
    if (!module) {
      var moduleData = modules[name];
      if (!moduleData) return;
      var exports = {};
      module = cache[name] = {
        exports: exports
      };
      moduleData[0]((function(x) {
        return newRequire(moduleData[1][x] || x);
      }), module, exports);
    }
    return module.exports;
  }
  for (var i = 0; i < entry.length; i++) newRequire(entry[i]);
  return newRequire;
})({
  1: [ (function(require, module, exports) {
    module.exports = {
      1001: "cocos2d: removeAction: Target not found",
      1002: "cc.ActionManager.removeActionByTag(): an invalid tag",
      1003: "cc.ActionManager.removeActionByTag(): target must be non-null",
      1004: "cc.ActionManager.getActionByTag(): an invalid tag",
      1005: "cocos2d : getActionByTag(tag = %s): Action not found",
      1006: "[Action step]. override me",
      1007: "[Action update]. override me",
      1008: "cocos2d: FiniteTimeAction#reverse: Implement me",
      1009: "cc.EaseElastic.reverse(): it should be overridden in subclass.",
      1010: "cc.IntervalAction: reverse not implemented.",
      1011: "cc.ActionInterval.setAmplitudeRate(): it should be overridden in subclass.",
      1012: "cc.ActionInterval.getAmplitudeRate(): it should be overridden in subclass.",
      1013: "The speed parameter error",
      1014: "The repeat parameter error",
      1015: "parameters should not be ending with null in Javascript",
      1016: "cc.RotateTo.reverse(): it should be overridden in subclass.",
      1019: "Failed to construct, Sequence construction needs two or more actions.",
      1020: "Failed to construct, Spawn construction needs two or more actions.",
      1021: "cc.Speed.initWithAction(): action must be non nil",
      1022: "cc.Follow.initWithAction(): followedNode must be non nil",
      1023: "cc.ActionEase.initWithAction(): action must be non nil",
      1024: "Invalid configuration. It must at least have one control point",
      1025: "cc.Sequence.initWithTwoActions(): arguments must all be non nil",
      1026: "cc.RepeatForever.initWithAction(): action must be non null",
      1027: "cc.Spawn.initWithTwoActions(): arguments must all be non null",
      1028: "cc.ReverseTime.initWithAction(): action must be non null",
      1029: "cc.ReverseTime.initWithAction(): the action was already passed in.",
      1030: "cc.Animate.initWithAnimation(): animation must be non-NULL",
      1031: "Illegal parameter get passed in cc.tween: %s.",
      1100: "Expected 'data' dict, but not found. Config file: %s",
      1101: "Please load the resource first : %s",
      1200: "cocos2d: Director: Error in gettimeofday",
      1201: "cocos2d: Director: unrecognized projection",
      1203: "cocos2d: Director: Error in gettimeofday",
      1204: "running scene should not null",
      1205: "the scene should not null",
      1206: "loadScene: The scene index to load (%s) is out of range.",
      1207: "loadScene: Unknown name type to load: '%s'",
      1208: "loadScene: Failed to load scene '%s' because '%s' is already being loaded.",
      1209: "loadScene: Can not load the scene '%s' because it was not in the build settings before playing.",
      1210: "Failed to preload '%s', %s",
      1211: "loadScene: The scene index to load (%s) is out of range.",
      1212: "loadScene: Unknown name type to load: '%s'",
      1213: "loadScene: Failed to load scene '%s' because '%s' is already loading",
      1214: "loadScene: Can not load the scene '%s' because it was not in the build settings before playing.",
      1215: "Failed to preload '%s', %s",
      1216: "Director.runSceneImmediate: scene is not valid",
      1300: "element type is wrong!",
      1400: "'%s' is deprecated, please use '%s' instead.",
      1404: "cc.spriteFrameCache is removed, please use cc.loader to load and cache sprite frames of atlas format.",
      1405: "The '%s' has been removed, please use '%s' instead.",
      1406: "'%s.%s' is removed",
      1408: "'%s' is not support in the '%s', please use '%s' instead.",
      1502: "cc.scheduler.scheduleCallbackForTarget(): target should be non-null.",
      1503: "cc.Scheduler.pauseTarget():target should be non-null",
      1504: "cc.Scheduler.resumeTarget():target should be non-null",
      1505: "cc.Scheduler.isTargetPaused():target should be non-null",
      1506: "warning: you CANNOT change update priority in scheduled function",
      1507: 'CCScheduler#scheduleSelector. Selector already scheduled. Updating interval from: %s to %s"',
      1508: "Argument callback must not be empty",
      1509: "Argument target must be non-nullptr",
      1510: "cc.Scheduler: Illegal target which doesn't have uuid or instanceId.",
      1511: "cc.Scheduler: pause state of the scheduled task doesn't match the element pause state in Scheduler, the given paused state will be ignored.",
      1513: "cc.Scheduler: scheduler stopped using `__instanceId` as id since v2.0, you should do scheduler.enableForTarget(target) before all scheduler API usage on target",
      1605: "child already added. It can't be added again",
      1606: "child must be non-null",
      1610: "cocos2d: removeChildByTag(tag = %s): child not found!",
      1612: "cc.Node.stopActionBy(): argument tag an invalid tag",
      1613: "cc.Node.getActionByTag(): argument tag is an invalid tag",
      1617: "child must be non-null",
      1618: "cc.Node.runAction(): action must be non-null",
      1619: "callback function must be non-null",
      1620: "interval must be positive",
      1623: "Set '%s' to normal node (not persist root node).",
      1624: "Replacing with the same sgNode",
      1625: "The replacement sgNode should not contain any child.",
      1626: "Should not set alpha via 'color', set 'opacity' please.",
      1627: "Not support for asynchronous creating node in SG",
      1632: "Node name can not include '/'.",
      1633: "Internal error, should not remove unknown node from parent.",
      1634: "addChild: The child to add must be instance of cc.Node, not %s.",
      1635: "reorderChild: this child is not in children list.",
      1636: "Node's zIndex value can't be greater than cc.macro.MAX_ZINDEX, setting to the maximum value",
      1637: "Node's zIndex value can't be smaller than cc.macro.MIN_ZINDEX, setting to the minimum value",
      1638: "Private node's zIndex can't be set, it will keep cc.macro.MIN_ZINDEX as its value",
      1639: "cc.Action is deprecated, please use cc.TweenAction instead",
      1800: "cc._EventListenerKeyboard.checkAvailable(): Invalid EventListenerKeyboard!",
      1801: "cc._EventListenerTouchOneByOne.checkAvailable(): Invalid EventListenerTouchOneByOne!",
      1802: "cc._EventListenerTouchAllAtOnce.checkAvailable(): Invalid EventListenerTouchAllAtOnce!",
      1803: "cc._EventListenerAcceleration.checkAvailable(): _onAccelerationEvent must be non-nil",
      1900: "Invalid parameter.",
      2000: "Don't call this method if the event is for touch.",
      2200: "Design resolution not valid",
      2201: "should set resolutionPolicy",
      2300: "The touches is more than MAX_TOUCHES, nUnusedIndex = %s",
      2400: "WebGL error %s",
      2602: "cc.Sprite.setDisplayFrameWithAnimationName(): Frame not found",
      2603: "cc.Sprite.setDisplayFrameWithAnimationName(): Invalid frame index",
      2606: "cc.Sprite.initWithSpriteFrame(): spriteFrame should be non-null",
      2607: "cc.Sprite.initWithSpriteFrameName(): spriteFrameName should be non-null",
      2608: "%s is null, please check.",
      2609: "cc.Sprite.initWithFile(): filename should be non-null",
      2610: "cc.Sprite.setDisplayFrameWithAnimationName(): animationName must be non-null",
      2614: "cc.Sprite.addChild(): child should be non-null",
      2616: "cc.SpriteBatchNode.updateQuadFromSprite(): cc.SpriteBatchNode only supports cc.Sprites as children",
      2617: "cc.SpriteBatchNode.insertQuadFromSprite(): cc.SpriteBatchNode only supports cc.Sprites as children",
      2618: "cc.SpriteBatchNode.addChild(): cc.SpriteBatchNode only supports cc.Sprites as children",
      2619: "cc.SpriteBatchNode.addChild(): cc.Sprite is not using the same texture",
      2623: "cc.SpriteBatchNode.updateQuadFromSprite(): sprite should be non-null",
      2625: "too many tiles, only 16384 tiles will be show",
      2626: "Unrecognized fill type in bar fill",
      2627: "Can not generate quad",
      2628: "%s does not exist",
      2712: "Invalid spriteFrameName",
      3005: "cocos2d: '%s' id=%s %s x %s",
      3006: "cocos2d: '%s' id= HTMLCanvasElement %s x %s",
      3007: "cocos2d: TextureCache dumpDebugInfo: %s textures, HTMLCanvasElement for %s KB (%s MB)",
      3103: "cc.Texture.addImage(): path should be non-null",
      3112: "cc.Texture.addImage(): path should be non-null",
      3113: "NSInternalInconsistencyException",
      3116: "WebGLRenderingContext.CLAMP_TO_EDGE should be used in NPOT textures",
      3117: "Mimpap texture only works in POT textures",
      3119: "Lazy init texture with image element failed due to image loading failure: %s",
      3120: "Loading texture from '%s' with unsupported type: '%s'. Add '%s' into 'cc.macro.SUPPORT_TEXTURE_FORMATS' please.",
      3300: "Rect width exceeds maximum margin: %s",
      3400: "Rect height exceeds maximum margin: %s",
      3401: "Set texture with a url of image is not supported anymore. Please use cc.assetManager.loadRemote to load a texture first.",
      3500: "0 priority is forbidden for fixed priority since it's used for scene graph based priority.",
      3501: "Invalid listener type!",
      3502: "Can't set fixed priority with scene graph based listener.",
      3503: "Invalid parameters.",
      3504: "listener must be a cc.EventListener object when adding a fixed priority listener",
      3505: "The listener has been registered, please don't register it again.",
      3506: "Unsupported listener target.",
      3507: "Invalid scene graph priority!",
      3508: "If program goes here, there should be event in dispatch.",
      3509: "_inDispatch should be 1 here.",
      3510: "%s's scene graph node not contains in the parent's children",
      3511: "event is undefined",
      3600: "cc.Class will automatically call super constructor of %s, you should not call it manually.",
      3601: "The editor property 'playOnFocus' should be used with 'executeInEditMode' in class '%s'",
      3602: "Unknown editor property '%s' in class '%s'.",
      3603: "Use 'cc.Float' or 'cc.Integer' instead of 'cc.Number' please.",
      3604: "Can only indicate one type attribute for %s.",
      3605: "The default value of %s is not instance of %s.",
      3606: "No needs to indicate the '%s' attribute for %s, which its default value is type of %s.",
      3607: "The default value of %s must be an empty string.",
      3608: "The type of %s must be cc.String, not String.",
      3609: "The type of %s must be cc.Boolean, not Boolean.",
      3610: "The type of %s must be cc.Float or cc.Integer, not Number.",
      3611: "Can not indicate the '%s' attribute for %s, which its default value is type of %s.",
      3612: "%s Just set the default value to 'new %s()' and it will be handled properly.",
      3613: "'No need to use 'serializable: false' or 'editorOnly: true' for the getter of '%s.%s', every getter is actually non-serialized.",
      3614: "Should not define constructor for cc.Component %s.",
      3615: "Each script can have at most one Component.",
      3616: "Should not specify class name %s for Component which defines in project.",
      3617: "Can not instantiate CCClass '%s' with arguments.",
      3618: "ctor of '%s' can not be another CCClass",
      3619: "ctor of '%s' must be function type",
      3620: "this._super declared in '%s.%s' but no super method defined",
      3621: "Unknown type of %s.%s, maybe you want is '%s'.",
      3622: "Unknown type of %s.%s, property should be defined in 'properties' or 'ctor'",
      3623: "Can not use 'editor' attribute, '%s' not inherits from Components.",
      3624: "'%s' overrided '%s' but '%s' is defined as 'false' so the super method will not be called. You can set '%s' to null to disable this warning.",
      3625: "[isChildClassOf] superclass should be function type, not",
      3626: "Can't remove '%s' because '%s' depends on it.",
      3627: "Should not add renderer component (%s) to a Canvas node.",
      3628: "Should not add %s to a node which size is already used by its other component.",
      3633: "Properties function of '%s' should return an object!",
      3634: "Disallow to use '.' in property name",
      3635: "Default array must be empty, set default value of %s.%s to [], and initialize in 'onLoad' or 'ctor' please. (just like 'this.%s = [...];')",
      3636: "Do not set default value to non-empty object, unless the object defines its own 'clone' function. Set default value of %s.%s to null or {}, and initialize in 'onLoad' or 'ctor' please. (just like 'this.%s = {foo: bar};')",
      3637: "Can not declare %s.%s, it is already defined in the prototype of %s",
      3638: "'%s': the getter of '%s' is already defined!",
      3639: "Can not apply the specified attribute to the getter of '%s.%s', attribute index: %s",
      3640: "'%s': the setter of '%s' is already defined!",
      3641: "Can not construct %s because it contains object property.",
      3642: "Cannot define %s.%s because static member name can not be '%s'.",
      3643: "Can not define a member called 'constructor' in the class '%s', please use 'ctor' instead.",
      3644: "Please define 'type' parameter of %s.%s as the actual constructor.",
      3645: "Please define 'type' parameter of %s.%s as the constructor of %s.",
      3646: "Unknown 'type' parameter of %s.%s\uff1a%s",
      3647: "The length of range array must be equal or greater than 2",
      3648: "Can not declare %s.%s method, it is already defined in the properties of %s.",
      3649: "CCClass %s have conflict between its ctor and __ctor__.",
      3651: 'Can not call `_super` or `prototype.ctor` in ES6 Classes "%s", use `super` instead please.',
      3652: "Failed to `new %s()` under the hood, %s\nIt is used for getting default values declared in TypeScript in the first place.\nPlease ensure the constructor can be called during the script's initialization.",
      3653: 'Please do not specifiy "default" attribute in decorator of "%s" property in "%s" class.  \nDefault value must be initialized at their declaration:\n \n// Before:\n@property({\n  type: cc.Integer\n  default: 0  // <--\n})\nmyProp;\n// After:\n@property({\n  type: cc.Integer\n})\nmyProp = 0;   // <--',
      3654: 'Please specifiy a default value for "%s.%s" at its declaration:\n \n// Before:\n@property(...)\nmyProp;\n// After:\n@property(...)\nmyProp = 0;',
      3655: 'Can not specifiy "get" or "set"  attribute in decorator for "%s" property in "%s" class.  \nPlease use:\n \n@property(...)\nget %s () {\n    ...\n}\n@property\nset %s (value) {\n    ...\n}',
      3700: "internal error: _prefab is undefined",
      3701: "Failed to load prefab asset for node '%s'",
      3800: "The target can not be made persist because it's not a cc.Node or it doesn't have _id property.",
      3801: "The node can not be made persist because it's not under root node.",
      3802: "The node can not be made persist because it's not in current scene.",
      3803: "The target can not be made persist because it's not a cc.Node or it doesn't have _id property.",
      3804: "getComponent: Type must be non-nil",
      3805: "Can't add component '%s' because %s already contains the same component.",
      3806: "Can't add component '%s' to %s because it conflicts with the existing '%s' derived component.",
      3807: "addComponent: Failed to get class '%s'",
      3808: "addComponent: Should not add component ('%s') when the scripts are still loading.",
      3809: "addComponent: The component to add must be a constructor",
      3810: "addComponent: The component to add must be child class of cc.Component",
      3811: "_addComponentAt: The component to add must be a constructor",
      3812: "_addComponentAt: Index out of range",
      3813: "removeComponent: Component must be non-nil",
      3814: "Argument must be non-nil",
      3815: "Component not owned by this entity",
      3816: "Node '%s' is already activating",
      3817: "Sorry, the component of '%s' which with an index of %s is corrupted! It has been removed.",
      3818: "Failed to read or parse project.json",
      3819: "Warning: target element is not a DIV or CANVAS",
      3820: "The renderer doesn't support the renderMode %s",
      3821: "Cannot change hierarchy while activating or deactivating the parent.",
      3900: "Invalid clip to add",
      3901: "Invalid clip to remove",
      3902: "clip is defaultClip, set force to true to force remove clip and animation state",
      3903: "animation state is playing, set force to true to force stop and remove clip and animation state",
      3904: "motion path of target [%s] in prop [%s] frame [%s] is not valid",
      3905: "sprite frames must be an Array.",
      3906: "Can't find easing type [%s]",
      3907: "animator not added or already removed",
      3912: "already-playing",
      4003: "Label font size can't be shirnked less than 0!",
      4004: "force notify all fonts loaded!",
      4011: "Property spriteFrame of Font '%s' is invalid. Using system font instead.",
      4012: "The texture of Font '%s' must be already loaded on JSB. Using system font instead.",
      4013: "Sorry, lineHeight of system font not supported on JSB.",
      4200: "MaskType: IMAGE_STENCIL only support WebGL mode.",
      4201: "The alphaThreshold invalid in Canvas Mode.",
      4202: "The inverted invalid in Canvas Mode.",
      4300: "can not found the %s page.",
      4400: "Invalid RichText img tag! The sprite frame name can't be found in the ImageAtlas!",
      4600: "Script attached to '%s' is missing or invalid.",
      4700: "The dom control is not created!",
      4800: "unknown asset type",
      4901: "loadRes: should not specify the extname in %s %s",
      4902: "No need to release non-cached asset.",
      4903: "Can not get class '%s'",
      4914: "Resources url '%s' does not exist.",
      4915: "Pack indices and data do not match in size",
      4916: "Failed to download package for %s",
      4921: "Invalid pipe or invalid index provided!",
      4922: "The pipe to be inserted is already in the pipeline!",
      4923: "Uuid Loader: Parse asset [ %s ] failed : %s",
      4924: "JSON Loader: Input item doesn't contain string content",
      4925: "Uuid Loader: Deserialize asset [ %s ] failed : %s",
      4926: "Audio Downloader: no web audio context.",
      4927: "Audio Downloader: audio not supported on this browser!",
      4928: "Load %s failed!",
      4929: "Load Webp ( %s ) failed",
      4930: "Load image ( %s ) failed",
      4932: 'Since v1.10, for any atlas ("%s") in the "resources" directory, it is not possible to find the contained SpriteFrames via `loadRes`, `getRes` or `releaseRes`. Load the SpriteAtlas first and then use `spriteAtlas.getSpriteFrame(name)` instead please.',
      4933: "Download Font [ %s ] failed, using Arial or system default font instead",
      5000: "object already destroyed",
      5001: "object not yet destroyed",
      5100: "Not a plist file!",
      5200: "Warning: localStorage isn't enabled. Please confirm browser cookie or privacy option",
      5201: "browser don't support web audio",
      5202: "This feature supports WebGL render mode only.",
      5300: "Type of target to deserialize not matched with data: target is %s, data is %s",
      5301: "Can not find script '%s'",
      5302: "Can not find class '%s'",
      5402: "cc.js.addon called on non-object:",
      5403: "cc.js.mixin: arguments must be type object:",
      5404: "The base class to extend from must be non-nil",
      5405: "The class to extend must be non-nil",
      5406: "Class should be extended before assigning any prototype members.",
      5500: "'notify' can not be used in 'get/set' !",
      5501: "'notify' must be used with 'default' !",
      5507: "The 'default' attribute of '%s.%s' must be an array",
      5508: "Invalid type of %s.%s",
      5510: "The 'type' attribute of '%s.%s' can not be 'Number', use cc.Float or cc.Integer instead please.",
      5511: "The 'type' attribute of '%s.%s' is undefined when loading script",
      5512: "Can not serialize '%s.%s' because the specified type is anonymous, please provide a class name or set the 'serializable' attribute of '%s.%s' to 'false'.",
      5513: "The 'default' value of '%s.%s' should not be used with a 'get' function.",
      5514: "The 'default' value of '%s.%s' should not be used with a 'set' function.",
      5515: "The 'default' value of '%s.%s' can not be an constructor. Set default to null please.",
      5516: "Property '%s.%s' must define at least one of 'default', 'get' or 'set'.",
      5517: "'%s.%s' hides inherited property '%s.%s'. To make the current property override that implementation, add the `override: true` attribute please.",
      5601: "Can not get current scene.",
      5602: "Scene is destroyed",
      5603: "reference node is destroyed",
      5700: "no %s or %s on %s",
      5800: "%s.lerp not yet implemented.",
      5801: "%s.clone not yet implemented.",
      5802: "%s.equals not yet implemented.",
      5900: "MotionStreak only support WebGL mode.",
      5901: "cc.MotionStreak.getOpacity has not been supported.",
      5902: "cc.MotionStreak.setOpacity has not been supported.",
      6000: "Custom should not be false if file is not specified.",
      6001: "The new %s must not be NaN",
      6017: "Incomplete or corrupt PNG file",
      6018: "Invalid filter algorithm: %s",
      6019: "Invalid byte order value.",
      6020: "You forgot your towel!",
      6021: "Unknown Field Tag: %s",
      6022: "Too many bits requested",
      6023: "No bits requested",
      6024: "Cannot recover from missing StripByteCounts",
      6025: "Cannot handle sub-byte bits per sample",
      6026: "Cannot handle sub-byte bits per pixel",
      6027: "Palette image missing color map",
      6028: "Unknown Photometric Interpretation: %s",
      6029: "Unkown error",
      6030: "cc.ParticleSystem: error decoding or ungzipping textureImageData",
      6031: "cc.ParticleSystem: unknown image format with Data",
      6032: "cc.ParticleSystem.initWithDictionary() : error loading the texture",
      6400: "asset.url is not usable in core process",
      6402: "AssetLibrary has already been initialized!",
      6500: "Widget target must be one of the parent nodes of it",
      6600: "collider not added or already removed",
      6601: "Can't find testFunc for (%s, $s).",
      6700: "Can't init canvas '%s' because it conflicts with the existing '%s', the scene should only have one active canvas at the same time.",
      6800: "Callback of event must be non-nil",
      6801: "The message must be provided",
      6900: "The thing you want to instantiate must be an object",
      6901: "The thing you want to instantiate is nil",
      6902: "The thing you want to instantiate is destroyed",
      6903: "The instantiate method for given asset do not implemented",
      6904: "Can not instantiate array",
      6905: "Can not instantiate DOM element",
      7100: "%s already defined in Enum.",
      7101: "Sorry, 'cc.Enum' not available on this platform, please report this error here: https://github.com/cocos-creator/engine/issues/new",
      7200: "Method 'initWithTMXFile' is no effect now, please set property 'tmxAsset' instead.",
      7201: "Method 'initWithXML' is no effect now, please set property 'tmxAsset' instead.",
      7202: "Add component TiledLayer into node failed.",
      7203: "Property 'mapLoaded' is unused now. Please write the logic to the callback 'start'.",
      7210: "TMX Hexa zOrder not supported",
      7211: "TMX invalid value",
      7215: "cocos2d: Warning: TMX Layer %s has no tiles",
      7216: "cocos2d: TMXFormat: Unsupported TMX version: %s",
      7217: "cocos2d: TMXFomat: Unsupported orientation: %s",
      7218: "cc.TMXMapInfo.parseXMLFile(): unsupported compression method",
      7219: "cc.TMXMapInfo.parseXMLFile(): Only base64 and/or gzip/zlib maps are supported",
      7221: "cc.TMXMapInfo.parseXMLFile(): Texture '%s' not found.",
      7222: "Parse %s failed.",
      7236: "cc.TMXLayer.getTileAt(): TMXLayer: the tiles map has been released",
      7237: "cc.TMXLayer.getTileGIDAt(): TMXLayer: the tiles map has been released",
      7238: "cc.TMXLayer.setTileGID(): TMXLayer: the tiles map has been released",
      7239: "cc.TMXLayer.setTileGID(): invalid gid: %s",
      7240: "cc.TMXLayer.getTileFlagsAt(): TMXLayer: the tiles map has been released",
      7241: "cc.TiledMap.initWithXML(): Map not found. Please check the filename.",
      7401: "Failed to set _defaultArmatureIndex for '%s' because the index is out of range.",
      7402: "Failed to set _animationIndex for '%s' because the index is out of range.",
      7501: "Failed to set _defaultSkinIndex for '%s' because the index is out of range.",
      7502: "Failed to set _animationIndex for '%s' because its skeletonData is invalid.",
      7503: "Failed to set _animationIndex for '%s' because the index is out of range.",
      7504: "Can not render dynamic created SkeletonData",
      7506: "Failed to load spine atlas '$s'",
      7507: "Please re-import '%s' because its textures is not initialized! (This workflow will be improved in the future.)",
      7508: "The atlas asset of '%s' is not exists!",
      7509: "Spine: Animation not found: %s",
      7510: "Spine: Animation not found: %s",
      7600: "The context of RenderTexture is invalid.",
      7601: "cc.RenderTexture._initWithWidthAndHeightForWebGL() : only RGB and RGBA formats are valid for a render texture;",
      7602: "Could not attach texture to the framebuffer",
      7603: "clearDepth isn't supported on Cocos2d-Html5",
      7604: "saveToFile isn't supported on Cocos2d-Html5",
      7605: "newCCImage isn't supported on Cocos2d-Html5",
      7700: "On the web is always keep the aspect ratio",
      7701: "Can't know status",
      7702: "Video player's duration is not ready to get now!",
      7800: "Web does not support loading",
      7801: "Web does not support query history",
      7802: "Web does not support query history",
      7803: "The current browser does not support the GoBack",
      7804: "The current browser does not support the GoForward",
      7805: "Web does not support zoom",
      7900: "cc.math.Matrix3.assign(): current matrix equals matIn",
      7901: "cc.math.mat4Assign(): pOut equals pIn",
      7902: "cc.mat.Matrix4.assignFrom(): mat4 equals current matrix",
      7903: "cc.math.Matrix4 equal: pMat1 and pMat2 are same object.",
      7904: "cc.math.Matrix4.extractPlane: Invalid plane index",
      7905: "cc.math.mat4Assign(): pOut equals pIn",
      7906: "cc.mat.Matrix4.assignFrom(): mat4 equals current matrix",
      7907: "cc.math.Matrix4 equals: pMat1 and pMat2 are same object.",
      7908: "Invalid matrix mode specified",
      7909: "current quaternion is an invalid value",
      8000: "Can't handle this field type or size",
      8001: "No bytes requested",
      8002: "Too many bytes requested",
      8003: "Missing StripByteCounts!",
      8103: "cc.GLProgram.link(): Cannot link invalid program",
      8104: "cocos2d: ERROR: Failed to link program: %s",
      8105: "cocos2d: cc.shaderCache._loadDefaultShader, error shader type",
      8106: "Please load the resource firset : %s",
      8107: "cc.GLProgram.getUniformLocationForName(): uniform name should be non-null",
      8108: "cc.GLProgram.getUniformLocationForName(): Invalid operation. Cannot get uniform location when program is not initialized",
      8109: "modelView matrix is undefined.",
      8200: "Please set node's active instead of rigidbody's enabled.",
      8300: "Should only one camera exists, please check your project.",
      8301: "Camera does not support Canvas Mode.",
      8400: "Wrong type arguments, 'filePath' must be a String.",
      8401: "Since 1.10, `%s` accept %s instance directly, not a URL string. Please directly reference the %s object in your script, or load %s by loader first. Don't use %s's URL anymore.",
      9000: "Stencil manager does not support level bigger than %d in this device.",
      9001: "Stencil manager is already empty, cannot pop any mask.",
      9100: "LabelAtlas '%s' cannot be loaded, raw texture does not exist.",
      9101: "LabelAtlas '%s' cannot be loaded, fnt data does not exist.",
      9102: "Program not support highp precision, will change to mediump.",
      9103: "%s : Failed to set property [%s], property not found.",
      9104: "%s : Failed to define [%s], define not found.",
      9105: "%s : Failed to set property [%s], property length not correct.",
      9106: "%s : Set property [%s] warning : should transform object to ArrayBuffer.",
      9107: "%s : illegal property: [%s], myabe defined an unused property;",
      9200: "cc.view.enableAntiAlias is deprecated, please use cc.Texture2D.setFilters instead",
      "0100": "%s not yet implemented."
    };
  }), {} ],
  2: [ (function(require, module, exports) {
    "use strict";
    require("../core/platform/CCClass");
    var misc = require("../core/utils/misc");
    cc.Action = cc.Class({
      name: "cc.Action",
      ctor: function ctor() {
        this.originalTarget = null;
        this.target = null;
        this.tag = cc.Action.TAG_INVALID;
      },
      clone: function clone() {
        var action = new cc.Action();
        action.originalTarget = null;
        action.target = null;
        action.tag = this.tag;
        return action;
      },
      isDone: function isDone() {
        return true;
      },
      startWithTarget: function startWithTarget(target) {
        this.originalTarget = target;
        this.target = target;
      },
      stop: function stop() {
        this.target = null;
      },
      step: function step(dt) {
        cc.logID(1006);
      },
      update: function update(dt) {
        cc.logID(1007);
      },
      getTarget: function getTarget() {
        return this.target;
      },
      setTarget: function setTarget(target) {
        this.target = target;
      },
      getOriginalTarget: function getOriginalTarget() {
        return this.originalTarget;
      },
      setOriginalTarget: function setOriginalTarget(originalTarget) {
        this.originalTarget = originalTarget;
      },
      getTag: function getTag() {
        return this.tag;
      },
      setTag: function setTag(tag) {
        this.tag = tag;
      },
      retain: function retain() {},
      release: function release() {}
    });
    cc.Action.TAG_INVALID = -1;
    cc.FiniteTimeAction = cc.Class({
      name: "cc.FiniteTimeAction",
      extends: cc.Action,
      ctor: function ctor() {
        this._duration = 0;
      },
      getDuration: function getDuration() {
        return this._duration * (this._timesForRepeat || 1);
      },
      setDuration: function setDuration(duration) {
        this._duration = duration;
      },
      reverse: function reverse() {
        cc.logID(1008);
        return null;
      },
      clone: function clone() {
        return new cc.FiniteTimeAction();
      }
    });
    cc.Speed = cc.Class({
      name: "cc.Speed",
      extends: cc.Action,
      ctor: function ctor(action, speed) {
        this._speed = 0;
        this._innerAction = null;
        action && this.initWithAction(action, speed);
      },
      getSpeed: function getSpeed() {
        return this._speed;
      },
      setSpeed: function setSpeed(speed) {
        this._speed = speed;
      },
      initWithAction: function initWithAction(action, speed) {
        if (!action) {
          cc.errorID(1021);
          return false;
        }
        this._innerAction = action;
        this._speed = speed;
        return true;
      },
      clone: function clone() {
        var action = new cc.Speed();
        action.initWithAction(this._innerAction.clone(), this._speed);
        return action;
      },
      startWithTarget: function startWithTarget(target) {
        cc.Action.prototype.startWithTarget.call(this, target);
        this._innerAction.startWithTarget(target);
      },
      stop: function stop() {
        this._innerAction.stop();
        cc.Action.prototype.stop.call(this);
      },
      step: function step(dt) {
        this._innerAction.step(dt * this._speed);
      },
      isDone: function isDone() {
        return this._innerAction.isDone();
      },
      reverse: function reverse() {
        return new cc.Speed(this._innerAction.reverse(), this._speed);
      },
      setInnerAction: function setInnerAction(action) {
        this._innerAction !== action && (this._innerAction = action);
      },
      getInnerAction: function getInnerAction() {
        return this._innerAction;
      }
    });
    cc.speed = function(action, speed) {
      return new cc.Speed(action, speed);
    };
    cc.Follow = cc.Class({
      name: "cc.Follow",
      extends: cc.Action,
      ctor: function ctor(followedNode, rect) {
        this._followedNode = null;
        this._boundarySet = false;
        this._boundaryFullyCovered = false;
        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);
        followedNode && (rect ? this.initWithTarget(followedNode, rect) : this.initWithTarget(followedNode));
      },
      clone: function clone() {
        var action = new cc.Follow();
        var locRect = this._worldRect;
        var rect = new cc.Rect(locRect.x, locRect.y, locRect.width, locRect.height);
        action.initWithTarget(this._followedNode, rect);
        return action;
      },
      isBoundarySet: function isBoundarySet() {
        return this._boundarySet;
      },
      setBoudarySet: function setBoudarySet(value) {
        this._boundarySet = value;
      },
      initWithTarget: function initWithTarget(followedNode, rect) {
        if (!followedNode) {
          cc.errorID(1022);
          return false;
        }
        var _this = this;
        rect = rect || cc.rect(0, 0, 0, 0);
        _this._followedNode = followedNode;
        _this._worldRect = rect;
        _this._boundarySet = !(0 === rect.width && 0 === rect.height);
        _this._boundaryFullyCovered = false;
        var winSize = cc.winSize;
        _this._fullScreenSize = cc.v2(winSize.width, winSize.height);
        _this._halfScreenSize = _this._fullScreenSize.mul(.5);
        if (_this._boundarySet) {
          _this.leftBoundary = -(rect.x + rect.width - _this._fullScreenSize.x);
          _this.rightBoundary = -rect.x;
          _this.topBoundary = -rect.y;
          _this.bottomBoundary = -(rect.y + rect.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 = true);
        }
        return true;
      },
      step: function step(dt) {
        var targetWorldPos = this.target.convertToWorldSpaceAR(cc.Vec2.ZERO);
        var followedWorldPos = this._followedNode.convertToWorldSpaceAR(cc.Vec2.ZERO);
        var delta = targetWorldPos.sub(followedWorldPos);
        var tempPos = this.target.parent.convertToNodeSpaceAR(delta.add(this._halfScreenSize));
        if (this._boundarySet) {
          if (this._boundaryFullyCovered) return;
          this.target.setPosition(misc.clampf(tempPos.x, this.leftBoundary, this.rightBoundary), misc.clampf(tempPos.y, this.bottomBoundary, this.topBoundary));
        } else this.target.setPosition(tempPos.x, tempPos.y);
      },
      isDone: function isDone() {
        return !this._followedNode.activeInHierarchy;
      },
      stop: function stop() {
        this.target = null;
        cc.Action.prototype.stop.call(this);
      }
    });
    cc.follow = function(followedNode, rect) {
      return new cc.Follow(followedNode, rect);
    };
  }), {
    "../core/platform/CCClass": 138,
    "../core/utils/misc": 209
  } ],
  3: [ (function(require, module, exports) {
    "use strict";
    function cardinalSplineAt(p0, p1, p2, p3, tension, t) {
      var t2 = t * t;
      var t3 = t2 * t;
      var s = (1 - tension) / 2;
      var b1 = s * (2 * t2 - t3 - t);
      var b2 = s * (-t3 + t2) + (2 * t3 - 3 * t2 + 1);
      var b3 = s * (t3 - 2 * t2 + t) + (-2 * t3 + 3 * t2);
      var b4 = s * (t3 - t2);
      var x = p0.x * b1 + p1.x * b2 + p2.x * b3 + p3.x * b4;
      var y = p0.y * b1 + p1.y * b2 + p2.y * b3 + p3.y * b4;
      return cc.v2(x, y);
    }
    function getControlPointAt(controlPoints, pos) {
      var p = Math.min(controlPoints.length - 1, Math.max(pos, 0));
      return controlPoints[p];
    }
    function reverseControlPoints(controlPoints) {
      var newArray = [];
      for (var i = controlPoints.length - 1; i >= 0; i--) newArray.push(cc.v2(controlPoints[i].x, controlPoints[i].y));
      return newArray;
    }
    function cloneControlPoints(controlPoints) {
      var newArray = [];
      for (var i = 0; i < controlPoints.length; i++) newArray.push(cc.v2(controlPoints[i].x, controlPoints[i].y));
      return newArray;
    }
    cc.CardinalSplineTo = cc.Class({
      name: "cc.CardinalSplineTo",
      extends: cc.ActionInterval,
      ctor: function ctor(duration, points, tension) {
        this._points = [];
        this._deltaT = 0;
        this._tension = 0;
        this._previousPosition = null;
        this._accumulatedDiff = null;
        void 0 !== tension && cc.CardinalSplineTo.prototype.initWithDuration.call(this, duration, points, tension);
      },
      initWithDuration: function initWithDuration(duration, points, tension) {
        if (!points || 0 === points.length) {
          cc.errorID(1024);
          return false;
        }
        if (cc.ActionInterval.prototype.initWithDuration.call(this, duration)) {
          this.setPoints(points);
          this._tension = tension;
          return true;
        }
        return false;
      },
      clone: function clone() {
        var action = new cc.CardinalSplineTo();
        action.initWithDuration(this._duration, cloneControlPoints(this._points), this._tension);
        return action;
      },
      startWithTarget: function startWithTarget(target) {
        cc.ActionInterval.prototype.startWithTarget.call(this, target);
        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 update(dt) {
        dt = this._computeEaseTime(dt);
        var p, lt;
        var ps = this._points;
        if (1 === dt) {
          p = ps.length - 1;
          lt = 1;
        } else {
          var locDT = this._deltaT;
          p = 0 | dt / locDT;
          lt = (dt - locDT * p) / locDT;
        }
        var newPos = cardinalSplineAt(getControlPointAt(ps, p - 1), getControlPointAt(ps, p - 0), getControlPointAt(ps, p + 1), getControlPointAt(ps, p + 2), this._tension, lt);
        if (cc.macro.ENABLE_STACKABLE_ACTIONS) {
          var tempX, tempY;
          tempX = this.target.x - this._previousPosition.x;
          tempY = this.target.y - this._previousPosition.y;
          if (0 !== tempX || 0 !== tempY) {
            var locAccDiff = this._accumulatedDiff;
            tempX = locAccDiff.x + tempX;
            tempY = locAccDiff.y + tempY;
            locAccDiff.x = tempX;
            locAccDiff.y = tempY;
            newPos.x += tempX;
            newPos.y += tempY;
          }
        }
        this.updatePosition(newPos);
      },
      reverse: function reverse() {
        var reversePoints = reverseControlPoints(this._points);
        return cc.cardinalSplineTo(this._duration, reversePoints, this._tension);
      },
      updatePosition: function updatePosition(newPos) {
        this.target.setPosition(newPos);
        this._previousPosition = newPos;
      },
      getPoints: function getPoints() {
        return this._points;
      },
      setPoints: function setPoints(points) {
        this._points = points;
      }
    });
    cc.cardinalSplineTo = function(duration, points, tension) {
      return new cc.CardinalSplineTo(duration, points, tension);
    };
    cc.CardinalSplineBy = cc.Class({
      name: "cc.CardinalSplineBy",
      extends: cc.CardinalSplineTo,
      ctor: function ctor(duration, points, tension) {
        this._startPosition = cc.v2(0, 0);
        void 0 !== tension && this.initWithDuration(duration, points, tension);
      },
      startWithTarget: function startWithTarget(target) {
        cc.CardinalSplineTo.prototype.startWithTarget.call(this, target);
        this._startPosition.x = target.x;
        this._startPosition.y = target.y;
      },
      reverse: function reverse() {
        var copyConfig = this._points.slice();
        var current;
        var p = copyConfig[0];
        for (var i = 1; i < copyConfig.length; ++i) {
          current = copyConfig[i];
          copyConfig[i] = current.sub(p);
          p = current;
        }
        var reverseArray = reverseControlPoints(copyConfig);
        p = reverseArray[reverseArray.length - 1];
        reverseArray.pop();
        p.x = -p.x;
        p.y = -p.y;
        reverseArray.unshift(p);
        for (var i = 1; i < reverseArray.length; ++i) {
          current = reverseArray[i];
          current.x = -current.x;
          current.y = -current.y;
          current.x += p.x;
          current.y += p.y;
          reverseArray[i] = current;
          p = current;
        }
        return cc.cardinalSplineBy(this._duration, reverseArray, this._tension);
      },
      updatePosition: function updatePosition(newPos) {
        var pos = this._startPosition;
        var posX = newPos.x + pos.x;
        var posY = newPos.y + pos.y;
        this._previousPosition.x = posX;
        this._previousPosition.y = posY;
        this.target.setPosition(posX, posY);
      },
      clone: function clone() {
        var a = new cc.CardinalSplineBy();
        a.initWithDuration(this._duration, cloneControlPoints(this._points), this._tension);
        return a;
      }
    });
    cc.cardinalSplineBy = function(duration, points, tension) {
      return new cc.CardinalSplineBy(duration, points, tension);
    };
    cc.CatmullRomTo = cc.Class({
      name: "cc.CatmullRomTo",
      extends: cc.CardinalSplineTo,
      ctor: function ctor(dt, points) {
        points && this.initWithDuration(dt, points);
      },
      initWithDuration: function initWithDuration(dt, points) {
        return cc.CardinalSplineTo.prototype.initWithDuration.call(this, dt, points, .5);
      },
      clone: function clone() {
        var action = new cc.CatmullRomTo();
        action.initWithDuration(this._duration, cloneControlPoints(this._points));
        return action;
      }
    });
    cc.catmullRomTo = function(dt, points) {
      return new cc.CatmullRomTo(dt, points);
    };
    cc.CatmullRomBy = cc.Class({
      name: "cc.CatmullRomBy",
      extends: cc.CardinalSplineBy,
      ctor: function ctor(dt, points) {
        points && this.initWithDuration(dt, points);
      },
      initWithDuration: function initWithDuration(dt, points) {
        return cc.CardinalSplineTo.prototype.initWithDuration.call(this, dt, points, .5);
      },
      clone: function clone() {
        var action = new cc.CatmullRomBy();
        action.initWithDuration(this._duration, cloneControlPoints(this._points));
        return action;
      }
    });
    cc.catmullRomBy = function(dt, points) {
      return new cc.CatmullRomBy(dt, points);
    };
  }), {} ],
  4: [ (function(require, module, exports) {
    "use strict";
    cc.easeIn = function(rate) {
      return {
        _rate: rate,
        easing: function easing(dt) {
          return Math.pow(dt, this._rate);
        },
        reverse: function reverse() {
          return cc.easeIn(1 / this._rate);
        }
      };
    };
    cc.easeOut = function(rate) {
      return {
        _rate: rate,
        easing: function easing(dt) {
          return Math.pow(dt, 1 / this._rate);
        },
        reverse: function reverse() {
          return cc.easeOut(1 / this._rate);
        }
      };
    };
    cc.easeInOut = function(rate) {
      return {
        _rate: rate,
        easing: function easing(dt) {
          dt *= 2;
          return dt < 1 ? .5 * Math.pow(dt, this._rate) : 1 - .5 * Math.pow(2 - dt, this._rate);
        },
        reverse: function reverse() {
          return cc.easeInOut(this._rate);
        }
      };
    };
    var _easeExponentialInObj = {
      easing: function easing(dt) {
        return 0 === dt ? 0 : Math.pow(2, 10 * (dt - 1));
      },
      reverse: function reverse() {
        return _easeExponentialOutObj;
      }
    };
    cc.easeExponentialIn = function() {
      return _easeExponentialInObj;
    };
    var _easeExponentialOutObj = {
      easing: function easing(dt) {
        return 1 === dt ? 1 : 1 - Math.pow(2, -10 * dt);
      },
      reverse: function reverse() {
        return _easeExponentialInObj;
      }
    };
    cc.easeExponentialOut = function() {
      return _easeExponentialOutObj;
    };
    var _easeExponentialInOutObj = {
      easing: function easing(dt) {
        if (1 !== dt && 0 !== dt) {
          dt *= 2;
          return dt < 1 ? .5 * Math.pow(2, 10 * (dt - 1)) : .5 * (2 - Math.pow(2, -10 * (dt - 1)));
        }
        return dt;
      },
      reverse: function reverse() {
        return _easeExponentialInOutObj;
      }
    };
    cc.easeExponentialInOut = function() {
      return _easeExponentialInOutObj;
    };
    var _easeSineInObj = {
      easing: function easing(dt) {
        return 0 === dt || 1 === dt ? dt : -1 * Math.cos(dt * Math.PI / 2) + 1;
      },
      reverse: function reverse() {
        return _easeSineOutObj;
      }
    };
    cc.easeSineIn = function() {
      return _easeSineInObj;
    };
    var _easeSineOutObj = {
      easing: function easing(dt) {
        return 0 === dt || 1 === dt ? dt : Math.sin(dt * Math.PI / 2);
      },
      reverse: function reverse() {
        return _easeSineInObj;
      }
    };
    cc.easeSineOut = function() {
      return _easeSineOutObj;
    };
    var _easeSineInOutObj = {
      easing: function easing(dt) {
        return 0 === dt || 1 === dt ? dt : -.5 * (Math.cos(Math.PI * dt) - 1);
      },
      reverse: function reverse() {
        return _easeSineInOutObj;
      }
    };
    cc.easeSineInOut = function() {
      return _easeSineInOutObj;
    };
    var _easeElasticInObj = {
      easing: function easing(dt) {
        if (0 === dt || 1 === dt) return dt;
        dt -= 1;
        return -Math.pow(2, 10 * dt) * Math.sin((dt - .075) * Math.PI * 2 / .3);
      },
      reverse: function reverse() {
        return _easeElasticOutObj;
      }
    };
    cc.easeElasticIn = function(period) {
      if (period && .3 !== period) return {
        _period: period,
        easing: function easing(dt) {
          if (0 === dt || 1 === dt) return dt;
          dt -= 1;
          return -Math.pow(2, 10 * dt) * Math.sin((dt - this._period / 4) * Math.PI * 2 / this._period);
        },
        reverse: function reverse() {
          return cc.easeElasticOut(this._period);
        }
      };
      return _easeElasticInObj;
    };
    var _easeElasticOutObj = {
      easing: function easing(dt) {
        return 0 === dt || 1 === dt ? dt : Math.pow(2, -10 * dt) * Math.sin((dt - .075) * Math.PI * 2 / .3) + 1;
      },
      reverse: function reverse() {
        return _easeElasticInObj;
      }
    };
    cc.easeElasticOut = function(period) {
      if (period && .3 !== period) return {
        _period: period,
        easing: function easing(dt) {
          return 0 === dt || 1 === dt ? dt : Math.pow(2, -10 * dt) * Math.sin((dt - this._period / 4) * Math.PI * 2 / this._period) + 1;
        },
        reverse: function reverse() {
          return cc.easeElasticIn(this._period);
        }
      };
      return _easeElasticOutObj;
    };
    cc.easeElasticInOut = function(period) {
      period = period || .3;
      return {
        _period: period,
        easing: function easing(dt) {
          var newT = 0;
          var locPeriod = this._period;
          if (0 === dt || 1 === dt) newT = dt; else {
            dt *= 2;
            locPeriod || (locPeriod = this._period = .3 * 1.5);
            var s = locPeriod / 4;
            dt -= 1;
            newT = dt < 0 ? -.5 * Math.pow(2, 10 * dt) * Math.sin((dt - s) * Math.PI * 2 / locPeriod) : Math.pow(2, -10 * dt) * Math.sin((dt - s) * Math.PI * 2 / locPeriod) * .5 + 1;
          }
          return newT;
        },
        reverse: function reverse() {
          return cc.easeElasticInOut(this._period);
        }
      };
    };
    function _bounceTime(time1) {
      if (time1 < 1 / 2.75) return 7.5625 * time1 * time1;
      if (time1 < 2 / 2.75) {
        time1 -= 1.5 / 2.75;
        return 7.5625 * time1 * time1 + .75;
      }
      if (time1 < 2.5 / 2.75) {
        time1 -= 2.25 / 2.75;
        return 7.5625 * time1 * time1 + .9375;
      }
      time1 -= 2.625 / 2.75;
      return 7.5625 * time1 * time1 + .984375;
    }
    var _easeBounceInObj = {
      easing: function easing(dt) {
        return 1 - _bounceTime(1 - dt);
      },
      reverse: function reverse() {
        return _easeBounceOutObj;
      }
    };
    cc.easeBounceIn = function() {
      return _easeBounceInObj;
    };
    var _easeBounceOutObj = {
      easing: function easing(dt) {
        return _bounceTime(dt);
      },
      reverse: function reverse() {
        return _easeBounceInObj;
      }
    };
    cc.easeBounceOut = function() {
      return _easeBounceOutObj;
    };
    var _easeBounceInOutObj = {
      easing: function easing(time1) {
        var newT;
        if (time1 < .5) {
          time1 *= 2;
          newT = .5 * (1 - _bounceTime(1 - time1));
        } else newT = .5 * _bounceTime(2 * time1 - 1) + .5;
        return newT;
      },
      reverse: function reverse() {
        return _easeBounceInOutObj;
      }
    };
    cc.easeBounceInOut = function() {
      return _easeBounceInOutObj;
    };
    var _easeBackInObj = {
      easing: function easing(time1) {
        var overshoot = 1.70158;
        return 0 === time1 || 1 === time1 ? time1 : time1 * time1 * ((overshoot + 1) * time1 - overshoot);
      },
      reverse: function reverse() {
        return _easeBackOutObj;
      }
    };
    cc.easeBackIn = function() {
      return _easeBackInObj;
    };
    var _easeBackOutObj = {
      easing: function easing(time1) {
        if (0 === time1) return 0;
        var overshoot = 1.70158;
        time1 -= 1;
        return time1 * time1 * ((overshoot + 1) * time1 + overshoot) + 1;
      },
      reverse: function reverse() {
        return _easeBackInObj;
      }
    };
    cc.easeBackOut = function() {
      return _easeBackOutObj;
    };
    var _easeBackInOutObj = {
      easing: function easing(time1) {
        var overshoot = 2.5949095;
        time1 *= 2;
        if (time1 < 1) return time1 * time1 * ((overshoot + 1) * time1 - overshoot) / 2;
        time1 -= 2;
        return time1 * time1 * ((overshoot + 1) * time1 + overshoot) / 2 + 1;
      },
      reverse: function reverse() {
        return _easeBackInOutObj;
      }
    };
    cc.easeBackInOut = function() {
      return _easeBackInOutObj;
    };
    cc.easeBezierAction = function(a, b, c, d) {
      return {
        easing: function easing(t) {
          return Math.pow(1 - t, 3) * a + 3 * t * Math.pow(1 - t, 2) * b + 3 * Math.pow(t, 2) * (1 - t) * c + Math.pow(t, 3) * d;
        },
        reverse: function reverse() {
          return cc.easeBezierAction(d, c, b, a);
        }
      };
    };
    var _easeQuadraticActionIn = {
      easing: function easing(time) {
        return Math.pow(time, 2);
      },
      reverse: function reverse() {
        return _easeQuadraticActionIn;
      }
    };
    cc.easeQuadraticActionIn = function() {
      return _easeQuadraticActionIn;
    };
    var _easeQuadraticActionOut = {
      easing: function easing(time) {
        return -time * (time - 2);
      },
      reverse: function reverse() {
        return _easeQuadraticActionOut;
      }
    };
    cc.easeQuadraticActionOut = function() {
      return _easeQuadraticActionOut;
    };
    var _easeQuadraticActionInOut = {
      easing: function easing(time) {
        var resultTime = time;
        time *= 2;
        if (time < 1) resultTime = time * time * .5; else {
          --time;
          resultTime = -.5 * (time * (time - 2) - 1);
        }
        return resultTime;
      },
      reverse: function reverse() {
        return _easeQuadraticActionInOut;
      }
    };
    cc.easeQuadraticActionInOut = function() {
      return _easeQuadraticActionInOut;
    };
    var _easeQuarticActionIn = {
      easing: function easing(time) {
        return time * time * time * time;
      },
      reverse: function reverse() {
        return _easeQuarticActionIn;
      }
    };
    cc.easeQuarticActionIn = function() {
      return _easeQuarticActionIn;
    };
    var _easeQuarticActionOut = {
      easing: function easing(time) {
        time -= 1;
        return -(time * time * time * time - 1);
      },
      reverse: function reverse() {
        return _easeQuarticActionOut;
      }
    };
    cc.easeQuarticActionOut = function() {
      return _easeQuarticActionOut;
    };
    var _easeQuarticActionInOut = {
      easing: function easing(time) {
        time *= 2;
        if (time < 1) return .5 * time * time * time * time;
        time -= 2;
        return -.5 * (time * time * time * time - 2);
      },
      reverse: function reverse() {
        return _easeQuarticActionInOut;
      }
    };
    cc.easeQuarticActionInOut = function() {
      return _easeQuarticActionInOut;
    };
    var _easeQuinticActionIn = {
      easing: function easing(time) {
        return time * time * time * time * time;
      },
      reverse: function reverse() {
        return _easeQuinticActionIn;
      }
    };
    cc.easeQuinticActionIn = function() {
      return _easeQuinticActionIn;
    };
    var _easeQuinticActionOut = {
      easing: function easing(time) {
        time -= 1;
        return time * time * time * time * time + 1;
      },
      reverse: function reverse() {
        return _easeQuinticActionOut;
      }
    };
    cc.easeQuinticActionOut = function() {
      return _easeQuinticActionOut;
    };
    var _easeQuinticActionInOut = {
      easing: function easing(time) {
        time *= 2;
        if (time < 1) return .5 * time * time * time * time * time;
        time -= 2;
        return .5 * (time * time * time * time * time + 2);
      },
      reverse: function reverse() {
        return _easeQuinticActionInOut;
      }
    };
    cc.easeQuinticActionInOut = function() {
      return _easeQuinticActionInOut;
    };
    var _easeCircleActionIn = {
      easing: function easing(time) {
        return -1 * (Math.sqrt(1 - time * time) - 1);
      },
      reverse: function reverse() {
        return _easeCircleActionIn;
      }
    };
    cc.easeCircleActionIn = function() {
      return _easeCircleActionIn;
    };
    var _easeCircleActionOut = {
      easing: function easing(time) {
        time -= 1;
        return Math.sqrt(1 - time * time);
      },
      reverse: function reverse() {
        return _easeCircleActionOut;
      }
    };
    cc.easeCircleActionOut = function() {
      return _easeCircleActionOut;
    };
    var _easeCircleActionInOut = {
      easing: function easing(time) {
        time *= 2;
        if (time < 1) return -.5 * (Math.sqrt(1 - time * time) - 1);
        time -= 2;
        return .5 * (Math.sqrt(1 - time * time) + 1);
      },
      reverse: function reverse() {
        return _easeCircleActionInOut;
      }
    };
    cc.easeCircleActionInOut = function() {
      return _easeCircleActionInOut;
    };
    var _easeCubicActionIn = {
      easing: function easing(time) {
        return time * time * time;
      },
      reverse: function reverse() {
        return _easeCubicActionIn;
      }
    };
    cc.easeCubicActionIn = function() {
      return _easeCubicActionIn;
    };
    var _easeCubicActionOut = {
      easing: function easing(time) {
        time -= 1;
        return time * time * time + 1;
      },
      reverse: function reverse() {
        return _easeCubicActionOut;
      }
    };
    cc.easeCubicActionOut = function() {
      return _easeCubicActionOut;
    };
    var _easeCubicActionInOut = {
      easing: function easing(time) {
        time *= 2;
        if (time < 1) return .5 * time * time * time;
        time -= 2;
        return .5 * (time * time * time + 2);
      },
      reverse: function reverse() {
        return _easeCubicActionInOut;
      }
    };
    cc.easeCubicActionInOut = function() {
      return _easeCubicActionInOut;
    };
  }), {} ],
  5: [ (function(require, module, exports) {
    "use strict";
    cc.ActionInstant = cc.Class({
      name: "cc.ActionInstant",
      extends: cc.FiniteTimeAction,
      isDone: function isDone() {
        return true;
      },
      step: function step(dt) {
        this.update(1);
      },
      update: function update(dt) {},
      reverse: function reverse() {
        return this.clone();
      },
      clone: function clone() {
        return new cc.ActionInstant();
      }
    });
    cc.Show = cc.Class({
      name: "cc.Show",
      extends: cc.ActionInstant,
      update: function update(dt) {
        var _renderComps = this.target.getComponentsInChildren(cc.RenderComponent);
        for (var i = 0; i < _renderComps.length; ++i) {
          var render = _renderComps[i];
          render.enabled = true;
        }
      },
      reverse: function reverse() {
        return new cc.Hide();
      },
      clone: function clone() {
        return new cc.Show();
      }
    });
    cc.show = function() {
      return new cc.Show();
    };
    cc.Hide = cc.Class({
      name: "cc.Hide",
      extends: cc.ActionInstant,
      update: function update(dt) {
        var _renderComps = this.target.getComponentsInChildren(cc.RenderComponent);
        for (var i = 0; i < _renderComps.length; ++i) {
          var render = _renderComps[i];
          render.enabled = false;
        }
      },
      reverse: function reverse() {
        return new cc.Show();
      },
      clone: function clone() {
        return new cc.Hide();
      }
    });
    cc.hide = function() {
      return new cc.Hide();
    };
    cc.ToggleVisibility = cc.Class({
      name: "cc.ToggleVisibility",
      extends: cc.ActionInstant,
      update: function update(dt) {
        var _renderComps = this.target.getComponentsInChildren(cc.RenderComponent);
        for (var i = 0; i < _renderComps.length; ++i) {
          var render = _renderComps[i];
          render.enabled = !render.enabled;
        }
      },
      reverse: function reverse() {
        return new cc.ToggleVisibility();
      },
      clone: function clone() {
        return new cc.ToggleVisibility();
      }
    });
    cc.toggleVisibility = function() {
      return new cc.ToggleVisibility();
    };
    cc.RemoveSelf = cc.Class({
      name: "cc.RemoveSelf",
      extends: cc.ActionInstant,
      ctor: function ctor(isNeedCleanUp) {
        this._isNeedCleanUp = true;
        void 0 !== isNeedCleanUp && this.init(isNeedCleanUp);
      },
      update: function update(dt) {
        this.target.removeFromParent(this._isNeedCleanUp);
      },
      init: function init(isNeedCleanUp) {
        this._isNeedCleanUp = isNeedCleanUp;
        return true;
      },
      reverse: function reverse() {
        return new cc.RemoveSelf(this._isNeedCleanUp);
      },
      clone: function clone() {
        return new cc.RemoveSelf(this._isNeedCleanUp);
      }
    });
    cc.removeSelf = function(isNeedCleanUp) {
      return new cc.RemoveSelf(isNeedCleanUp);
    };
    cc.DestroySelf = cc.Class({
      name: "cc.DestroySelf",
      extends: cc.ActionInstant,
      update: function update() {
        this.target.destroy();
      },
      reverse: function reverse() {
        return new cc.DestroySelf();
      },
      clone: function clone() {
        return new cc.DestroySelf();
      }
    });
    cc.destroySelf = function() {
      return new cc.DestroySelf();
    };
    cc.FlipX = cc.Class({
      name: "cc.FlipX",
      extends: cc.ActionInstant,
      ctor: function ctor(flip) {
        this._flippedX = false;
        void 0 !== flip && this.initWithFlipX(flip);
      },
      initWithFlipX: function initWithFlipX(flip) {
        this._flippedX = flip;
        return true;
      },
      update: function update(dt) {
        this.target.scaleX = Math.abs(this.target.scaleX) * (this._flippedX ? -1 : 1);
      },
      reverse: function reverse() {
        return new cc.FlipX(!this._flippedX);
      },
      clone: function clone() {
        var action = new cc.FlipX();
        action.initWithFlipX(this._flippedX);
        return action;
      }
    });
    cc.flipX = function(flip) {
      return new cc.FlipX(flip);
    };
    cc.FlipY = cc.Class({
      name: "cc.FlipY",
      extends: cc.ActionInstant,
      ctor: function ctor(flip) {
        this._flippedY = false;
        void 0 !== flip && this.initWithFlipY(flip);
      },
      initWithFlipY: function initWithFlipY(flip) {
        this._flippedY = flip;
        return true;
      },
      update: function update(dt) {
        this.target.scaleY = Math.abs(this.target.scaleY) * (this._flippedY ? -1 : 1);
      },
      reverse: function reverse() {
        return new cc.FlipY(!this._flippedY);
      },
      clone: function clone() {
        var action = new cc.FlipY();
        action.initWithFlipY(this._flippedY);
        return action;
      }
    });
    cc.flipY = function(flip) {
      return new cc.FlipY(flip);
    };
    cc.Place = cc.Class({
      name: "cc.Place",
      extends: cc.ActionInstant,
      ctor: function ctor(pos, y) {
        this._x = 0;
        this._y = 0;
        if (void 0 !== pos) {
          if (void 0 !== pos.x) {
            y = pos.y;
            pos = pos.x;
          }
          this.initWithPosition(pos, y);
        }
      },
      initWithPosition: function initWithPosition(x, y) {
        this._x = x;
        this._y = y;
        return true;
      },
      update: function update(dt) {
        this.target.setPosition(this._x, this._y);
      },
      clone: function clone() {
        var action = new cc.Place();
        action.initWithPosition(this._x, this._y);
        return action;
      }
    });
    cc.place = function(pos, y) {
      return new cc.Place(pos, y);
    };
    cc.CallFunc = cc.Class({
      name: "cc.CallFunc",
      extends: cc.ActionInstant,
      ctor: function ctor(selector, selectorTarget, data) {
        this._selectorTarget = null;
        this._function = null;
        this._data = null;
        this.initWithFunction(selector, selectorTarget, data);
      },
      initWithFunction: function initWithFunction(selector, selectorTarget, data) {
        selector && (this._function = selector);
        selectorTarget && (this._selectorTarget = selectorTarget);
        void 0 !== data && (this._data = data);
        return true;
      },
      execute: function execute() {
        this._function && this._function.call(this._selectorTarget, this.target, this._data);
      },
      update: function update(dt) {
        this.execute();
      },
      getTargetCallback: function getTargetCallback() {
        return this._selectorTarget;
      },
      setTargetCallback: function setTargetCallback(sel) {
        if (sel !== this._selectorTarget) {
          this._selectorTarget && (this._selectorTarget = null);
          this._selectorTarget = sel;
        }
      },
      clone: function clone() {
        var action = new cc.CallFunc();
        action.initWithFunction(this._function, this._selectorTarget, this._data);
        return action;
      }
    });
    cc.callFunc = function(selector, selectorTarget, data) {
      return new cc.CallFunc(selector, selectorTarget, data);
    };
  }), {} ],
  6: [ (function(require, module, exports) {
    "use strict";
    cc.ActionInterval = cc.Class({
      name: "cc.ActionInterval",
      extends: cc.FiniteTimeAction,
      ctor: function ctor(d) {
        this.MAX_VALUE = 2;
        this._elapsed = 0;
        this._firstTick = false;
        this._easeList = null;
        this._speed = 1;
        this._timesForRepeat = 1;
        this._repeatForever = false;
        this._repeatMethod = false;
        this._speedMethod = false;
        void 0 !== d && cc.ActionInterval.prototype.initWithDuration.call(this, d);
      },
      getElapsed: function getElapsed() {
        return this._elapsed;
      },
      initWithDuration: function initWithDuration(d) {
        this._duration = 0 === d ? cc.macro.FLT_EPSILON : d;
        this._elapsed = 0;
        this._firstTick = true;
        return true;
      },
      isDone: function isDone() {
        return this._elapsed >= this._duration;
      },
      _cloneDecoration: function _cloneDecoration(action) {
        action._repeatForever = this._repeatForever;
        action._speed = this._speed;
        action._timesForRepeat = this._timesForRepeat;
        action._easeList = this._easeList;
        action._speedMethod = this._speedMethod;
        action._repeatMethod = this._repeatMethod;
      },
      _reverseEaseList: function _reverseEaseList(action) {
        if (this._easeList) {
          action._easeList = [];
          for (var i = 0; i < this._easeList.length; i++) action._easeList.push(this._easeList[i].reverse());
        }
      },
      clone: function clone() {
        var action = new cc.ActionInterval(this._duration);
        this._cloneDecoration(action);
        return action;
      },
      easing: function easing(easeObj) {
        this._easeList ? this._easeList.length = 0 : this._easeList = [];
        for (var i = 0; i < arguments.length; i++) this._easeList.push(arguments[i]);
        return this;
      },
      _computeEaseTime: function _computeEaseTime(dt) {
        var locList = this._easeList;
        if (!locList || 0 === locList.length) return dt;
        for (var i = 0, n = locList.length; i < n; i++) dt = locList[i].easing(dt);
        return dt;
      },
      step: function step(dt) {
        if (this._firstTick) {
          this._firstTick = false;
          this._elapsed = 0;
        } else this._elapsed += dt;
        var t = this._elapsed / (this._duration > 1.192092896e-7 ? this._duration : 1.192092896e-7);
        t = 1 > t ? t : 1;
        this.update(t > 0 ? t : 0);
        if (this._repeatMethod && this._timesForRepeat > 1 && this.isDone()) {
          this._repeatForever || this._timesForRepeat--;
          this.startWithTarget(this.target);
          this.step(this._elapsed - this._duration);
        }
      },
      startWithTarget: function startWithTarget(target) {
        cc.Action.prototype.startWithTarget.call(this, target);
        this._elapsed = 0;
        this._firstTick = true;
      },
      reverse: function reverse() {
        cc.logID(1010);
        return null;
      },
      setAmplitudeRate: function setAmplitudeRate(amp) {
        cc.logID(1011);
      },
      getAmplitudeRate: function getAmplitudeRate() {
        cc.logID(1012);
        return 0;
      },
      speed: function speed(_speed) {
        if (_speed <= 0) {
          cc.logID(1013);
          return this;
        }
        this._speedMethod = true;
        this._speed *= _speed;
        return this;
      },
      getSpeed: function getSpeed() {
        return this._speed;
      },
      setSpeed: function setSpeed(speed) {
        this._speed = speed;
        return this;
      },
      repeat: function repeat(times) {
        times = Math.round(times);
        if (isNaN(times) || times < 1) {
          cc.logID(1014);
          return this;
        }
        this._repeatMethod = true;
        this._timesForRepeat *= times;
        return this;
      },
      repeatForever: function repeatForever() {
        this._repeatMethod = true;
        this._timesForRepeat = this.MAX_VALUE;
        this._repeatForever = true;
        return this;
      }
    });
    cc.actionInterval = function(d) {
      return new cc.ActionInterval(d);
    };
    cc.Sequence = cc.Class({
      name: "cc.Sequence",
      extends: cc.ActionInterval,
      ctor: function ctor(tempArray) {
        this._actions = [];
        this._split = null;
        this._last = 0;
        this._reversed = false;
        var paramArray = tempArray instanceof Array ? tempArray : arguments;
        if (1 === paramArray.length) {
          cc.errorID(1019);
          return;
        }
        var last = paramArray.length - 1;
        last >= 0 && null == paramArray[last] && cc.logID(1015);
        if (last >= 0) {
          var prev = paramArray[0], action1;
          for (var i = 1; i < last; i++) if (paramArray[i]) {
            action1 = prev;
            prev = cc.Sequence._actionOneTwo(action1, paramArray[i]);
          }
          this.initWithTwoActions(prev, paramArray[last]);
        }
      },
      initWithTwoActions: function initWithTwoActions(actionOne, actionTwo) {
        if (!actionOne || !actionTwo) {
          cc.errorID(1025);
          return false;
        }
        var durationOne = actionOne._duration, durationTwo = actionTwo._duration;
        durationOne *= actionOne._repeatMethod ? actionOne._timesForRepeat : 1;
        durationTwo *= actionTwo._repeatMethod ? actionTwo._timesForRepeat : 1;
        var d = durationOne + durationTwo;
        this.initWithDuration(d);
        this._actions[0] = actionOne;
        this._actions[1] = actionTwo;
        return true;
      },
      clone: function clone() {
        var action = new cc.Sequence();
        this._cloneDecoration(action);
        action.initWithTwoActions(this._actions[0].clone(), this._actions[1].clone());
        return action;
      },
      startWithTarget: function startWithTarget(target) {
        cc.ActionInterval.prototype.startWithTarget.call(this, target);
        this._split = this._actions[0]._duration / this._duration;
        this._split *= this._actions[0]._repeatMethod ? this._actions[0]._timesForRepeat : 1;
        this._last = -1;
      },
      stop: function stop() {
        -1 !== this._last && this._actions[this._last].stop();
        cc.Action.prototype.stop.call(this);
      },
      update: function update(dt) {
        var new_t, found = 0;
        var locSplit = this._split, locActions = this._actions, locLast = this._last, actionFound;
        dt = this._computeEaseTime(dt);
        if (dt < locSplit) {
          new_t = 0 !== locSplit ? dt / locSplit : 1;
          if (0 === found && 1 === locLast && this._reversed) {
            locActions[1].update(0);
            locActions[1].stop();
          }
        } else {
          found = 1;
          new_t = 1 === locSplit ? 1 : (dt - locSplit) / (1 - locSplit);
          if (-1 === locLast) {
            locActions[0].startWithTarget(this.target);
            locActions[0].update(1);
            locActions[0].stop();
          }
          if (0 === locLast) {
            locActions[0].update(1);
            locActions[0].stop();
          }
        }
        actionFound = locActions[found];
        if (locLast === found && actionFound.isDone()) return;
        locLast !== found && actionFound.startWithTarget(this.target);
        new_t *= actionFound._timesForRepeat;
        actionFound.update(new_t > 1 ? new_t % 1 : new_t);
        this._last = found;
      },
      reverse: function reverse() {
        var action = cc.Sequence._actionOneTwo(this._actions[1].reverse(), this._actions[0].reverse());
        this._cloneDecoration(action);
        this._reverseEaseList(action);
        action._reversed = true;
        return action;
      }
    });
    cc.sequence = function(tempArray) {
      var paramArray = tempArray instanceof Array ? tempArray : arguments;
      if (1 === paramArray.length) {
        cc.errorID(1019);
        return null;
      }
      var last = paramArray.length - 1;
      last >= 0 && null == paramArray[last] && cc.logID(1015);
      var result = null;
      if (last >= 0) {
        result = paramArray[0];
        for (var i = 1; i <= last; i++) paramArray[i] && (result = cc.Sequence._actionOneTwo(result, paramArray[i]));
      }
      return result;
    };
    cc.Sequence._actionOneTwo = function(actionOne, actionTwo) {
      var sequence = new cc.Sequence();
      sequence.initWithTwoActions(actionOne, actionTwo);
      return sequence;
    };
    cc.Repeat = cc.Class({
      name: "cc.Repeat",
      extends: cc.ActionInterval,
      ctor: function ctor(action, times) {
        this._times = 0;
        this._total = 0;
        this._nextDt = 0;
        this._actionInstant = false;
        this._innerAction = null;
        void 0 !== times && this.initWithAction(action, times);
      },
      initWithAction: function initWithAction(action, times) {
        var duration = action._duration * times;
        if (this.initWithDuration(duration)) {
          this._times = times;
          this._innerAction = action;
          if (action instanceof cc.ActionInstant) {
            this._actionInstant = true;
            this._times -= 1;
          }
          this._total = 0;
          return true;
        }
        return false;
      },
      clone: function clone() {
        var action = new cc.Repeat();
        this._cloneDecoration(action);
        action.initWithAction(this._innerAction.clone(), this._times);
        return action;
      },
      startWithTarget: function startWithTarget(target) {
        this._total = 0;
        this._nextDt = this._innerAction._duration / this._duration;
        cc.ActionInterval.prototype.startWithTarget.call(this, target);
        this._innerAction.startWithTarget(target);
      },
      stop: function stop() {
        this._innerAction.stop();
        cc.Action.prototype.stop.call(this);
      },
      update: function update(dt) {
        dt = this._computeEaseTime(dt);
        var locInnerAction = this._innerAction;
        var locDuration = this._duration;
        var locTimes = this._times;
        var locNextDt = this._nextDt;
        if (dt >= locNextDt) {
          while (dt > locNextDt && this._total < locTimes) {
            locInnerAction.update(1);
            this._total++;
            locInnerAction.stop();
            locInnerAction.startWithTarget(this.target);
            locNextDt += locInnerAction._duration / locDuration;
            this._nextDt = locNextDt > 1 ? 1 : locNextDt;
          }
          if (dt >= 1 && this._total < locTimes) {
            locInnerAction.update(1);
            this._total++;
          }
          this._actionInstant || (this._total === locTimes ? locInnerAction.stop() : locInnerAction.update(dt - (locNextDt - locInnerAction._duration / locDuration)));
        } else locInnerAction.update(dt * locTimes % 1);
      },
      isDone: function isDone() {
        return this._total === this._times;
      },
      reverse: function reverse() {
        var action = new cc.Repeat(this._innerAction.reverse(), this._times);
        this._cloneDecoration(action);
        this._reverseEaseList(action);
        return action;
      },
      setInnerAction: function setInnerAction(action) {
        this._innerAction !== action && (this._innerAction = action);
      },
      getInnerAction: function getInnerAction() {
        return this._innerAction;
      }
    });
    cc.repeat = function(action, times) {
      return new cc.Repeat(action, times);
    };
    cc.RepeatForever = cc.Class({
      name: "cc.RepeatForever",
      extends: cc.ActionInterval,
      ctor: function ctor(action) {
        this._innerAction = null;
        action && this.initWithAction(action);
      },
      initWithAction: function initWithAction(action) {
        if (!action) {
          cc.errorID(1026);
          return false;
        }
        this._innerAction = action;
        return true;
      },
      clone: function clone() {
        var action = new cc.RepeatForever();
        this._cloneDecoration(action);
        action.initWithAction(this._innerAction.clone());
        return action;
      },
      startWithTarget: function startWithTarget(target) {
        cc.ActionInterval.prototype.startWithTarget.call(this, target);
        this._innerAction.startWithTarget(target);
      },
      step: function step(dt) {
        var locInnerAction = this._innerAction;
        locInnerAction.step(dt);
        if (locInnerAction.isDone()) {
          locInnerAction.startWithTarget(this.target);
          locInnerAction.step(locInnerAction.getElapsed() - locInnerAction._duration);
        }
      },
      isDone: function isDone() {
        return false;
      },
      reverse: function reverse() {
        var action = new cc.RepeatForever(this._innerAction.reverse());
        this._cloneDecoration(action);
        this._reverseEaseList(action);
        return action;
      },
      setInnerAction: function setInnerAction(action) {
        this._innerAction !== action && (this._innerAction = action);
      },
      getInnerAction: function getInnerAction() {
        return this._innerAction;
      }
    });
    cc.repeatForever = function(action) {
      return new cc.RepeatForever(action);
    };
    cc.Spawn = cc.Class({
      name: "cc.Spawn",
      extends: cc.ActionInterval,
      ctor: function ctor(tempArray) {
        this._one = null;
        this._two = null;
        var paramArray = tempArray instanceof Array ? tempArray : arguments;
        if (1 === paramArray.length) {
          cc.errorID(1020);
          return;
        }
        var last = paramArray.length - 1;
        last >= 0 && null == paramArray[last] && cc.logID(1015);
        if (last >= 0) {
          var prev = paramArray[0], action1;
          for (var i = 1; i < last; i++) if (paramArray[i]) {
            action1 = prev;
            prev = cc.Spawn._actionOneTwo(action1, paramArray[i]);
          }
          this.initWithTwoActions(prev, paramArray[last]);
        }
      },
      initWithTwoActions: function initWithTwoActions(action1, action2) {
        if (!action1 || !action2) {
          cc.errorID(1027);
          return false;
        }
        var ret = false;
        var d1 = action1._duration;
        var d2 = action2._duration;
        if (this.initWithDuration(Math.max(d1, d2))) {
          this._one = action1;
          this._two = action2;
          d1 > d2 ? this._two = cc.Sequence._actionOneTwo(action2, cc.delayTime(d1 - d2)) : d1 < d2 && (this._one = cc.Sequence._actionOneTwo(action1, cc.delayTime(d2 - d1)));
          ret = true;
        }
        return ret;
      },
      clone: function clone() {
        var action = new cc.Spawn();
        this._cloneDecoration(action);
        action.initWithTwoActions(this._one.clone(), this._two.clone());
        return action;
      },
      startWithTarget: function startWithTarget(target) {
        cc.ActionInterval.prototype.startWithTarget.call(this, target);
        this._one.startWithTarget(target);
        this._two.startWithTarget(target);
      },
      stop: function stop() {
        this._one.stop();
        this._two.stop();
        cc.Action.prototype.stop.call(this);
      },
      update: function update(dt) {
        dt = this._computeEaseTime(dt);
        this._one && this._one.update(dt);
        this._two && this._two.update(dt);
      },
      reverse: function reverse() {
        var action = cc.Spawn._actionOneTwo(this._one.reverse(), this._two.reverse());
        this._cloneDecoration(action);
        this._reverseEaseList(action);
        return action;
      }
    });
    cc.spawn = function(tempArray) {
      var paramArray = tempArray instanceof Array ? tempArray : arguments;
      if (1 === paramArray.length) {
        cc.errorID(1020);
        return null;
      }
      paramArray.length > 0 && null == paramArray[paramArray.length - 1] && cc.logID(1015);
      var prev = paramArray[0];
      for (var i = 1; i < paramArray.length; i++) null != paramArray[i] && (prev = cc.Spawn._actionOneTwo(prev, paramArray[i]));
      return prev;
    };
    cc.Spawn._actionOneTwo = function(action1, action2) {
      var pSpawn = new cc.Spawn();
      pSpawn.initWithTwoActions(action1, action2);
      return pSpawn;
    };
    cc.RotateTo = cc.Class({
      name: "cc.RotateTo",
      extends: cc.ActionInterval,
      statics: {
        _reverse: false
      },
      ctor: function ctor(duration, dstAngle) {
        this._startAngle = 0;
        this._dstAngle = 0;
        this._angle = 0;
        void 0 !== dstAngle && this.initWithDuration(duration, dstAngle);
      },
      initWithDuration: function initWithDuration(duration, dstAngle) {
        if (cc.ActionInterval.prototype.initWithDuration.call(this, duration)) {
          this._dstAngle = dstAngle;
          return true;
        }
        return false;
      },
      clone: function clone() {
        var action = new cc.RotateTo();
        this._cloneDecoration(action);
        action.initWithDuration(this._duration, this._dstAngle);
        return action;
      },
      startWithTarget: function startWithTarget(target) {
        cc.ActionInterval.prototype.startWithTarget.call(this, target);
        var startAngle = target.angle % 360;
        var angle = cc.RotateTo._reverse ? this._dstAngle - startAngle : this._dstAngle + startAngle;
        angle > 180 && (angle -= 360);
        angle < -180 && (angle += 360);
        this._startAngle = startAngle;
        this._angle = cc.RotateTo._reverse ? angle : -angle;
      },
      reverse: function reverse() {
        cc.logID(1016);
      },
      update: function update(dt) {
        dt = this._computeEaseTime(dt);
        this.target && (this.target.angle = this._startAngle + this._angle * dt);
      }
    });
    cc.rotateTo = function(duration, dstAngle) {
      return new cc.RotateTo(duration, dstAngle);
    };
    cc.RotateBy = cc.Class({
      name: "cc.RotateBy",
      extends: cc.ActionInterval,
      statics: {
        _reverse: false
      },
      ctor: function ctor(duration, deltaAngle) {
        deltaAngle *= cc.RotateBy._reverse ? 1 : -1;
        this._deltaAngle = 0;
        this._startAngle = 0;
        void 0 !== deltaAngle && this.initWithDuration(duration, deltaAngle);
      },
      initWithDuration: function initWithDuration(duration, deltaAngle) {
        if (cc.ActionInterval.prototype.initWithDuration.call(this, duration)) {
          this._deltaAngle = deltaAngle;
          return true;
        }
        return false;
      },
      clone: function clone() {
        var action = new cc.RotateBy();
        this._cloneDecoration(action);
        action.initWithDuration(this._duration, this._deltaAngle);
        return action;
      },
      startWithTarget: function startWithTarget(target) {
        cc.ActionInterval.prototype.startWithTarget.call(this, target);
        this._startAngle = target.angle;
      },
      update: function update(dt) {
        dt = this._computeEaseTime(dt);
        this.target && (this.target.angle = this._startAngle + this._deltaAngle * dt);
      },
      reverse: function reverse() {
        var action = new cc.RotateBy();
        action.initWithDuration(this._duration, -this._deltaAngle);
        this._cloneDecoration(action);
        this._reverseEaseList(action);
        return action;
      }
    });
    cc.rotateBy = function(duration, deltaAngle) {
      return new cc.RotateBy(duration, deltaAngle);
    };
    cc.MoveBy = cc.Class({
      name: "cc.MoveBy",
      extends: cc.ActionInterval,
      ctor: function ctor(duration, deltaPos, deltaY) {
        this._positionDelta = cc.v2(0, 0);
        this._startPosition = cc.v2(0, 0);
        this._previousPosition = cc.v2(0, 0);
        void 0 !== deltaPos && cc.MoveBy.prototype.initWithDuration.call(this, duration, deltaPos, deltaY);
      },
      initWithDuration: function initWithDuration(duration, position, y) {
        if (cc.ActionInterval.prototype.initWithDuration.call(this, duration)) {
          if (void 0 !== position.x) {
            y = position.y;
            position = position.x;
          }
          this._positionDelta.x = position;
          this._positionDelta.y = y;
          return true;
        }
        return false;
      },
      clone: function clone() {
        var action = new cc.MoveBy();
        this._cloneDecoration(action);
        action.initWithDuration(this._duration, this._positionDelta);
        return action;
      },
      startWithTarget: function startWithTarget(target) {
        cc.ActionInterval.prototype.startWithTarget.call(this, target);
        var locPosX = target.x;
        var locPosY = target.y;
        this._previousPosition.x = locPosX;
        this._previousPosition.y = locPosY;
        this._startPosition.x = locPosX;
        this._startPosition.y = locPosY;
      },
      update: function update(dt) {
        dt = this._computeEaseTime(dt);
        if (this.target) {
          var x = this._positionDelta.x * dt;
          var y = this._positionDelta.y * dt;
          var locStartPosition = this._startPosition;
          if (cc.macro.ENABLE_STACKABLE_ACTIONS) {
            var targetX = this.target.x;
            var targetY = this.target.y;
            var locPreviousPosition = this._previousPosition;
            locStartPosition.x = locStartPosition.x + targetX - locPreviousPosition.x;
            locStartPosition.y = locStartPosition.y + targetY - locPreviousPosition.y;
            x += locStartPosition.x;
            y += locStartPosition.y;
            locPreviousPosition.x = x;
            locPreviousPosition.y = y;
            this.target.setPosition(x, y);
          } else this.target.setPosition(locStartPosition.x + x, locStartPosition.y + y);
        }
      },
      reverse: function reverse() {
        var action = new cc.MoveBy(this._duration, cc.v2(-this._positionDelta.x, -this._positionDelta.y));
        this._cloneDecoration(action);
        this._reverseEaseList(action);
        return action;
      }
    });
    cc.moveBy = function(duration, deltaPos, deltaY) {
      return new cc.MoveBy(duration, deltaPos, deltaY);
    };
    cc.MoveTo = cc.Class({
      name: "cc.MoveTo",
      extends: cc.MoveBy,
      ctor: function ctor(duration, position, y) {
        this._endPosition = cc.v2(0, 0);
        void 0 !== position && this.initWithDuration(duration, position, y);
      },
      initWithDuration: function initWithDuration(duration, position, y) {
        if (cc.MoveBy.prototype.initWithDuration.call(this, duration, position, y)) {
          if (void 0 !== position.x) {
            y = position.y;
            position = position.x;
          }
          this._endPosition.x = position;
          this._endPosition.y = y;
          return true;
        }
        return false;
      },
      clone: function clone() {
        var action = new cc.MoveTo();
        this._cloneDecoration(action);
        action.initWithDuration(this._duration, this._endPosition);
        return action;
      },
      startWithTarget: function startWithTarget(target) {
        cc.MoveBy.prototype.startWithTarget.call(this, target);
        this._positionDelta.x = this._endPosition.x - target.x;
        this._positionDelta.y = this._endPosition.y - target.y;
      }
    });
    cc.moveTo = function(duration, position, y) {
      return new cc.MoveTo(duration, position, y);
    };
    cc.SkewTo = cc.Class({
      name: "cc.SkewTo",
      extends: cc.ActionInterval,
      ctor: function ctor(t, sx, sy) {
        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 !== sy && cc.SkewTo.prototype.initWithDuration.call(this, t, sx, sy);
      },
      initWithDuration: function initWithDuration(t, sx, sy) {
        var ret = false;
        if (cc.ActionInterval.prototype.initWithDuration.call(this, t)) {
          this._endSkewX = sx;
          this._endSkewY = sy;
          ret = true;
        }
        return ret;
      },
      clone: function clone() {
        var action = new cc.SkewTo();
        this._cloneDecoration(action);
        action.initWithDuration(this._duration, this._endSkewX, this._endSkewY);
        return action;
      },
      startWithTarget: function startWithTarget(target) {
        cc.ActionInterval.prototype.startWithTarget.call(this, target);
        this._startSkewX = target.skewX % 180;
        this._deltaX = this._endSkewX - this._startSkewX;
        this._deltaX > 180 && (this._deltaX -= 360);
        this._deltaX < -180 && (this._deltaX += 360);
        this._startSkewY = target.skewY % 360;
        this._deltaY = this._endSkewY - this._startSkewY;
        this._deltaY > 180 && (this._deltaY -= 360);
        this._deltaY < -180 && (this._deltaY += 360);
      },
      update: function update(dt) {
        dt = this._computeEaseTime(dt);
        this.target.skewX = this._startSkewX + this._deltaX * dt;
        this.target.skewY = this._startSkewY + this._deltaY * dt;
      }
    });
    cc.skewTo = function(t, sx, sy) {
      return new cc.SkewTo(t, sx, sy);
    };
    cc.SkewBy = cc.Class({
      name: "cc.SkewBy",
      extends: cc.SkewTo,
      ctor: function ctor(t, sx, sy) {
        void 0 !== sy && this.initWithDuration(t, sx, sy);
      },
      initWithDuration: function initWithDuration(t, deltaSkewX, deltaSkewY) {
        var ret = false;
        if (cc.SkewTo.prototype.initWithDuration.call(this, t, deltaSkewX, deltaSkewY)) {
          this._skewX = deltaSkewX;
          this._skewY = deltaSkewY;
          ret = true;
        }
        return ret;
      },
      clone: function clone() {
        var action = new cc.SkewBy();
        this._cloneDecoration(action);
        action.initWithDuration(this._duration, this._skewX, this._skewY);
        return action;
      },
      startWithTarget: function startWithTarget(target) {
        cc.SkewTo.prototype.startWithTarget.call(this, target);
        this._deltaX = this._skewX;
        this._deltaY = this._skewY;
        this._endSkewX = this._startSkewX + this._deltaX;
        this._endSkewY = this._startSkewY + this._deltaY;
      },
      reverse: function reverse() {
        var action = new cc.SkewBy(this._duration, -this._skewX, -this._skewY);
        this._cloneDecoration(action);
        this._reverseEaseList(action);
        return action;
      }
    });
    cc.skewBy = function(t, sx, sy) {
      return new cc.SkewBy(t, sx, sy);
    };
    cc.JumpBy = cc.Class({
      name: "cc.JumpBy",
      extends: cc.ActionInterval,
      ctor: function ctor(duration, position, y, height, jumps) {
        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 !== height && cc.JumpBy.prototype.initWithDuration.call(this, duration, position, y, height, jumps);
      },
      initWithDuration: function initWithDuration(duration, position, y, height, jumps) {
        if (cc.ActionInterval.prototype.initWithDuration.call(this, duration)) {
          if (void 0 === jumps) {
            jumps = height;
            height = y;
            y = position.y;
            position = position.x;
          }
          this._delta.x = position;
          this._delta.y = y;
          this._height = height;
          this._jumps = jumps;
          return true;
        }
        return false;
      },
      clone: function clone() {
        var action = new cc.JumpBy();
        this._cloneDecoration(action);
        action.initWithDuration(this._duration, this._delta, this._height, this._jumps);
        return action;
      },
      startWithTarget: function startWithTarget(target) {
        cc.ActionInterval.prototype.startWithTarget.call(this, target);
        var locPosX = target.x;
        var locPosY = target.y;
        this._previousPosition.x = locPosX;
        this._previousPosition.y = locPosY;
        this._startPosition.x = locPosX;
        this._startPosition.y = locPosY;
      },
      update: function update(dt) {
        dt = this._computeEaseTime(dt);
        if (this.target) {
          var frac = dt * this._jumps % 1;
          var y = 4 * this._height * frac * (1 - frac);
          y += this._delta.y * dt;
          var x = this._delta.x * dt;
          var locStartPosition = this._startPosition;
          if (cc.macro.ENABLE_STACKABLE_ACTIONS) {
            var targetX = this.target.x;
            var targetY = this.target.y;
            var locPreviousPosition = this._previousPosition;
            locStartPosition.x = locStartPosition.x + targetX - locPreviousPosition.x;
            locStartPosition.y = locStartPosition.y + targetY - locPreviousPosition.y;
            x += locStartPosition.x;
            y += locStartPosition.y;
            locPreviousPosition.x = x;
            locPreviousPosition.y = y;
            this.target.setPosition(x, y);
          } else this.target.setPosition(locStartPosition.x + x, locStartPosition.y + y);
        }
      },
      reverse: function reverse() {
        var action = new cc.JumpBy(this._duration, cc.v2(-this._delta.x, -this._delta.y), this._height, this._jumps);
        this._cloneDecoration(action);
        this._reverseEaseList(action);
        return action;
      }
    });
    cc.jumpBy = function(duration, position, y, height, jumps) {
      return new cc.JumpBy(duration, position, y, height, jumps);
    };
    cc.JumpTo = cc.Class({
      name: "cc.JumpTo",
      extends: cc.JumpBy,
      ctor: function ctor(duration, position, y, height, jumps) {
        this._endPosition = cc.v2(0, 0);
        void 0 !== height && this.initWithDuration(duration, position, y, height, jumps);
      },
      initWithDuration: function initWithDuration(duration, position, y, height, jumps) {
        if (cc.JumpBy.prototype.initWithDuration.call(this, duration, position, y, height, jumps)) {
          if (void 0 === jumps) {
            y = position.y;
            position = position.x;
          }
          this._endPosition.x = position;
          this._endPosition.y = y;
          return true;
        }
        return false;
      },
      startWithTarget: function startWithTarget(target) {
        cc.JumpBy.prototype.startWithTarget.call(this, target);
        this._delta.x = this._endPosition.x - this._startPosition.x;
        this._delta.y = this._endPosition.y - this._startPosition.y;
      },
      clone: function clone() {
        var action = new cc.JumpTo();
        this._cloneDecoration(action);
        action.initWithDuration(this._duration, this._endPosition, this._height, this._jumps);
        return action;
      }
    });
    cc.jumpTo = function(duration, position, y, height, jumps) {
      return new cc.JumpTo(duration, position, y, height, jumps);
    };
    function bezierAt(a, b, c, d, t) {
      return Math.pow(1 - t, 3) * a + 3 * t * Math.pow(1 - t, 2) * b + 3 * Math.pow(t, 2) * (1 - t) * c + Math.pow(t, 3) * d;
    }
    cc.BezierBy = cc.Class({
      name: "cc.BezierBy",
      extends: cc.ActionInterval,
      ctor: function ctor(t, c) {
        this._config = [];
        this._startPosition = cc.v2(0, 0);
        this._previousPosition = cc.v2(0, 0);
        c && cc.BezierBy.prototype.initWithDuration.call(this, t, c);
      },
      initWithDuration: function initWithDuration(t, c) {
        if (cc.ActionInterval.prototype.initWithDuration.call(this, t)) {
          this._config = c;
          return true;
        }
        return false;
      },
      clone: function clone() {
        var action = new cc.BezierBy();
        this._cloneDecoration(action);
        var newConfigs = [];
        for (var i = 0; i < this._config.length; i++) {
          var selConf = this._config[i];
          newConfigs.push(cc.v2(selConf.x, selConf.y));
        }
        action.initWithDuration(this._duration, newConfigs);
        return action;
      },
      startWithTarget: function startWithTarget(target) {
        cc.ActionInterval.prototype.startWithTarget.call(this, target);
        var locPosX = target.x;
        var locPosY = target.y;
        this._previousPosition.x = locPosX;
        this._previousPosition.y = locPosY;
        this._startPosition.x = locPosX;
        this._startPosition.y = locPosY;
      },
      update: function update(dt) {
        dt = this._computeEaseTime(dt);
        if (this.target) {
          var locConfig = this._config;
          var xa = 0;
          var xb = locConfig[0].x;
          var xc = locConfig[1].x;
          var xd = locConfig[2].x;
          var ya = 0;
          var yb = locConfig[0].y;
          var yc = locConfig[1].y;
          var yd = locConfig[2].y;
          var x = bezierAt(xa, xb, xc, xd, dt);
          var y = bezierAt(ya, yb, yc, yd, dt);
          var locStartPosition = this._startPosition;
          if (cc.macro.ENABLE_STACKABLE_ACTIONS) {
            var targetX = this.target.x;
            var targetY = this.target.y;
            var locPreviousPosition = this._previousPosition;
            locStartPosition.x = locStartPosition.x + targetX - locPreviousPosition.x;
            locStartPosition.y = locStartPosition.y + targetY - locPreviousPosition.y;
            x += locStartPosition.x;
            y += locStartPosition.y;
            locPreviousPosition.x = x;
            locPreviousPosition.y = y;
            this.target.setPosition(x, y);
          } else this.target.setPosition(locStartPosition.x + x, locStartPosition.y + y);
        }
      },
      reverse: function reverse() {
        var locConfig = this._config;
        var x0 = locConfig[0].x, y0 = locConfig[0].y;
        var x1 = locConfig[1].x, y1 = locConfig[1].y;
        var x2 = locConfig[2].x, y2 = locConfig[2].y;
        var r = [ cc.v2(x1 - x2, y1 - y2), cc.v2(x0 - x2, y0 - y2), cc.v2(-x2, -y2) ];
        var action = new cc.BezierBy(this._duration, r);
        this._cloneDecoration(action);
        this._reverseEaseList(action);
        return action;
      }
    });
    cc.bezierBy = function(t, c) {
      return new cc.BezierBy(t, c);
    };
    cc.BezierTo = cc.Class({
      name: "cc.BezierTo",
      extends: cc.BezierBy,
      ctor: function ctor(t, c) {
        this._toConfig = [];
        c && this.initWithDuration(t, c);
      },
      initWithDuration: function initWithDuration(t, c) {
        if (cc.ActionInterval.prototype.initWithDuration.call(this, t)) {
          this._toConfig = c;
          return true;
        }
        return false;
      },
      clone: function clone() {
        var action = new cc.BezierTo();
        this._cloneDecoration(action);
        action.initWithDuration(this._duration, this._toConfig);
        return action;
      },
      startWithTarget: function startWithTarget(target) {
        cc.BezierBy.prototype.startWithTarget.call(this, target);
        var locStartPos = this._startPosition;
        var locToConfig = this._toConfig;
        var locConfig = this._config;
        locConfig[0] = locToConfig[0].sub(locStartPos);
        locConfig[1] = locToConfig[1].sub(locStartPos);
        locConfig[2] = locToConfig[2].sub(locStartPos);
      }
    });
    cc.bezierTo = function(t, c) {
      return new cc.BezierTo(t, c);
    };
    cc.ScaleTo = cc.Class({
      name: "cc.ScaleTo",
      extends: cc.ActionInterval,
      ctor: function ctor(duration, sx, sy) {
        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 !== sx && cc.ScaleTo.prototype.initWithDuration.call(this, duration, sx, sy);
      },
      initWithDuration: function initWithDuration(duration, sx, sy) {
        if (cc.ActionInterval.prototype.initWithDuration.call(this, duration)) {
          this._endScaleX = sx;
          this._endScaleY = null != sy ? sy : sx;
          return true;
        }
        return false;
      },
      clone: function clone() {
        var action = new cc.ScaleTo();
        this._cloneDecoration(action);
        action.initWithDuration(this._duration, this._endScaleX, this._endScaleY);
        return action;
      },
      startWithTarget: function startWithTarget(target) {
        cc.ActionInterval.prototype.startWithTarget.call(this, target);
        this._startScaleX = target.scaleX;
        this._startScaleY = target.scaleY;
        this._deltaX = this._endScaleX - this._startScaleX;
        this._deltaY = this._endScaleY - this._startScaleY;
      },
      update: function update(dt) {
        dt = this._computeEaseTime(dt);
        if (this.target) {
          this.target.scaleX = this._startScaleX + this._deltaX * dt;
          this.target.scaleY = this._startScaleY + this._deltaY * dt;
        }
      }
    });
    cc.scaleTo = function(duration, sx, sy) {
      return new cc.ScaleTo(duration, sx, sy);
    };
    cc.ScaleBy = cc.Class({
      name: "cc.ScaleBy",
      extends: cc.ScaleTo,
      startWithTarget: function startWithTarget(target) {
        cc.ScaleTo.prototype.startWithTarget.call(this, target);
        this._deltaX = this._startScaleX * this._endScaleX - this._startScaleX;
        this._deltaY = this._startScaleY * this._endScaleY - this._startScaleY;
      },
      reverse: function reverse() {
        var action = new cc.ScaleBy(this._duration, 1 / this._endScaleX, 1 / this._endScaleY);
        this._cloneDecoration(action);
        this._reverseEaseList(action);
        return action;
      },
      clone: function clone() {
        var action = new cc.ScaleBy();
        this._cloneDecoration(action);
        action.initWithDuration(this._duration, this._endScaleX, this._endScaleY);
        return action;
      }
    });
    cc.scaleBy = function(duration, sx, sy) {
      return new cc.ScaleBy(duration, sx, sy);
    };
    cc.Blink = cc.Class({
      name: "cc.Blink",
      extends: cc.ActionInterval,
      ctor: function ctor(duration, blinks) {
        this._times = 0;
        this._originalState = false;
        void 0 !== blinks && this.initWithDuration(duration, blinks);
      },
      initWithDuration: function initWithDuration(duration, blinks) {
        if (cc.ActionInterval.prototype.initWithDuration.call(this, duration)) {
          this._times = blinks;
          return true;
        }
        return false;
      },
      clone: function clone() {
        var action = new cc.Blink();
        this._cloneDecoration(action);
        action.initWithDuration(this._duration, this._times);
        return action;
      },
      update: function update(dt) {
        dt = this._computeEaseTime(dt);
        if (this.target && !this.isDone()) {
          var slice = 1 / this._times;
          var m = dt % slice;
          this.target.opacity = m > slice / 2 ? 255 : 0;
        }
      },
      startWithTarget: function startWithTarget(target) {
        cc.ActionInterval.prototype.startWithTarget.call(this, target);
        this._originalState = target.opacity;
      },
      stop: function stop() {
        this.target.opacity = this._originalState;
        cc.ActionInterval.prototype.stop.call(this);
      },
      reverse: function reverse() {
        var action = new cc.Blink(this._duration, this._times);
        this._cloneDecoration(action);
        this._reverseEaseList(action);
        return action;
      }
    });
    cc.blink = function(duration, blinks) {
      return new cc.Blink(duration, blinks);
    };
    cc.FadeTo = cc.Class({
      name: "cc.FadeTo",
      extends: cc.ActionInterval,
      ctor: function ctor(duration, opacity) {
        this._toOpacity = 0;
        this._fromOpacity = 0;
        void 0 !== opacity && cc.FadeTo.prototype.initWithDuration.call(this, duration, opacity);
      },
      initWithDuration: function initWithDuration(duration, opacity) {
        if (cc.ActionInterval.prototype.initWithDuration.call(this, duration)) {
          this._toOpacity = opacity;
          return true;
        }
        return false;
      },
      clone: function clone() {
        var action = new cc.FadeTo();
        this._cloneDecoration(action);
        action.initWithDuration(this._duration, this._toOpacity);
        return action;
      },
      update: function update(time) {
        time = this._computeEaseTime(time);
        var fromOpacity = void 0 !== this._fromOpacity ? this._fromOpacity : 255;
        this.target.opacity = fromOpacity + (this._toOpacity - fromOpacity) * time;
      },
      startWithTarget: function startWithTarget(target) {
        cc.ActionInterval.prototype.startWithTarget.call(this, target);
        this._fromOpacity = target.opacity;
      }
    });
    cc.fadeTo = function(duration, opacity) {
      return new cc.FadeTo(duration, opacity);
    };
    cc.FadeIn = cc.Class({
      name: "cc.FadeIn",
      extends: cc.FadeTo,
      ctor: function ctor(duration) {
        null == duration && (duration = 0);
        this._reverseAction = null;
        this.initWithDuration(duration, 255);
      },
      reverse: function reverse() {
        var action = new cc.FadeOut();
        action.initWithDuration(this._duration, 0);
        this._cloneDecoration(action);
        this._reverseEaseList(action);
        return action;
      },
      clone: function clone() {
        var action = new cc.FadeIn();
        this._cloneDecoration(action);
        action.initWithDuration(this._duration, this._toOpacity);
        return action;
      },
      startWithTarget: function startWithTarget(target) {
        this._reverseAction && (this._toOpacity = this._reverseAction._fromOpacity);
        cc.FadeTo.prototype.startWithTarget.call(this, target);
      }
    });
    cc.fadeIn = function(duration) {
      return new cc.FadeIn(duration);
    };
    cc.FadeOut = cc.Class({
      name: "cc.FadeOut",
      extends: cc.FadeTo,
      ctor: function ctor(duration) {
        null == duration && (duration = 0);
        this._reverseAction = null;
        this.initWithDuration(duration, 0);
      },
      reverse: function reverse() {
        var action = new cc.FadeIn();
        action._reverseAction = this;
        action.initWithDuration(this._duration, 255);
        this._cloneDecoration(action);
        this._reverseEaseList(action);
        return action;
      },
      clone: function clone() {
        var action = new cc.FadeOut();
        this._cloneDecoration(action);
        action.initWithDuration(this._duration, this._toOpacity);
        return action;
      }
    });
    cc.fadeOut = function(d) {
      return new cc.FadeOut(d);
    };
    cc.TintTo = cc.Class({
      name: "cc.TintTo",
      extends: cc.ActionInterval,
      ctor: function ctor(duration, red, green, blue) {
        this._to = cc.color(0, 0, 0);
        this._from = cc.color(0, 0, 0);
        if (red instanceof cc.Color) {
          blue = red.b;
          green = red.g;
          red = red.r;
        }
        void 0 !== blue && this.initWithDuration(duration, red, green, blue);
      },
      initWithDuration: function initWithDuration(duration, red, green, blue) {
        if (cc.ActionInterval.prototype.initWithDuration.call(this, duration)) {
          this._to = cc.color(red, green, blue);
          return true;
        }
        return false;
      },
      clone: function clone() {
        var action = new cc.TintTo();
        this._cloneDecoration(action);
        var locTo = this._to;
        action.initWithDuration(this._duration, locTo.r, locTo.g, locTo.b);
        return action;
      },
      startWithTarget: function startWithTarget(target) {
        cc.ActionInterval.prototype.startWithTarget.call(this, target);
        this._from = this.target.color;
      },
      update: function update(dt) {
        dt = this._computeEaseTime(dt);
        var locFrom = this._from, locTo = this._to;
        locFrom && (this.target.color = cc.color(locFrom.r + (locTo.r - locFrom.r) * dt, locFrom.g + (locTo.g - locFrom.g) * dt, locFrom.b + (locTo.b - locFrom.b) * dt));
      }
    });
    cc.tintTo = function(duration, red, green, blue) {
      return new cc.TintTo(duration, red, green, blue);
    };
    cc.TintBy = cc.Class({
      name: "cc.TintBy",
      extends: cc.ActionInterval,
      ctor: function ctor(duration, deltaRed, deltaGreen, deltaBlue) {
        this._deltaR = 0;
        this._deltaG = 0;
        this._deltaB = 0;
        this._fromR = 0;
        this._fromG = 0;
        this._fromB = 0;
        void 0 !== deltaBlue && this.initWithDuration(duration, deltaRed, deltaGreen, deltaBlue);
      },
      initWithDuration: function initWithDuration(duration, deltaRed, deltaGreen, deltaBlue) {
        if (cc.ActionInterval.prototype.initWithDuration.call(this, duration)) {
          this._deltaR = deltaRed;
          this._deltaG = deltaGreen;
          this._deltaB = deltaBlue;
          return true;
        }
        return false;
      },
      clone: function clone() {
        var action = new cc.TintBy();
        this._cloneDecoration(action);
        action.initWithDuration(this._duration, this._deltaR, this._deltaG, this._deltaB);
        return action;
      },
      startWithTarget: function startWithTarget(target) {
        cc.ActionInterval.prototype.startWithTarget.call(this, target);
        var color = target.color;
        this._fromR = color.r;
        this._fromG = color.g;
        this._fromB = color.b;
      },
      update: function update(dt) {
        dt = this._computeEaseTime(dt);
        this.target.color = cc.color(this._fromR + this._deltaR * dt, this._fromG + this._deltaG * dt, this._fromB + this._deltaB * dt);
      },
      reverse: function reverse() {
        var action = new cc.TintBy(this._duration, -this._deltaR, -this._deltaG, -this._deltaB);
        this._cloneDecoration(action);
        this._reverseEaseList(action);
        return action;
      }
    });
    cc.tintBy = function(duration, deltaRed, deltaGreen, deltaBlue) {
      return new cc.TintBy(duration, deltaRed, deltaGreen, deltaBlue);
    };
    cc.DelayTime = cc.Class({
      name: "cc.DelayTime",
      extends: cc.ActionInterval,
      update: function update(dt) {},
      reverse: function reverse() {
        var action = new cc.DelayTime(this._duration);
        this._cloneDecoration(action);
        this._reverseEaseList(action);
        return action;
      },
      clone: function clone() {
        var action = new cc.DelayTime();
        this._cloneDecoration(action);
        action.initWithDuration(this._duration);
        return action;
      }
    });
    cc.delayTime = function(d) {
      return new cc.DelayTime(d);
    };
    cc.ReverseTime = cc.Class({
      name: "cc.ReverseTime",
      extends: cc.ActionInterval,
      ctor: function ctor(action) {
        this._other = null;
        action && this.initWithAction(action);
      },
      initWithAction: function initWithAction(action) {
        if (!action) {
          cc.errorID(1028);
          return false;
        }
        if (action === this._other) {
          cc.errorID(1029);
          return false;
        }
        if (cc.ActionInterval.prototype.initWithDuration.call(this, action._duration)) {
          this._other = action;
          return true;
        }
        return false;
      },
      clone: function clone() {
        var action = new cc.ReverseTime();
        this._cloneDecoration(action);
        action.initWithAction(this._other.clone());
        return action;
      },
      startWithTarget: function startWithTarget(target) {
        cc.ActionInterval.prototype.startWithTarget.call(this, target);
        this._other.startWithTarget(target);
      },
      update: function update(dt) {
        dt = this._computeEaseTime(dt);
        this._other && this._other.update(1 - dt);
      },
      reverse: function reverse() {
        return this._other.clone();
      },
      stop: function stop() {
        this._other.stop();
        cc.Action.prototype.stop.call(this);
      }
    });
    cc.reverseTime = function(action) {
      return new cc.ReverseTime(action);
    };
    cc.TargetedAction = cc.Class({
      name: "cc.TargetedAction",
      extends: cc.ActionInterval,
      ctor: function ctor(target, action) {
        this._action = null;
        this._forcedTarget = null;
        action && this.initWithTarget(target, action);
      },
      initWithTarget: function initWithTarget(target, action) {
        if (this.initWithDuration(action._duration)) {
          this._forcedTarget = target;
          this._action = action;
          return true;
        }
        return false;
      },
      clone: function clone() {
        var action = new cc.TargetedAction();
        this._cloneDecoration(action);
        action.initWithTarget(this._forcedTarget, this._action.clone());
        return action;
      },
      startWithTarget: function startWithTarget(target) {
        cc.ActionInterval.prototype.startWithTarget.call(this, target);
        this._action.startWithTarget(this._forcedTarget);
      },
      stop: function stop() {
        this._action.stop();
      },
      update: function update(dt) {
        dt = this._computeEaseTime(dt);
        this._action.update(dt);
      },
      getForcedTarget: function getForcedTarget() {
        return this._forcedTarget;
      },
      setForcedTarget: function setForcedTarget(forcedTarget) {
        this._forcedTarget !== forcedTarget && (this._forcedTarget = forcedTarget);
      }
    });
    cc.targetedAction = function(target, action) {
      return new cc.TargetedAction(target, action);
    };
  }), {} ],
  7: [ (function(require, module, exports) {
    "use strict";
    require("../core/platform/CCClass");
    var js = require("../core/platform/js");
    var HashElement = function HashElement() {
      this.actions = [];
      this.target = null;
      this.actionIndex = 0;
      this.currentAction = null;
      this.paused = false;
      this.lock = false;
    };
    cc.ActionManager = function() {
      this._hashTargets = js.createMap(true);
      this._arrayTargets = [];
      this._currentTarget = null;
      cc.director._scheduler && cc.director._scheduler.enableForTarget(this);
    };
    cc.ActionManager.prototype = {
      constructor: cc.ActionManager,
      _elementPool: [],
      _searchElementByTarget: function _searchElementByTarget(arr, target) {
        for (var k = 0; k < arr.length; k++) if (target === arr[k].target) return arr[k];
        return null;
      },
      _getElement: function _getElement(target, paused) {
        var element = this._elementPool.pop();
        element || (element = new HashElement());
        element.target = target;
        element.paused = !!paused;
        return element;
      },
      _putElement: function _putElement(element) {
        element.actions.length = 0;
        element.actionIndex = 0;
        element.currentAction = null;
        element.paused = false;
        element.target = null;
        element.lock = false;
        this._elementPool.push(element);
      },
      addAction: function addAction(action, target, paused) {
        if (!action || !target) {
          cc.errorID(1e3);
          return;
        }
        var element = this._hashTargets[target._id];
        if (element) element.actions || (element.actions = []); else {
          element = this._getElement(target, paused);
          this._hashTargets[target._id] = element;
          this._arrayTargets.push(element);
        }
        element.actions.push(action);
        action.startWithTarget(target);
      },
      removeAllActions: function removeAllActions() {
        var locTargets = this._arrayTargets;
        for (var i = 0; i < locTargets.length; i++) {
          var element = locTargets[i];
          element && this._putElement(element);
        }
        this._arrayTargets.length = 0;
        this._hashTargets = js.createMap(true);
      },
      removeAllActionsFromTarget: function removeAllActionsFromTarget(target, forceDelete) {
        if (null == target) return;
        var element = this._hashTargets[target._id];
        if (element) {
          element.actions.length = 0;
          this._deleteHashElement(element);
        }
      },
      removeAction: function removeAction(action) {
        if (!action) return;
        var target = action.getOriginalTarget();
        var element = this._hashTargets[target._id];
        if (!element) return;
        for (var i = 0; i < element.actions.length; i++) if (element.actions[i] === action) {
          element.actions.splice(i, 1);
          element.actionIndex >= i && element.actionIndex--;
          break;
        }
      },
      _removeActionByTag: function _removeActionByTag(tag, element, target) {
        for (var i = 0, l = element.actions.length; i < l; ++i) {
          var action = element.actions[i];
          if (action && action.getTag() === tag) {
            if (target && action.getOriginalTarget() !== target) continue;
            this._removeActionAtIndex(i, element);
            break;
          }
        }
      },
      removeActionByTag: function removeActionByTag(tag, target) {
        tag === cc.Action.TAG_INVALID && cc.logID(1002);
        var hashTargets = this._hashTargets;
        if (target) {
          var element = hashTargets[target._id];
          element && this._removeActionByTag(tag, element, target);
        } else for (var name in hashTargets) {
          var _element = hashTargets[name];
          this._removeActionByTag(tag, _element);
        }
      },
      getActionByTag: function getActionByTag(tag, target) {
        tag === cc.Action.TAG_INVALID && cc.logID(1004);
        var element = this._hashTargets[target._id];
        if (element) {
          if (null != element.actions) for (var i = 0; i < element.actions.length; ++i) {
            var action = element.actions[i];
            if (action && action.getTag() === tag) return action;
          }
          cc.logID(1005, tag);
        }
        return null;
      },
      getNumberOfRunningActionsInTarget: function getNumberOfRunningActionsInTarget(target) {
        var element = this._hashTargets[target._id];
        if (element) return element.actions ? element.actions.length : 0;
        return 0;
      },
      pauseTarget: function pauseTarget(target) {
        var element = this._hashTargets[target._id];
        element && (element.paused = true);
      },
      resumeTarget: function resumeTarget(target) {
        var element = this._hashTargets[target._id];
        element && (element.paused = false);
      },
      pauseAllRunningActions: function pauseAllRunningActions() {
        var idsWithActions = [];
        var locTargets = this._arrayTargets;
        for (var i = 0; i < locTargets.length; i++) {
          var element = locTargets[i];
          if (element && !element.paused) {
            element.paused = true;
            idsWithActions.push(element.target);
          }
        }
        return idsWithActions;
      },
      resumeTargets: function resumeTargets(targetsToResume) {
        if (!targetsToResume) return;
        for (var i = 0; i < targetsToResume.length; i++) targetsToResume[i] && this.resumeTarget(targetsToResume[i]);
      },
      pauseTargets: function pauseTargets(targetsToPause) {
        if (!targetsToPause) return;
        for (var i = 0; i < targetsToPause.length; i++) targetsToPause[i] && this.pauseTarget(targetsToPause[i]);
      },
      purgeSharedManager: function purgeSharedManager() {
        cc.director.getScheduler().unscheduleUpdate(this);
      },
      _removeActionAtIndex: function _removeActionAtIndex(index, element) {
        var action = element.actions[index];
        element.actions.splice(index, 1);
        element.actionIndex >= index && element.actionIndex--;
        0 === element.actions.length && this._deleteHashElement(element);
      },
      _deleteHashElement: function _deleteHashElement(element) {
        var ret = false;
        if (element && !element.lock && this._hashTargets[element.target._id]) {
          delete this._hashTargets[element.target._id];
          var targets = this._arrayTargets;
          for (var i = 0, l = targets.length; i < l; i++) if (targets[i] === element) {
            targets.splice(i, 1);
            break;
          }
          this._putElement(element);
          ret = true;
        }
        return ret;
      },
      update: function update(dt) {
        var locTargets = this._arrayTargets, locCurrTarget;
        for (var elt = 0; elt < locTargets.length; elt++) {
          this._currentTarget = locTargets[elt];
          locCurrTarget = this._currentTarget;
          if (!locCurrTarget.paused && locCurrTarget.actions) {
            locCurrTarget.lock = true;
            for (locCurrTarget.actionIndex = 0; locCurrTarget.actionIndex < locCurrTarget.actions.length; locCurrTarget.actionIndex++) {
              locCurrTarget.currentAction = locCurrTarget.actions[locCurrTarget.actionIndex];
              if (!locCurrTarget.currentAction) continue;
              locCurrTarget.currentAction.step(dt * (locCurrTarget.currentAction._speedMethod ? locCurrTarget.currentAction._speed : 1));
              if (locCurrTarget.currentAction && locCurrTarget.currentAction.isDone()) {
                locCurrTarget.currentAction.stop();
                var action = locCurrTarget.currentAction;
                locCurrTarget.currentAction = null;
                this.removeAction(action);
              }
              locCurrTarget.currentAction = null;
            }
            locCurrTarget.lock = false;
          }
          0 === locCurrTarget.actions.length && this._deleteHashElement(locCurrTarget) && elt--;
        }
      }
    };
    false;
  }), {
    "../core/platform/CCClass": 138,
    "../core/platform/js": 158
  } ],
  8: [ (function(require, module, exports) {
    "use strict";
    require("./CCActionManager");
    require("./CCAction");
    require("./CCActionInterval");
    require("./CCActionInstant");
    require("./CCActionEase");
    require("./CCActionCatmullRom");
    require("./tween");
  }), {
    "./CCAction": 2,
    "./CCActionCatmullRom": 3,
    "./CCActionEase": 4,
    "./CCActionInstant": 5,
    "./CCActionInterval": 6,
    "./CCActionManager": 7,
    "./tween": 9
  } ],
  9: [ (function(require, module, exports) {
    "use strict";
    var _bezier = require("../animation/bezier");
    var _tweenID = 0;
    var TweenAction = cc.Class({
      name: "cc.TweenAction",
      extends: cc.ActionInterval,
      ctor: function ctor(duration, props, opts) {
        this._opts = opts = opts || Object.create(null);
        this._props = Object.create(null);
        opts.progress = opts.progress || this.progress;
        if (opts.easing && "string" === typeof opts.easing) {
          var easingName = opts.easing;
          opts.easing = cc.easing[easingName];
          !opts.easing && cc.warnID(1031, easingName);
        }
        var relative = this._opts.relative;
        for (var name in props) {
          var value = props[name];
          var easing = void 0, progress = void 0;
          if (void 0 !== value.value && (value.easing || value.progress)) {
            if ("string" === typeof value.easing) {
              easing = cc.easing[value.easing];
              !easing && cc.warnID(1031, value.easing);
            } else easing = value.easing;
            progress = value.progress;
            value = value.value;
          }
          var isNumber = "number" === typeof value;
          if (!isNumber && (!value.lerp || relative && !value.add && !value.mul || !value.clone)) {
            cc.warn("Can not animate " + name + " property, because it do not have [lerp, (add|mul), clone] function.");
            continue;
          }
          var prop = Object.create(null);
          prop.value = value;
          prop.easing = easing;
          prop.progress = progress;
          this._props[name] = prop;
        }
        this._originProps = props;
        this.initWithDuration(duration);
      },
      clone: function clone() {
        var action = new TweenAction(this._duration, this._originProps, this._opts);
        this._cloneDecoration(action);
        return action;
      },
      startWithTarget: function startWithTarget(target) {
        cc.ActionInterval.prototype.startWithTarget.call(this, target);
        var relative = !!this._opts.relative;
        var props = this._props;
        for (var name in props) {
          var value = target[name];
          var prop = props[name];
          if ("number" === typeof value) {
            prop.start = value;
            prop.current = value;
            prop.end = relative ? value + prop.value : prop.value;
          } else {
            prop.start = value.clone();
            prop.current = value.clone();
            prop.end = relative ? (value.add || value.mul).call(value, prop.value) : prop.value;
          }
        }
      },
      update: function update(t) {
        var opts = this._opts;
        var easingTime = t;
        opts.easing && (easingTime = opts.easing(t));
        var target = this.target;
        if (!target) return;
        var props = this._props;
        var progress = this._opts.progress;
        for (var name in props) {
          var prop = props[name];
          var time = prop.easing ? prop.easing(t) : easingTime;
          var current = prop.current = (prop.progress || progress)(prop.start, prop.end, prop.current, time);
          target[name] = current;
        }
      },
      progress: function progress(start, end, current, t) {
        "number" === typeof start ? current = start + (end - start) * t : start.lerp(end, t, current);
        return current;
      }
    });
    var SetAction = cc.Class({
      name: "cc.SetAction",
      extends: cc.ActionInstant,
      ctor: function ctor(props) {
        this._props = {};
        void 0 !== props && this.init(props);
      },
      init: function init(props) {
        for (var name in props) this._props[name] = props[name];
        return true;
      },
      update: function update() {
        var props = this._props;
        var target = this.target;
        for (var name in props) target[name] = props[name];
      },
      clone: function clone() {
        var action = new SetAction();
        action.init(this._props);
        return action;
      }
    });
    function Tween(target) {
      this._actions = [];
      this._finalAction = null;
      this._target = target;
      this._tag = cc.Action.TAG_INVALID;
    }
    Tween.stopAll = function() {
      cc.director.getActionManager().removeAllActions();
    };
    Tween.stopAllByTag = function(tag) {
      cc.director.getActionManager().removeActionByTag(tag);
    };
    Tween.stopAllByTarget = function(target) {
      cc.director.getActionManager().removeAllActionsFromTarget(target);
    };
    Tween.prototype.then = function(other) {
      other instanceof cc.Action ? this._actions.push(other.clone()) : this._actions.push(other._union());
      return this;
    };
    Tween.prototype.target = function(target) {
      this._target = target;
      return this;
    };
    Tween.prototype.start = function() {
      var target = this._target;
      if (!target) {
        cc.warn("Please set target to tween first");
        return this;
      }
      if (target instanceof cc.Object && !target.isValid) return;
      this._finalAction && cc.director.getActionManager().removeAction(this._finalAction);
      this._finalAction = this._union();
      void 0 === target._id && (target._id = ++_tweenID);
      this._finalAction.setTag(this._tag);
      cc.director.getActionManager().addAction(this._finalAction, target, false);
      return this;
    };
    Tween.prototype.stop = function() {
      this._finalAction && cc.director.getActionManager().removeAction(this._finalAction);
      return this;
    };
    Tween.prototype.tag = function(tag) {
      this._tag = tag;
      return this;
    };
    Tween.prototype.clone = function(target) {
      var action = this._union();
      return cc.tween(target).then(action.clone());
    };
    Tween.prototype.union = function() {
      var action = this._union();
      this._actions.length = 0;
      this._actions.push(action);
      return this;
    };
    Tween.prototype._union = function() {
      var actions = this._actions;
      actions = 1 === actions.length ? actions[0] : cc.sequence(actions);
      return actions;
    };
    Object.assign(Tween.prototype, {
      bezierTo: function bezierTo(duration, c1, c2, to, opts) {
        var c0x = c1.x, c0y = c1.y, c1x = c2.x, c1y = c2.y;
        opts = opts || Object.create(null);
        opts.progress = function(start, end, current, t) {
          current.x = (0, _bezier.bezier)(start.x, c0x, c1x, end.x, t);
          current.y = (0, _bezier.bezier)(start.y, c0y, c1y, end.y, t);
          return current;
        };
        return this.to(duration, {
          position: to
        }, opts);
      },
      bezierBy: function bezierBy(duration, c1, c2, to, opts) {
        var c0x = c1.x, c0y = c1.y, c1x = c2.x, c1y = c2.y;
        opts = opts || Object.create(null);
        opts.progress = function(start, end, current, t) {
          var sx = start.x, sy = start.y;
          current.x = (0, _bezier.bezier)(sx, c0x + sx, c1x + sx, end.x, t);
          current.y = (0, _bezier.bezier)(sy, c0y + sy, c1y + sy, end.y, t);
          return current;
        };
        return this.by(duration, {
          position: to
        }, opts);
      },
      flipX: function flipX() {
        var _this = this;
        return this.call((function() {
          _this._target.scaleX *= -1;
        }), this);
      },
      flipY: function flipY() {
        var _this2 = this;
        return this.call((function() {
          _this2._target.scaleY *= -1;
        }), this);
      },
      blink: function blink(duration, times, opts) {
        var slice = 1 / times;
        opts = opts || Object.create(null);
        opts.progress = function(start, end, current, t) {
          if (t >= 1) return start;
          var m = t % slice;
          return m > slice / 2 ? 255 : 0;
        };
        return this.to(duration, {
          opacity: 1
        }, opts);
      }
    });
    var tmp_args = [];
    function wrapAction(action) {
      return function() {
        tmp_args.length = 0;
        for (var l = arguments.length, i = 0; i < l; i++) {
          var arg = tmp_args[i] = arguments[i];
          arg instanceof Tween && (tmp_args[i] = arg._union());
        }
        return action.apply(this, tmp_args);
      };
    }
    var actions = {
      to: function to(duration, props, opts) {
        opts = opts || Object.create(null);
        opts.relative = false;
        return new TweenAction(duration, props, opts);
      },
      by: function by(duration, props, opts) {
        opts = opts || Object.create(null);
        opts.relative = true;
        return new TweenAction(duration, props, opts);
      },
      set: function set(props) {
        return new SetAction(props);
      },
      delay: cc.delayTime,
      call: cc.callFunc,
      hide: cc.hide,
      show: cc.show,
      removeSelf: cc.removeSelf,
      sequence: wrapAction(cc.sequence),
      parallel: wrapAction(cc.spawn)
    };
    var previousAsInputActions = {
      repeat: cc.repeat,
      repeatForever: function repeatForever(action) {
        return cc.repeat(action, 1e9);
      },
      reverseTime: cc.reverseTime
    };
    var keys = Object.keys(actions);
    var _loop = function _loop(i) {
      var key = keys[i];
      Tween.prototype[key] = function() {
        var action = actions[key].apply(this, arguments);
        this._actions.push(action);
        return this;
      };
    };
    for (var i = 0; i < keys.length; i++) _loop(i);
    keys = Object.keys(previousAsInputActions);
    var _loop2 = function _loop2(_i) {
      var key = keys[_i];
      Tween.prototype[key] = function() {
        var actions = this._actions;
        var action = arguments[arguments.length - 1];
        var length = arguments.length - 1;
        if (action instanceof cc.Tween) action = action._union(); else if (!(action instanceof cc.Action)) {
          action = actions[actions.length - 1];
          actions.length -= 1;
          length += 1;
        }
        var args = [ action ];
        for (var _i2 = 0; _i2 < length; _i2++) args.push(arguments[_i2]);
        action = previousAsInputActions[key].apply(this, args);
        actions.push(action);
        return this;
      };
    };
    for (var _i = 0; _i < keys.length; _i++) _loop2(_i);
    cc.tween = function(target) {
      return new Tween(target);
    };
    cc.Tween = Tween;
  }), {
    "../animation/bezier": 15
  } ],
  10: [ (function(require, module, exports) {
    "use strict";
    var js = cc.js;
    var Playable = require("./playable");
    var _require = require("./animation-curves"), EventAnimCurve = _require.EventAnimCurve, EventInfo = _require.EventInfo;
    var WrapModeMask = require("./types").WrapModeMask;
    var binarySearch = require("../core/utils/binary-search").binarySearchEpsilon;
    function AnimationAnimator(target, animation) {
      Playable.call(this);
      this.target = target;
      this.animation = animation;
      this._anims = new js.array.MutableForwardIterator([]);
    }
    js.extend(AnimationAnimator, Playable);
    var p = AnimationAnimator.prototype;
    p.playState = function(state, startTime) {
      if (!state.clip) return;
      state.curveLoaded || initClipData(this.target, state);
      state.animator = this;
      state.play();
      "number" === typeof startTime && state.setTime(startTime);
      this.play();
    };
    p.stopStatesExcept = function(state) {
      var iterator = this._anims;
      var array = iterator.array;
      for (iterator.i = 0; iterator.i < array.length; ++iterator.i) {
        var anim = array[iterator.i];
        if (anim === state) continue;
        this.stopState(anim);
      }
    };
    p.addAnimation = function(anim) {
      var index = this._anims.array.indexOf(anim);
      -1 === index && this._anims.push(anim);
      anim._setEventTarget(this.animation);
    };
    p.removeAnimation = function(anim) {
      var index = this._anims.array.indexOf(anim);
      if (index >= 0) {
        this._anims.fastRemoveAt(index);
        0 === this._anims.array.length && this.stop();
      } else cc.errorID(3907);
      anim.animator = null;
    };
    p.sample = function() {
      var iterator = this._anims;
      var array = iterator.array;
      for (iterator.i = 0; iterator.i < array.length; ++iterator.i) {
        var anim = array[iterator.i];
        anim.sample();
      }
    };
    p.stopState = function(state) {
      state && state.stop();
    };
    p.pauseState = function(state) {
      state && state.pause();
    };
    p.resumeState = function(state) {
      state && state.resume();
      this.isPaused && this.resume();
    };
    p.setStateTime = function(state, time) {
      if (void 0 !== time) {
        if (state) {
          state.setTime(time);
          state.sample();
        }
      } else {
        time = state;
        var array = this._anims.array;
        for (var i = 0; i < array.length; ++i) {
          var anim = array[i];
          anim.setTime(time);
          anim.sample();
        }
      }
    };
    p.onStop = function() {
      var iterator = this._anims;
      var array = iterator.array;
      for (iterator.i = 0; iterator.i < array.length; ++iterator.i) {
        var anim = array[iterator.i];
        anim.stop();
      }
    };
    p.onPause = function() {
      var array = this._anims.array;
      for (var i = 0; i < array.length; ++i) {
        var anim = array[i];
        anim.pause();
        anim.animator = null;
      }
    };
    p.onResume = function() {
      var array = this._anims.array;
      for (var i = 0; i < array.length; ++i) {
        var anim = array[i];
        anim.animator = this;
        anim.resume();
      }
    };
    p._reloadClip = function(state) {
      initClipData(this.target, state);
    };
    function createBatchedProperty(propPath, firstDotIndex, mainValue, animValue) {
      mainValue = mainValue.clone();
      var nextValue = mainValue;
      var leftIndex = firstDotIndex + 1;
      var rightIndex = propPath.indexOf(".", leftIndex);
      while (-1 !== rightIndex) {
        var nextName = propPath.slice(leftIndex, rightIndex);
        nextValue = nextValue[nextName];
        leftIndex = rightIndex + 1;
        rightIndex = propPath.indexOf(".", leftIndex);
      }
      var lastPropName = propPath.slice(leftIndex);
      nextValue[lastPropName] = animValue;
      return mainValue;
    }
    false;
    function initClipData(root, state) {
      var clip = state.clip;
      state.duration = clip.duration;
      state.speed = clip.speed;
      state.wrapMode = clip.wrapMode;
      state.frameRate = clip.sample;
      (state.wrapMode & WrapModeMask.Loop) === WrapModeMask.Loop ? state.repeatCount = Infinity : state.repeatCount = 1;
      var curves = state.curves = clip.createCurves(state, root);
      var events = clip.events;
      if (true, events) {
        var curve;
        for (var i = 0, l = events.length; i < l; i++) {
          if (!curve) {
            curve = new EventAnimCurve();
            curve.target = root;
            curves.push(curve);
          }
          var eventData = events[i];
          var ratio = eventData.frame / state.duration;
          var eventInfo = void 0;
          var index = binarySearch(curve.ratios, ratio);
          if (index >= 0) eventInfo = curve.events[index]; else {
            eventInfo = new EventInfo();
            curve.ratios.push(ratio);
            curve.events.push(eventInfo);
          }
          eventInfo.add(eventData.func, eventData.params);
        }
      }
    }
    false;
    module.exports = AnimationAnimator;
  }), {
    "../core/utils/binary-search": 202,
    "./animation-curves": 12,
    "./playable": 19,
    "./types": 20
  } ],
  11: [ (function(require, module, exports) {
    "use strict";
    var WrapMode = require("./types").WrapMode;
    var _require = require("./animation-curves"), DynamicAnimCurve = _require.DynamicAnimCurve, quickFindIndex = _require.quickFindIndex;
    var sampleMotionPaths = require("./motion-path-helper").sampleMotionPaths;
    var binarySearch = require("../core/utils/binary-search").binarySearchEpsilon;
    var AnimationClip = cc.Class({
      name: "cc.AnimationClip",
      extends: cc.Asset,
      properties: {
        _duration: {
          default: 0,
          type: cc.Float
        },
        duration: {
          get: function get() {
            return this._duration;
          }
        },
        sample: {
          default: 60
        },
        speed: {
          default: 1
        },
        wrapMode: {
          default: WrapMode.Normal
        },
        curveData: {
          default: {},
          visible: false
        },
        events: {
          default: [],
          visible: false
        }
      },
      statics: {
        createWithSpriteFrames: function createWithSpriteFrames(spriteFrames, sample) {
          if (!Array.isArray(spriteFrames)) {
            cc.errorID(3905);
            return null;
          }
          var clip = new AnimationClip();
          clip.sample = sample || clip.sample;
          clip._duration = spriteFrames.length / clip.sample;
          var frames = [];
          var step = 1 / clip.sample;
          for (var i = 0, l = spriteFrames.length; i < l; i++) frames[i] = {
            frame: i * step,
            value: spriteFrames[i]
          };
          clip.curveData = {
            comps: {
              "cc.Sprite": {
                spriteFrame: frames
              }
            }
          };
          return clip;
        }
      },
      onLoad: function onLoad() {
        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 createPropCurve(target, propPath, keyframes) {
        var motionPaths = [];
        var isMotionPathProp = target instanceof cc.Node && "position" === propPath;
        var curve = new DynamicAnimCurve();
        curve.target = target;
        curve.prop = propPath;
        for (var i = 0, l = keyframes.length; i < l; i++) {
          var keyframe = keyframes[i];
          var ratio = keyframe.frame / this.duration;
          curve.ratios.push(ratio);
          isMotionPathProp && motionPaths.push(keyframe.motionPath);
          var curveValue = keyframe.value;
          curve.values.push(curveValue);
          var curveTypes = keyframe.curve;
          if (curveTypes) {
            if ("string" === typeof curveTypes) {
              curve.types.push(curveTypes);
              continue;
            }
            if (Array.isArray(curveTypes)) {
              curveTypes[0] === curveTypes[1] && curveTypes[2] === curveTypes[3] ? curve.types.push(DynamicAnimCurve.Linear) : curve.types.push(DynamicAnimCurve.Bezier(curveTypes));
              continue;
            }
          }
          curve.types.push(DynamicAnimCurve.Linear);
        }
        isMotionPathProp && sampleMotionPaths(motionPaths, curve, this.duration, this.sample, target);
        var ratios = curve.ratios;
        var currRatioDif, lastRatioDif;
        var canOptimize = true;
        var EPSILON = 1e-6;
        for (var _i = 1, _l = ratios.length; _i < _l; _i++) {
          currRatioDif = ratios[_i] - ratios[_i - 1];
          if (1 === _i) lastRatioDif = currRatioDif; else if (Math.abs(currRatioDif - lastRatioDif) > EPSILON) {
            canOptimize = false;
            break;
          }
        }
        curve._findFrameIndex = canOptimize ? quickFindIndex : binarySearch;
        var firstValue = curve.values[0];
        void 0 === firstValue || null === firstValue || curve._lerp || ("number" === typeof firstValue ? curve._lerp = DynamicAnimCurve.prototype._lerpNumber : firstValue instanceof cc.Quat ? curve._lerp = DynamicAnimCurve.prototype._lerpQuat : firstValue instanceof cc.Vec2 ? curve._lerp = DynamicAnimCurve.prototype._lerpVector2 : firstValue instanceof cc.Vec3 ? curve._lerp = DynamicAnimCurve.prototype._lerpVector3 : firstValue.lerp && (curve._lerp = DynamicAnimCurve.prototype._lerpObject));
        return curve;
      },
      createTargetCurves: function createTargetCurves(target, curveData, curves) {
        var propsData = curveData.props;
        var compsData = curveData.comps;
        if (propsData) for (var propPath in propsData) {
          var data = propsData[propPath];
          var curve = this.createPropCurve(target, propPath, data);
          curves.push(curve);
        }
        if (compsData) for (var compName in compsData) {
          var comp = target.getComponent(compName);
          if (!comp) continue;
          var compData = compsData[compName];
          for (var _propPath in compData) {
            var _data = compData[_propPath];
            var _curve = this.createPropCurve(comp, _propPath, _data);
            curves.push(_curve);
          }
        }
      },
      createCurves: function createCurves(state, root) {
        var curveData = this.curveData;
        var childrenCurveDatas = curveData.paths;
        var curves = [];
        this.createTargetCurves(root, curveData, curves);
        for (var namePath in childrenCurveDatas) {
          var target = cc.find(namePath, root);
          if (!target) continue;
          var childCurveDatas = childrenCurveDatas[namePath];
          this.createTargetCurves(target, childCurveDatas, curves);
        }
        return curves;
      }
    });
    cc.AnimationClip = module.exports = AnimationClip;
  }), {
    "../core/utils/binary-search": 202,
    "./animation-curves": 12,
    "./motion-path-helper": 18,
    "./types": 20
  } ],
  12: [ (function(require, module, exports) {
    "use strict";
    var bezierByTime = require("./bezier").bezierByTime;
    var binarySearch = require("../core/utils/binary-search").binarySearchEpsilon;
    var WrapModeMask = require("./types").WrapModeMask;
    var WrappedInfo = require("./types").WrappedInfo;
    function computeRatioByType(ratio, type) {
      if ("string" === typeof type) {
        var func = cc.easing[type];
        func ? ratio = func(ratio) : cc.errorID(3906, type);
      } else Array.isArray(type) && (ratio = bezierByTime(type, ratio));
      return ratio;
    }
    var AnimCurve = cc.Class({
      name: "cc.AnimCurve",
      sample: function sample(time, ratio, state) {},
      onTimeChangedManually: void 0
    });
    function quickFindIndex(ratios, ratio) {
      var length = ratios.length - 1;
      if (0 === length) return 0;
      var start = ratios[0];
      if (ratio < start) return 0;
      var end = ratios[length];
      if (ratio > end) return ~ratios.length;
      ratio = (ratio - start) / (end - start);
      var eachLength = 1 / length;
      var index = ratio / eachLength;
      var floorIndex = 0 | index;
      var EPSILON = 1e-6;
      if (index - floorIndex < EPSILON) return floorIndex;
      if (floorIndex + 1 - index < EPSILON) return floorIndex + 1;
      return ~(floorIndex + 1);
    }
    var DynamicAnimCurve = cc.Class({
      name: "cc.DynamicAnimCurve",
      extends: AnimCurve,
      ctor: function ctor() {
        this._cachedIndex = 0;
      },
      properties: {
        target: null,
        prop: "",
        values: [],
        ratios: [],
        types: []
      },
      _findFrameIndex: binarySearch,
      _lerp: void 0,
      _lerpNumber: function _lerpNumber(from, to, t) {
        return from + (to - from) * t;
      },
      _lerpObject: function _lerpObject(from, to, t) {
        return from.lerp(to, t);
      },
      _lerpQuat: (function() {
        var out = cc.quat();
        return function(from, to, t) {
          return from.lerp(to, t, out);
        };
      })(),
      _lerpVector2: (function() {
        var out = cc.v2();
        return function(from, to, t) {
          return from.lerp(to, t, out);
        };
      })(),
      _lerpVector3: (function() {
        var out = cc.v3();
        return function(from, to, t) {
          return from.lerp(to, t, out);
        };
      })(),
      sample: function sample(time, ratio, state) {
        var values = this.values;
        var ratios = this.ratios;
        var frameCount = ratios.length;
        if (0 === frameCount) return;
        var shoudRefind = true;
        var cachedIndex = this._cachedIndex;
        if (cachedIndex < 0) {
          cachedIndex = ~cachedIndex;
          if (cachedIndex > 0 && cachedIndex < ratios.length) {
            var _fromRatio = ratios[cachedIndex - 1];
            var _toRatio = ratios[cachedIndex];
            ratio > _fromRatio && ratio < _toRatio && (shoudRefind = false);
          }
        }
        shoudRefind && (this._cachedIndex = this._findFrameIndex(ratios, ratio));
        var value;
        var index = this._cachedIndex;
        if (index < 0) {
          index = ~index;
          if (index <= 0) value = values[0]; else if (index >= frameCount) value = values[frameCount - 1]; else {
            var fromVal = values[index - 1];
            if (this._lerp) {
              var fromRatio = ratios[index - 1];
              var toRatio = ratios[index];
              var type = this.types[index - 1];
              var ratioBetweenFrames = (ratio - fromRatio) / (toRatio - fromRatio);
              type && (ratioBetweenFrames = computeRatioByType(ratioBetweenFrames, type));
              var toVal = values[index];
              value = this._lerp(fromVal, toVal, ratioBetweenFrames);
            } else value = fromVal;
          }
        } else value = values[index];
        this.target[this.prop] = value;
      }
    });
    DynamicAnimCurve.Linear = null;
    DynamicAnimCurve.Bezier = function(controlPoints) {
      return controlPoints;
    };
    var EventInfo = function EventInfo() {
      this.events = [];
    };
    EventInfo.prototype.add = function(func, params) {
      this.events.push({
        func: func || "",
        params: params || []
      });
    };
    var EventAnimCurve = cc.Class({
      name: "cc.EventAnimCurve",
      extends: AnimCurve,
      properties: {
        target: null,
        ratios: [],
        events: [],
        _wrappedInfo: {
          default: function _default() {
            return new WrappedInfo();
          }
        },
        _lastWrappedInfo: null,
        _ignoreIndex: NaN
      },
      _wrapIterations: function _wrapIterations(iterations) {
        iterations - (0 | iterations) === 0 && (iterations -= 1);
        return 0 | iterations;
      },
      sample: function sample(time, ratio, state) {
        var length = this.ratios.length;
        var currentWrappedInfo = state.getWrappedInfo(state.time, this._wrappedInfo);
        var direction = currentWrappedInfo.direction;
        var currentIndex = binarySearch(this.ratios, currentWrappedInfo.ratio);
        if (currentIndex < 0) {
          currentIndex = ~currentIndex - 1;
          direction < 0 && (currentIndex += 1);
        }
        this._ignoreIndex !== currentIndex && (this._ignoreIndex = NaN);
        currentWrappedInfo.frameIndex = currentIndex;
        if (!this._lastWrappedInfo) {
          this._fireEvent(currentIndex);
          this._lastWrappedInfo = new WrappedInfo(currentWrappedInfo);
          return;
        }
        var wrapMode = state.wrapMode;
        var currentIterations = this._wrapIterations(currentWrappedInfo.iterations);
        var lastWrappedInfo = this._lastWrappedInfo;
        var lastIterations = this._wrapIterations(lastWrappedInfo.iterations);
        var lastIndex = lastWrappedInfo.frameIndex;
        var lastDirection = lastWrappedInfo.direction;
        var interationsChanged = -1 !== lastIterations && currentIterations !== lastIterations;
        if (lastIndex === currentIndex && interationsChanged && 1 === length) this._fireEvent(0); else if (lastIndex !== currentIndex || interationsChanged) {
          direction = lastDirection;
          do {
            if (lastIndex !== currentIndex) {
              if (-1 === direction && 0 === lastIndex && currentIndex > 0) {
                (wrapMode & WrapModeMask.PingPong) === WrapModeMask.PingPong ? direction *= -1 : lastIndex = length;
                lastIterations++;
              } else if (1 === direction && lastIndex === length - 1 && currentIndex < length - 1) {
                (wrapMode & WrapModeMask.PingPong) === WrapModeMask.PingPong ? direction *= -1 : lastIndex = -1;
                lastIterations++;
              }
              if (lastIndex === currentIndex) break;
              if (lastIterations > currentIterations) break;
            }
            lastIndex += direction;
            cc.director.getAnimationManager().pushDelayEvent(this, "_fireEvent", [ lastIndex ]);
          } while (lastIndex !== currentIndex && lastIndex > -1 && lastIndex < length);
        }
        this._lastWrappedInfo.set(currentWrappedInfo);
      },
      _fireEvent: function _fireEvent(index) {
        if (index < 0 || index >= this.events.length || this._ignoreIndex === index) return;
        var eventInfo = this.events[index];
        var events = eventInfo.events;
        if (!this.target.isValid) return;
        var components = this.target._components;
        for (var i = 0; i < events.length; i++) {
          var event = events[i];
          var funcName = event.func;
          for (var j = 0; j < components.length; j++) {
            var component = components[j];
            var func = component[funcName];
            func && func.apply(component, event.params);
          }
        }
      },
      onTimeChangedManually: function onTimeChangedManually(time, state) {
        this._lastWrappedInfo = null;
        this._ignoreIndex = NaN;
        var info = state.getWrappedInfo(time, this._wrappedInfo);
        var direction = info.direction;
        var frameIndex = binarySearch(this.ratios, info.ratio);
        if (frameIndex < 0) {
          frameIndex = ~frameIndex - 1;
          direction < 0 && (frameIndex += 1);
          this._ignoreIndex = frameIndex;
        }
      }
    });
    false;
    module.exports = {
      AnimCurve: AnimCurve,
      DynamicAnimCurve: DynamicAnimCurve,
      EventAnimCurve: EventAnimCurve,
      EventInfo: EventInfo,
      computeRatioByType: computeRatioByType,
      quickFindIndex: quickFindIndex
    };
  }), {
    "../core/utils/binary-search": 202,
    "./bezier": 15,
    "./types": 20
  } ],
  13: [ (function(require, module, exports) {
    "use strict";
    var js = cc.js;
    var AnimationManager = cc.Class({
      ctor: function ctor() {
        this._anims = new js.array.MutableForwardIterator([]);
        this._delayEvents = [];
        cc.director._scheduler && cc.director._scheduler.enableForTarget(this);
      },
      update: function update(dt) {
        var iterator = this._anims;
        var array = iterator.array;
        for (iterator.i = 0; iterator.i < array.length; ++iterator.i) {
          var anim = array[iterator.i];
          anim._isPlaying && !anim._isPaused && anim.update(dt);
        }
        var events = this._delayEvents;
        for (var i = 0; i < events.length; i++) {
          var event = events[i];
          event.target[event.func].apply(event.target, event.args);
        }
        events.length = 0;
      },
      destruct: function destruct() {},
      addAnimation: function addAnimation(anim) {
        var index = this._anims.array.indexOf(anim);
        -1 === index && this._anims.push(anim);
      },
      removeAnimation: function removeAnimation(anim) {
        var index = this._anims.array.indexOf(anim);
        index >= 0 ? this._anims.fastRemoveAt(index) : cc.errorID(3907);
      },
      pushDelayEvent: function pushDelayEvent(target, func, args) {
        this._delayEvents.push({
          target: target,
          func: func,
          args: args
        });
      }
    });
    cc.AnimationManager = module.exports = AnimationManager;
  }), {} ],
  14: [ (function(require, module, exports) {
    "use strict";
    var js = cc.js;
    var Playable = require("./playable");
    var Types = require("./types");
    var WrappedInfo = Types.WrappedInfo;
    var WrapMode = Types.WrapMode;
    var WrapModeMask = Types.WrapModeMask;
    function AnimationState(clip, name) {
      Playable.call(this);
      this._currentFramePlayed = false;
      this._delay = 0;
      this._delayTime = 0;
      this._wrappedInfo = new WrappedInfo();
      this._lastWrappedInfo = null;
      this._process = process;
      this._clip = clip;
      this._name = name || clip && clip.name;
      this.animator = null;
      this.curves = [];
      this.delay = 0;
      this.repeatCount = 1;
      this.duration = 1;
      this.speed = 1;
      this.wrapMode = WrapMode.Normal;
      this.time = 0;
      this._target = null;
      this._lastframeEventOn = false;
      this.emit = function() {
        var args = new Array(arguments.length);
        for (var i = 0, l = args.length; i < l; i++) args[i] = arguments[i];
        cc.director.getAnimationManager().pushDelayEvent(this, "_emit", args);
      };
    }
    js.extend(AnimationState, Playable);
    var proto = AnimationState.prototype;
    proto._emit = function(type, state) {
      this._target && this._target.isValid && this._target.emit(type, type, state);
    };
    proto.on = function(type, callback, target) {
      if (this._target && this._target.isValid) {
        "lastframe" === type && (this._lastframeEventOn = true);
        return this._target.on(type, callback, target);
      }
      return null;
    };
    proto.once = function(type, callback, target) {
      if (this._target && this._target.isValid) {
        "lastframe" === type && (this._lastframeEventOn = true);
        var self = this;
        return this._target.once(type, (function(event) {
          callback.call(target, event);
          self._lastframeEventOn = false;
        }));
      }
      return null;
    };
    proto.off = function(type, callback, target) {
      if (this._target && this._target.isValid) {
        "lastframe" === type && (this._target.hasEventListener(type) || (this._lastframeEventOn = false));
        this._target.off(type, callback, target);
      }
    };
    proto._setEventTarget = function(target) {
      this._target = target;
    };
    proto.onPlay = function() {
      this.setTime(0);
      this._delayTime = this._delay;
      cc.director.getAnimationManager().addAnimation(this);
      this.animator && this.animator.addAnimation(this);
      this.emit("play", this);
    };
    proto.onStop = function() {
      this.isPaused || cc.director.getAnimationManager().removeAnimation(this);
      this.animator && this.animator.removeAnimation(this);
      this.emit("stop", this);
    };
    proto.onResume = function() {
      cc.director.getAnimationManager().addAnimation(this);
      this.emit("resume", this);
    };
    proto.onPause = function() {
      cc.director.getAnimationManager().removeAnimation(this);
      this.emit("pause", this);
    };
    proto.setTime = function(time) {
      this._currentFramePlayed = false;
      this.time = time || 0;
      var curves = this.curves;
      for (var i = 0, l = curves.length; i < l; i++) {
        var curve = curves[i];
        curve.onTimeChangedManually && curve.onTimeChangedManually(time, this);
      }
    };
    function process() {
      var info = this.sample();
      if (this._lastframeEventOn) {
        var lastInfo;
        lastInfo = this._lastWrappedInfo ? this._lastWrappedInfo : this._lastWrappedInfo = new WrappedInfo(info);
        this.repeatCount > 1 && (0 | info.iterations) > (0 | lastInfo.iterations) && this.emit("lastframe", this);
        lastInfo.set(info);
      }
      if (info.stopped) {
        this.stop();
        this.emit("finished", this);
      }
    }
    function simpleProcess() {
      var time = this.time;
      var duration = this.duration;
      if (time > duration) {
        time %= duration;
        0 === time && (time = duration);
      } else if (time < 0) {
        time %= duration;
        0 !== time && (time += duration);
      }
      var ratio = time / duration;
      var curves = this.curves;
      for (var i = 0, len = curves.length; i < len; i++) {
        var curve = curves[i];
        curve.sample(time, ratio, this);
      }
      if (this._lastframeEventOn) {
        void 0 === this._lastIterations && (this._lastIterations = ratio);
        (this.time > 0 && this._lastIterations > ratio || this.time < 0 && this._lastIterations < ratio) && this.emit("lastframe", this);
        this._lastIterations = ratio;
      }
    }
    proto.update = function(delta) {
      if (this._delayTime > 0) {
        this._delayTime -= delta;
        if (this._delayTime > 0) return;
      }
      this._currentFramePlayed ? this.time += delta * this.speed : this._currentFramePlayed = true;
      this._process();
    };
    proto._needRevers = function(currentIterations) {
      var wrapMode = this.wrapMode;
      var needRevers = false;
      if ((wrapMode & WrapModeMask.PingPong) === WrapModeMask.PingPong) {
        var isEnd = currentIterations - (0 | currentIterations) === 0;
        isEnd && currentIterations > 0 && (currentIterations -= 1);
        var isOddIteration = 1 & currentIterations;
        isOddIteration && (needRevers = !needRevers);
      }
      (wrapMode & WrapModeMask.Reverse) === WrapModeMask.Reverse && (needRevers = !needRevers);
      return needRevers;
    };
    proto.getWrappedInfo = function(time, info) {
      info = info || new WrappedInfo();
      var stopped = false;
      var duration = this.duration;
      var repeatCount = this.repeatCount;
      var currentIterations = time > 0 ? time / duration : -time / duration;
      if (currentIterations >= repeatCount) {
        currentIterations = repeatCount;
        stopped = true;
        var tempRatio = repeatCount - (0 | repeatCount);
        0 === tempRatio && (tempRatio = 1);
        time = tempRatio * duration * (time > 0 ? 1 : -1);
      }
      if (time > duration) {
        var tempTime = time % duration;
        time = 0 === tempTime ? duration : tempTime;
      } else if (time < 0) {
        time %= duration;
        0 !== time && (time += duration);
      }
      var needRevers = false;
      var shouldWrap = this._wrapMode & WrapModeMask.ShouldWrap;
      shouldWrap && (needRevers = this._needRevers(currentIterations));
      var direction = needRevers ? -1 : 1;
      this.speed < 0 && (direction *= -1);
      shouldWrap && needRevers && (time = duration - time);
      info.ratio = time / duration;
      info.time = time;
      info.direction = direction;
      info.stopped = stopped;
      info.iterations = currentIterations;
      return info;
    };
    proto.sample = function() {
      var info = this.getWrappedInfo(this.time, this._wrappedInfo);
      var curves = this.curves;
      for (var i = 0, len = curves.length; i < len; i++) {
        var curve = curves[i];
        curve.sample(info.time, info.ratio, this);
      }
      return info;
    };
    js.get(proto, "clip", (function() {
      return this._clip;
    }));
    js.get(proto, "name", (function() {
      return this._name;
    }));
    js.obsolete(proto, "AnimationState.length", "duration");
    js.getset(proto, "curveLoaded", (function() {
      return this.curves.length > 0;
    }), (function() {
      this.curves.length = 0;
    }));
    js.getset(proto, "wrapMode", (function() {
      return this._wrapMode;
    }), (function(value) {
      this._wrapMode = value;
      false;
      this.time = 0;
      value & WrapModeMask.Loop ? this.repeatCount = Infinity : this.repeatCount = 1;
    }));
    js.getset(proto, "repeatCount", (function() {
      return this._repeatCount;
    }), (function(value) {
      this._repeatCount = value;
      var shouldWrap = this._wrapMode & WrapModeMask.ShouldWrap;
      var reverse = (this.wrapMode & WrapModeMask.Reverse) === WrapModeMask.Reverse;
      this._process = Infinity !== value || shouldWrap || reverse ? process : simpleProcess;
    }));
    js.getset(proto, "delay", (function() {
      return this._delay;
    }), (function(value) {
      this._delayTime = this._delay = value;
    }));
    cc.AnimationState = module.exports = AnimationState;
  }), {
    "./playable": 19,
    "./types": 20
  } ],
  15: [ (function(require, module, exports) {
    "use strict";
    function bezier(C1, C2, C3, C4, t) {
      var t1 = 1 - t;
      return t1 * (t1 * (C1 + (3 * C2 - C1) * t) + 3 * C3 * t * t) + C4 * t * t * t;
    }
    var cos = Math.cos, acos = Math.acos, max = Math.max, pi = Math.PI, tau = 2 * pi, sqrt = Math.sqrt;
    function crt(v) {
      return v < 0 ? -Math.pow(-v, 1 / 3) : Math.pow(v, 1 / 3);
    }
    function cardano(curve, x) {
      var pa = x - 0;
      var pb = x - curve[0];
      var pc = x - curve[2];
      var pd = x - 1;
      var pa3 = 3 * pa;
      var pb3 = 3 * pb;
      var pc3 = 3 * pc;
      var d = -pa + pb3 - pc3 + pd, rd = 1 / d, r3 = 1 / 3, a = (pa3 - 6 * pb + pc3) * rd, a3 = a * r3, b = (-pa3 + pb3) * rd, c = pa * rd, p = (3 * b - a * a) * r3, p3 = p * r3, q = (2 * a * a * a - 9 * a * b + 27 * c) / 27, q2 = q / 2, discriminant = q2 * q2 + p3 * p3 * p3, u1, v1, x1, x2, x3;
      if (discriminant < 0) {
        var mp3 = -p * r3, mp33 = mp3 * mp3 * mp3, r = sqrt(mp33), t = -q / (2 * r), cosphi = t < -1 ? -1 : t > 1 ? 1 : t, phi = acos(cosphi), crtr = crt(r), t1 = 2 * crtr;
        x1 = t1 * cos(phi * r3) - a3;
        x2 = t1 * cos((phi + tau) * r3) - a3;
        x3 = t1 * cos((phi + 2 * tau) * r3) - a3;
        return 0 <= x1 && x1 <= 1 ? 0 <= x2 && x2 <= 1 ? 0 <= x3 && x3 <= 1 ? max(x1, x2, x3) : max(x1, x2) : 0 <= x3 && x3 <= 1 ? max(x1, x3) : x1 : 0 <= x2 && x2 <= 1 ? 0 <= x3 && x3 <= 1 ? max(x2, x3) : x2 : x3;
      }
      if (0 === discriminant) {
        u1 = q2 < 0 ? crt(-q2) : -crt(q2);
        x1 = 2 * u1 - a3;
        x2 = -u1 - a3;
        return 0 <= x1 && x1 <= 1 ? 0 <= x2 && x2 <= 1 ? max(x1, x2) : x1 : x2;
      }
      var sd = sqrt(discriminant);
      u1 = crt(-q2 + sd);
      v1 = crt(q2 + sd);
      x1 = u1 - v1 - a3;
      return x1;
    }
    function bezierByTime(controlPoints, x) {
      var percent = cardano(controlPoints, x);
      var p1y = controlPoints[1];
      var p2y = controlPoints[3];
      return ((1 - percent) * (p1y + (p2y - p1y) * percent) * 3 + percent * percent) * percent;
    }
    false;
    module.exports = {
      bezier: bezier,
      bezierByTime: bezierByTime
    };
  }), {} ],
  16: [ (function(require, module, exports) {
    "use strict";
    var easing = {
      constant: function constant() {
        return 0;
      },
      linear: function linear(k) {
        return k;
      },
      quadIn: function quadIn(k) {
        return k * k;
      },
      quadOut: function quadOut(k) {
        return k * (2 - k);
      },
      quadInOut: function quadInOut(k) {
        if ((k *= 2) < 1) return .5 * k * k;
        return -.5 * (--k * (k - 2) - 1);
      },
      cubicIn: function cubicIn(k) {
        return k * k * k;
      },
      cubicOut: function cubicOut(k) {
        return --k * k * k + 1;
      },
      cubicInOut: function cubicInOut(k) {
        if ((k *= 2) < 1) return .5 * k * k * k;
        return .5 * ((k -= 2) * k * k + 2);
      },
      quartIn: function quartIn(k) {
        return k * k * k * k;
      },
      quartOut: function quartOut(k) {
        return 1 - --k * k * k * k;
      },
      quartInOut: function quartInOut(k) {
        if ((k *= 2) < 1) return .5 * k * k * k * k;
        return -.5 * ((k -= 2) * k * k * k - 2);
      },
      quintIn: function quintIn(k) {
        return k * k * k * k * k;
      },
      quintOut: function quintOut(k) {
        return --k * k * k * k * k + 1;
      },
      quintInOut: function quintInOut(k) {
        if ((k *= 2) < 1) return .5 * k * k * k * k * k;
        return .5 * ((k -= 2) * k * k * k * k + 2);
      },
      sineIn: function sineIn(k) {
        return 1 - Math.cos(k * Math.PI / 2);
      },
      sineOut: function sineOut(k) {
        return Math.sin(k * Math.PI / 2);
      },
      sineInOut: function sineInOut(k) {
        return .5 * (1 - Math.cos(Math.PI * k));
      },
      expoIn: function expoIn(k) {
        return 0 === k ? 0 : Math.pow(1024, k - 1);
      },
      expoOut: function expoOut(k) {
        return 1 === k ? 1 : 1 - Math.pow(2, -10 * k);
      },
      expoInOut: function expoInOut(k) {
        if (0 === k) return 0;
        if (1 === k) return 1;
        if ((k *= 2) < 1) return .5 * Math.pow(1024, k - 1);
        return .5 * (2 - Math.pow(2, -10 * (k - 1)));
      },
      circIn: function circIn(k) {
        return 1 - Math.sqrt(1 - k * k);
      },
      circOut: function circOut(k) {
        return Math.sqrt(1 - --k * k);
      },
      circInOut: function circInOut(k) {
        if ((k *= 2) < 1) return -.5 * (Math.sqrt(1 - k * k) - 1);
        return .5 * (Math.sqrt(1 - (k -= 2) * k) + 1);
      },
      elasticIn: function elasticIn(k) {
        var s, a = .1, p = .4;
        if (0 === k) return 0;
        if (1 === k) return 1;
        if (!a || a < 1) {
          a = 1;
          s = p / 4;
        } else s = p * Math.asin(1 / a) / (2 * Math.PI);
        return -a * Math.pow(2, 10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p);
      },
      elasticOut: function elasticOut(k) {
        var s, a = .1, p = .4;
        if (0 === k) return 0;
        if (1 === k) return 1;
        if (!a || a < 1) {
          a = 1;
          s = p / 4;
        } else s = p * Math.asin(1 / a) / (2 * Math.PI);
        return a * Math.pow(2, -10 * k) * Math.sin((k - s) * (2 * Math.PI) / p) + 1;
      },
      elasticInOut: function elasticInOut(k) {
        var s, a = .1, p = .4;
        if (0 === k) return 0;
        if (1 === k) return 1;
        if (!a || a < 1) {
          a = 1;
          s = p / 4;
        } else s = p * Math.asin(1 / a) / (2 * Math.PI);
        if ((k *= 2) < 1) return a * Math.pow(2, 10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p) * -.5;
        return a * Math.pow(2, -10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p) * .5 + 1;
      },
      backIn: function backIn(k) {
        var s = 1.70158;
        return k * k * ((s + 1) * k - s);
      },
      backOut: function backOut(k) {
        var s = 1.70158;
        return --k * k * ((s + 1) * k + s) + 1;
      },
      backInOut: function backInOut(k) {
        var s = 2.5949095;
        if ((k *= 2) < 1) return k * k * ((s + 1) * k - s) * .5;
        return .5 * ((k -= 2) * k * ((s + 1) * k + s) + 2);
      },
      bounceIn: function bounceIn(k) {
        return 1 - easing.bounceOut(1 - k);
      },
      bounceOut: function bounceOut(k) {
        return k < 1 / 2.75 ? 7.5625 * k * k : k < 2 / 2.75 ? 7.5625 * (k -= 1.5 / 2.75) * k + .75 : k < 2.5 / 2.75 ? 7.5625 * (k -= 2.25 / 2.75) * k + .9375 : 7.5625 * (k -= 2.625 / 2.75) * k + .984375;
      },
      bounceInOut: function bounceInOut(k) {
        if (k < .5) return .5 * easing.bounceIn(2 * k);
        return .5 * easing.bounceOut(2 * k - 1) + .5;
      },
      smooth: function smooth(t) {
        if (t <= 0) return 0;
        if (t >= 1) return 1;
        return t * t * (3 - 2 * t);
      },
      fade: function fade(t) {
        if (t <= 0) return 0;
        if (t >= 1) return 1;
        return t * t * t * (t * (6 * t - 15) + 10);
      }
    };
    function _makeOutIn(fnIn, fnOut) {
      return function(k) {
        if (k < .5) return fnOut(2 * k) / 2;
        return fnIn(2 * k - 1) / 2 + .5;
      };
    }
    easing.quadOutIn = _makeOutIn(easing.quadIn, easing.quadOut);
    easing.cubicOutIn = _makeOutIn(easing.cubicIn, easing.cubicOut);
    easing.quartOutIn = _makeOutIn(easing.quartIn, easing.quartOut);
    easing.quintOutIn = _makeOutIn(easing.quintIn, easing.quintOut);
    easing.sineOutIn = _makeOutIn(easing.sineIn, easing.sineOut);
    easing.expoOutIn = _makeOutIn(easing.expoIn, easing.expoOut);
    easing.circOutIn = _makeOutIn(easing.circIn, easing.circOut);
    easing.backOutIn = _makeOutIn(easing.backIn, easing.backOut);
    easing.bounceIn = function(k) {
      return 1 - easing.bounceOut(1 - k);
    };
    easing.bounceInOut = function(k) {
      if (k < .5) return .5 * easing.bounceIn(2 * k);
      return .5 * easing.bounceOut(2 * k - 1) + .5;
    };
    easing.bounceOutIn = _makeOutIn(easing.bounceIn, easing.bounceOut);
    cc.easing = module.exports = easing;
  }), {} ],
  17: [ (function(require, module, exports) {
    "use strict";
    require("./bezier");
    require("./easing");
    require("./types");
    require("./motion-path-helper");
    require("./animation-curves");
    require("./animation-clip");
    require("./animation-manager");
    require("./animation-state");
    require("./animation-animator");
  }), {
    "./animation-animator": 10,
    "./animation-clip": 11,
    "./animation-curves": 12,
    "./animation-manager": 13,
    "./animation-state": 14,
    "./bezier": 15,
    "./easing": 16,
    "./motion-path-helper": 18,
    "./types": 20
  } ],
  18: [ (function(require, module, exports) {
    "use strict";
    var DynamicAnimCurve = require("./animation-curves").DynamicAnimCurve;
    var computeRatioByType = require("./animation-curves").computeRatioByType;
    var bezier = require("./bezier").bezier;
    var binarySearch = require("../core/utils/binary-search").binarySearchEpsilon;
    var v2 = cc.v2;
    function Curve(points) {
      this.points = points || [];
      this.beziers = [];
      this.ratios = [];
      this.progresses = [];
      this.length = 0;
      this.computeBeziers();
    }
    Curve.prototype.computeBeziers = function() {
      this.beziers.length = 0;
      this.ratios.length = 0;
      this.progresses.length = 0;
      this.length = 0;
      var bezier;
      for (var i = 1; i < this.points.length; i++) {
        var startPoint = this.points[i - 1];
        var endPoint = this.points[i];
        bezier = new Bezier();
        bezier.start = startPoint.pos;
        bezier.startCtrlPoint = startPoint.out;
        bezier.end = endPoint.pos;
        bezier.endCtrlPoint = endPoint["in"];
        this.beziers.push(bezier);
        this.length += bezier.getLength();
      }
      var current = 0;
      for (var i = 0; i < this.beziers.length; i++) {
        bezier = this.beziers[i];
        this.ratios[i] = bezier.getLength() / this.length;
        this.progresses[i] = current += this.ratios[i];
      }
      return this.beziers;
    };
    function Bezier() {
      this.start = v2();
      this.end = v2();
      this.startCtrlPoint = v2();
      this.endCtrlPoint = v2();
    }
    Bezier.prototype.getPointAt = function(u) {
      var t = this.getUtoTmapping(u);
      return this.getPoint(t);
    };
    Bezier.prototype.getPoint = function(t) {
      var x = bezier(this.start.x, this.startCtrlPoint.x, this.endCtrlPoint.x, this.end.x, t);
      var y = bezier(this.start.y, this.startCtrlPoint.y, this.endCtrlPoint.y, this.end.y, t);
      return new v2(x, y);
    };
    Bezier.prototype.getLength = function() {
      var lengths = this.getLengths();
      return lengths[lengths.length - 1];
    };
    Bezier.prototype.getLengths = function(divisions) {
      divisions || (divisions = this.__arcLengthDivisions ? this.__arcLengthDivisions : 200);
      if (this.cacheArcLengths && this.cacheArcLengths.length === divisions + 1) return this.cacheArcLengths;
      var cache = [];
      var current, last = this.getPoint(0), vector = v2();
      var p, sum = 0;
      cache.push(0);
      for (p = 1; p <= divisions; p++) {
        current = this.getPoint(p / divisions);
        vector.x = last.x - current.x;
        vector.y = last.y - current.y;
        sum += vector.mag();
        cache.push(sum);
        last = current;
      }
      this.cacheArcLengths = cache;
      return cache;
    };
    Bezier.prototype.getUtoTmapping = function(u, distance) {
      var arcLengths = this.getLengths();
      var i = 0, il = arcLengths.length;
      var targetArcLength;
      targetArcLength = distance || u * arcLengths[il - 1];
      var low = 0, high = il - 1, comparison;
      while (low <= high) {
        i = Math.floor(low + (high - low) / 2);
        comparison = arcLengths[i] - targetArcLength;
        if (comparison < 0) {
          low = i + 1;
          continue;
        }
        if (comparison > 0) {
          high = i - 1;
          continue;
        }
        high = i;
        break;
      }
      i = high;
      if (arcLengths[i] === targetArcLength) {
        var t = i / (il - 1);
        return t;
      }
      var lengthBefore = arcLengths[i];
      var lengthAfter = arcLengths[i + 1];
      var segmentLength = lengthAfter - lengthBefore;
      var segmentFraction = (targetArcLength - lengthBefore) / segmentLength;
      var t = (i + segmentFraction) / (il - 1);
      return t;
    };
    function checkMotionPath(motionPath) {
      if (!Array.isArray(motionPath)) return false;
      for (var i = 0, l = motionPath.length; i < l; i++) {
        var controls = motionPath[i];
        if (!Array.isArray(controls) || 6 !== controls.length) return false;
      }
      return true;
    }
    function sampleMotionPaths(motionPaths, data, duration, fps, target) {
      function createControlPoints(array) {
        if (array instanceof cc.Vec2) return {
          in: array,
          pos: array,
          out: array
        };
        if (Array.isArray(array) && 6 === array.length) return {
          in: v2(array[2], array[3]),
          pos: v2(array[0], array[1]),
          out: v2(array[4], array[5])
        };
        return {
          in: cc.Vec2.ZERO,
          pos: cc.Vec2.ZERO,
          out: cc.Vec2.ZERO
        };
      }
      var values = data.values = data.values.map((function(value) {
        Array.isArray(value) && (value = 2 === value.length ? cc.v2(value[0], value[1]) : cc.v3(value[0], value[1], value[2]));
        return value;
      }));
      if (0 === motionPaths.length || 0 === values.length) return;
      var motionPathValid = false;
      for (var _i = 0; _i < motionPaths.length; _i++) {
        var _motionPath = motionPaths[_i];
        if (_motionPath && !checkMotionPath(_motionPath)) {
          cc.errorID(3904, target ? target.name : "", "position", _i);
          _motionPath = null;
        }
        if (_motionPath && _motionPath.length > 0) {
          motionPathValid = true;
          break;
        }
      }
      if (!motionPathValid) return;
      if (1 === values.length) return;
      var types = data.types;
      var ratios = data.ratios;
      var newValues = data.values = [];
      var newTypes = data.types = [];
      var newRatios = data.ratios = [];
      function addNewDatas(value, type, ratio) {
        newValues.push(value);
        newTypes.push(type);
        newRatios.push(ratio);
      }
      var startRatioOffset = 0;
      var EPSILON = 1e-6;
      var newType = DynamicAnimCurve.Linear;
      for (var i = 0, l = motionPaths.length; i < l - 1; i++) {
        var motionPath = motionPaths[i];
        var ratio = ratios[i];
        var nextRatio = ratios[i + 1];
        var betweenRatio = nextRatio - ratio;
        var value = values[i];
        var nextValue = values[i + 1];
        var type = types[i];
        var results = [];
        var progress = startRatioOffset / betweenRatio;
        var speed = 1 / (betweenRatio * duration * fps);
        var finalProgress;
        if (motionPath && motionPath.length > 0) {
          var points = [];
          points.push(createControlPoints(value));
          for (var j = 0, l2 = motionPath.length; j < l2; j++) {
            var controlPoints = createControlPoints(motionPath[j]);
            points.push(controlPoints);
          }
          points.push(createControlPoints(nextValue));
          var curve = new Curve(points);
          curve.computeBeziers();
          var progresses = curve.progresses;
          while (1 - progress > EPSILON) {
            finalProgress = progress;
            finalProgress = computeRatioByType(finalProgress, type);
            var pos, bezier, normal, length;
            if (finalProgress < 0) {
              bezier = curve.beziers[0];
              length = (0 - finalProgress) * bezier.getLength();
              normal = bezier.start.sub(bezier.endCtrlPoint).normalize();
              pos = bezier.start.add(normal.mul(length));
            } else if (finalProgress > 1) {
              bezier = curve.beziers[curve.beziers.length - 1];
              length = (finalProgress - 1) * bezier.getLength();
              normal = bezier.end.sub(bezier.startCtrlPoint).normalize();
              pos = bezier.end.add(normal.mul(length));
            } else {
              var bezierIndex = binarySearch(progresses, finalProgress);
              bezierIndex < 0 && (bezierIndex = ~bezierIndex);
              finalProgress -= bezierIndex > 0 ? progresses[bezierIndex - 1] : 0;
              finalProgress /= curve.ratios[bezierIndex];
              pos = curve.beziers[bezierIndex].getPointAt(finalProgress);
            }
            results.push(pos);
            progress += speed;
          }
        } else while (1 - progress > EPSILON) {
          finalProgress = progress;
          finalProgress = computeRatioByType(finalProgress, type);
          results.push(value.lerp(nextValue, finalProgress));
          progress += speed;
        }
        newType = "constant" === type ? type : DynamicAnimCurve.Linear;
        for (var j = 0, l2 = results.length; j < l2; j++) {
          var newRatio = ratio + startRatioOffset + speed * j * betweenRatio;
          addNewDatas(results[j], newType, newRatio);
        }
        startRatioOffset = Math.abs(progress - 1) > EPSILON ? (progress - 1) * betweenRatio : 0;
      }
      ratios[ratios.length - 1] !== newRatios[newRatios.length - 1] && addNewDatas(values[values.length - 1], newType, ratios[ratios.length - 1]);
    }
    false;
    module.exports = {
      sampleMotionPaths: sampleMotionPaths,
      Curve: Curve,
      Bezier: Bezier
    };
  }), {
    "../core/utils/binary-search": 202,
    "./animation-curves": 12,
    "./bezier": 15
  } ],
  19: [ (function(require, module, exports) {
    "use strict";
    var js = cc.js;
    var debug = require("../core/CCDebug");
    function Playable() {
      this._isPlaying = false;
      this._isPaused = false;
      this._stepOnce = false;
    }
    var prototype = Playable.prototype;
    js.get(prototype, "isPlaying", (function() {
      return this._isPlaying;
    }), true);
    js.get(prototype, "isPaused", (function() {
      return this._isPaused;
    }), true);
    var virtual = function virtual() {};
    prototype.onPlay = virtual;
    prototype.onPause = virtual;
    prototype.onResume = virtual;
    prototype.onStop = virtual;
    prototype.onError = virtual;
    prototype.play = function() {
      if (this._isPlaying) if (this._isPaused) {
        this._isPaused = false;
        this.onResume();
      } else this.onError(debug.getError(3912)); else {
        this._isPlaying = true;
        this.onPlay();
      }
    };
    prototype.stop = function() {
      if (this._isPlaying) {
        this._isPlaying = false;
        this.onStop();
        this._isPaused = false;
      }
    };
    prototype.pause = function() {
      if (this._isPlaying && !this._isPaused) {
        this._isPaused = true;
        this.onPause();
      }
    };
    prototype.resume = function() {
      if (this._isPlaying && this._isPaused) {
        this._isPaused = false;
        this.onResume();
      }
    };
    prototype.step = function() {
      this.pause();
      this._stepOnce = true;
      this._isPlaying || this.play();
    };
    module.exports = Playable;
  }), {
    "../core/CCDebug": 23
  } ],
  20: [ (function(require, module, exports) {
    "use strict";
    var WrapModeMask = {
      Loop: 2,
      ShouldWrap: 4,
      PingPong: 22,
      Reverse: 36
    };
    var WrapMode = cc.Enum({
      Default: 0,
      Normal: 1,
      Reverse: WrapModeMask.Reverse,
      Loop: WrapModeMask.Loop,
      LoopReverse: WrapModeMask.Loop | WrapModeMask.Reverse,
      PingPong: WrapModeMask.PingPong,
      PingPongReverse: WrapModeMask.PingPong | WrapModeMask.Reverse
    });
    cc.WrapMode = WrapMode;
    function WrappedInfo(info) {
      if (info) {
        this.set(info);
        return;
      }
      this.ratio = 0;
      this.time = 0;
      this.direction = 1;
      this.stopped = true;
      this.iterations = 0;
      this.frameIndex = void 0;
    }
    WrappedInfo.prototype.set = function(info) {
      this.ratio = info.ratio;
      this.time = info.time;
      this.direction = info.direction;
      this.stopped = info.stopped;
      this.iterations = info.iterations;
      this.frameIndex = info.frameIndex;
    };
    module.exports = {
      WrapModeMask: WrapModeMask,
      WrapMode: WrapMode,
      WrappedInfo: WrappedInfo
    };
  }), {} ],
  21: [ (function(require, module, exports) {
    "use strict";
    var EventTarget = require("../core/event/event-target");
    var sys = require("../core/platform/CCSys");
    var LoadMode = require("../core/assets/CCAudioClip").LoadMode;
    var touchBinded = false;
    var touchPlayList = [];
    var Audio = function Audio(src) {
      EventTarget.call(this);
      this._shouldRecycleOnEnded = false;
      this._src = src;
      this._element = null;
      this.id = 0;
      this._state = Audio.State.INITIALZING;
      this._onended = function() {
        this._state = Audio.State.STOPPED;
        this.emit("ended");
      }.bind(this);
    };
    cc.js.extend(Audio, EventTarget);
    Audio.State = {
      ERROR: -1,
      INITIALZING: 0,
      PLAYING: 1,
      PAUSED: 2,
      STOPPED: 3
    };
    (function(proto) {
      proto._bindEnded = function(callback) {
        callback = callback || this._onended;
        var elem = this._element;
        this._src && elem instanceof HTMLAudioElement ? elem.addEventListener("ended", callback) : elem.onended = callback;
      };
      proto._unbindEnded = function() {
        var elem = this._element;
        elem instanceof HTMLAudioElement ? elem.removeEventListener("ended", this._onended) : elem && (elem.onended = null);
      };
      proto._onLoaded = function() {
        this._createElement();
        this._state = Audio.State.INITIALZING;
        this.setVolume(1);
        this.setLoop(false);
      };
      proto._createElement = function() {
        var elem = this._src._nativeAsset;
        if (elem instanceof HTMLAudioElement) {
          this._element || (this._element = document.createElement("audio"));
          this._element.src = elem.src;
        } else this._element = new WebAudioElement(elem, this);
      };
      proto.play = function() {
        var self = this;
        this._src && this._src._ensureLoaded((function() {
          self._state = Audio.State.PLAYING;
          self._bindEnded();
          var playPromise = self._element.play();
          window.Promise && playPromise instanceof Promise && playPromise["catch"]((function(err) {}));
          self._touchToPlay();
        }));
      };
      proto._touchToPlay = function() {
        this._src && this._src.loadMode === LoadMode.DOM_AUDIO && this._element.paused && touchPlayList.push({
          instance: this,
          offset: 0,
          audio: this._element
        });
        if (touchBinded) return;
        touchBinded = true;
        var touchEventName = "ontouchend" in window ? "touchend" : "mousedown";
        cc.game.canvas.addEventListener(touchEventName, (function() {
          var item;
          while (item = touchPlayList.pop()) item.audio.play(item.offset);
        }));
      };
      proto.destroy = function() {
        this._element = null;
      };
      proto.pause = function() {
        if (this.getState() !== Audio.State.PLAYING) return;
        var self = this;
        this._src && this._src._ensureLoaded((function() {
          self._unbindEnded();
          self._element.pause();
          self._state = Audio.State.PAUSED;
        }));
      };
      proto.resume = function() {
        if (this.getState() !== Audio.State.PAUSED) return;
        var self = this;
        this._src && this._src._ensureLoaded((function() {
          self._bindEnded();
          self._element.play();
          self._state = Audio.State.PLAYING;
        }));
      };
      proto.stop = function() {
        var self = this;
        this._src && this._src._ensureLoaded((function() {
          self._element.pause();
          self._element.currentTime = 0;
          for (var i = 0; i < touchPlayList.length; i++) if (touchPlayList[i].instance === self) {
            touchPlayList.splice(i, 1);
            break;
          }
          self._unbindEnded();
          self.emit("stop");
          self._state = Audio.State.STOPPED;
        }));
      };
      proto.setLoop = function(loop) {
        var self = this;
        this._src && this._src._ensureLoaded((function() {
          self._element.loop = loop;
        }));
      };
      proto.getLoop = function() {
        return !!this._element && this._element.loop;
      };
      proto.setVolume = function(num) {
        var self = this;
        this._src && this._src._ensureLoaded((function() {
          self._element.volume = num;
        }));
      };
      proto.getVolume = function() {
        return this._element ? this._element.volume : 1;
      };
      proto.setCurrentTime = function(num) {
        var self = this;
        this._src && this._src._ensureLoaded((function() {
          self._unbindEnded();
          self._bindEnded((function() {
            self._bindEnded();
          }));
          self._element.currentTime = num;
        }));
      };
      proto.getCurrentTime = function() {
        return this._element ? this._element.currentTime : 0;
      };
      proto.getDuration = function() {
        return this._src ? this._src.duration : 0;
      };
      proto.getState = function(forceUpdating) {
        void 0 === forceUpdating && (forceUpdating = true);
        forceUpdating && this._forceUpdatingState();
        return this._state;
      };
      proto._forceUpdatingState = function() {
        var elem = this._element;
        elem && (Audio.State.PLAYING === this._state && elem.paused ? this._state = Audio.State.STOPPED : Audio.State.STOPPED !== this._state || elem.paused || (this._state = Audio.State.PLAYING));
      };
      Object.defineProperty(proto, "src", {
        get: function get() {
          return this._src;
        },
        set: function set(clip) {
          this._unbindEnded();
          if (clip) {
            this._src = clip;
            var self = this;
            clip._ensureLoaded((function() {
              clip === self._src && self._onLoaded();
            }));
          } else {
            this._src = null;
            this._element instanceof WebAudioElement ? this._element = null : this._element && (this._element.src = "");
            this._state = Audio.State.INITIALZING;
          }
          return clip;
        },
        enumerable: true,
        configurable: true
      });
      Object.defineProperty(proto, "paused", {
        get: function get() {
          return !this._element || this._element.paused;
        },
        enumerable: true,
        configurable: true
      });
    })(Audio.prototype);
    var TIME_CONSTANT;
    TIME_CONSTANT = 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 WebAudioElement = function WebAudioElement(buffer, audio) {
      this._audio = audio;
      this._context = sys.__audioSupport.context;
      this._buffer = buffer;
      this._gainObj = this._context["createGain"]();
      this.volume = 1;
      this._gainObj["connect"](this._context["destination"]);
      this._loop = false;
      this._startTime = -1;
      this._currentSource = null;
      this.playedLength = 0;
      this._currentTimer = null;
      this._endCallback = function() {
        this.onended && this.onended(this);
      }.bind(this);
    };
    (function(proto) {
      proto.play = function(offset) {
        if (this._currentSource && !this.paused) {
          this._currentSource.onended = null;
          this._currentSource.stop(0);
          this.playedLength = 0;
        }
        var audio = this._context["createBufferSource"]();
        audio.buffer = this._buffer;
        audio["connect"](this._gainObj);
        audio.loop = this._loop;
        this._startTime = this._context.currentTime;
        offset = offset || this.playedLength;
        offset && (this._startTime -= offset);
        var duration = this._buffer.duration;
        var startTime = offset;
        var endTime;
        if (this._loop) audio.start ? audio.start(0, startTime) : audio["notoGrainOn"] ? audio["noteGrainOn"](0, startTime) : audio["noteOn"](0, startTime); else {
          endTime = duration - offset;
          audio.start ? audio.start(0, startTime, endTime) : audio["noteGrainOn"] ? audio["noteGrainOn"](0, startTime, endTime) : audio["noteOn"](0, startTime, endTime);
        }
        this._currentSource = audio;
        audio.onended = this._endCallback;
        if ((!audio.context.state || "suspended" === audio.context.state) && 0 === this._context.currentTime) {
          var self = this;
          clearTimeout(this._currentTimer);
          this._currentTimer = setTimeout((function() {
            0 === self._context.currentTime && touchPlayList.push({
              instance: self._audio,
              offset: offset,
              audio: self
            });
          }), 10);
        }
        var sys = cc.sys;
        sys.os === sys.OS_IOS && sys.isBrowser && sys.isMobile && ("suspended" === audio.context.state && 0 !== this._context.currentTime || "interrupted" === audio.context.state) && audio.context.resume();
      };
      proto.pause = function() {
        clearTimeout(this._currentTimer);
        if (this.paused) return;
        this.playedLength = this._context.currentTime - this._startTime;
        this.playedLength %= this._buffer.duration;
        var audio = this._currentSource;
        this._currentSource = null;
        this._startTime = -1;
        audio && audio.stop(0);
      };
      Object.defineProperty(proto, "paused", {
        get: function get() {
          if (this._currentSource && this._currentSource.loop) return false;
          if (-1 === this._startTime) return true;
          return this._context.currentTime - this._startTime > this._buffer.duration;
        },
        enumerable: true,
        configurable: true
      });
      Object.defineProperty(proto, "loop", {
        get: function get() {
          return this._loop;
        },
        set: function set(bool) {
          this._currentSource && (this._currentSource.loop = bool);
          return this._loop = bool;
        },
        enumerable: true,
        configurable: true
      });
      Object.defineProperty(proto, "volume", {
        get: function get() {
          return this._volume;
        },
        set: function set(num) {
          this._volume = num;
          if (this._gainObj.gain.setTargetAtTime) try {
            this._gainObj.gain.setTargetAtTime(num, this._context.currentTime, TIME_CONSTANT);
          } catch (e) {
            this._gainObj.gain.setTargetAtTime(num, this._context.currentTime, .01);
          } else this._gainObj.gain.value = num;
          if (sys.os === sys.OS_IOS && !this.paused && this._currentSource) {
            this._currentSource.onended = null;
            this.pause();
            this.play();
          }
        },
        enumerable: true,
        configurable: true
      });
      Object.defineProperty(proto, "currentTime", {
        get: function get() {
          if (this.paused) return this.playedLength;
          this.playedLength = this._context.currentTime - this._startTime;
          this.playedLength %= this._buffer.duration;
          return this.playedLength;
        },
        set: function set(num) {
          if (this.paused) this.playedLength = num; else {
            this.pause();
            this.playedLength = num;
            this.play();
          }
          return num;
        },
        enumerable: true,
        configurable: true
      });
      Object.defineProperty(proto, "duration", {
        get: function get() {
          return this._buffer.duration;
        },
        enumerable: true,
        configurable: true
      });
    })(WebAudioElement.prototype);
    module.exports = cc._Audio = Audio;
  }), {
    "../core/assets/CCAudioClip": 60,
    "../core/event/event-target": 121,
    "../core/platform/CCSys": 147
  } ],
  22: [ (function(require, module, exports) {
    "use strict";
    var Audio = require("./CCAudio");
    var AudioClip = require("../core/assets/CCAudioClip");
    var js = cc.js;
    var _instanceId = 0;
    var _id2audio = js.createMap(true);
    var _url2id = {};
    var _audioPool = [];
    var recycleAudio = function recycleAudio(audio) {
      if (!audio._shouldRecycleOnEnded) return;
      audio._finishCallback = null;
      audio.off("ended");
      audio.off("stop");
      audio.src = null;
      _audioPool.includes(audio) || (_audioPool.length < 32 ? _audioPool.push(audio) : audio.destroy());
      audio._shouldRecycleOnEnded = false;
    };
    var getAudioFromPath = function getAudioFromPath(path) {
      var id = _instanceId++;
      var list = _url2id[path];
      list || (list = _url2id[path] = []);
      if (audioEngine._maxAudioInstance <= list.length) {
        var oldId = list.shift();
        var oldAudio = getAudioFromId(oldId);
        oldAudio.stop();
      }
      var audio = _audioPool.pop() || new Audio();
      var callback = function callback() {
        var audioInList = getAudioFromId(this.id);
        if (audioInList) {
          delete _id2audio[this.id];
          var index = list.indexOf(this.id);
          cc.js.array.fastRemoveAt(list, index);
        }
        recycleAudio(this);
      };
      audio.on("ended", (function() {
        this._finishCallback && this._finishCallback();
        callback.call(this);
      }), audio);
      audio.on("stop", callback, audio);
      audio.id = id;
      _id2audio[id] = audio;
      list.push(id);
      return audio;
    };
    var getAudioFromId = function getAudioFromId(id) {
      return _id2audio[id];
    };
    var handleVolume = function handleVolume(volume) {
      void 0 === volume ? volume = 1 : "string" === typeof volume && (volume = Number.parseFloat(volume));
      return volume;
    };
    var audioEngine = {
      AudioState: Audio.State,
      _maxAudioInstance: 24,
      _id2audio: _id2audio,
      play: function play(clip, loop, volume) {
        if (!(clip instanceof AudioClip)) return cc.error("Wrong type of AudioClip.");
        var path = clip.nativeUrl;
        var audio = getAudioFromPath(path);
        audio.src = clip;
        audio._shouldRecycleOnEnded = true;
        audio.setLoop(loop || false);
        volume = handleVolume(volume);
        audio.setVolume(volume);
        audio.play();
        return audio.id;
      },
      setLoop: function setLoop(audioID, loop) {
        var audio = getAudioFromId(audioID);
        if (!audio || !audio.setLoop) return;
        audio.setLoop(loop);
      },
      isLoop: function isLoop(audioID) {
        var audio = getAudioFromId(audioID);
        if (!audio || !audio.getLoop) return false;
        return audio.getLoop();
      },
      setVolume: function setVolume(audioID, volume) {
        var audio = getAudioFromId(audioID);
        audio && audio.setVolume(volume);
      },
      getVolume: function getVolume(audioID) {
        var audio = getAudioFromId(audioID);
        return audio ? audio.getVolume() : 1;
      },
      setCurrentTime: function setCurrentTime(audioID, sec) {
        var audio = getAudioFromId(audioID);
        if (audio) {
          audio.setCurrentTime(sec);
          return true;
        }
        return false;
      },
      getCurrentTime: function getCurrentTime(audioID) {
        var audio = getAudioFromId(audioID);
        return audio ? audio.getCurrentTime() : 0;
      },
      getDuration: function getDuration(audioID) {
        var audio = getAudioFromId(audioID);
        return audio ? audio.getDuration() : 0;
      },
      getState: function getState(audioID) {
        var audio = getAudioFromId(audioID);
        return audio ? audio.getState() : this.AudioState.ERROR;
      },
      setFinishCallback: function setFinishCallback(audioID, callback) {
        var audio = getAudioFromId(audioID);
        if (!audio) return;
        audio._finishCallback = callback;
      },
      pause: function pause(audioID) {
        var audio = getAudioFromId(audioID);
        if (audio) {
          audio.pause();
          return true;
        }
        return false;
      },
      _pauseIDCache: [],
      pauseAll: function pauseAll() {
        for (var id in _id2audio) {
          var audio = _id2audio[id];
          var state = audio.getState();
          if (state === Audio.State.PLAYING) {
            this._pauseIDCache.push(id);
            audio.pause();
          }
        }
      },
      resume: function resume(audioID) {
        var audio = getAudioFromId(audioID);
        audio && audio.resume();
      },
      resumeAll: function resumeAll() {
        for (var i = 0; i < this._pauseIDCache.length; ++i) {
          var id = this._pauseIDCache[i];
          var audio = getAudioFromId(id);
          audio && audio.resume();
        }
        this._pauseIDCache.length = 0;
      },
      stop: function stop(audioID) {
        var audio = getAudioFromId(audioID);
        if (audio) {
          audio.stop();
          return true;
        }
        return false;
      },
      stopAll: function stopAll() {
        for (var id in _id2audio) {
          var audio = _id2audio[id];
          audio && audio.stop();
        }
      },
      setMaxAudioInstance: function setMaxAudioInstance(num) {
        true;
        cc.warn("Since v2.4.0, maxAudioInstance has become a read only property.\naudioEngine.setMaxAudioInstance() method will be removed in the future");
      },
      getMaxAudioInstance: function getMaxAudioInstance() {
        return this._maxAudioInstance;
      },
      uncache: function uncache(clip) {
        var filePath = clip;
        if ("string" === typeof clip) {
          cc.warnID(8401, "cc.audioEngine", "cc.AudioClip", "AudioClip", "cc.AudioClip", "audio");
          filePath = clip;
        } else {
          if (!clip) return;
          filePath = clip.nativeUrl;
        }
        var list = _url2id[filePath];
        if (!list) return;
        while (list.length > 0) {
          var id = list.pop();
          var audio = _id2audio[id];
          if (audio) {
            audio.stop();
            delete _id2audio[id];
          }
        }
      },
      uncacheAll: function uncacheAll() {
        this.stopAll();
        var audio;
        for (var id in _id2audio) {
          audio = _id2audio[id];
          audio && audio.destroy();
        }
        while (audio = _audioPool.pop()) audio.destroy();
        _id2audio = js.createMap(true);
        _url2id = {};
      },
      _breakCache: null,
      _break: function _break() {
        this._breakCache = [];
        for (var id in _id2audio) {
          var audio = _id2audio[id];
          var state = audio.getState();
          if (state === Audio.State.PLAYING) {
            this._breakCache.push(id);
            audio.pause();
          }
        }
      },
      _restore: function _restore() {
        if (!this._breakCache) return;
        while (this._breakCache.length > 0) {
          var id = this._breakCache.pop();
          var audio = getAudioFromId(id);
          audio && audio.resume && audio.resume();
        }
        this._breakCache = null;
      },
      _music: {
        id: -1,
        loop: false,
        volume: 1
      },
      _effect: {
        volume: 1,
        pauseCache: []
      },
      playMusic: function playMusic(clip, loop) {
        var music = this._music;
        this.stop(music.id);
        music.id = this.play(clip, loop, music.volume);
        music.loop = loop;
        return music.id;
      },
      stopMusic: function stopMusic() {
        this.stop(this._music.id);
      },
      pauseMusic: function pauseMusic() {
        this.pause(this._music.id);
        return this._music.id;
      },
      resumeMusic: function resumeMusic() {
        this.resume(this._music.id);
        return this._music.id;
      },
      getMusicVolume: function getMusicVolume() {
        return this._music.volume;
      },
      setMusicVolume: function setMusicVolume(volume) {
        volume = handleVolume(volume);
        var music = this._music;
        music.volume = volume;
        this.setVolume(music.id, music.volume);
        return music.volume;
      },
      isMusicPlaying: function isMusicPlaying() {
        return this.getState(this._music.id) === this.AudioState.PLAYING;
      },
      playEffect: function playEffect(clip, loop) {
        return this.play(clip, loop || false, this._effect.volume);
      },
      setEffectsVolume: function setEffectsVolume(volume) {
        volume = handleVolume(volume);
        var musicId = this._music.id;
        this._effect.volume = volume;
        for (var id in _id2audio) {
          var audio = _id2audio[id];
          if (!audio || audio.id === musicId) continue;
          audioEngine.setVolume(id, volume);
        }
      },
      getEffectsVolume: function getEffectsVolume() {
        return this._effect.volume;
      },
      pauseEffect: function pauseEffect(audioID) {
        return this.pause(audioID);
      },
      pauseAllEffects: function pauseAllEffects() {
        var musicId = this._music.id;
        var effect = this._effect;
        effect.pauseCache.length = 0;
        for (var id in _id2audio) {
          var audio = _id2audio[id];
          if (!audio || audio.id === musicId) continue;
          var state = audio.getState();
          if (state === this.AudioState.PLAYING) {
            effect.pauseCache.push(id);
            audio.pause();
          }
        }
      },
      resumeEffect: function resumeEffect(id) {
        this.resume(id);
      },
      resumeAllEffects: function resumeAllEffects() {
        var pauseIDCache = this._effect.pauseCache;
        for (var i = 0; i < pauseIDCache.length; ++i) {
          var id = pauseIDCache[i];
          var audio = _id2audio[id];
          audio && audio.resume();
        }
      },
      stopEffect: function stopEffect(audioID) {
        return this.stop(audioID);
      },
      stopAllEffects: function stopAllEffects() {
        var musicId = this._music.id;
        for (var id in _id2audio) {
          var audio = _id2audio[id];
          if (!audio || audio.id === musicId) continue;
          var state = audio.getState();
          state === audioEngine.AudioState.PLAYING && audio.stop();
        }
      }
    };
    module.exports = cc.audioEngine = audioEngine;
  }), {
    "../core/assets/CCAudioClip": 60,
    "./CCAudio": 21
  } ],
  23: [ (function(require, module, exports) {
    "use strict";
    var utils = require("./platform/utils");
    var debugInfos = require("../../DebugInfos") || {};
    var ERROR_MAP_URL = "https://github.com/cocos-creator/engine/blob/master/EngineErrorMap.md";
    var logList;
    cc.log = cc.warn = cc.error = cc.assert = console.log.bind ? console.log.bind(console) : console.log;
    var resetDebugSetting = function resetDebugSetting(mode) {
      cc.log = cc.warn = cc.error = cc.assert = function() {};
      if (mode === DebugMode.NONE) return;
      if (mode > DebugMode.ERROR) {
        var logToWebPage = function logToWebPage(msg) {
          if (!cc.game.canvas) return;
          if (!logList) {
            var logDiv = document.createElement("Div");
            logDiv.setAttribute("id", "logInfoDiv");
            logDiv.setAttribute("width", "200");
            logDiv.setAttribute("height", cc.game.canvas.height);
            var logDivStyle = logDiv.style;
            logDivStyle.zIndex = "99999";
            logDivStyle.position = "absolute";
            logDivStyle.top = logDivStyle.left = "0";
            logList = document.createElement("textarea");
            logList.setAttribute("rows", "20");
            logList.setAttribute("cols", "30");
            logList.setAttribute("disabled", "true");
            var logListStyle = logList.style;
            logListStyle.backgroundColor = "transparent";
            logListStyle.borderBottom = "1px solid #cccccc";
            logListStyle.borderTopWidth = logListStyle.borderLeftWidth = logListStyle.borderRightWidth = "0px";
            logListStyle.borderTopStyle = logListStyle.borderLeftStyle = logListStyle.borderRightStyle = "none";
            logListStyle.padding = "0px";
            logListStyle.margin = 0;
            logDiv.appendChild(logList);
            cc.game.canvas.parentNode.appendChild(logDiv);
          }
          logList.value = logList.value + msg + "\r\n";
          logList.scrollTop = logList.scrollHeight;
        };
        cc.error = function() {
          logToWebPage("ERROR :  " + cc.js.formatStr.apply(null, arguments));
        };
        cc.assert = function(cond, msg) {
          if (!cond && msg) {
            msg = cc.js.formatStr.apply(null, cc.js.shiftArguments.apply(null, arguments));
            logToWebPage("ASSERT: " + msg);
          }
        };
        mode !== DebugMode.ERROR_FOR_WEB_PAGE && (cc.warn = function() {
          logToWebPage("WARN :  " + cc.js.formatStr.apply(null, arguments));
        });
        mode === DebugMode.INFO_FOR_WEB_PAGE && (cc.log = function() {
          logToWebPage(cc.js.formatStr.apply(null, arguments));
        });
      } else if (console && console.log.apply) {
        console.error || (console.error = console.log);
        console.warn || (console.warn = console.log);
        false;
        console.error.bind ? cc.error = console.error.bind(console) : cc.error = (false, 
        function() {
          return console.error.apply(console, arguments);
        });
        cc.assert = function(cond, msg) {
          if (!cond) {
            msg && (msg = cc.js.formatStr.apply(null, cc.js.shiftArguments.apply(null, arguments)));
            false;
            false;
            throw new Error(msg);
          }
        };
      }
      if (mode !== DebugMode.ERROR) {
        false;
        console.warn.bind ? cc.warn = console.warn.bind(console) : cc.warn = (false, function() {
          return console.warn.apply(console, arguments);
        });
      }
      false;
      if (mode === DebugMode.INFO) {
        false, false;
        console.log.bind ? cc.log = console.log.bind(console) : cc.log = function() {
          return console.log.apply(console, arguments);
        };
      }
    };
    cc._throw = function(error) {
      utils.callInNextTick((function() {
        throw error;
      }));
    };
    function getTypedFormatter(type) {
      return function() {
        var id = arguments[0];
        var msg = debugInfos[id] || "unknown id";
        if (1 === arguments.length) return msg;
        if (2 === arguments.length) return cc.js.formatStr(msg, arguments[1]);
        var argsArray = cc.js.shiftArguments.apply(null, arguments);
        return cc.js.formatStr.apply(null, [ msg ].concat(argsArray));
      };
    }
    var logFormatter = getTypedFormatter("Log");
    cc.logID = function() {
      cc.log(logFormatter.apply(null, arguments));
    };
    var warnFormatter = getTypedFormatter("Warning");
    cc.warnID = function() {
      cc.warn(warnFormatter.apply(null, arguments));
    };
    var errorFormatter = getTypedFormatter("Error");
    cc.errorID = function() {
      cc.error(errorFormatter.apply(null, arguments));
    };
    var assertFormatter = getTypedFormatter("Assert");
    cc.assertID = function(cond) {
      if (cond) return;
      cc.assert(false, assertFormatter.apply(null, cc.js.shiftArguments.apply(null, arguments)));
    };
    var DebugMode = 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
    });
    module.exports = cc.debug = {
      DebugMode: DebugMode,
      _resetDebugSetting: resetDebugSetting,
      getError: getTypedFormatter("ERROR"),
      isDisplayStats: function isDisplayStats() {
        return !!cc.profiler && cc.profiler.isShowingStats();
      },
      setDisplayStats: function setDisplayStats(displayStats) {
        if (cc.profiler && cc.game.renderType !== cc.game.RENDER_TYPE_CANVAS) {
          displayStats ? cc.profiler.showStats() : cc.profiler.hideStats();
          cc.game.config.showFPS = !!displayStats;
        }
      }
    };
  }), {
    "../../DebugInfos": 1,
    "./platform/utils": 161
  } ],
  24: [ (function(require, module, exports) {
    "use strict";
    var EventTarget = require("./event/event-target");
    var ComponentScheduler = require("./component-scheduler");
    var NodeActivator = require("./node-activator");
    var Obj = require("./platform/CCObject");
    var game = require("./CCGame");
    var renderer = require("./renderer");
    var eventManager = require("./event-manager");
    var Scheduler = require("./CCScheduler");
    cc.Director = function() {
      EventTarget.call(this);
      this._paused = false;
      this._purgeDirectorInNextLoop = false;
      this._winSizeInPoints = null;
      this._scene = null;
      this._loadingScene = "";
      this._totalFrames = 0;
      this._lastUpdate = 0;
      this._deltaTime = 0;
      this._startTime = 0;
      this._maxParticleDeltaTime = 0;
      this._scheduler = null;
      this._compScheduler = null;
      this._nodeActivator = null;
      this._actionManager = null;
      var self = this;
      game.on(game.EVENT_SHOW, (function() {
        self._lastUpdate = performance.now();
      }));
      game.once(game.EVENT_ENGINE_INITED, this.init, this);
    };
    cc.Director.prototype = {
      constructor: cc.Director,
      init: function init() {
        this._totalFrames = 0;
        this._lastUpdate = performance.now();
        this._startTime = this._lastUpdate;
        this._paused = false;
        this._purgeDirectorInNextLoop = false;
        this._winSizeInPoints = cc.size(0, 0);
        this._scheduler = new Scheduler();
        if (cc.ActionManager) {
          this._actionManager = new cc.ActionManager();
          this._scheduler.scheduleUpdate(this._actionManager, Scheduler.PRIORITY_SYSTEM, false);
        } else this._actionManager = null;
        this.sharedInit();
        return true;
      },
      sharedInit: function sharedInit() {
        this._compScheduler = new ComponentScheduler();
        this._nodeActivator = new NodeActivator();
        eventManager && eventManager.setEnabled(true);
        if (cc.AnimationManager) {
          this._animationManager = new cc.AnimationManager();
          this._scheduler.scheduleUpdate(this._animationManager, Scheduler.PRIORITY_SYSTEM, false);
        } else this._animationManager = null;
        if (cc.CollisionManager) {
          this._collisionManager = new cc.CollisionManager();
          this._scheduler.scheduleUpdate(this._collisionManager, Scheduler.PRIORITY_SYSTEM, false);
        } else this._collisionManager = null;
        if (cc.PhysicsManager) {
          this._physicsManager = new cc.PhysicsManager();
          this._scheduler.scheduleUpdate(this._physicsManager, Scheduler.PRIORITY_SYSTEM, false);
        } else this._physicsManager = null;
        if (cc.Physics3DManager) {
          this._physics3DManager = new cc.Physics3DManager();
          this._scheduler.scheduleUpdate(this._physics3DManager, Scheduler.PRIORITY_SYSTEM, false);
        } else this._physics3DManager = null;
        cc._widgetManager && cc._widgetManager.init(this);
      },
      calculateDeltaTime: function calculateDeltaTime(now) {
        now || (now = performance.now());
        this._deltaTime = now > this._lastUpdate ? (now - this._lastUpdate) / 1e3 : 0;
        (true, this._deltaTime > 1) && (this._deltaTime = 1 / 60);
        this._lastUpdate = now;
      },
      convertToGL: function convertToGL(uiPoint) {
        var container = game.container;
        var view = cc.view;
        var box = container.getBoundingClientRect();
        var left = box.left + window.pageXOffset - container.clientLeft;
        var top = box.top + window.pageYOffset - container.clientTop;
        var x = view._devicePixelRatio * (uiPoint.x - left);
        var y = view._devicePixelRatio * (top + box.height - uiPoint.y);
        return view._isRotated ? cc.v2(view._viewportRect.width - y, x) : cc.v2(x, y);
      },
      convertToUI: function convertToUI(glPoint) {
        var container = game.container;
        var view = cc.view;
        var box = container.getBoundingClientRect();
        var left = box.left + window.pageXOffset - container.clientLeft;
        var top = box.top + window.pageYOffset - container.clientTop;
        var uiPoint = cc.v2(0, 0);
        if (view._isRotated) {
          uiPoint.x = left + glPoint.y / view._devicePixelRatio;
          uiPoint.y = top + box.height - (view._viewportRect.width - glPoint.x) / view._devicePixelRatio;
        } else {
          uiPoint.x = left + glPoint.x * view._devicePixelRatio;
          uiPoint.y = top + box.height - glPoint.y * view._devicePixelRatio;
        }
        return uiPoint;
      },
      end: function end() {
        this._purgeDirectorInNextLoop = true;
      },
      getWinSize: function getWinSize() {
        return cc.size(cc.winSize);
      },
      getWinSizeInPixels: function getWinSizeInPixels() {
        return cc.size(cc.winSize);
      },
      pause: function pause() {
        if (this._paused) return;
        this._paused = true;
      },
      purgeCachedData: function purgeCachedData() {
        cc.assetManager.releaseAll();
      },
      purgeDirector: function purgeDirector() {
        this._scheduler.unscheduleAll();
        this._compScheduler.unscheduleAll();
        this._nodeActivator.reset();
        eventManager && eventManager.setEnabled(false);
        true;
        cc.isValid(this._scene) && this._scene.destroy();
        this._scene = null;
        cc.renderer.clear();
        cc.assetManager.builtins.clear();
        cc.game.pause();
        cc.assetManager.releaseAll();
      },
      reset: function reset() {
        this.purgeDirector();
        eventManager && eventManager.setEnabled(true);
        this._actionManager && this._scheduler.scheduleUpdate(this._actionManager, cc.Scheduler.PRIORITY_SYSTEM, false);
        this._animationManager && this._scheduler.scheduleUpdate(this._animationManager, cc.Scheduler.PRIORITY_SYSTEM, false);
        this._collisionManager && this._scheduler.scheduleUpdate(this._collisionManager, cc.Scheduler.PRIORITY_SYSTEM, false);
        this._physicsManager && this._scheduler.scheduleUpdate(this._physicsManager, cc.Scheduler.PRIORITY_SYSTEM, false);
        cc.game.resume();
      },
      runSceneImmediate: function runSceneImmediate(scene, onBeforeLoadScene, onLaunched) {
        cc.assertID(scene instanceof cc.Scene || scene instanceof cc.SceneAsset, 1216);
        scene instanceof cc.SceneAsset && (scene = scene.scene);
        (true, true) && console.time("InitScene");
        scene._load();
        (true, true) && console.timeEnd("InitScene");
        (true, true) && console.time("AttachPersist");
        var persistNodeList = Object.keys(game._persistRootNodes).map((function(x) {
          return game._persistRootNodes[x];
        }));
        for (var i = 0; i < persistNodeList.length; i++) {
          var node = persistNodeList[i];
          var existNode = scene.getChildByUuid(node.uuid);
          if (existNode) {
            var index = existNode.getSiblingIndex();
            existNode._destroyImmediate();
            scene.insertChild(node, index);
          } else node.parent = scene;
        }
        (true, true) && console.timeEnd("AttachPersist");
        var oldScene = this._scene;
        true;
        (true, true) && console.time("AutoRelease");
        cc.assetManager._releaseManager._autoRelease(oldScene, scene, persistNodeList);
        (true, true) && console.timeEnd("AutoRelease");
        (true, true) && console.time("Destroy");
        cc.isValid(oldScene) && oldScene.destroy();
        this._scene = null;
        Obj._deferredDestroy();
        (true, true) && console.timeEnd("Destroy");
        onBeforeLoadScene && onBeforeLoadScene();
        this.emit(cc.Director.EVENT_BEFORE_SCENE_LAUNCH, scene);
        this._scene = scene;
        (true, true) && console.time("Activate");
        scene._activate();
        (true, true) && console.timeEnd("Activate");
        cc.game.resume();
        onLaunched && onLaunched(null, scene);
        this.emit(cc.Director.EVENT_AFTER_SCENE_LAUNCH, scene);
      },
      runScene: function runScene(scene, onBeforeLoadScene, onLaunched) {
        cc.assertID(scene, 1205);
        cc.assertID(scene instanceof cc.Scene || scene instanceof cc.SceneAsset, 1216);
        scene instanceof cc.SceneAsset && (scene = scene.scene);
        scene._load();
        this.once(cc.Director.EVENT_AFTER_DRAW, (function() {
          this.runSceneImmediate(scene, onBeforeLoadScene, onLaunched);
        }), this);
      },
      loadScene: function loadScene(sceneName, onLaunched, _onUnloaded) {
        if (this._loadingScene) {
          cc.warnID(1208, sceneName, this._loadingScene);
          return false;
        }
        var bundle = cc.assetManager.bundles.find((function(bundle) {
          return bundle.getSceneInfo(sceneName);
        }));
        if (bundle) {
          this.emit(cc.Director.EVENT_BEFORE_SCENE_LOADING, sceneName);
          this._loadingScene = sceneName;
          var self = this;
          console.time("LoadScene " + sceneName);
          bundle.loadScene(sceneName, (function(err, scene) {
            console.timeEnd("LoadScene " + sceneName);
            self._loadingScene = "";
            if (!err) {
              self.runSceneImmediate(scene, _onUnloaded, onLaunched);
              return;
            }
            err = "Failed to load scene: " + err;
            cc.error(err);
            onLaunched && onLaunched(err);
          }));
          return true;
        }
        cc.errorID(1209, sceneName);
        return false;
      },
      preloadScene: function preloadScene(sceneName, onProgress, onLoaded) {
        var bundle = cc.assetManager.bundles.find((function(bundle) {
          return bundle.getSceneInfo(sceneName);
        }));
        if (!bundle) {
          cc.errorID(1209, sceneName);
          return null;
        }
        bundle.preloadScene(sceneName, null, onProgress, onLoaded);
      },
      resume: function resume() {
        if (!this._paused) return;
        this._lastUpdate = performance.now();
        this._lastUpdate || cc.logID(1200);
        this._paused = false;
        this._deltaTime = 0;
      },
      setDepthTest: function setDepthTest(value) {
        if (!cc.Camera.main) return;
        cc.Camera.main.depth = !!value;
      },
      setClearColor: function setClearColor(clearColor) {
        if (!cc.Camera.main) return;
        cc.Camera.main.backgroundColor = clearColor;
      },
      getRunningScene: function getRunningScene() {
        return this._scene;
      },
      getScene: function getScene() {
        return this._scene;
      },
      getAnimationInterval: function getAnimationInterval() {
        return 1e3 / game.getFrameRate();
      },
      setAnimationInterval: function setAnimationInterval(value) {
        game.setFrameRate(Math.round(1e3 / value));
      },
      getDeltaTime: function getDeltaTime() {
        return this._deltaTime;
      },
      getTotalTime: function getTotalTime() {
        return performance.now() - this._startTime;
      },
      getTotalFrames: function getTotalFrames() {
        return this._totalFrames;
      },
      isPaused: function isPaused() {
        return this._paused;
      },
      getScheduler: function getScheduler() {
        return this._scheduler;
      },
      setScheduler: function setScheduler(scheduler) {
        this._scheduler !== scheduler && (this._scheduler = scheduler);
      },
      getActionManager: function getActionManager() {
        return this._actionManager;
      },
      setActionManager: function setActionManager(actionManager) {
        if (this._actionManager !== actionManager) {
          this._actionManager && this._scheduler.unscheduleUpdate(this._actionManager);
          this._actionManager = actionManager;
          this._scheduler.scheduleUpdate(this._actionManager, cc.Scheduler.PRIORITY_SYSTEM, false);
        }
      },
      getAnimationManager: function getAnimationManager() {
        return this._animationManager;
      },
      getCollisionManager: function getCollisionManager() {
        return this._collisionManager;
      },
      getPhysicsManager: function getPhysicsManager() {
        return this._physicsManager;
      },
      getPhysics3DManager: function getPhysics3DManager() {
        return this._physics3DManager;
      },
      startAnimation: function startAnimation() {
        cc.game.resume();
      },
      stopAnimation: function stopAnimation() {
        cc.game.pause();
      },
      _resetDeltaTime: function _resetDeltaTime() {
        this._lastUpdate = performance.now();
        this._deltaTime = 0;
      },
      mainLoop: function(now) {
        if (this._purgeDirectorInNextLoop) {
          this._purgeDirectorInNextLoop = false;
          this.purgeDirector();
        } else {
          this.calculateDeltaTime(now);
          if (!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);
            Obj._deferredDestroy();
          }
          this.emit(cc.Director.EVENT_BEFORE_DRAW);
          renderer.render(this._scene, this._deltaTime);
          this.emit(cc.Director.EVENT_AFTER_DRAW);
          eventManager.frameUpdateListeners();
          this._totalFrames++;
        }
      },
      __fastOn: function __fastOn(type, callback, target) {
        this.on(type, callback, target);
      },
      __fastOff: function __fastOff(type, callback, target) {
        this.off(type, callback, target);
      }
    };
    cc.js.addon(cc.Director.prototype, EventTarget.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.EVENT_BEFORE_PHYSICS = "director_before_physics";
    cc.Director.EVENT_AFTER_PHYSICS = "director_after_physics";
    cc.director = new cc.Director();
    module.exports = cc.director;
  }), {
    "./CCGame": 25,
    "./CCScheduler": 29,
    "./component-scheduler": 88,
    "./event-manager": 119,
    "./event/event-target": 121,
    "./node-activator": 137,
    "./platform/CCObject": 144,
    "./renderer": 168
  } ],
  25: [ (function(require, module, exports) {
    "use strict";
    var EventTarget = require("./event/event-target");
    require("../audio/CCAudioEngine");
    var debug = require("./CCDebug");
    var renderer = require("./renderer/index.js");
    var dynamicAtlasManager = require("../core/renderer/utils/dynamic-atlas/manager");
    var game = {
      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: true,
      _configLoaded: false,
      _isCloning: false,
      _prepared: false,
      _rendererInitialized: false,
      _renderContext: null,
      _intervalId: null,
      _lastTime: null,
      _frameTime: null,
      frame: null,
      container: null,
      canvas: null,
      renderType: -1,
      config: null,
      onStart: null,
      setFrameRate: function setFrameRate(frameRate) {
        var config = this.config;
        config.frameRate = frameRate;
        this._intervalId && window.cancelAnimFrame(this._intervalId);
        this._intervalId = 0;
        this._paused = true;
        this._setAnimFrame();
        this._runMainLoop();
      },
      getFrameRate: function getFrameRate() {
        return this.config.frameRate;
      },
      step: function step() {
        cc.director.mainLoop();
      },
      pause: function pause() {
        if (this._paused) return;
        this._paused = true;
        cc.audioEngine && cc.audioEngine._break();
        this._intervalId && window.cancelAnimFrame(this._intervalId);
        this._intervalId = 0;
      },
      resume: function resume() {
        if (!this._paused) return;
        this._paused = false;
        cc.audioEngine && cc.audioEngine._restore();
        cc.director._resetDeltaTime();
        this._runMainLoop();
      },
      isPaused: function isPaused() {
        return this._paused;
      },
      restart: function restart() {
        cc.director.once(cc.Director.EVENT_AFTER_DRAW, (function() {
          for (var id in game._persistRootNodes) game.removePersistRootNode(game._persistRootNodes[id]);
          cc.director.getScene().destroy();
          cc.Object._deferredDestroy();
          cc.audioEngine && cc.audioEngine.uncacheAll();
          cc.director.reset();
          game.pause();
          cc.assetManager.builtins.init((function() {
            game.onStart();
            game.emit(game.EVENT_RESTART);
          }));
        }));
      },
      end: function end() {
        close();
      },
      _initEngine: function _initEngine() {
        if (this._rendererInitialized) return;
        this._initRenderer();
        true;
        this._initEvents();
        this.emit(this.EVENT_ENGINE_INITED);
      },
      _loadPreviewScript: function _loadPreviewScript(cb) {
        false;
        cb();
      },
      _prepareFinished: function _prepareFinished(cb) {
        var _this = this;
        this._initEngine();
        this._setAnimFrame();
        cc.assetManager.builtins.init((function() {
          console.log("Cocos Creator v" + cc.ENGINE_VERSION);
          _this._prepared = true;
          _this._runMainLoop();
          _this.emit(_this.EVENT_GAME_INITED);
          cb && cb();
        }));
      },
      eventTargetOn: EventTarget.prototype.on,
      eventTargetOnce: EventTarget.prototype.once,
      on: function on(type, callback, target, once) {
        this._prepared && type === this.EVENT_ENGINE_INITED || !this._paused && type === this.EVENT_GAME_INITED ? callback.call(target) : this.eventTargetOn(type, callback, target, once);
      },
      once: function once(type, callback, target) {
        this._prepared && type === this.EVENT_ENGINE_INITED || !this._paused && type === this.EVENT_GAME_INITED ? callback.call(target) : this.eventTargetOnce(type, callback, target);
      },
      prepare: function prepare(cb) {
        var _this2 = this;
        if (this._prepared) {
          cb && cb();
          return;
        }
        this._loadPreviewScript((function() {
          _this2._prepareFinished(cb);
        }));
      },
      run: function run(config, onStart) {
        this._initConfig(config);
        this.onStart = onStart;
        this.prepare(game.onStart && game.onStart.bind(game));
      },
      addPersistRootNode: function addPersistRootNode(node) {
        if (!cc.Node.isNode(node) || !node.uuid) {
          cc.warnID(3800);
          return;
        }
        var id = node.uuid;
        if (!this._persistRootNodes[id]) {
          var scene = cc.director._scene;
          if (cc.isValid(scene)) if (node.parent) {
            if (!(node.parent instanceof cc.Scene)) {
              cc.warnID(3801);
              return;
            }
            if (node.parent !== scene) {
              cc.warnID(3802);
              return;
            }
          } else node.parent = scene;
          this._persistRootNodes[id] = node;
          node._persistNode = true;
          cc.assetManager._releaseManager._addPersistNodeRef(node);
        }
      },
      removePersistRootNode: function removePersistRootNode(node) {
        var id = node.uuid || "";
        if (node === this._persistRootNodes[id]) {
          delete this._persistRootNodes[id];
          node._persistNode = false;
          cc.assetManager._releaseManager._removePersistNodeRef(node);
        }
      },
      isPersistRootNode: function isPersistRootNode(node) {
        return node._persistNode;
      },
      _setAnimFrame: function _setAnimFrame() {
        this._lastTime = performance.now();
        var frameRate = game.config.frameRate;
        this._frameTime = 1e3 / frameRate;
        cc.director._maxParticleDeltaTime = this._frameTime / 1e3 * 2;
        false, false;
        if (60 !== frameRate && 30 !== frameRate) {
          window.requestAnimFrame = this._stTime;
          window.cancelAnimFrame = this._ctTime;
        } else {
          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 _stTime(callback) {
        var currTime = performance.now();
        var timeToCall = Math.max(0, game._frameTime - (currTime - game._lastTime));
        var id = window.setTimeout((function() {
          callback();
        }), timeToCall);
        game._lastTime = currTime + timeToCall;
        return id;
      },
      _ctTime: function _ctTime(id) {
        window.clearTimeout(id);
      },
      _runMainLoop: function _runMainLoop() {
        false;
        if (!this._prepared) return;
        var self = this, _callback, config = self.config, director = cc.director, skip = true, frameRate = config.frameRate;
        debug.setDisplayStats(config.showFPS);
        _callback = function callback(now) {
          if (!self._paused) {
            self._intervalId = window.requestAnimFrame(_callback);
            if ((true, true) && 30 === frameRate && (skip = !skip)) return;
            director.mainLoop(now);
          }
        };
        self._intervalId = window.requestAnimFrame(_callback);
        self._paused = false;
      },
      _initConfig: function _initConfig(config) {
        "number" !== typeof config.debugMode && (config.debugMode = 0);
        config.exposeClassName = !!config.exposeClassName;
        "number" !== typeof config.frameRate && (config.frameRate = 60);
        var renderMode = config.renderMode;
        ("number" !== typeof renderMode || renderMode > 2 || renderMode < 0) && (config.renderMode = 0);
        "boolean" !== typeof config.registerSystemEvent && (config.registerSystemEvent = true);
        config.showFPS = 1 !== renderMode && !!config.showFPS;
        this.collisionMatrix = config.collisionMatrix || [];
        this.groupList = config.groupList || [];
        debug._resetDebugSetting(config.debugMode);
        this.config = config;
        this._configLoaded = true;
      },
      _determineRenderType: function _determineRenderType() {
        var config = this.config, userRenderMode = parseInt(config.renderMode) || 0;
        this.renderType = this.RENDER_TYPE_CANVAS;
        var supportRender = false;
        if (0 === userRenderMode) {
          if (cc.sys.capabilities["opengl"]) {
            this.renderType = this.RENDER_TYPE_WEBGL;
            supportRender = true;
          } else if (cc.sys.capabilities["canvas"]) {
            this.renderType = this.RENDER_TYPE_CANVAS;
            supportRender = true;
          }
        } else if (1 === userRenderMode && cc.sys.capabilities["canvas"]) {
          this.renderType = this.RENDER_TYPE_CANVAS;
          supportRender = true;
        } else if (2 === userRenderMode && cc.sys.capabilities["opengl"]) {
          this.renderType = this.RENDER_TYPE_WEBGL;
          supportRender = true;
        }
        if (!supportRender) throw new Error(debug.getError(3820, userRenderMode));
      },
      _initRenderer: function _initRenderer() {
        if (this._rendererInitialized) return;
        var el = this.config.id, width, height, localCanvas, localContainer;
        false, false;
        var addClass = function addClass(element, name) {
          var hasClass = (" " + element.className + " ").indexOf(" " + name + " ") > -1;
          if (!hasClass) {
            element.className && (element.className += " ");
            element.className += name;
          }
        };
        var element = el instanceof HTMLElement ? el : document.querySelector(el) || document.querySelector("#" + el);
        if ("CANVAS" === element.tagName) {
          width = element.width;
          height = element.height;
          this.canvas = localCanvas = element;
          this.container = localContainer = document.createElement("DIV");
          localCanvas.parentNode && localCanvas.parentNode.insertBefore(localContainer, localCanvas);
        } else {
          "DIV" !== element.tagName && cc.warnID(3819);
          width = element.clientWidth;
          height = element.clientHeight;
          this.canvas = localCanvas = document.createElement("CANVAS");
          this.container = localContainer = document.createElement("DIV");
          element.appendChild(localContainer);
        }
        localContainer.setAttribute("id", "Cocos2dGameContainer");
        localContainer.appendChild(localCanvas);
        this.frame = localContainer.parentNode === document.body ? document.documentElement : localContainer.parentNode;
        addClass(localCanvas, "gameCanvas");
        localCanvas.setAttribute("width", width || 480);
        localCanvas.setAttribute("height", height || 320);
        localCanvas.setAttribute("tabindex", 99);
        this._determineRenderType();
        if (this.renderType === this.RENDER_TYPE_WEBGL) {
          var opts = {
            stencil: true,
            antialias: cc.macro.ENABLE_WEBGL_ANTIALIAS,
            alpha: cc.macro.ENABLE_TRANSPARENT_CANVAS
          };
          renderer.initWebGL(localCanvas, opts);
          this._renderContext = renderer.device._gl;
          !cc.macro.CLEANUP_IMAGE_CACHE && dynamicAtlasManager && (dynamicAtlasManager.enabled = true);
        }
        if (!this._renderContext) {
          this.renderType = this.RENDER_TYPE_CANVAS;
          renderer.initCanvas(localCanvas);
          this._renderContext = renderer.device._ctx;
        }
        this.canvas.oncontextmenu = function() {
          if (!cc._isContextMenuEnable) return false;
        };
        this._rendererInitialized = true;
      },
      _initEvents: function _initEvents() {
        var win = window, hiddenPropName;
        this.config.registerSystemEvent && cc.internal.inputManager.registerSystemEvent(this.canvas);
        "undefined" !== typeof document.hidden ? hiddenPropName = "hidden" : "undefined" !== typeof document.mozHidden ? hiddenPropName = "mozHidden" : "undefined" !== typeof document.msHidden ? hiddenPropName = "msHidden" : "undefined" !== typeof document.webkitHidden && (hiddenPropName = "webkitHidden");
        var hidden = false;
        function onHidden() {
          if (!hidden) {
            hidden = true;
            game.emit(game.EVENT_HIDE);
          }
        }
        function onShown(arg0, arg1, arg2, arg3, arg4) {
          if (hidden) {
            hidden = false;
            game.emit(game.EVENT_SHOW, arg0, arg1, arg2, arg3, arg4);
          }
        }
        if (hiddenPropName) {
          var changeList = [ "visibilitychange", "mozvisibilitychange", "msvisibilitychange", "webkitvisibilitychange", "qbrowserVisibilityChange" ];
          for (var i = 0; i < changeList.length; i++) document.addEventListener(changeList[i], (function(event) {
            var visible = document[hiddenPropName];
            visible = visible || event["hidden"];
            visible ? onHidden() : onShown();
          }));
        } else {
          win.addEventListener("blur", onHidden);
          win.addEventListener("focus", onShown);
        }
        navigator.userAgent.indexOf("MicroMessenger") > -1 && (win.onfocus = onShown);
        if ("onpageshow" in window && "onpagehide" in window) {
          win.addEventListener("pagehide", onHidden);
          win.addEventListener("pageshow", onShown);
          document.addEventListener("pagehide", onHidden);
          document.addEventListener("pageshow", onShown);
        }
        this.on(game.EVENT_HIDE, (function() {
          game.pause();
        }));
        this.on(game.EVENT_SHOW, (function() {
          game.resume();
        }));
      }
    };
    EventTarget.call(game);
    cc.js.addon(game, EventTarget.prototype);
    cc.game = module.exports = game;
  }), {
    "../audio/CCAudioEngine": 22,
    "../core/renderer/utils/dynamic-atlas/manager": void 0,
    "./CCDebug": 23,
    "./event/event-target": 121,
    "./renderer/index.js": 168
  } ],
  26: [ (function(require, module, exports) {
    "use strict";
    var _valueTypes = require("./value-types");
    var BaseNode = require("./utils/base-node");
    var PrefabHelper = require("./utils/prefab-helper");
    var nodeMemPool = require("./utils/trans-pool").NodeMemPool;
    var AffineTrans = require("./utils/affine-transform");
    var eventManager = require("./event-manager");
    var macro = require("./platform/CCMacro");
    var js = require("./platform/js");
    var Event = require("./event/event");
    var EventTarget = require("./event/event-target");
    var RenderFlow = require("./renderer/render-flow");
    var Flags = cc.Object.Flags;
    var Destroying = Flags.Destroying;
    var ERR_INVALID_NUMBER = false;
    var ONE_DEGREE = Math.PI / 180;
    var ActionManagerExist = !!cc.ActionManager;
    var emptyFunc = function emptyFunc() {};
    var _gwpVec3 = new _valueTypes.Vec3();
    var _gwpQuat = new _valueTypes.Quat();
    var _tpVec3a = new _valueTypes.Vec3();
    var _tpVec3b = new _valueTypes.Vec3();
    var _tpQuata = new _valueTypes.Quat();
    var _tpQuatb = new _valueTypes.Quat();
    var _swpVec3 = new _valueTypes.Vec3();
    var _gwsVec3 = new _valueTypes.Vec3();
    var _swsVec3 = new _valueTypes.Vec3();
    var _gwrtVec3a = new _valueTypes.Vec3();
    var _gwrtVec3b = new _valueTypes.Vec3();
    var _gwrtQuata = new _valueTypes.Quat();
    var _gwrtQuatb = new _valueTypes.Quat();
    var _laVec3 = new _valueTypes.Vec3();
    var _laQuat = new _valueTypes.Quat();
    var _urfVec3 = new _valueTypes.Vec3();
    var _urfQuat = new _valueTypes.Quat();
    var _htVec3a = new _valueTypes.Vec3();
    var _htVec3b = new _valueTypes.Vec3();
    var _gwrQuat = new _valueTypes.Quat();
    var _swrQuat = new _valueTypes.Quat();
    var _quata = new _valueTypes.Quat();
    var _mat4_temp = cc.mat4();
    var _vec3_temp = new _valueTypes.Vec3();
    var _cachedArray = new Array(16);
    _cachedArray.length = 0;
    var POSITION_ON = 1;
    var SCALE_ON = 2;
    var ROTATION_ON = 4;
    var SIZE_ON = 8;
    var ANCHOR_ON = 16;
    var COLOR_ON = 32;
    var BuiltinGroupIndex = cc.Enum({
      DEBUG: 31
    });
    var LocalDirtyFlag = cc.Enum({
      POSITION: 1,
      SCALE: 2,
      ROTATION: 4,
      SKEW: 8,
      TRS: 7,
      RS: 6,
      TRSS: 15,
      PHYSICS_POSITION: 16,
      PHYSICS_SCALE: 32,
      PHYSICS_ROTATION: 64,
      PHYSICS_TRS: 112,
      PHYSICS_RS: 96,
      ALL_POSITION: 17,
      ALL_SCALE: 34,
      ALL_ROTATION: 68,
      ALL_TRS: 119,
      ALL: 65535
    });
    var EventType = 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"
    });
    var _touchEvents = [ EventType.TOUCH_START, EventType.TOUCH_MOVE, EventType.TOUCH_END, EventType.TOUCH_CANCEL ];
    var _mouseEvents = [ EventType.MOUSE_DOWN, EventType.MOUSE_ENTER, EventType.MOUSE_MOVE, EventType.MOUSE_LEAVE, EventType.MOUSE_UP, EventType.MOUSE_WHEEL ];
    var _skewNeedWarn = true;
    var _skewWarn = function _skewWarn(value, node) {
      if (0 !== value) {
        var nodePath = "";
        var NodeUtils;
        false;
        _skewNeedWarn && cc.warn("`cc.Node.skewX/Y` is deprecated since v2.2.1, please use 3D node instead.", nodePath);
        true, _skewNeedWarn = false;
      }
    };
    var _currentHovered = null;
    var _touchStartHandler = function _touchStartHandler(touch, event) {
      var pos = touch.getLocation();
      var node = this.owner;
      if (node._hitTest(pos, this)) {
        event.type = EventType.TOUCH_START;
        event.touch = touch;
        event.bubbles = true;
        node.dispatchEvent(event);
        return true;
      }
      return false;
    };
    var _touchMoveHandler = function _touchMoveHandler(touch, event) {
      var node = this.owner;
      event.type = EventType.TOUCH_MOVE;
      event.touch = touch;
      event.bubbles = true;
      node.dispatchEvent(event);
    };
    var _touchEndHandler = function _touchEndHandler(touch, event) {
      var pos = touch.getLocation();
      var node = this.owner;
      node._hitTest(pos, this) ? event.type = EventType.TOUCH_END : event.type = EventType.TOUCH_CANCEL;
      event.touch = touch;
      event.bubbles = true;
      node.dispatchEvent(event);
    };
    var _touchCancelHandler = function _touchCancelHandler(touch, event) {
      var pos = touch.getLocation();
      var node = this.owner;
      event.type = EventType.TOUCH_CANCEL;
      event.touch = touch;
      event.bubbles = true;
      node.dispatchEvent(event);
    };
    var _mouseDownHandler = function _mouseDownHandler(event) {
      var pos = event.getLocation();
      var node = this.owner;
      if (node._hitTest(pos, this)) {
        event.type = EventType.MOUSE_DOWN;
        event.bubbles = true;
        node.dispatchEvent(event);
      }
    };
    var _mouseMoveHandler = function _mouseMoveHandler(event) {
      var pos = event.getLocation();
      var node = this.owner;
      var hit = node._hitTest(pos, this);
      if (hit) {
        if (!this._previousIn) {
          if (_currentHovered && _currentHovered._mouseListener) {
            event.type = EventType.MOUSE_LEAVE;
            _currentHovered.dispatchEvent(event);
            _currentHovered._mouseListener._previousIn = false;
          }
          _currentHovered = this.owner;
          event.type = EventType.MOUSE_ENTER;
          node.dispatchEvent(event);
          this._previousIn = true;
        }
        event.type = EventType.MOUSE_MOVE;
        event.bubbles = true;
        node.dispatchEvent(event);
      } else {
        if (!this._previousIn) return;
        event.type = EventType.MOUSE_LEAVE;
        node.dispatchEvent(event);
        this._previousIn = false;
        _currentHovered = null;
      }
      event.stopPropagation();
    };
    var _mouseUpHandler = function _mouseUpHandler(event) {
      var pos = event.getLocation();
      var node = this.owner;
      if (node._hitTest(pos, this)) {
        event.type = EventType.MOUSE_UP;
        event.bubbles = true;
        node.dispatchEvent(event);
        event.stopPropagation();
      }
    };
    var _mouseWheelHandler = function _mouseWheelHandler(event) {
      var pos = event.getLocation();
      var node = this.owner;
      if (node._hitTest(pos, this)) {
        event.type = EventType.MOUSE_WHEEL;
        event.bubbles = true;
        node.dispatchEvent(event);
        event.stopPropagation();
      }
    };
    function _searchComponentsInParent(node, comp) {
      if (comp) {
        var index = 0;
        var list = null;
        for (var curr = node; curr && cc.Node.isNode(curr); curr = curr._parent, ++index) if (curr.getComponent(comp)) {
          var next = {
            index: index,
            node: curr
          };
          list ? list.push(next) : list = [ next ];
        }
        return list;
      }
      return null;
    }
    function _checkListeners(node, events) {
      if (!(node._objFlags & Destroying)) {
        if (node._bubblingListeners) for (var i = 0, l = events.length; i < l; ++i) if (node._bubblingListeners.hasEventListener(events[i])) return true;
        if (node._capturingListeners) for (var _i = 0, _l = events.length; _i < _l; ++_i) if (node._capturingListeners.hasEventListener(events[_i])) return true;
        return false;
      }
      return true;
    }
    function _doDispatchEvent(owner, event) {
      var target, i;
      event.target = owner;
      _cachedArray.length = 0;
      owner._getCapturingTargets(event.type, _cachedArray);
      event.eventPhase = 1;
      for (i = _cachedArray.length - 1; i >= 0; --i) {
        target = _cachedArray[i];
        if (target._capturingListeners) {
          event.currentTarget = target;
          target._capturingListeners.emit(event.type, event, _cachedArray);
          if (event._propagationStopped) {
            _cachedArray.length = 0;
            return;
          }
        }
      }
      _cachedArray.length = 0;
      event.eventPhase = 2;
      event.currentTarget = owner;
      owner._capturingListeners && owner._capturingListeners.emit(event.type, event);
      !event._propagationImmediateStopped && owner._bubblingListeners && owner._bubblingListeners.emit(event.type, event);
      if (!event._propagationStopped && event.bubbles) {
        owner._getBubblingTargets(event.type, _cachedArray);
        event.eventPhase = 3;
        for (i = 0; i < _cachedArray.length; ++i) {
          target = _cachedArray[i];
          if (target._bubblingListeners) {
            event.currentTarget = target;
            target._bubblingListeners.emit(event.type, event);
            if (event._propagationStopped) {
              _cachedArray.length = 0;
              return;
            }
          }
        }
      }
      _cachedArray.length = 0;
    }
    function _getActualGroupIndex(node) {
      var groupIndex = node.groupIndex;
      0 === groupIndex && node.parent && (groupIndex = _getActualGroupIndex(node.parent));
      return groupIndex;
    }
    function _updateCullingMask(node) {
      var index = _getActualGroupIndex(node);
      node._cullingMask = 1 << index;
      false;
      for (var i = 0; i < node._children.length; i++) _updateCullingMask(node._children[i]);
    }
    function updateLocalMatrix3D() {
      if (this._localMatDirty & LocalDirtyFlag.TRSS) {
        var t = this._matrix;
        var tm = t.m;
        _valueTypes.Trs.toMat4(t, this._trs);
        if (this._skewX || this._skewY) {
          var a = tm[0], b = tm[1], c = tm[4], d = tm[5];
          var skx = Math.tan(this._skewX * ONE_DEGREE);
          var sky = Math.tan(this._skewY * ONE_DEGREE);
          Infinity === skx && (skx = 99999999);
          Infinity === sky && (sky = 99999999);
          tm[0] = a + c * sky;
          tm[1] = b + d * sky;
          tm[4] = c + a * skx;
          tm[5] = d + b * skx;
        }
        this._localMatDirty &= ~LocalDirtyFlag.TRSS;
        this._worldMatDirty = true;
      }
    }
    function updateLocalMatrix2D() {
      var dirtyFlag = this._localMatDirty;
      if (!(dirtyFlag & LocalDirtyFlag.TRSS)) return;
      var t = this._matrix;
      var tm = t.m;
      var trs = this._trs;
      if (dirtyFlag & (LocalDirtyFlag.RS | LocalDirtyFlag.SKEW)) {
        var rotation = -this._eulerAngles.z;
        var hasSkew = this._skewX || this._skewY;
        var sx = trs[7], sy = trs[8];
        if (rotation || hasSkew) {
          var a = 1, b = 0, c = 0, d = 1;
          if (rotation) {
            var rotationRadians = rotation * ONE_DEGREE;
            c = Math.sin(rotationRadians);
            d = Math.cos(rotationRadians);
            a = d;
            b = -c;
          }
          tm[0] = a *= sx;
          tm[1] = b *= sx;
          tm[4] = c *= sy;
          tm[5] = d *= sy;
          if (hasSkew) {
            var _a = tm[0], _b = tm[1], _c = tm[4], _d = tm[5];
            var skx = Math.tan(this._skewX * ONE_DEGREE);
            var sky = Math.tan(this._skewY * ONE_DEGREE);
            Infinity === skx && (skx = 99999999);
            Infinity === sky && (sky = 99999999);
            tm[0] = _a + _c * sky;
            tm[1] = _b + _d * sky;
            tm[4] = _c + _a * skx;
            tm[5] = _d + _b * skx;
          }
        } else {
          tm[0] = sx;
          tm[1] = 0;
          tm[4] = 0;
          tm[5] = sy;
        }
      }
      tm[12] = trs[0];
      tm[13] = trs[1];
      this._localMatDirty &= ~LocalDirtyFlag.TRSS;
      this._worldMatDirty = true;
    }
    function calculWorldMatrix3D() {
      this._localMatDirty & LocalDirtyFlag.TRSS && this._updateLocalMatrix();
      if (this._parent) {
        var parentMat = this._parent._worldMatrix;
        _valueTypes.Mat4.mul(this._worldMatrix, parentMat, this._matrix);
      } else _valueTypes.Mat4.copy(this._worldMatrix, this._matrix);
      this._worldMatDirty = false;
    }
    function calculWorldMatrix2D() {
      this._localMatDirty & LocalDirtyFlag.TRSS && this._updateLocalMatrix();
      var parent = this._parent;
      parent ? this._mulMat(this._worldMatrix, parent._worldMatrix, this._matrix) : _valueTypes.Mat4.copy(this._worldMatrix, this._matrix);
      this._worldMatDirty = false;
    }
    function mulMat2D(out, a, b) {
      var am = a.m, bm = b.m, outm = out.m;
      var aa = am[0], ab = am[1], ac = am[4], ad = am[5], atx = am[12], aty = am[13];
      var ba = bm[0], bb = bm[1], bc = bm[4], bd = bm[5], btx = bm[12], bty = bm[13];
      if (0 !== ab || 0 !== ac) {
        outm[0] = ba * aa + bb * ac;
        outm[1] = ba * ab + bb * ad;
        outm[4] = bc * aa + bd * ac;
        outm[5] = bc * ab + bd * ad;
        outm[12] = aa * btx + ac * bty + atx;
        outm[13] = ab * btx + ad * bty + aty;
      } else {
        outm[0] = ba * aa;
        outm[1] = bb * ad;
        outm[4] = bc * aa;
        outm[5] = bd * ad;
        outm[12] = aa * btx + atx;
        outm[13] = ad * bty + aty;
      }
    }
    var mulMat3D = _valueTypes.Mat4.mul;
    var NodeDefines = {
      name: "cc.Node",
      extends: BaseNode,
      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: false
        },
        _is3DNode: false,
        _groupIndex: {
          default: 0,
          formerlySerializedAs: "groupIndex"
        },
        groupIndex: {
          get: function get() {
            return this._groupIndex;
          },
          set: function set(value) {
            this._groupIndex = value;
            _updateCullingMask(this);
            this.emit(EventType.GROUP_CHANGED, this);
          }
        },
        group: {
          get: function get() {
            return cc.game.groupList[this.groupIndex] || "";
          },
          set: function set(value) {
            this.groupIndex = cc.game.groupList.indexOf(value);
          }
        },
        x: {
          get: function get() {
            return this._trs[0];
          },
          set: function set(value) {
            var trs = this._trs;
            if (value !== trs[0]) {
              true;
              var oldValue;
              false;
              trs[0] = value;
              this.setLocalDirty(LocalDirtyFlag.ALL_POSITION);
              if (this._eventMask & POSITION_ON) {
                false;
                this.emit(EventType.POSITION_CHANGED);
              }
            }
          }
        },
        y: {
          get: function get() {
            return this._trs[1];
          },
          set: function set(value) {
            var trs = this._trs;
            if (value !== trs[1]) {
              true;
              var oldValue;
              false;
              trs[1] = value;
              this.setLocalDirty(LocalDirtyFlag.ALL_POSITION);
              if (this._eventMask & POSITION_ON) {
                false;
                this.emit(EventType.POSITION_CHANGED);
              }
            }
          }
        },
        z: {
          get: function get() {
            return this._trs[2];
          },
          set: function set(value) {
            var trs = this._trs;
            if (value !== trs[2]) {
              true;
              trs[2] = value;
              this.setLocalDirty(LocalDirtyFlag.ALL_POSITION);
              true, this._renderFlag |= RenderFlow.FLAG_WORLD_TRANSFORM;
              this._eventMask & POSITION_ON && this.emit(EventType.POSITION_CHANGED);
            }
          }
        },
        rotation: {
          get: function get() {
            true;
            cc.warn("`cc.Node.rotation` is deprecated since v2.1.0, please use `-angle` instead. (`this.node.rotation` -> `-this.node.angle`)");
            return -this.angle;
          },
          set: function set(value) {
            true;
            cc.warn("`cc.Node.rotation` is deprecated since v2.1.0, please set `-angle` instead. (`this.node.rotation = x` -> `this.node.angle = -x`)");
            this.angle = -value;
          }
        },
        angle: {
          get: function get() {
            return this._eulerAngles.z;
          },
          set: function set(value) {
            _valueTypes.Vec3.set(this._eulerAngles, 0, 0, value);
            _valueTypes.Trs.fromAngleZ(this._trs, value);
            this.setLocalDirty(LocalDirtyFlag.ALL_ROTATION);
            this._eventMask & ROTATION_ON && this.emit(EventType.ROTATION_CHANGED);
          }
        },
        rotationX: {
          get: function get() {
            true;
            cc.warn("`cc.Node.rotationX` is deprecated since v2.1.0, please use `eulerAngles.x` instead. (`this.node.rotationX` -> `this.node.eulerAngles.x`)");
            return this._eulerAngles.x;
          },
          set: function set(value) {
            true;
            cc.warn("`cc.Node.rotationX` is deprecated since v2.1.0, please set `eulerAngles` instead. (`this.node.rotationX = x` -> `this.node.is3DNode = true; this.node.eulerAngles = cc.v3(x, 0, 0)`");
            if (this._eulerAngles.x !== value) {
              this._eulerAngles.x = value;
              this._eulerAngles.x === this._eulerAngles.y ? _valueTypes.Trs.fromAngleZ(this._trs, -value) : _valueTypes.Trs.fromEulerNumber(this._trs, value, this._eulerAngles.y, 0);
              this.setLocalDirty(LocalDirtyFlag.ALL_ROTATION);
              this._eventMask & ROTATION_ON && this.emit(EventType.ROTATION_CHANGED);
            }
          }
        },
        rotationY: {
          get: function get() {
            true;
            cc.warn("`cc.Node.rotationY` is deprecated since v2.1.0, please use `eulerAngles.y` instead. (`this.node.rotationY` -> `this.node.eulerAngles.y`)");
            return this._eulerAngles.y;
          },
          set: function set(value) {
            true;
            cc.warn("`cc.Node.rotationY` is deprecated since v2.1.0, please set `eulerAngles` instead. (`this.node.rotationY = y` -> `this.node.is3DNode = true; this.node.eulerAngles = cc.v3(0, y, 0)`");
            if (this._eulerAngles.y !== value) {
              this._eulerAngles.y = value;
              this._eulerAngles.x === this._eulerAngles.y ? _valueTypes.Trs.fromAngleZ(this._trs, -value) : _valueTypes.Trs.fromEulerNumber(this._trs, this._eulerAngles.x, value, 0);
              this.setLocalDirty(LocalDirtyFlag.ALL_ROTATION);
              this._eventMask & ROTATION_ON && this.emit(EventType.ROTATION_CHANGED);
            }
          }
        },
        eulerAngles: {
          get: function get() {
            false;
            return _valueTypes.Trs.toEuler(this._eulerAngles, this._trs);
          },
          set: function set(v) {
            false;
            _valueTypes.Trs.fromEuler(this._trs, v);
            this.setLocalDirty(LocalDirtyFlag.ALL_ROTATION);
            true, this._renderFlag |= RenderFlow.FLAG_TRANSFORM;
            this._eventMask & ROTATION_ON && this.emit(EventType.ROTATION_CHANGED);
          }
        },
        quat: {
          get: function get() {
            var trs = this._trs;
            return new _valueTypes.Quat(trs[3], trs[4], trs[5], trs[6]);
          },
          set: function set(v) {
            this.setRotation(v);
          }
        },
        scale: {
          get: function get() {
            return this._trs[7];
          },
          set: function set(v) {
            this.setScale(v);
          }
        },
        scaleX: {
          get: function get() {
            return this._trs[7];
          },
          set: function set(value) {
            if (this._trs[7] !== value) {
              this._trs[7] = value;
              this.setLocalDirty(LocalDirtyFlag.ALL_SCALE);
              this._eventMask & SCALE_ON && this.emit(EventType.SCALE_CHANGED);
            }
          }
        },
        scaleY: {
          get: function get() {
            return this._trs[8];
          },
          set: function set(value) {
            if (this._trs[8] !== value) {
              this._trs[8] = value;
              this.setLocalDirty(LocalDirtyFlag.ALL_SCALE);
              this._eventMask & SCALE_ON && this.emit(EventType.SCALE_CHANGED);
            }
          }
        },
        scaleZ: {
          get: function get() {
            return this._trs[9];
          },
          set: function set(value) {
            if (this._trs[9] !== value) {
              this._trs[9] = value;
              this.setLocalDirty(LocalDirtyFlag.ALL_SCALE);
              true, this._renderFlag |= RenderFlow.FLAG_TRANSFORM;
              this._eventMask & SCALE_ON && this.emit(EventType.SCALE_CHANGED);
            }
          }
        },
        skewX: {
          get: function get() {
            return this._skewX;
          },
          set: function set(value) {
            _skewWarn(value, this);
            this._skewX = value;
            this.setLocalDirty(LocalDirtyFlag.SKEW);
            false;
          }
        },
        skewY: {
          get: function get() {
            return this._skewY;
          },
          set: function set(value) {
            _skewWarn(value, this);
            this._skewY = value;
            this.setLocalDirty(LocalDirtyFlag.SKEW);
            false;
          }
        },
        opacity: {
          get: function get() {
            return this._opacity;
          },
          set: function set(value) {
            value = cc.misc.clampf(value, 0, 255);
            if (this._opacity !== value) {
              this._opacity = value;
              false;
              this._renderFlag |= RenderFlow.FLAG_OPACITY_COLOR;
            }
          },
          range: [ 0, 255 ]
        },
        color: {
          get: function get() {
            return this._color.clone();
          },
          set: function set(value) {
            if (!this._color.equals(value)) {
              this._color.set(value);
              false;
              this._renderFlag |= RenderFlow.FLAG_COLOR;
              this._eventMask & COLOR_ON && this.emit(EventType.COLOR_CHANGED, value);
            }
          }
        },
        anchorX: {
          get: function get() {
            return this._anchorPoint.x;
          },
          set: function set(value) {
            var anchorPoint = this._anchorPoint;
            if (anchorPoint.x !== value) {
              anchorPoint.x = value;
              this._eventMask & ANCHOR_ON && this.emit(EventType.ANCHOR_CHANGED);
            }
          }
        },
        anchorY: {
          get: function get() {
            return this._anchorPoint.y;
          },
          set: function set(value) {
            var anchorPoint = this._anchorPoint;
            if (anchorPoint.y !== value) {
              anchorPoint.y = value;
              this._eventMask & ANCHOR_ON && this.emit(EventType.ANCHOR_CHANGED);
            }
          }
        },
        width: {
          get: function get() {
            return this._contentSize.width;
          },
          set: function set(value) {
            if (value !== this._contentSize.width) {
              var clone;
              false;
              this._contentSize.width = value;
              if (this._eventMask & SIZE_ON) {
                false;
                this.emit(EventType.SIZE_CHANGED);
              }
            }
          }
        },
        height: {
          get: function get() {
            return this._contentSize.height;
          },
          set: function set(value) {
            if (value !== this._contentSize.height) {
              var clone;
              false;
              this._contentSize.height = value;
              if (this._eventMask & SIZE_ON) {
                false;
                this.emit(EventType.SIZE_CHANGED);
              }
            }
          }
        },
        zIndex: {
          get: function get() {
            return this._localZOrder >> 16;
          },
          set: function set(value) {
            if (value > macro.MAX_ZINDEX) {
              cc.warnID(1636);
              value = macro.MAX_ZINDEX;
            } else if (value < macro.MIN_ZINDEX) {
              cc.warnID(1637);
              value = macro.MIN_ZINDEX;
            }
            if (this.zIndex !== value) {
              this._localZOrder = 65535 & this._localZOrder | value << 16;
              this.emit(EventType.SIBLING_ORDER_CHANGED);
              this._onSiblingIndexChanged();
            }
          }
        },
        is3DNode: {
          get: function get() {
            return this._is3DNode;
          },
          set: function set(v) {
            this._is3DNode = v;
            this._update3DFunction();
          }
        },
        up: {
          get: function get() {
            var _up = _valueTypes.Vec3.transformQuat(_urfVec3, _valueTypes.Vec3.UP, this.getWorldRotation(_urfQuat));
            return _up.clone();
          }
        },
        right: {
          get: function get() {
            var _right = _valueTypes.Vec3.transformQuat(_urfVec3, _valueTypes.Vec3.RIGHT, this.getWorldRotation(_urfQuat));
            return _right.clone();
          }
        },
        forward: {
          get: function get() {
            var _forward = _valueTypes.Vec3.transformQuat(_urfVec3, _valueTypes.Vec3.FORWARD, this.getWorldRotation(_urfQuat));
            return _forward.clone();
          }
        }
      },
      ctor: function ctor() {
        this._reorderChildDirty = false;
        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;
        false;
        this._renderFlag = RenderFlow.FLAG_TRANSFORM | RenderFlow.FLAG_OPACITY_COLOR;
      },
      statics: {
        EventType: EventType,
        _LocalDirtyFlag: LocalDirtyFlag,
        isNode: function isNode(obj) {
          return obj instanceof Node && (obj.constructor === Node || !(obj instanceof cc.Scene));
        },
        BuiltinGroupIndex: BuiltinGroupIndex
      },
      _onSiblingIndexChanged: function _onSiblingIndexChanged() {
        this._parent && this._parent._delaySort();
      },
      _onPreDestroy: function _onPreDestroy() {
        var destroyByParent = this._onPreDestroyBase();
        ActionManagerExist && cc.director.getActionManager().removeAllActionsFromTarget(this);
        _currentHovered === this && (_currentHovered = null);
        if (this._touchListener || this._mouseListener) {
          eventManager.removeListeners(this);
          if (this._touchListener) {
            this._touchListener.owner = null;
            this._touchListener.mask = null;
            this._touchListener = null;
          }
          if (this._mouseListener) {
            this._mouseListener.owner = null;
            this._mouseListener.mask = null;
            this._mouseListener = null;
          }
        }
        false;
        this._backDataIntoPool();
        this._reorderChildDirty && cc.director.__fastOff(cc.Director.EVENT_AFTER_UPDATE, this.sortAllChildren, this);
        destroyByParent || false;
      },
      _onPostActivated: function _onPostActivated(active) {
        var actionManager = ActionManagerExist ? cc.director.getActionManager() : null;
        if (active) {
          this._renderFlag |= RenderFlow.FLAG_WORLD_TRANSFORM;
          actionManager && actionManager.resumeTarget(this);
          eventManager.resumeTarget(this);
          this._checkListenerMask();
        } else {
          actionManager && actionManager.pauseTarget(this);
          eventManager.pauseTarget(this);
        }
      },
      _onHierarchyChanged: function _onHierarchyChanged(oldParent) {
        this._updateOrderOfArrival();
        _updateCullingMask(this);
        this._parent && this._parent._delaySort();
        this._renderFlag |= RenderFlow.FLAG_WORLD_TRANSFORM;
        this._onHierarchyChangedBase(oldParent);
        cc._widgetManager && (cc._widgetManager._nodesOrderDirty = true);
        oldParent && this._activeInHierarchy && this._checkListenerMask();
        false;
      },
      _update3DFunction: function _update3DFunction() {
        if (this._is3DNode) {
          this._updateLocalMatrix = updateLocalMatrix3D;
          this._calculWorldMatrix = calculWorldMatrix3D;
          this._mulMat = mulMat3D;
        } else {
          this._updateLocalMatrix = updateLocalMatrix2D;
          this._calculWorldMatrix = calculWorldMatrix2D;
          this._mulMat = mulMat2D;
        }
        this._renderComponent && this._renderComponent._on3DNodeChanged && this._renderComponent._on3DNodeChanged();
        this._renderFlag |= RenderFlow.FLAG_TRANSFORM;
        this._localMatDirty = LocalDirtyFlag.ALL;
        false;
      },
      _initDataFromPool: function _initDataFromPool() {
        if (!this._spaceInfo) {
          false, false;
          this._spaceInfo = nodeMemPool.pop();
        }
        var spaceInfo = this._spaceInfo;
        this._matrix = cc.mat4(spaceInfo.localMat);
        _valueTypes.Mat4.identity(this._matrix);
        this._worldMatrix = cc.mat4(spaceInfo.worldMat);
        _valueTypes.Mat4.identity(this._worldMatrix);
        this._localMatDirty = LocalDirtyFlag.ALL;
        this._worldMatDirty = true;
        var trs = this._trs = spaceInfo.trs;
        trs[0] = 0;
        trs[1] = 0;
        trs[2] = 0;
        trs[3] = 0;
        trs[4] = 0;
        trs[5] = 0;
        trs[6] = 1;
        trs[7] = 1;
        trs[8] = 1;
        trs[9] = 1;
      },
      _backDataIntoPool: function _backDataIntoPool() {
        if (!(false, false)) {
          nodeMemPool.push(this._spaceInfo);
          this._matrix = null;
          this._worldMatrix = null;
          this._trs = null;
          this._spaceInfo = null;
        }
      },
      _toEuler: function _toEuler() {
        if (this.is3DNode) _valueTypes.Trs.toEuler(this._eulerAngles, this._trs); else {
          var z = Math.asin(this._trs[5]) / ONE_DEGREE * 2;
          _valueTypes.Vec3.set(this._eulerAngles, 0, 0, z);
        }
      },
      _fromEuler: function _fromEuler() {
        this.is3DNode ? _valueTypes.Trs.fromEuler(this._trs, this._eulerAngles) : _valueTypes.Trs.fromAngleZ(this._trs, this._eulerAngles.z);
      },
      _upgrade_1x_to_2x: function _upgrade_1x_to_2x() {
        this._is3DNode && this._update3DFunction();
        var trs = this._trs;
        if (trs) {
          var desTrs = trs;
          trs = this._trs = this._spaceInfo.trs;
          11 === desTrs.length ? trs.set(desTrs.subarray(1)) : trs.set(desTrs);
        } else trs = this._trs = this._spaceInfo.trs;
        if (void 0 !== this._zIndex) {
          this._localZOrder = this._zIndex << 16;
          this._zIndex = void 0;
        }
        var NodeUtils;
        false;
        this._fromEuler();
        0 !== this._localZOrder && (this._zIndex = (4294901760 & this._localZOrder) >> 16);
        if (this._color.a < 255 && 255 === this._opacity) {
          this._opacity = this._color.a;
          this._color.a = 255;
        }
        false;
      },
      _onBatchCreated: function _onBatchCreated() {
        var prefabInfo = this._prefab;
        if (prefabInfo && prefabInfo.sync && prefabInfo.root === this) {
          false;
          PrefabHelper.syncWithPrefab(this);
        }
        this._upgrade_1x_to_2x();
        this._updateOrderOfArrival();
        this._cullingMask = 1 << _getActualGroupIndex(this);
        false;
        if (!this._activeInHierarchy) {
          ActionManagerExist && cc.director.getActionManager().pauseTarget(this);
          eventManager.pauseTarget(this);
        }
        var children = this._children;
        for (var i = 0, len = children.length; i < len; i++) children[i]._onBatchCreated();
        children.length > 0 && (this._renderFlag |= RenderFlow.FLAG_CHILDREN);
        false;
      },
      _onBatchRestored: function _onBatchRestored() {
        this._upgrade_1x_to_2x();
        this._cullingMask = 1 << _getActualGroupIndex(this);
        false;
        if (!this._activeInHierarchy) {
          var manager = cc.director.getActionManager();
          manager && manager.pauseTarget(this);
          eventManager.pauseTarget(this);
        }
        var children = this._children;
        for (var i = 0, len = children.length; i < len; i++) children[i]._onBatchRestored();
        children.length > 0 && (this._renderFlag |= RenderFlow.FLAG_CHILDREN);
        false;
      },
      _checkListenerMask: function _checkListenerMask() {
        if (this._touchListener) {
          var mask = this._touchListener.mask = _searchComponentsInParent(this, cc.Mask);
          this._mouseListener && (this._mouseListener.mask = mask);
        } else this._mouseListener && (this._mouseListener.mask = _searchComponentsInParent(this, cc.Mask));
      },
      _checknSetupSysEvent: function _checknSetupSysEvent(type) {
        var newAdded = false;
        var forDispatch = false;
        if (-1 !== _touchEvents.indexOf(type)) {
          if (!this._touchListener) {
            this._touchListener = cc.EventListener.create({
              event: cc.EventListener.TOUCH_ONE_BY_ONE,
              swallowTouches: true,
              owner: this,
              mask: _searchComponentsInParent(this, cc.Mask),
              onTouchBegan: _touchStartHandler,
              onTouchMoved: _touchMoveHandler,
              onTouchEnded: _touchEndHandler,
              onTouchCancelled: _touchCancelHandler
            });
            eventManager.addListener(this._touchListener, this);
            newAdded = true;
          }
          forDispatch = true;
        } else if (-1 !== _mouseEvents.indexOf(type)) {
          if (!this._mouseListener) {
            this._mouseListener = cc.EventListener.create({
              event: cc.EventListener.MOUSE,
              _previousIn: false,
              owner: this,
              mask: _searchComponentsInParent(this, cc.Mask),
              onMouseDown: _mouseDownHandler,
              onMouseMove: _mouseMoveHandler,
              onMouseUp: _mouseUpHandler,
              onMouseScroll: _mouseWheelHandler
            });
            eventManager.addListener(this._mouseListener, this);
            newAdded = true;
          }
          forDispatch = true;
        }
        newAdded && !this._activeInHierarchy && cc.director.getScheduler().schedule((function() {
          this._activeInHierarchy || eventManager.pauseTarget(this);
        }), this, 0, 0, 0, false);
        return forDispatch;
      },
      on: function on(type, callback, target, useCapture) {
        var forDispatch = this._checknSetupSysEvent(type);
        if (forDispatch) return this._onDispatch(type, callback, target, useCapture);
        switch (type) {
         case EventType.POSITION_CHANGED:
          this._eventMask |= POSITION_ON;
          break;

         case EventType.SCALE_CHANGED:
          this._eventMask |= SCALE_ON;
          break;

         case EventType.ROTATION_CHANGED:
          this._eventMask |= ROTATION_ON;
          break;

         case EventType.SIZE_CHANGED:
          this._eventMask |= SIZE_ON;
          break;

         case EventType.ANCHOR_CHANGED:
          this._eventMask |= ANCHOR_ON;
          break;

         case EventType.COLOR_CHANGED:
          this._eventMask |= COLOR_ON;
        }
        this._bubblingListeners || (this._bubblingListeners = new EventTarget());
        return this._bubblingListeners.on(type, callback, target);
      },
      once: function once(type, callback, target, useCapture) {
        var forDispatch = this._checknSetupSysEvent(type);
        var listeners = null;
        listeners = forDispatch && useCapture ? this._capturingListeners = this._capturingListeners || new EventTarget() : this._bubblingListeners = this._bubblingListeners || new EventTarget();
        listeners.once(type, callback, target);
      },
      _onDispatch: function _onDispatch(type, callback, target, useCapture) {
        if ("boolean" === typeof target) {
          useCapture = target;
          target = void 0;
        } else useCapture = !!useCapture;
        if (!callback) {
          cc.errorID(6800);
          return;
        }
        var listeners = null;
        listeners = useCapture ? this._capturingListeners = this._capturingListeners || new EventTarget() : this._bubblingListeners = this._bubblingListeners || new EventTarget();
        if (!listeners.hasEventListener(type, callback, target)) {
          listeners.on(type, callback, target);
          target && target.__eventTargets && target.__eventTargets.push(this);
        }
        return callback;
      },
      off: function off(type, callback, target, useCapture) {
        var touchEvent = -1 !== _touchEvents.indexOf(type);
        var mouseEvent = !touchEvent && -1 !== _mouseEvents.indexOf(type);
        if (touchEvent || mouseEvent) {
          this._offDispatch(type, callback, target, useCapture);
          if (touchEvent) {
            if (this._touchListener && !_checkListeners(this, _touchEvents)) {
              eventManager.removeListener(this._touchListener);
              this._touchListener = null;
            }
          } else if (mouseEvent && this._mouseListener && !_checkListeners(this, _mouseEvents)) {
            eventManager.removeListener(this._mouseListener);
            this._mouseListener = null;
          }
        } else if (this._bubblingListeners) {
          this._bubblingListeners.off(type, callback, target);
          var hasListeners = this._bubblingListeners.hasEventListener(type);
          if (!hasListeners) switch (type) {
           case EventType.POSITION_CHANGED:
            this._eventMask &= ~POSITION_ON;
            break;

           case EventType.SCALE_CHANGED:
            this._eventMask &= ~SCALE_ON;
            break;

           case EventType.ROTATION_CHANGED:
            this._eventMask &= ~ROTATION_ON;
            break;

           case EventType.SIZE_CHANGED:
            this._eventMask &= ~SIZE_ON;
            break;

           case EventType.ANCHOR_CHANGED:
            this._eventMask &= ~ANCHOR_ON;
            break;

           case EventType.COLOR_CHANGED:
            this._eventMask &= ~COLOR_ON;
          }
        }
      },
      _offDispatch: function _offDispatch(type, callback, target, useCapture) {
        if ("boolean" === typeof target) {
          useCapture = target;
          target = void 0;
        } else useCapture = !!useCapture;
        if (callback) {
          var listeners = useCapture ? this._capturingListeners : this._bubblingListeners;
          if (listeners) {
            listeners.off(type, callback, target);
            target && target.__eventTargets && js.array.fastRemove(target.__eventTargets, this);
          }
        } else {
          this._capturingListeners && this._capturingListeners.removeAll(type);
          this._bubblingListeners && this._bubblingListeners.removeAll(type);
        }
      },
      targetOff: function targetOff(target) {
        var listeners = this._bubblingListeners;
        if (listeners) {
          listeners.targetOff(target);
          this._eventMask & POSITION_ON && !listeners.hasEventListener(EventType.POSITION_CHANGED) && (this._eventMask &= ~POSITION_ON);
          this._eventMask & SCALE_ON && !listeners.hasEventListener(EventType.SCALE_CHANGED) && (this._eventMask &= ~SCALE_ON);
          this._eventMask & ROTATION_ON && !listeners.hasEventListener(EventType.ROTATION_CHANGED) && (this._eventMask &= ~ROTATION_ON);
          this._eventMask & SIZE_ON && !listeners.hasEventListener(EventType.SIZE_CHANGED) && (this._eventMask &= ~SIZE_ON);
          this._eventMask & ANCHOR_ON && !listeners.hasEventListener(EventType.ANCHOR_CHANGED) && (this._eventMask &= ~ANCHOR_ON);
          this._eventMask & COLOR_ON && !listeners.hasEventListener(EventType.COLOR_CHANGED) && (this._eventMask &= ~COLOR_ON);
        }
        this._capturingListeners && this._capturingListeners.targetOff(target);
        target && target.__eventTargets && js.array.fastRemove(target.__eventTargets, this);
        if (this._touchListener && !_checkListeners(this, _touchEvents)) {
          eventManager.removeListener(this._touchListener);
          this._touchListener = null;
        }
        if (this._mouseListener && !_checkListeners(this, _mouseEvents)) {
          eventManager.removeListener(this._mouseListener);
          this._mouseListener = null;
        }
      },
      hasEventListener: function hasEventListener(type) {
        var has = false;
        this._bubblingListeners && (has = this._bubblingListeners.hasEventListener(type));
        !has && this._capturingListeners && (has = this._capturingListeners.hasEventListener(type));
        return has;
      },
      emit: function emit(type, arg1, arg2, arg3, arg4, arg5) {
        this._bubblingListeners && this._bubblingListeners.emit(type, arg1, arg2, arg3, arg4, arg5);
      },
      dispatchEvent: function dispatchEvent(event) {
        _doDispatchEvent(this, event);
        _cachedArray.length = 0;
      },
      pauseSystemEvents: function pauseSystemEvents(recursive) {
        eventManager.pauseTarget(this, recursive);
      },
      resumeSystemEvents: function resumeSystemEvents(recursive) {
        eventManager.resumeTarget(this, recursive);
      },
      _hitTest: function _hitTest(point, listener) {
        var w = this._contentSize.width, h = this._contentSize.height, cameraPt = _htVec3a, testPt = _htVec3b;
        var camera = cc.Camera.findCamera(this);
        camera ? camera.getScreenToWorldPoint(point, cameraPt) : cameraPt.set(point);
        this._updateWorldMatrix();
        if (!_valueTypes.Mat4.invert(_mat4_temp, this._worldMatrix)) return false;
        _valueTypes.Vec2.transformMat4(testPt, cameraPt, _mat4_temp);
        testPt.x += this._anchorPoint.x * w;
        testPt.y += this._anchorPoint.y * h;
        var hit = false;
        if (testPt.x >= 0 && testPt.y >= 0 && testPt.x <= w && testPt.y <= h) {
          hit = true;
          if (listener && listener.mask) {
            var mask = listener.mask;
            var parent = this;
            var length = mask ? mask.length : 0;
            for (var i = 0, j = 0; parent && j < length; ++i, parent = parent.parent) {
              var temp = mask[j];
              if (i === temp.index) {
                if (parent !== temp.node) {
                  mask.length = j;
                  break;
                }
                var comp = parent.getComponent(cc.Mask);
                if (comp && comp._enabled && !comp._hitTest(cameraPt)) {
                  hit = false;
                  break;
                }
                j++;
              } else if (i > temp.index) {
                mask.length = j;
                break;
              }
            }
          }
        }
        return hit;
      },
      _getCapturingTargets: function _getCapturingTargets(type, array) {
        var parent = this.parent;
        while (parent) {
          parent._capturingListeners && parent._capturingListeners.hasEventListener(type) && array.push(parent);
          parent = parent.parent;
        }
      },
      _getBubblingTargets: function _getBubblingTargets(type, array) {
        var parent = this.parent;
        while (parent) {
          parent._bubblingListeners && parent._bubblingListeners.hasEventListener(type) && array.push(parent);
          parent = parent.parent;
        }
      },
      runAction: ActionManagerExist ? function(action) {
        if (!this.active) return;
        cc.assertID(action, 1618);
        var am = cc.director.getActionManager();
        if (!am._suppressDeprecation) {
          am._suppressDeprecation = true;
          cc.warnID(1639);
        }
        am.addAction(action, this, false);
        return action;
      } : emptyFunc,
      pauseAllActions: ActionManagerExist ? function() {
        cc.director.getActionManager().pauseTarget(this);
      } : emptyFunc,
      resumeAllActions: ActionManagerExist ? function() {
        cc.director.getActionManager().resumeTarget(this);
      } : emptyFunc,
      stopAllActions: ActionManagerExist ? function() {
        cc.director.getActionManager().removeAllActionsFromTarget(this);
      } : emptyFunc,
      stopAction: ActionManagerExist ? function(action) {
        cc.director.getActionManager().removeAction(action);
      } : emptyFunc,
      stopActionByTag: ActionManagerExist ? function(tag) {
        if (tag === cc.Action.TAG_INVALID) {
          cc.logID(1612);
          return;
        }
        cc.director.getActionManager().removeActionByTag(tag, this);
      } : emptyFunc,
      getActionByTag: ActionManagerExist ? function(tag) {
        if (tag === cc.Action.TAG_INVALID) {
          cc.logID(1613);
          return null;
        }
        return cc.director.getActionManager().getActionByTag(tag, this);
      } : function() {
        return null;
      },
      getNumberOfRunningActions: ActionManagerExist ? function() {
        return cc.director.getActionManager().getNumberOfRunningActionsInTarget(this);
      } : function() {
        return 0;
      },
      getPosition: function getPosition(out) {
        out = out || new _valueTypes.Vec3();
        return _valueTypes.Trs.toPosition(out, this._trs);
      },
      setPosition: function setPosition(newPosOrX, y, z) {
        var x;
        if (void 0 === y) {
          x = newPosOrX.x;
          y = newPosOrX.y;
          z = newPosOrX.z || 0;
        } else {
          x = newPosOrX;
          z = z || 0;
        }
        var trs = this._trs;
        if (trs[0] === x && trs[1] === y && trs[2] === z) return;
        var oldPosition;
        false;
        trs[0] = x;
        trs[1] = y;
        trs[2] = z;
        this.setLocalDirty(LocalDirtyFlag.ALL_POSITION);
        true, this._renderFlag |= RenderFlow.FLAG_WORLD_TRANSFORM;
        if (this._eventMask & POSITION_ON) {
          false;
          this.emit(EventType.POSITION_CHANGED);
        }
      },
      getScale: function getScale(out) {
        if (void 0 !== out) return _valueTypes.Trs.toScale(out, this._trs);
        cc.errorID(1400, "cc.Node.getScale", "cc.Node.scale or cc.Node.getScale(cc.Vec3)");
        return this._trs[7];
      },
      setScale: function setScale(x, y, z) {
        if (x && "number" !== typeof x) {
          y = x.y;
          z = void 0 === x.z ? 1 : x.z;
          x = x.x;
        } else if (void 0 !== x && void 0 === y) {
          y = x;
          z = x;
        } else void 0 === z && (z = 1);
        var trs = this._trs;
        if (trs[7] !== x || trs[8] !== y || trs[9] !== z) {
          trs[7] = x;
          trs[8] = y;
          trs[9] = z;
          this.setLocalDirty(LocalDirtyFlag.ALL_SCALE);
          true, this._renderFlag |= RenderFlow.FLAG_TRANSFORM;
          this._eventMask & SCALE_ON && this.emit(EventType.SCALE_CHANGED);
        }
      },
      getRotation: function getRotation(out) {
        if (out instanceof _valueTypes.Quat) return _valueTypes.Trs.toRotation(out, this._trs);
        true;
        cc.warn("`cc.Node.getRotation()` is deprecated since v2.1.0, please use `-cc.Node.angle` instead. (`this.node.getRotation()` -> `-this.node.angle`)");
        return -this.angle;
      },
      setRotation: function setRotation(rotation, y, z, w) {
        if ("number" === typeof rotation && void 0 === y) {
          true;
          cc.warn("`cc.Node.setRotation(degree)` is deprecated since v2.1.0, please set `-cc.Node.angle` instead. (`this.node.setRotation(x)` -> `this.node.angle = -x`)");
          this.angle = -rotation;
        } else {
          var x = rotation;
          if (void 0 === y) {
            x = rotation.x;
            y = rotation.y;
            z = rotation.z;
            w = rotation.w;
          }
          var trs = this._trs;
          if (trs[3] !== x || trs[4] !== y || trs[5] !== z || trs[6] !== w) {
            trs[3] = x;
            trs[4] = y;
            trs[5] = z;
            trs[6] = w;
            this.setLocalDirty(LocalDirtyFlag.ALL_ROTATION);
            this._eventMask & ROTATION_ON && this.emit(EventType.ROTATION_CHANGED);
            false;
          }
        }
      },
      getContentSize: function getContentSize() {
        return cc.size(this._contentSize.width, this._contentSize.height);
      },
      setContentSize: function setContentSize(size, height) {
        var locContentSize = this._contentSize;
        var clone;
        if (void 0 === height) {
          if (size.width === locContentSize.width && size.height === locContentSize.height) return;
          false;
          locContentSize.width = size.width;
          locContentSize.height = size.height;
        } else {
          if (size === locContentSize.width && height === locContentSize.height) return;
          false;
          locContentSize.width = size;
          locContentSize.height = height;
        }
        if (this._eventMask & SIZE_ON) {
          false;
          this.emit(EventType.SIZE_CHANGED);
        }
      },
      getAnchorPoint: function getAnchorPoint() {
        return cc.v2(this._anchorPoint);
      },
      setAnchorPoint: function setAnchorPoint(point, y) {
        var locAnchorPoint = this._anchorPoint;
        if (void 0 === y) {
          if (point.x === locAnchorPoint.x && point.y === locAnchorPoint.y) return;
          locAnchorPoint.x = point.x;
          locAnchorPoint.y = point.y;
        } else {
          if (point === locAnchorPoint.x && y === locAnchorPoint.y) return;
          locAnchorPoint.x = point;
          locAnchorPoint.y = y;
        }
        this.setLocalDirty(LocalDirtyFlag.ALL_POSITION);
        this._eventMask & ANCHOR_ON && this.emit(EventType.ANCHOR_CHANGED);
      },
      _invTransformPoint: function _invTransformPoint(out, pos) {
        this._parent ? this._parent._invTransformPoint(out, pos) : _valueTypes.Vec3.copy(out, pos);
        var ltrs = this._trs;
        _valueTypes.Trs.toPosition(_tpVec3a, ltrs);
        _valueTypes.Vec3.sub(out, out, _tpVec3a);
        _valueTypes.Trs.toRotation(_tpQuata, ltrs);
        _valueTypes.Quat.conjugate(_tpQuatb, _tpQuata);
        _valueTypes.Vec3.transformQuat(out, out, _tpQuatb);
        _valueTypes.Trs.toScale(_tpVec3a, ltrs);
        _valueTypes.Vec3.inverseSafe(_tpVec3b, _tpVec3a);
        _valueTypes.Vec3.mul(out, out, _tpVec3b);
        return out;
      },
      getWorldPosition: function getWorldPosition(out) {
        _valueTypes.Trs.toPosition(out, this._trs);
        var curr = this._parent;
        var ltrs;
        while (curr) {
          ltrs = curr._trs;
          _valueTypes.Trs.toScale(_gwpVec3, ltrs);
          _valueTypes.Vec3.mul(out, out, _gwpVec3);
          _valueTypes.Trs.toRotation(_gwpQuat, ltrs);
          _valueTypes.Vec3.transformQuat(out, out, _gwpQuat);
          _valueTypes.Trs.toPosition(_gwpVec3, ltrs);
          _valueTypes.Vec3.add(out, out, _gwpVec3);
          curr = curr._parent;
        }
        return out;
      },
      setWorldPosition: function setWorldPosition(pos) {
        var ltrs = this._trs;
        var oldPosition;
        false;
        this._parent ? this._parent._invTransformPoint(_swpVec3, pos) : _valueTypes.Vec3.copy(_swpVec3, pos);
        _valueTypes.Trs.fromPosition(ltrs, _swpVec3);
        this.setLocalDirty(LocalDirtyFlag.ALL_POSITION);
        if (this._eventMask & POSITION_ON) {
          false;
          this.emit(EventType.POSITION_CHANGED);
        }
      },
      getWorldRotation: function getWorldRotation(out) {
        _valueTypes.Trs.toRotation(_gwrQuat, this._trs);
        _valueTypes.Quat.copy(out, _gwrQuat);
        var curr = this._parent;
        while (curr) {
          _valueTypes.Trs.toRotation(_gwrQuat, curr._trs);
          _valueTypes.Quat.mul(out, _gwrQuat, out);
          curr = curr._parent;
        }
        return out;
      },
      setWorldRotation: function setWorldRotation(val) {
        if (this._parent) {
          this._parent.getWorldRotation(_swrQuat);
          _valueTypes.Quat.conjugate(_swrQuat, _swrQuat);
          _valueTypes.Quat.mul(_swrQuat, _swrQuat, val);
        } else _valueTypes.Quat.copy(_swrQuat, val);
        _valueTypes.Trs.fromRotation(this._trs, _swrQuat);
        false;
        this.setLocalDirty(LocalDirtyFlag.ALL_ROTATION);
      },
      getWorldScale: function getWorldScale(out) {
        _valueTypes.Trs.toScale(_gwsVec3, this._trs);
        _valueTypes.Vec3.copy(out, _gwsVec3);
        var curr = this._parent;
        while (curr) {
          _valueTypes.Trs.toScale(_gwsVec3, curr._trs);
          _valueTypes.Vec3.mul(out, out, _gwsVec3);
          curr = curr._parent;
        }
        return out;
      },
      setWorldScale: function setWorldScale(scale) {
        if (this._parent) {
          this._parent.getWorldScale(_swsVec3);
          _valueTypes.Vec3.div(_swsVec3, scale, _swsVec3);
        } else _valueTypes.Vec3.copy(_swsVec3, scale);
        _valueTypes.Trs.fromScale(this._trs, _swsVec3);
        this.setLocalDirty(LocalDirtyFlag.ALL_SCALE);
      },
      getWorldRT: function getWorldRT(out) {
        var opos = _gwrtVec3a;
        var orot = _gwrtQuata;
        var ltrs = this._trs;
        _valueTypes.Trs.toPosition(opos, ltrs);
        _valueTypes.Trs.toRotation(orot, ltrs);
        var curr = this._parent;
        while (curr) {
          ltrs = curr._trs;
          _valueTypes.Trs.toScale(_gwrtVec3b, ltrs);
          _valueTypes.Vec3.mul(opos, opos, _gwrtVec3b);
          _valueTypes.Trs.toRotation(_gwrtQuatb, ltrs);
          _valueTypes.Vec3.transformQuat(opos, opos, _gwrtQuatb);
          _valueTypes.Trs.toPosition(_gwrtVec3b, ltrs);
          _valueTypes.Vec3.add(opos, opos, _gwrtVec3b);
          _valueTypes.Quat.mul(orot, _gwrtQuatb, orot);
          curr = curr._parent;
        }
        _valueTypes.Mat4.fromRT(out, orot, opos);
        return out;
      },
      lookAt: function lookAt(pos, up) {
        this.getWorldPosition(_laVec3);
        _valueTypes.Vec3.sub(_laVec3, _laVec3, pos);
        _valueTypes.Vec3.normalize(_laVec3, _laVec3);
        _valueTypes.Quat.fromViewUp(_laQuat, _laVec3, up);
        this.setWorldRotation(_laQuat);
      },
      _updateLocalMatrix: updateLocalMatrix2D,
      _calculWorldMatrix: function _calculWorldMatrix() {
        this._localMatDirty & LocalDirtyFlag.TRSS && this._updateLocalMatrix();
        var parent = this._parent;
        parent ? this._mulMat(this._worldMatrix, parent._worldMatrix, this._matrix) : _valueTypes.Mat4.copy(this._worldMatrix, this._matrix);
        this._worldMatDirty = false;
      },
      _mulMat: mulMat2D,
      _updateWorldMatrix: function _updateWorldMatrix() {
        this._parent && this._parent._updateWorldMatrix();
        if (this._worldMatDirty) {
          this._calculWorldMatrix();
          var children = this._children;
          for (var i = 0, l = children.length; i < l; i++) children[i]._worldMatDirty = true;
        }
      },
      setLocalDirty: function setLocalDirty(flag) {
        this._localMatDirty |= flag;
        this._worldMatDirty = true;
        flag === LocalDirtyFlag.ALL_POSITION || flag === LocalDirtyFlag.POSITION ? this._renderFlag |= RenderFlow.FLAG_WORLD_TRANSFORM : this._renderFlag |= RenderFlow.FLAG_TRANSFORM;
      },
      setWorldDirty: function setWorldDirty() {
        this._worldMatDirty = true;
      },
      getLocalMatrix: function getLocalMatrix(out) {
        this._updateLocalMatrix();
        return _valueTypes.Mat4.copy(out, this._matrix);
      },
      getWorldMatrix: function getWorldMatrix(out) {
        this._updateWorldMatrix();
        return _valueTypes.Mat4.copy(out, this._worldMatrix);
      },
      convertToNodeSpaceAR: function convertToNodeSpaceAR(worldPoint, out) {
        this._updateWorldMatrix();
        _valueTypes.Mat4.invert(_mat4_temp, this._worldMatrix);
        if (worldPoint instanceof cc.Vec2) {
          out = out || new cc.Vec2();
          return _valueTypes.Vec2.transformMat4(out, worldPoint, _mat4_temp);
        }
        out = out || new cc.Vec3();
        return _valueTypes.Vec3.transformMat4(out, worldPoint, _mat4_temp);
      },
      convertToWorldSpaceAR: function convertToWorldSpaceAR(nodePoint, out) {
        this._updateWorldMatrix();
        if (nodePoint instanceof cc.Vec2) {
          out = out || new cc.Vec2();
          return _valueTypes.Vec2.transformMat4(out, nodePoint, this._worldMatrix);
        }
        out = out || new cc.Vec3();
        return _valueTypes.Vec3.transformMat4(out, nodePoint, this._worldMatrix);
      },
      convertToNodeSpace: function convertToNodeSpace(worldPoint) {
        this._updateWorldMatrix();
        _valueTypes.Mat4.invert(_mat4_temp, this._worldMatrix);
        var out = new cc.Vec2();
        _valueTypes.Vec2.transformMat4(out, worldPoint, _mat4_temp);
        out.x += this._anchorPoint.x * this._contentSize.width;
        out.y += this._anchorPoint.y * this._contentSize.height;
        return out;
      },
      convertToWorldSpace: function convertToWorldSpace(nodePoint) {
        this._updateWorldMatrix();
        var out = new cc.Vec2(nodePoint.x - this._anchorPoint.x * this._contentSize.width, nodePoint.y - this._anchorPoint.y * this._contentSize.height);
        return _valueTypes.Vec2.transformMat4(out, out, this._worldMatrix);
      },
      getNodeToParentTransform: function getNodeToParentTransform(out) {
        out || (out = AffineTrans.identity());
        this._updateLocalMatrix();
        var contentSize = this._contentSize;
        _vec3_temp.x = -this._anchorPoint.x * contentSize.width;
        _vec3_temp.y = -this._anchorPoint.y * contentSize.height;
        _valueTypes.Mat4.copy(_mat4_temp, this._matrix);
        _valueTypes.Mat4.transform(_mat4_temp, _mat4_temp, _vec3_temp);
        return AffineTrans.fromMat4(out, _mat4_temp);
      },
      getNodeToParentTransformAR: function getNodeToParentTransformAR(out) {
        out || (out = AffineTrans.identity());
        this._updateLocalMatrix();
        return AffineTrans.fromMat4(out, this._matrix);
      },
      getNodeToWorldTransform: function getNodeToWorldTransform(out) {
        out || (out = AffineTrans.identity());
        this._updateWorldMatrix();
        var contentSize = this._contentSize;
        _vec3_temp.x = -this._anchorPoint.x * contentSize.width;
        _vec3_temp.y = -this._anchorPoint.y * contentSize.height;
        _valueTypes.Mat4.copy(_mat4_temp, this._worldMatrix);
        _valueTypes.Mat4.transform(_mat4_temp, _mat4_temp, _vec3_temp);
        return AffineTrans.fromMat4(out, _mat4_temp);
      },
      getNodeToWorldTransformAR: function getNodeToWorldTransformAR(out) {
        out || (out = AffineTrans.identity());
        this._updateWorldMatrix();
        return AffineTrans.fromMat4(out, this._worldMatrix);
      },
      getParentToNodeTransform: function getParentToNodeTransform(out) {
        out || (out = AffineTrans.identity());
        this._updateLocalMatrix();
        _valueTypes.Mat4.invert(_mat4_temp, this._matrix);
        return AffineTrans.fromMat4(out, _mat4_temp);
      },
      getWorldToNodeTransform: function getWorldToNodeTransform(out) {
        out || (out = AffineTrans.identity());
        this._updateWorldMatrix();
        _valueTypes.Mat4.invert(_mat4_temp, this._worldMatrix);
        return AffineTrans.fromMat4(out, _mat4_temp);
      },
      convertTouchToNodeSpace: function convertTouchToNodeSpace(touch) {
        return this.convertToNodeSpace(touch.getLocation());
      },
      convertTouchToNodeSpaceAR: function convertTouchToNodeSpaceAR(touch) {
        return this.convertToNodeSpaceAR(touch.getLocation());
      },
      getBoundingBox: function getBoundingBox() {
        this._updateLocalMatrix();
        var width = this._contentSize.width;
        var height = this._contentSize.height;
        var rect = cc.rect(-this._anchorPoint.x * width, -this._anchorPoint.y * height, width, height);
        return rect.transformMat4(rect, this._matrix);
      },
      getBoundingBoxToWorld: function getBoundingBoxToWorld() {
        if (this._parent) {
          this._parent._updateWorldMatrix();
          return this._getBoundingBoxTo();
        }
        return this.getBoundingBox();
      },
      _getBoundingBoxTo: function _getBoundingBoxTo() {
        var width = this._contentSize.width;
        var height = this._contentSize.height;
        var rect = cc.rect(-this._anchorPoint.x * width, -this._anchorPoint.y * height, width, height);
        this._calculWorldMatrix();
        rect.transformMat4(rect, this._worldMatrix);
        if (!this._children) return rect;
        var locChildren = this._children;
        for (var i = 0; i < locChildren.length; i++) {
          var child = locChildren[i];
          if (child && child.active) {
            var childRect = child._getBoundingBoxTo();
            childRect && rect.union(rect, childRect);
          }
        }
        return rect;
      },
      _updateOrderOfArrival: function _updateOrderOfArrival() {
        var arrivalOrder = this._parent ? ++this._parent._childArrivalOrder : 0;
        this._localZOrder = 4294901760 & this._localZOrder | arrivalOrder;
        this.emit(EventType.SIBLING_ORDER_CHANGED);
      },
      addChild: function addChild(child, zIndex, name) {
        false;
        cc.assertID(child, 1606);
        cc.assertID(null === child._parent, 1605);
        child.parent = this;
        void 0 !== zIndex && (child.zIndex = zIndex);
        void 0 !== name && (child.name = name);
      },
      cleanup: function cleanup() {
        ActionManagerExist && cc.director.getActionManager().removeAllActionsFromTarget(this);
        eventManager.removeListeners(this);
        var i, len = this._children.length, node;
        for (i = 0; i < len; ++i) {
          node = this._children[i];
          node && node.cleanup();
        }
      },
      sortAllChildren: function sortAllChildren() {
        if (this._reorderChildDirty) {
          this._reorderChildDirty = false;
          var _children = this._children, child;
          this._childArrivalOrder = 1;
          for (var i = 0, len = _children.length; i < len; i++) {
            child = _children[i];
            child._updateOrderOfArrival();
          }
          eventManager._setDirtyForNode(this);
          if (_children.length > 1) {
            var _child, child2;
            for (var _i2 = 1, count = _children.length; _i2 < count; _i2++) {
              _child = _children[_i2];
              var j = _i2;
              for (;j > 0 && (child2 = _children[j - 1])._localZOrder > _child._localZOrder; j--) _children[j] = child2;
              _children[j] = _child;
            }
            this.emit(EventType.CHILD_REORDER, this);
          }
          cc.director.__fastOff(cc.Director.EVENT_AFTER_UPDATE, this.sortAllChildren, this);
        }
      },
      _delaySort: function _delaySort() {
        if (!this._reorderChildDirty) {
          this._reorderChildDirty = true;
          cc.director.__fastOn(cc.Director.EVENT_AFTER_UPDATE, this.sortAllChildren, this);
        }
      },
      _restoreProperties: false,
      onRestore: false
    };
    false;
    var Node = cc.Class(NodeDefines);
    var _p = Node.prototype;
    js.getset(_p, "position", _p.getPosition, _p.setPosition, false, true);
    var vec3_tmp;
    false;
    cc.Node = module.exports = Node;
  }), {
    "./event-manager": 119,
    "./event/event": 122,
    "./event/event-target": 121,
    "./platform/CCMacro": 143,
    "./platform/js": 158,
    "./renderer/render-flow": 169,
    "./utils/affine-transform": 200,
    "./utils/base-node": 201,
    "./utils/prefab-helper": 212,
    "./utils/trans-pool": 218,
    "./value-types": 224
  } ],
  27: [ (function(require, module, exports) {
    "use strict";
    var Node = require("./CCNode");
    var RenderFlow = require("./renderer/render-flow");
    var HideInHierarchy = cc.Object.Flags.HideInHierarchy;
    var LocalDirtyFlag = Node._LocalDirtyFlag;
    var POSITION_ON = 1;
    var PrivateNode = cc.Class({
      name: "cc.PrivateNode",
      extends: Node,
      properties: {
        x: {
          get: function get() {
            return this._originPos.x;
          },
          set: function set(value) {
            var localPosition = this._originPos;
            if (value !== localPosition.x) {
              localPosition.x = value;
              this._posDirty(true);
            }
          },
          override: true
        },
        y: {
          get: function get() {
            return this._originPos.y;
          },
          set: function set(value) {
            var localPosition = this._originPos;
            if (value !== localPosition.y) {
              localPosition.y = value;
              this._posDirty(true);
            }
          },
          override: true
        },
        zIndex: {
          get: function get() {
            return cc.macro.MIN_ZINDEX;
          },
          set: function set() {
            cc.warnID(1638);
          },
          override: true
        },
        showInEditor: {
          default: false,
          editorOnly: true,
          override: true
        }
      },
      ctor: function ctor(name) {
        this._localZOrder = cc.macro.MIN_ZINDEX << 16;
        this._originPos = cc.v2();
        false;
      },
      _posDirty: function _posDirty(sendEvent) {
        this.setLocalDirty(LocalDirtyFlag.POSITION);
        true, this._renderFlag |= RenderFlow.FLAG_TRANSFORM;
        true === sendEvent && this._eventMask & POSITION_ON && this.emit(Node.EventType.POSITION_CHANGED);
      },
      _updateLocalMatrix: function _updateLocalMatrix() {
        if (!this._localMatDirty) return;
        var parent = this.parent;
        if (parent) {
          this._trs[0] = this._originPos.x - (parent._anchorPoint.x - .5) * parent._contentSize.width;
          this._trs[1] = this._originPos.y - (parent._anchorPoint.y - .5) * parent._contentSize.height;
        }
        this._super();
      },
      getPosition: function getPosition() {
        return new cc.Vec2(this._originPos);
      },
      setPosition: function setPosition(x, y) {
        if (void 0 === y) {
          x = x.x;
          y = x.y;
        }
        var pos = this._originPos;
        if (pos.x === x && pos.y === y) return;
        pos.x = x;
        pos.y = y;
        this._posDirty(true);
      },
      setParent: function setParent(value) {
        var oldParent = this._parent;
        this._super(value);
        if (oldParent !== value) {
          oldParent && oldParent.off(Node.EventType.ANCHOR_CHANGED, this._posDirty, this);
          value && value.on(Node.EventType.ANCHOR_CHANGED, this._posDirty, this);
        }
      },
      _updateOrderOfArrival: function _updateOrderOfArrival() {}
    });
    cc.js.getset(PrivateNode.prototype, "parent", PrivateNode.prototype.getParent, PrivateNode.prototype.setParent);
    cc.js.getset(PrivateNode.prototype, "position", PrivateNode.prototype.getPosition, PrivateNode.prototype.setPosition);
    cc.PrivateNode = module.exports = PrivateNode;
  }), {
    "./CCNode": 26,
    "./renderer/render-flow": 169
  } ],
  28: [ (function(require, module, exports) {
    "use strict";
    var NIL = function NIL() {};
    cc.Scene = cc.Class({
      name: "cc.Scene",
      extends: require("./CCNode"),
      properties: {
        _is3DNode: {
          default: true,
          override: true
        },
        autoReleaseAssets: true
      },
      ctor: function ctor() {
        this._anchorPoint.x = 0;
        this._anchorPoint.y = 0;
        this._activeInHierarchy = false;
        this._inited = !cc.game._isCloning;
        false;
        this.dependAssets = null;
      },
      destroy: function destroy() {
        if (cc.Object.prototype.destroy.call(this)) {
          var children = this._children;
          for (var i = 0; i < children.length; ++i) children[i].active = false;
        }
        this._active = false;
        this._activeInHierarchy = false;
      },
      _onHierarchyChanged: NIL,
      _instantiate: null,
      _load: function _load() {
        if (!this._inited) {
          false;
          false;
          this._onBatchCreated();
          this._inited = true;
        }
      },
      _activate: function _activate(active) {
        active = false !== active;
        false, false;
        cc.director._nodeActivator.activateNode(this, active);
      }
    });
    module.exports = cc.Scene;
  }), {
    "./CCNode": 26
  } ],
  29: [ (function(require, module, exports) {
    "use strict";
    var js = require("./platform/js");
    var IdGenerater = require("./platform/id-generater");
    var MAX_POOL_SIZE = 20;
    var idGenerater = new IdGenerater("Scheduler");
    var ListEntry = function ListEntry(target, priority, paused, markedForDeletion) {
      this.target = target;
      this.priority = priority;
      this.paused = paused;
      this.markedForDeletion = markedForDeletion;
    };
    var _listEntries = [];
    ListEntry.get = function(target, priority, paused, markedForDeletion) {
      var result = _listEntries.pop();
      if (result) {
        result.target = target;
        result.priority = priority;
        result.paused = paused;
        result.markedForDeletion = markedForDeletion;
      } else result = new ListEntry(target, priority, paused, markedForDeletion);
      return result;
    };
    ListEntry.put = function(entry) {
      if (_listEntries.length < MAX_POOL_SIZE) {
        entry.target = null;
        _listEntries.push(entry);
      }
    };
    var HashUpdateEntry = function HashUpdateEntry(list, entry, target, callback) {
      this.list = list;
      this.entry = entry;
      this.target = target;
      this.callback = callback;
    };
    var _hashUpdateEntries = [];
    HashUpdateEntry.get = function(list, entry, target, callback) {
      var result = _hashUpdateEntries.pop();
      if (result) {
        result.list = list;
        result.entry = entry;
        result.target = target;
        result.callback = callback;
      } else result = new HashUpdateEntry(list, entry, target, callback);
      return result;
    };
    HashUpdateEntry.put = function(entry) {
      if (_hashUpdateEntries.length < MAX_POOL_SIZE) {
        entry.list = entry.entry = entry.target = entry.callback = null;
        _hashUpdateEntries.push(entry);
      }
    };
    var HashTimerEntry = function HashTimerEntry(timers, target, timerIndex, currentTimer, currentTimerSalvaged, paused) {
      var _t = this;
      _t.timers = timers;
      _t.target = target;
      _t.timerIndex = timerIndex;
      _t.currentTimer = currentTimer;
      _t.currentTimerSalvaged = currentTimerSalvaged;
      _t.paused = paused;
    };
    var _hashTimerEntries = [];
    HashTimerEntry.get = function(timers, target, timerIndex, currentTimer, currentTimerSalvaged, paused) {
      var result = _hashTimerEntries.pop();
      if (result) {
        result.timers = timers;
        result.target = target;
        result.timerIndex = timerIndex;
        result.currentTimer = currentTimer;
        result.currentTimerSalvaged = currentTimerSalvaged;
        result.paused = paused;
      } else result = new HashTimerEntry(timers, target, timerIndex, currentTimer, currentTimerSalvaged, paused);
      return result;
    };
    HashTimerEntry.put = function(entry) {
      if (_hashTimerEntries.length < MAX_POOL_SIZE) {
        entry.timers = entry.target = entry.currentTimer = null;
        _hashTimerEntries.push(entry);
      }
    };
    function CallbackTimer() {
      this._lock = false;
      this._scheduler = null;
      this._elapsed = -1;
      this._runForever = false;
      this._useDelay = false;
      this._timesExecuted = 0;
      this._repeat = 0;
      this._delay = 0;
      this._interval = 0;
      this._target = null;
      this._callback = null;
    }
    var proto = CallbackTimer.prototype;
    proto.initWithCallback = function(scheduler, callback, target, seconds, repeat, delay) {
      this._lock = false;
      this._scheduler = scheduler;
      this._target = target;
      this._callback = callback;
      this._elapsed = -1;
      this._interval = seconds;
      this._delay = delay;
      this._useDelay = this._delay > 0;
      this._repeat = repeat;
      this._runForever = this._repeat === cc.macro.REPEAT_FOREVER;
      return true;
    };
    proto.getInterval = function() {
      return this._interval;
    };
    proto.setInterval = function(interval) {
      this._interval = interval;
    };
    proto.update = function(dt) {
      if (-1 === this._elapsed) {
        this._elapsed = 0;
        this._timesExecuted = 0;
      } else {
        this._elapsed += dt;
        if (this._runForever && !this._useDelay) {
          if (this._elapsed >= this._interval) {
            this.trigger();
            this._elapsed = 0;
          }
        } else {
          if (this._useDelay) {
            if (this._elapsed >= this._delay) {
              this.trigger();
              this._elapsed -= this._delay;
              this._timesExecuted += 1;
              this._useDelay = false;
            }
          } else if (this._elapsed >= this._interval) {
            this.trigger();
            this._elapsed = 0;
            this._timesExecuted += 1;
          }
          this._callback && !this._runForever && this._timesExecuted > this._repeat && this.cancel();
        }
      }
    };
    proto.getCallback = function() {
      return this._callback;
    };
    proto.trigger = function() {
      if (this._target && this._callback) {
        this._lock = true;
        this._callback.call(this._target, this._elapsed);
        this._lock = false;
      }
    };
    proto.cancel = function() {
      this._scheduler.unschedule(this._callback, this._target);
    };
    var _timers = [];
    CallbackTimer.get = function() {
      return _timers.pop() || new CallbackTimer();
    };
    CallbackTimer.put = function(timer) {
      if (_timers.length < MAX_POOL_SIZE && !timer._lock) {
        timer._scheduler = timer._target = timer._callback = null;
        _timers.push(timer);
      }
    };
    cc.Scheduler = function() {
      this._timeScale = 1;
      this._updatesNegList = [];
      this._updates0List = [];
      this._updatesPosList = [];
      this._hashForUpdates = js.createMap(true);
      this._hashForTimers = js.createMap(true);
      this._currentTarget = null;
      this._currentTargetSalvaged = false;
      this._updateHashLocked = false;
      this._arrayForTimers = [];
    };
    cc.Scheduler.prototype = {
      constructor: cc.Scheduler,
      _removeHashElement: function _removeHashElement(element) {
        delete this._hashForTimers[element.target._id];
        var arr = this._arrayForTimers;
        for (var i = 0, l = arr.length; i < l; i++) if (arr[i] === element) {
          arr.splice(i, 1);
          break;
        }
        HashTimerEntry.put(element);
      },
      _removeUpdateFromHash: function _removeUpdateFromHash(entry) {
        var targetId = entry.target._id;
        var self = this, element = self._hashForUpdates[targetId];
        if (element) {
          var list = element.list, listEntry = element.entry;
          for (var i = 0, l = list.length; i < l; i++) if (list[i] === listEntry) {
            list.splice(i, 1);
            break;
          }
          delete self._hashForUpdates[targetId];
          ListEntry.put(listEntry);
          HashUpdateEntry.put(element);
        }
      },
      _priorityIn: function _priorityIn(ppList, listElement, priority) {
        for (var i = 0; i < ppList.length; i++) if (priority < ppList[i].priority) {
          ppList.splice(i, 0, listElement);
          return;
        }
        ppList.push(listElement);
      },
      _appendIn: function _appendIn(ppList, listElement) {
        ppList.push(listElement);
      },
      enableForTarget: function enableForTarget(target) {
        target._id || (target.__instanceId ? cc.warnID(1513) : target._id = idGenerater.getNewId());
      },
      setTimeScale: function setTimeScale(timeScale) {
        this._timeScale = timeScale;
      },
      getTimeScale: function getTimeScale() {
        return this._timeScale;
      },
      update: function update(dt) {
        this._updateHashLocked = true;
        1 !== this._timeScale && (dt *= this._timeScale);
        var i, list, len, entry;
        for (i = 0, list = this._updatesNegList, len = list.length; i < len; i++) {
          entry = list[i];
          entry.paused || entry.markedForDeletion || entry.target.update(dt);
        }
        for (i = 0, list = this._updates0List, len = list.length; i < len; i++) {
          entry = list[i];
          entry.paused || entry.markedForDeletion || entry.target.update(dt);
        }
        for (i = 0, list = this._updatesPosList, len = list.length; i < len; i++) {
          entry = list[i];
          entry.paused || entry.markedForDeletion || entry.target.update(dt);
        }
        var elt, arr = this._arrayForTimers;
        for (i = 0; i < arr.length; i++) {
          elt = arr[i];
          this._currentTarget = elt;
          this._currentTargetSalvaged = false;
          if (!elt.paused) for (elt.timerIndex = 0; elt.timerIndex < elt.timers.length; ++elt.timerIndex) {
            elt.currentTimer = elt.timers[elt.timerIndex];
            elt.currentTimerSalvaged = false;
            elt.currentTimer.update(dt);
            elt.currentTimer = null;
          }
          if (this._currentTargetSalvaged && 0 === this._currentTarget.timers.length) {
            this._removeHashElement(this._currentTarget);
            --i;
          }
        }
        for (i = 0, list = this._updatesNegList; i < list.length; ) {
          entry = list[i];
          entry.markedForDeletion ? this._removeUpdateFromHash(entry) : i++;
        }
        for (i = 0, list = this._updates0List; i < list.length; ) {
          entry = list[i];
          entry.markedForDeletion ? this._removeUpdateFromHash(entry) : i++;
        }
        for (i = 0, list = this._updatesPosList; i < list.length; ) {
          entry = list[i];
          entry.markedForDeletion ? this._removeUpdateFromHash(entry) : i++;
        }
        this._updateHashLocked = false;
        this._currentTarget = null;
      },
      schedule: function schedule(callback, target, interval, repeat, delay, paused) {
        if ("function" !== typeof callback) {
          var tmp = callback;
          callback = target;
          target = tmp;
        }
        if (4 === arguments.length || 5 === arguments.length) {
          paused = !!repeat;
          repeat = cc.macro.REPEAT_FOREVER;
          delay = 0;
        }
        cc.assertID(target, 1502);
        var targetId = target._id;
        if (!targetId) if (target.__instanceId) {
          cc.warnID(1513);
          targetId = target._id = target.__instanceId;
        } else cc.errorID(1510);
        var element = this._hashForTimers[targetId];
        if (element) element.paused !== paused && cc.warnID(1511); else {
          element = HashTimerEntry.get(null, target, 0, null, null, paused);
          this._arrayForTimers.push(element);
          this._hashForTimers[targetId] = element;
        }
        var timer, i;
        if (null == element.timers) element.timers = []; else for (i = 0; i < element.timers.length; ++i) {
          timer = element.timers[i];
          if (timer && callback === timer._callback) {
            cc.logID(1507, timer.getInterval(), interval);
            timer._interval = interval;
            return;
          }
        }
        timer = CallbackTimer.get();
        timer.initWithCallback(this, callback, target, interval, repeat, delay);
        element.timers.push(timer);
        this._currentTarget === element && this._currentTargetSalvaged && (this._currentTargetSalvaged = false);
      },
      scheduleUpdate: function scheduleUpdate(target, priority, paused) {
        var targetId = target._id;
        if (!targetId) if (target.__instanceId) {
          cc.warnID(1513);
          targetId = target._id = target.__instanceId;
        } else cc.errorID(1510);
        var hashElement = this._hashForUpdates[targetId];
        if (hashElement && hashElement.entry) {
          if (hashElement.entry.priority === priority) {
            hashElement.entry.markedForDeletion = false;
            hashElement.entry.paused = paused;
            return;
          }
          if (this._updateHashLocked) {
            cc.logID(1506);
            hashElement.entry.markedForDeletion = false;
            hashElement.entry.paused = paused;
            return;
          }
          this.unscheduleUpdate(target);
        }
        var listElement = ListEntry.get(target, priority, paused, false);
        var ppList;
        if (0 === priority) {
          ppList = this._updates0List;
          this._appendIn(ppList, listElement);
        } else {
          ppList = priority < 0 ? this._updatesNegList : this._updatesPosList;
          this._priorityIn(ppList, listElement, priority);
        }
        this._hashForUpdates[targetId] = HashUpdateEntry.get(ppList, listElement, target, null);
      },
      unschedule: function unschedule(callback, target) {
        if (!target || !callback) return;
        var targetId = target._id;
        if (!targetId) if (target.__instanceId) {
          cc.warnID(1513);
          targetId = target._id = target.__instanceId;
        } else cc.errorID(1510);
        var self = this, element = self._hashForTimers[targetId];
        if (element) {
          var timers = element.timers;
          for (var i = 0, li = timers.length; i < li; i++) {
            var timer = timers[i];
            if (callback === timer._callback) {
              timer !== element.currentTimer || element.currentTimerSalvaged || (element.currentTimerSalvaged = true);
              timers.splice(i, 1);
              CallbackTimer.put(timer);
              element.timerIndex >= i && element.timerIndex--;
              0 === timers.length && (self._currentTarget === element ? self._currentTargetSalvaged = true : self._removeHashElement(element));
              return;
            }
          }
        }
      },
      unscheduleUpdate: function unscheduleUpdate(target) {
        if (!target) return;
        var targetId = target._id;
        if (!targetId) if (target.__instanceId) {
          cc.warnID(1513);
          targetId = target._id = target.__instanceId;
        } else cc.errorID(1510);
        var element = this._hashForUpdates[targetId];
        element && (this._updateHashLocked ? element.entry.markedForDeletion = true : this._removeUpdateFromHash(element.entry));
      },
      unscheduleAllForTarget: function unscheduleAllForTarget(target) {
        if (!target) return;
        var targetId = target._id;
        if (!targetId) if (target.__instanceId) {
          cc.warnID(1513);
          targetId = target._id = target.__instanceId;
        } else cc.errorID(1510);
        var element = this._hashForTimers[targetId];
        if (element) {
          var timers = element.timers;
          timers.indexOf(element.currentTimer) > -1 && !element.currentTimerSalvaged && (element.currentTimerSalvaged = true);
          for (var i = 0, l = timers.length; i < l; i++) CallbackTimer.put(timers[i]);
          timers.length = 0;
          this._currentTarget === element ? this._currentTargetSalvaged = true : this._removeHashElement(element);
        }
        this.unscheduleUpdate(target);
      },
      unscheduleAll: function unscheduleAll() {
        this.unscheduleAllWithMinPriority(cc.Scheduler.PRIORITY_SYSTEM);
      },
      unscheduleAllWithMinPriority: function unscheduleAllWithMinPriority(minPriority) {
        var i, element, arr = this._arrayForTimers;
        for (i = arr.length - 1; i >= 0; i--) {
          element = arr[i];
          this.unscheduleAllForTarget(element.target);
        }
        var entry;
        var temp_length = 0;
        if (minPriority < 0) for (i = 0; i < this._updatesNegList.length; ) {
          temp_length = this._updatesNegList.length;
          entry = this._updatesNegList[i];
          entry && entry.priority >= minPriority && this.unscheduleUpdate(entry.target);
          temp_length == this._updatesNegList.length && i++;
        }
        if (minPriority <= 0) for (i = 0; i < this._updates0List.length; ) {
          temp_length = this._updates0List.length;
          entry = this._updates0List[i];
          entry && this.unscheduleUpdate(entry.target);
          temp_length == this._updates0List.length && i++;
        }
        for (i = 0; i < this._updatesPosList.length; ) {
          temp_length = this._updatesPosList.length;
          entry = this._updatesPosList[i];
          entry && entry.priority >= minPriority && this.unscheduleUpdate(entry.target);
          temp_length == this._updatesPosList.length && i++;
        }
      },
      isScheduled: function isScheduled(callback, target) {
        cc.assertID(callback, 1508);
        cc.assertID(target, 1509);
        var targetId = target._id;
        if (!targetId) if (target.__instanceId) {
          cc.warnID(1513);
          targetId = target._id = target.__instanceId;
        } else cc.errorID(1510);
        var element = this._hashForTimers[targetId];
        if (!element) return false;
        if (null == element.timers) return false;
        var timers = element.timers;
        for (var i = 0; i < timers.length; ++i) {
          var timer = timers[i];
          if (callback === timer._callback) return true;
        }
        return false;
      },
      pauseAllTargets: function pauseAllTargets() {
        return this.pauseAllTargetsWithMinPriority(cc.Scheduler.PRIORITY_SYSTEM);
      },
      pauseAllTargetsWithMinPriority: function pauseAllTargetsWithMinPriority(minPriority) {
        var idsWithSelectors = [];
        var self = this, element, locArrayForTimers = self._arrayForTimers;
        var i, li;
        for (i = 0, li = locArrayForTimers.length; i < li; i++) {
          element = locArrayForTimers[i];
          if (element) {
            element.paused = true;
            idsWithSelectors.push(element.target);
          }
        }
        var entry;
        if (minPriority < 0) for (i = 0; i < this._updatesNegList.length; i++) {
          entry = this._updatesNegList[i];
          if (entry && entry.priority >= minPriority) {
            entry.paused = true;
            idsWithSelectors.push(entry.target);
          }
        }
        if (minPriority <= 0) for (i = 0; i < this._updates0List.length; i++) {
          entry = this._updates0List[i];
          if (entry) {
            entry.paused = true;
            idsWithSelectors.push(entry.target);
          }
        }
        for (i = 0; i < this._updatesPosList.length; i++) {
          entry = this._updatesPosList[i];
          if (entry && entry.priority >= minPriority) {
            entry.paused = true;
            idsWithSelectors.push(entry.target);
          }
        }
        return idsWithSelectors;
      },
      resumeTargets: function resumeTargets(targetsToResume) {
        if (!targetsToResume) return;
        for (var i = 0; i < targetsToResume.length; i++) this.resumeTarget(targetsToResume[i]);
      },
      pauseTarget: function pauseTarget(target) {
        cc.assertID(target, 1503);
        var targetId = target._id;
        if (!targetId) if (target.__instanceId) {
          cc.warnID(1513);
          targetId = target._id = target.__instanceId;
        } else cc.errorID(1510);
        var self = this, element = self._hashForTimers[targetId];
        element && (element.paused = true);
        var elementUpdate = self._hashForUpdates[targetId];
        elementUpdate && (elementUpdate.entry.paused = true);
      },
      resumeTarget: function resumeTarget(target) {
        cc.assertID(target, 1504);
        var targetId = target._id;
        if (!targetId) if (target.__instanceId) {
          cc.warnID(1513);
          targetId = target._id = target.__instanceId;
        } else cc.errorID(1510);
        var self = this, element = self._hashForTimers[targetId];
        element && (element.paused = false);
        var elementUpdate = self._hashForUpdates[targetId];
        elementUpdate && (elementUpdate.entry.paused = false);
      },
      isTargetPaused: function isTargetPaused(target) {
        cc.assertID(target, 1505);
        var targetId = target._id;
        if (!targetId) if (target.__instanceId) {
          cc.warnID(1513);
          targetId = target._id = target.__instanceId;
        } else cc.errorID(1510);
        var element = this._hashForTimers[targetId];
        if (element) return element.paused;
        var elementUpdate = this._hashForUpdates[targetId];
        if (elementUpdate) return elementUpdate.entry.paused;
        return false;
      }
    };
    cc.Scheduler.PRIORITY_SYSTEM = 1 << 31;
    cc.Scheduler.PRIORITY_NON_SYSTEM = cc.Scheduler.PRIORITY_SYSTEM + 1;
    module.exports = cc.Scheduler;
  }), {
    "./platform/id-generater": 154,
    "./platform/js": 158
  } ],
  30: [ (function(require, module, exports) {
    "use strict";
    var preprocess = require("./preprocess");
    var fetch = require("./fetch");
    var Cache = require("./cache");
    var helper = require("./helper");
    var releaseManager = require("./releaseManager");
    var dependUtil = require("./depend-util");
    var load = require("./load");
    var Pipeline = require("./pipeline");
    var Task = require("./task");
    var RequestItem = require("./request-item");
    var downloader = require("./downloader");
    var parser = require("./parser");
    var packManager = require("./pack-manager");
    var Bundle = require("./bundle");
    var builtins = require("./builtins");
    var factory = require("./factory");
    var _require = require("./urlTransformer"), parse = _require.parse, combine = _require.combine;
    var _require2 = require("./utilities"), parseParameters = _require2.parseParameters, asyncify = _require2.asyncify;
    var _require3 = require("./shared"), assets = _require3.assets, files = _require3.files, parsed = _require3.parsed, pipeline = _require3.pipeline, transformPipeline = _require3.transformPipeline, fetchPipeline = _require3.fetchPipeline, RequestType = _require3.RequestType, bundles = _require3.bundles, BuiltinBundleName = _require3.BuiltinBundleName;
    function AssetManager() {
      this._preprocessPipe = preprocess;
      this._fetchPipe = fetch;
      this._loadPipe = load;
      this.pipeline = pipeline.append(preprocess).append(load);
      this.fetchPipeline = fetchPipeline.append(preprocess).append(fetch);
      this.transformPipeline = transformPipeline.append(parse).append(combine);
      this.bundles = bundles;
      this.assets = assets;
      this._files = files;
      this._parsed = parsed;
      this.generalImportBase = "";
      this.generalNativeBase = "";
      this.dependUtil = dependUtil;
      this._releaseManager = releaseManager;
      this.cacheAsset = true;
      this.force = false;
      this.utils = helper;
      this.downloader = downloader;
      this.parser = parser;
      this.builtins = builtins;
      this.packManager = packManager;
      this.factory = factory;
      this.cacheManager = null;
      this.presets = {
        default: {
          priority: 0
        },
        preload: {
          maxConcurrency: 2,
          maxRequestsPerFrame: 2,
          priority: -1
        },
        scene: {
          maxConcurrency: 8,
          maxRequestsPerFrame: 8,
          priority: 1
        },
        bundle: {
          maxConcurrency: 8,
          maxRequestsPerFrame: 8,
          priority: 2
        },
        remote: {
          maxRetryCount: 4
        },
        script: {
          priority: 2
        }
      };
    }
    AssetManager.Pipeline = Pipeline;
    AssetManager.Task = Task;
    AssetManager.Cache = Cache;
    AssetManager.RequestItem = RequestItem;
    AssetManager.Bundle = Bundle;
    AssetManager.BuiltinBundleName = BuiltinBundleName;
    AssetManager.prototype = {
      constructor: AssetManager,
      get main() {
        return bundles.get(BuiltinBundleName.MAIN);
      },
      get resources() {
        return bundles.get(BuiltinBundleName.RESOURCES);
      },
      get internal() {
        return bundles.get(BuiltinBundleName.INTERNAL);
      },
      init: function init(options) {
        options = options || Object.create(null);
        this._files.clear();
        this._parsed.clear();
        this._releaseManager.init();
        this.assets.clear();
        this.bundles.clear();
        this.packManager.init();
        this.downloader.init(options.bundleVers);
        this.parser.init();
        this.dependUtil.init();
        this.generalImportBase = options.importBase;
        this.generalNativeBase = options.nativeBase;
      },
      getBundle: function getBundle(name) {
        return bundles.get(name);
      },
      removeBundle: function removeBundle(bundle) {
        bundle._destroy();
        bundles.remove(bundle.name);
      },
      loadAny: function loadAny(requests, options, onProgress, onComplete) {
        var _parseParameters = parseParameters(options, onProgress, onComplete), options = _parseParameters.options, onProgress = _parseParameters.onProgress, onComplete = _parseParameters.onComplete;
        options.preset = options.preset || "default";
        var task = new Task({
          input: requests,
          onProgress: onProgress,
          onComplete: asyncify(onComplete),
          options: options
        });
        pipeline.async(task);
      },
      preloadAny: function preloadAny(requests, options, onProgress, onComplete) {
        var _parseParameters2 = parseParameters(options, onProgress, onComplete), options = _parseParameters2.options, onProgress = _parseParameters2.onProgress, onComplete = _parseParameters2.onComplete;
        options.preset = options.preset || "preload";
        var task = new Task({
          input: requests,
          onProgress: onProgress,
          onComplete: asyncify(onComplete),
          options: options
        });
        fetchPipeline.async(task);
      },
      postLoadNative: function postLoadNative(asset, options, onComplete) {
        if (!(asset instanceof cc.Asset)) throw new Error("input is not asset");
        var _parseParameters3 = parseParameters(options, void 0, onComplete), options = _parseParameters3.options, onComplete = _parseParameters3.onComplete;
        if (!asset._native || asset._nativeAsset) return asyncify(onComplete)(null);
        var depend = dependUtil.getNativeDep(asset._uuid);
        if (depend) {
          if (!bundles.has(depend.bundle)) {
            var bundle = bundles.find((function(bundle) {
              return bundle.getAssetInfo(asset._uuid);
            }));
            bundle && (depend.bundle = bundle.name);
          }
          this.loadAny(depend, options, (function(err, _native) {
            err ? cc.error(err.message, err.stack) : asset._nativeAsset = _native;
            onComplete && onComplete(err);
          }));
        }
      },
      loadRemote: function loadRemote(url, options, onComplete) {
        var _parseParameters4 = parseParameters(options, void 0, onComplete), options = _parseParameters4.options, onComplete = _parseParameters4.onComplete;
        options.__isNative__ = true;
        options.preset = options.preset || "remote";
        this.loadAny({
          url: url
        }, options, null, (function(err, data) {
          if (err) {
            cc.error(err.message, err.stack);
            onComplete && onComplete(err, null);
          } else factory.create(url, data, options.ext || cc.path.extname(url), options, onComplete);
        }));
      },
      loadScript: function loadScript(url, options, onComplete) {
        var _parseParameters5 = parseParameters(options, void 0, onComplete), options = _parseParameters5.options, onComplete = _parseParameters5.onComplete;
        options.__requestType__ = RequestType.URL;
        options.preset = options.preset || "script";
        this.loadAny(url, options, onComplete);
      },
      loadBundle: function loadBundle(nameOrUrl, options, onComplete) {
        var _parseParameters6 = parseParameters(options, void 0, onComplete), options = _parseParameters6.options, onComplete = _parseParameters6.onComplete;
        var bundleName = cc.path.basename(nameOrUrl);
        if (this.bundles.has(bundleName)) return asyncify(onComplete)(null, this.getBundle(bundleName));
        options.preset = options.preset || "bundle";
        options.ext = "bundle";
        this.loadRemote(nameOrUrl, options, onComplete);
      },
      releaseAsset: function releaseAsset(asset) {
        releaseManager.tryRelease(asset, true);
      },
      releaseUnusedAssets: function releaseUnusedAssets() {
        assets.forEach((function(asset) {
          releaseManager.tryRelease(asset);
        }));
      },
      releaseAll: function releaseAll() {
        assets.forEach((function(asset) {
          releaseManager.tryRelease(asset, true);
        }));
      },
      _transform: function _transform(input, options) {
        var subTask = Task.create({
          input: input,
          options: options
        });
        var urls = [];
        try {
          var result = transformPipeline.sync(subTask);
          for (var i = 0, l = result.length; i < l; i++) {
            var item = result[i];
            var url = item.url;
            item.recycle();
            urls.push(url);
          }
        } catch (e) {
          for (var i = 0, l = subTask.output.length; i < l; i++) subTask.output[i].recycle();
          cc.error(e.message, e.stack);
        }
        subTask.recycle();
        return urls.length > 1 ? urls : urls[0];
      }
    };
    cc.AssetManager = AssetManager;
    cc.assetManager = new AssetManager();
    Object.defineProperty(cc, "resources", {
      get: function get() {
        return bundles.get(BuiltinBundleName.RESOURCES);
      }
    });
    module.exports = cc.assetManager;
  }), {
    "./builtins": 31,
    "./bundle": 32,
    "./cache": 33,
    "./depend-util": 35,
    "./downloader": 42,
    "./factory": 43,
    "./fetch": 44,
    "./helper": 46,
    "./load": 48,
    "./pack-manager": 49,
    "./parser": 50,
    "./pipeline": 51,
    "./preprocess": 52,
    "./releaseManager": 53,
    "./request-item": 54,
    "./shared": 55,
    "./task": 56,
    "./urlTransformer": 57,
    "./utilities": 58
  } ],
  31: [ (function(require, module, exports) {
    "use strict";
    var Cache = require("./cache");
    var releaseManager = require("./releaseManager");
    var _require = require("./shared"), BuiltinBundleName = _require.BuiltinBundleName;
    var builtins = {
      _assets: new Cache({
        material: new Cache(),
        effect: new Cache()
      }),
      _loadBuiltins: function _loadBuiltins(name, cb) {
        var dirname = name + "s";
        var builtin = this._assets.get(name);
        return cc.assetManager.internal.loadDir(dirname, null, null, (function(err, assets) {
          if (err) cc.error(err.message, err.stack); else for (var i = 0; i < assets.length; i++) {
            var asset = assets[i];
            builtin.add(asset.name, asset.addRef());
          }
          cb();
        }));
      },
      init: function init(cb) {
        var _this = this;
        this.clear();
        if (cc.game.renderType === cc.game.RENDER_TYPE_CANVAS || !cc.assetManager.bundles.has(BuiltinBundleName.INTERNAL)) return cb && cb();
        this._loadBuiltins("effect", (function() {
          _this._loadBuiltins("material", cb);
        }));
      },
      getBuiltin: function getBuiltin(type, name) {
        return 0 === arguments.length ? this._assets : 1 === arguments.length ? this._assets.get(type) : this._assets.get(type).get(name);
      },
      clear: function clear() {
        this._assets.forEach((function(assets) {
          assets.forEach((function(asset) {
            releaseManager.tryRelease(asset, true);
          }));
          assets.clear();
        }));
      }
    };
    module.exports = builtins;
  }), {
    "./cache": 33,
    "./releaseManager": 53,
    "./shared": 55
  } ],
  32: [ (function(require, module, exports) {
    "use strict";
    var Config = require("./config");
    var releaseManager = require("./releaseManager");
    var _require = require("./utilities"), parseParameters = _require.parseParameters, parseLoadResArgs = _require.parseLoadResArgs;
    var _require2 = require("./shared"), RequestType = _require2.RequestType, assets = _require2.assets, bundles = _require2.bundles;
    function Bundle() {
      this._config = new Config();
    }
    Bundle.prototype = {
      constructor: Bundle,
      get name() {
        return this._config.name;
      },
      get deps() {
        return this._config.deps;
      },
      get base() {
        return this._config.base;
      },
      getInfoWithPath: function getInfoWithPath(path, type) {
        return this._config.getInfoWithPath(path, type);
      },
      getDirWithPath: function getDirWithPath(path, type, out) {
        return this._config.getDirWithPath(path, type, out);
      },
      getAssetInfo: function getAssetInfo(uuid) {
        return this._config.getAssetInfo(uuid);
      },
      getSceneInfo: function getSceneInfo(name) {
        return this._config.getSceneInfo(name);
      },
      init: function init(options) {
        this._config.init(options);
        bundles.add(options.name, this);
      },
      load: function load(paths, type, onProgress, onComplete) {
        var _parseLoadResArgs = parseLoadResArgs(type, onProgress, onComplete), type = _parseLoadResArgs.type, onProgress = _parseLoadResArgs.onProgress, onComplete = _parseLoadResArgs.onComplete;
        cc.assetManager.loadAny(paths, {
          __requestType__: RequestType.PATH,
          type: type,
          bundle: this.name
        }, onProgress, onComplete);
      },
      preload: function preload(paths, type, onProgress, onComplete) {
        var _parseLoadResArgs2 = parseLoadResArgs(type, onProgress, onComplete), type = _parseLoadResArgs2.type, onProgress = _parseLoadResArgs2.onProgress, onComplete = _parseLoadResArgs2.onComplete;
        cc.assetManager.preloadAny(paths, {
          __requestType__: RequestType.PATH,
          type: type,
          bundle: this.name
        }, onProgress, onComplete);
      },
      loadDir: function loadDir(dir, type, onProgress, onComplete) {
        var _parseLoadResArgs3 = parseLoadResArgs(type, onProgress, onComplete), type = _parseLoadResArgs3.type, onProgress = _parseLoadResArgs3.onProgress, onComplete = _parseLoadResArgs3.onComplete;
        cc.assetManager.loadAny(dir, {
          __requestType__: RequestType.DIR,
          type: type,
          bundle: this.name,
          __outputAsArray__: true
        }, onProgress, onComplete);
      },
      preloadDir: function preloadDir(dir, type, onProgress, onComplete) {
        var _parseLoadResArgs4 = parseLoadResArgs(type, onProgress, onComplete), type = _parseLoadResArgs4.type, onProgress = _parseLoadResArgs4.onProgress, onComplete = _parseLoadResArgs4.onComplete;
        cc.assetManager.preloadAny(dir, {
          __requestType__: RequestType.DIR,
          type: type,
          bundle: this.name
        }, onProgress, onComplete);
      },
      loadScene: function loadScene(sceneName, options, onProgress, onComplete) {
        var _parseParameters = parseParameters(options, onProgress, onComplete), options = _parseParameters.options, onProgress = _parseParameters.onProgress, onComplete = _parseParameters.onComplete;
        options.preset = options.preset || "scene";
        options.bundle = this.name;
        cc.assetManager.loadAny({
          scene: sceneName
        }, options, onProgress, (function(err, sceneAsset) {
          if (err) {
            cc.error(err.message, err.stack);
            onComplete && onComplete(err);
          } else if (sceneAsset instanceof cc.SceneAsset) {
            var scene = sceneAsset.scene;
            scene._id = sceneAsset._uuid;
            scene._name = sceneAsset._name;
            onComplete && onComplete(null, sceneAsset);
          } else onComplete && onComplete(new Error("The asset " + sceneAsset._uuid + " is not a scene"));
        }));
      },
      preloadScene: function preloadScene(sceneName, options, onProgress, onComplete) {
        var _parseParameters2 = parseParameters(options, onProgress, onComplete), options = _parseParameters2.options, onProgress = _parseParameters2.onProgress, onComplete = _parseParameters2.onComplete;
        options.bundle = this.name;
        cc.assetManager.preloadAny({
          scene: sceneName
        }, options, onProgress, (function(err) {
          err && cc.errorID(1210, sceneName, err.message);
          onComplete && onComplete(err);
        }));
      },
      get: function get(path, type) {
        var info = this.getInfoWithPath(path, type);
        return assets.get(info && info.uuid);
      },
      release: function release(path, type) {
        releaseManager.tryRelease(this.get(path, type), true);
      },
      releaseUnusedAssets: function releaseUnusedAssets() {
        var self = this;
        assets.forEach((function(asset) {
          var info = self.getAssetInfo(asset._uuid);
          info && !info.redirect && releaseManager.tryRelease(asset);
        }));
      },
      releaseAll: function releaseAll() {
        var self = this;
        assets.forEach((function(asset) {
          var info = self.getAssetInfo(asset._uuid);
          info && !info.redirect && releaseManager.tryRelease(asset, true);
        }));
      },
      _destroy: function _destroy() {
        this._config.destroy();
      }
    };
    module.exports = Bundle;
  }), {
    "./config": 34,
    "./releaseManager": 53,
    "./shared": 55,
    "./utilities": 58
  } ],
  33: [ (function(require, module, exports) {
    "use strict";
    var js = require("../platform/js");
    function Cache(map) {
      if (map) {
        this._map = map;
        this._count = Object.keys(map).length;
      } else {
        this._map = js.createMap(true);
        this._count = 0;
      }
    }
    Cache.prototype = {
      constructor: Cache,
      add: function add(key, val) {
        key in this._map || this._count++;
        return this._map[key] = val;
      },
      get: function get(key) {
        return this._map[key];
      },
      has: function has(key) {
        return key in this._map;
      },
      remove: function remove(key) {
        var out = this._map[key];
        if (key in this._map) {
          delete this._map[key];
          this._count--;
        }
        return out;
      },
      clear: function clear() {
        if (0 !== this._count) {
          this._map = js.createMap(true);
          this._count = 0;
        }
      },
      forEach: function forEach(func) {
        for (var key in this._map) func(this._map[key], key);
      },
      find: function find(predicate) {
        for (var key in this._map) if (predicate(this._map[key], key)) return this._map[key];
        return null;
      },
      get count() {
        return this._count;
      },
      destroy: function destroy() {
        this._map = null;
      }
    };
    module.exports = Cache;
  }), {
    "../platform/js": 158
  } ],
  34: [ (function(require, module, exports) {
    "use strict";
    var js = require("../platform/js");
    var Cache = require("./cache");
    var _require = require("./helper"), normalize = _require.normalize;
    var _require2 = require("./utilities"), processOptions = _require2.processOptions;
    function Config() {
      this.name = "";
      this.base = "";
      this.importBase = "";
      this.nativeBase = "";
      this.deps = null;
      this.assetInfos = new Cache();
      this.scenes = new Cache();
      this.paths = new Cache();
    }
    Config.prototype = {
      constructor: Config,
      init: function init(options) {
        processOptions(options);
        this.importBase = options.importBase || "";
        this.nativeBase = options.nativeBase || "";
        this.base = options.base || "";
        this.name = options.name || "";
        this.deps = options.deps || [];
        this._initUuid(options.uuids);
        this._initPath(options.paths);
        this._initScene(options.scenes);
        this._initPackage(options.packs);
        this._initVersion(options.versions);
        this._initRedirect(options.redirect);
      },
      _initUuid: function _initUuid(uuidList) {
        if (!uuidList) return;
        this.assetInfos.clear();
        for (var i = 0, l = uuidList.length; i < l; i++) {
          var uuid = uuidList[i];
          this.assetInfos.add(uuid, {
            uuid: uuid
          });
        }
      },
      _initPath: function _initPath(pathList) {
        if (!pathList) return;
        var paths = this.paths;
        paths.clear();
        for (var uuid in pathList) {
          var info = pathList[uuid];
          var path = info[0];
          var type = info[1];
          var isSubAsset = 3 === info.length;
          var assetInfo = this.assetInfos.get(uuid);
          assetInfo.path = path;
          assetInfo.ctor = js._getClassById(type);
          paths.has(path) ? isSubAsset ? paths.get(path).push(assetInfo) : paths.get(path).splice(0, 0, assetInfo) : paths.add(path, [ assetInfo ]);
        }
      },
      _initScene: function _initScene(sceneList) {
        if (!sceneList) return;
        var scenes = this.scenes;
        scenes.clear();
        var assetInfos = this.assetInfos;
        for (var sceneName in sceneList) {
          var uuid = sceneList[sceneName];
          var assetInfo = assetInfos.get(uuid);
          assetInfo.url = sceneName;
          scenes.add(sceneName, assetInfo);
        }
      },
      _initPackage: function _initPackage(packageList) {
        if (!packageList) return;
        var assetInfos = this.assetInfos;
        for (var packUuid in packageList) {
          var uuids = packageList[packUuid];
          var pack = {
            uuid: packUuid,
            packs: uuids,
            ext: ".json"
          };
          assetInfos.add(packUuid, pack);
          for (var i = 0, l = uuids.length; i < l; i++) {
            var uuid = uuids[i];
            var assetInfo = assetInfos.get(uuid);
            var assetPacks = assetInfo.packs;
            assetPacks ? 1 === l ? assetPacks.splice(0, 0, pack) : assetPacks.push(pack) : assetInfo.packs = [ pack ];
          }
        }
      },
      _initVersion: function _initVersion(versions) {
        if (!versions) return;
        var assetInfos = this.assetInfos;
        var entries = versions["import"];
        if (entries) for (var i = 0, l = entries.length; i < l; i += 2) {
          var uuid = entries[i];
          var assetInfo = assetInfos.get(uuid);
          assetInfo.ver = entries[i + 1];
        }
        entries = versions["native"];
        if (entries) for (var i = 0, l = entries.length; i < l; i += 2) {
          var uuid = entries[i];
          var assetInfo = assetInfos.get(uuid);
          assetInfo.nativeVer = entries[i + 1];
        }
      },
      _initRedirect: function _initRedirect(redirect) {
        if (!redirect) return;
        var assetInfos = this.assetInfos;
        for (var i = 0, l = redirect.length; i < l; i += 2) {
          var uuid = redirect[i];
          var assetInfo = assetInfos.get(uuid);
          assetInfo.redirect = redirect[i + 1];
        }
      },
      getInfoWithPath: function getInfoWithPath(path, type) {
        if (!path) return null;
        path = normalize(path);
        var items = this.paths.get(path);
        if (items) {
          if (!type) return items[0];
          for (var i = 0, l = items.length; i < l; i++) {
            var assetInfo = items[i];
            if (js.isChildClassOf(assetInfo.ctor, type)) return assetInfo;
          }
        }
        return null;
      },
      getDirWithPath: function getDirWithPath(path, type, out) {
        path = normalize(path);
        "/" === path[path.length - 1] && (path = path.slice(0, -1));
        var infos = out || [];
        function isMatchByWord(path, test) {
          if (path.length > test.length) {
            var nextAscii = path.charCodeAt(test.length);
            return 47 === nextAscii;
          }
          return true;
        }
        this.paths.forEach((function(items, p) {
          if (p.startsWith(path) && isMatchByWord(p, path) || !path) for (var i = 0, l = items.length; i < l; i++) {
            var entry = items[i];
            type && !js.isChildClassOf(entry.ctor, type) || infos.push(entry);
          }
        }));
        return infos;
      },
      getAssetInfo: function getAssetInfo(uuid) {
        return this.assetInfos.get(uuid);
      },
      getSceneInfo: function getSceneInfo(name) {
        name.endsWith(".fire") || (name += ".fire");
        "/" === name[0] || name.startsWith("db://") || (name = "/" + name);
        var info = this.scenes.find((function(val, key) {
          return key.endsWith(name);
        }));
        return info;
      },
      destroy: function destroy() {
        this.paths.destroy();
        this.scenes.destroy();
        this.assetInfos.destroy();
      }
    };
    false;
    module.exports = Config;
  }), {
    "../platform/js": 158,
    "./cache": 33,
    "./helper": 46,
    "./utilities": 58
  } ],
  35: [ (function(require, module, exports) {
    "use strict";
    var Cache = require("./cache");
    var js = require("../platform/js");
    var dependUtil = {
      _depends: new Cache(),
      init: function init() {
        this._depends.clear();
      },
      getNativeDep: function getNativeDep(uuid) {
        if (this._depends.has(uuid)) return this._depends.get(uuid).nativeDep;
        return null;
      },
      getDeps: function getDeps(uuid) {
        if (this._depends.has(uuid)) return this._depends.get(uuid).deps;
        return [];
      },
      getDepsRecursively: function getDepsRecursively(uuid) {
        var exclude = Object.create(null), depends = [];
        this._descend(uuid, exclude, depends);
        return depends;
      },
      _descend: function _descend(uuid, exclude, depends) {
        var deps = this.getDeps(uuid);
        for (var i = 0; i < deps.length; i++) {
          var depend = deps[i];
          if (!exclude[depend]) {
            exclude[depend] = true;
            depends.push(depend);
            this._descend(depend, exclude, depends);
          }
        }
      },
      remove: function remove(uuid) {
        this._depends.remove(uuid);
      },
      parse: function parse(uuid, json) {
        var out = null;
        if (Array.isArray(json)) {
          if (this._depends.has(uuid)) return this._depends.get(uuid);
          out = {
            deps: cc.Asset._parseDepsFromJson(json),
            asyncLoadAssets: json[0].asyncLoadAssets
          };
        } else if (json.__type__) {
          if (this._depends.has(uuid)) return this._depends.get(uuid);
          var ctor = js._getClassById(json.__type__);
          out = {
            preventPreloadNativeObject: ctor.preventPreloadNativeObject,
            preventDeferredLoadDependents: ctor.preventDeferredLoadDependents,
            deps: ctor._parseDepsFromJson(json),
            nativeDep: ctor._parseNativeDepFromJson(json)
          };
          out.nativeDep && (out.nativeDep.uuid = uuid);
        } else {
          if ((true, out = this._depends.get(uuid)) && out.parsedFromExistAsset) return out;
          var asset = json;
          out = {
            deps: [],
            parsedFromExistAsset: true,
            preventPreloadNativeObject: asset.constructor.preventPreloadNativeObject,
            preventDeferredLoadDependents: asset.constructor.preventDeferredLoadDependents
          };
          var deps = asset.__depends__;
          for (var i = 0, l = deps.length; i < l; i++) {
            var dep = deps[i].uuid;
            out.deps.push(dep);
          }
          asset.__nativeDepend__ && (out.nativeDep = asset._nativeDep);
        }
        this._depends.add(uuid, out);
        return out;
      }
    };
    module.exports = dependUtil;
  }), {
    "../platform/js": 158,
    "./cache": 33
  } ],
  36: [ (function(require, module, exports) {
    "use strict";
    var js = require("../platform/js");
    require("../CCDirector");
    var utilities = require("./utilities");
    var dependUtil = require("./depend-util");
    var releaseManager = require("./releaseManager");
    var downloader = require("./downloader");
    var ImageFmts = [ ".png", ".jpg", ".bmp", ".jpeg", ".gif", ".ico", ".tiff", ".webp", ".image", ".pvr", ".pkm" ];
    var AudioFmts = [ ".mp3", ".ogg", ".wav", ".m4a" ];
    function GetTrue() {
      return true;
    }
    var md5Pipe = {
      transformURL: function transformURL(url) {
        url = url.replace(/.*[/\\][0-9a-fA-F]{2}[/\\]([0-9a-fA-F-]{8,})/, (function(match, uuid) {
          var bundle = cc.assetManager.bundles.find((function(bundle) {
            return bundle.getAssetInfo(uuid);
          }));
          var hashValue = "";
          if (bundle) {
            var info = bundle.getAssetInfo(uuid);
            hashValue = url.startsWith(bundle.base + bundle._config.nativeBase) ? info.nativeVer : info.ver;
          }
          return hashValue ? match + "." + hashValue : match;
        }));
        return url;
      }
    };
    var loader = {
      onProgress: null,
      _autoReleaseSetting: Object.create(null),
      get _cache() {
        return cc.assetManager.assets._map;
      },
      load: function load(resources, progressCallback, completeCallback) {
        if (void 0 === completeCallback && void 0 !== progressCallback) {
          completeCallback = progressCallback;
          progressCallback = null;
        }
        resources = Array.isArray(resources) ? resources : [ resources ];
        for (var i = 0; i < resources.length; i++) {
          var item = resources[i];
          if ("string" === typeof item) resources[i] = {
            url: item,
            __isNative__: true
          }; else {
            if (item.type) {
              item.ext = "." + item.type;
              item.type = void 0;
            }
            item.url && (item.__isNative__ = true);
          }
        }
        var images = [];
        var audios = [];
        cc.assetManager.loadAny(resources, null, (function(finish, total, item) {
          item.content && (ImageFmts.includes(item.ext) ? images.push(item.content) : AudioFmts.includes(item.ext) && audios.push(item.content));
          progressCallback && progressCallback(finish, total, item);
        }), (function(err, _native) {
          var res = null;
          if (!err) {
            _native = Array.isArray(_native) ? _native : [ _native ];
            for (var i = 0; i < _native.length; i++) {
              var item = _native[i];
              if (!(item instanceof cc.Asset)) {
                var asset = item;
                var url = resources[i].url;
                if (images.includes(asset)) {
                  asset = new cc.Texture2D();
                  asset._nativeUrl = url;
                  asset._nativeAsset = item;
                  _native[i] = asset;
                  asset._uuid = url;
                } else if (audios.includes(asset)) {
                  asset = new cc.AudioClip();
                  asset._nativeUrl = url;
                  asset._nativeAsset = item;
                  _native[i] = asset;
                  asset._uuid = url;
                }
                cc.assetManager.assets.add(url, asset);
              }
            }
            if (_native.length > 1) {
              var map = Object.create(null);
              _native.forEach((function(asset) {
                map[asset._uuid] = asset;
              }));
              res = {
                isCompleted: GetTrue,
                _map: map
              };
            } else res = _native[0];
          }
          completeCallback && completeCallback(err, res);
        }));
      },
      getXMLHttpRequest: function getXMLHttpRequest() {
        return new XMLHttpRequest();
      },
      _parseLoadResArgs: utilities.parseLoadResArgs,
      getItem: function getItem(key) {
        return cc.assetManager.assets.has(key) ? {
          content: cc.assetManager.assets.get(key)
        } : null;
      },
      loadRes: function loadRes(url, type, progressCallback, completeCallback) {
        var _this$_parseLoadResAr = this._parseLoadResArgs(type, progressCallback, completeCallback), type = _this$_parseLoadResAr.type, onProgress = _this$_parseLoadResAr.onProgress, onComplete = _this$_parseLoadResAr.onComplete;
        var extname = cc.path.extname(url);
        extname && (url = url.slice(0, -extname.length));
        cc.resources.load(url, type, onProgress, onComplete);
      },
      loadResArray: function loadResArray(urls, type, progressCallback, completeCallback) {
        var _this$_parseLoadResAr2 = this._parseLoadResArgs(type, progressCallback, completeCallback), type = _this$_parseLoadResAr2.type, onProgress = _this$_parseLoadResAr2.onProgress, onComplete = _this$_parseLoadResAr2.onComplete;
        urls.forEach((function(url, i) {
          var extname = cc.path.extname(url);
          extname && (urls[i] = url.slice(0, -extname.length));
        }));
        cc.resources.load(urls, type, onProgress, onComplete);
      },
      loadResDir: function loadResDir(url, type, progressCallback, completeCallback) {
        var _this$_parseLoadResAr3 = this._parseLoadResArgs(type, progressCallback, completeCallback), type = _this$_parseLoadResAr3.type, onProgress = _this$_parseLoadResAr3.onProgress, onComplete = _this$_parseLoadResAr3.onComplete;
        cc.resources.loadDir(url, type, onProgress, (function(err, assets) {
          var urls = [];
          if (!err) {
            var infos = cc.resources.getDirWithPath(url, type);
            urls = infos.map((function(info) {
              return info.path;
            }));
          }
          onComplete && onComplete(err, assets, urls);
        }));
      },
      getRes: function getRes(url, type) {
        return cc.assetManager.assets.has(url) ? cc.assetManager.assets.get(url) : cc.resources.get(url, type);
      },
      getResCount: function getResCount() {
        return cc.assetManager.assets.count;
      },
      getDependsRecursively: function getDependsRecursively(owner) {
        if (!owner) return [];
        return dependUtil.getDepsRecursively("string" === typeof owner ? owner : owner._uuid).concat([ owner._uuid ]);
      },
      get assetLoader() {
        true;
        cc.error("cc.loader.assetLoader was removed, assetLoader and md5Pipe were merged into cc.assetManager.transformPipeline");
      },
      get md5Pipe() {
        return md5Pipe;
      },
      get downloader() {
        return cc.assetManager.downloader;
      },
      get loader() {
        return cc.assetManager.parser;
      },
      addDownloadHandlers: function addDownloadHandlers(extMap) {
        true;
        cc.warn("`cc.loader.addDownloadHandlers` is deprecated, please use `cc.assetManager.downloader.register` instead");
        var handler = Object.create(null);
        for (var type in extMap) {
          var func = extMap[type];
          handler["." + type] = function(url, options, onComplete) {
            func({
              url: url
            }, onComplete);
          };
        }
        cc.assetManager.downloader.register(handler);
      },
      addLoadHandlers: function addLoadHandlers(extMap) {
        true;
        cc.warn("`cc.loader.addLoadHandlers` is deprecated, please use `cc.assetManager.parser.register` instead");
        var handler = Object.create(null);
        for (var type in extMap) {
          var func = extMap[type];
          handler["." + type] = function(file, options, onComplete) {
            func({
              content: file
            }, onComplete);
          };
        }
        cc.assetManager.parser.register(handler);
      },
      flowInDeps: function flowInDeps() {
        true;
        cc.error("cc.loader.flowInDeps was removed");
      },
      release: function release(asset) {
        if (Array.isArray(asset)) for (var i = 0; i < asset.length; i++) {
          var key = asset[i];
          "string" === typeof key && (key = cc.assetManager.assets.get(key));
          var isBuiltin = cc.assetManager.builtins._assets.find((function(assets) {
            return assets.find((function(builtinAsset) {
              return builtinAsset === key;
            }));
          }));
          if (isBuiltin) continue;
          cc.assetManager.releaseAsset(key);
        } else if (asset) {
          "string" === typeof asset && (asset = cc.assetManager.assets.get(asset));
          var _isBuiltin = cc.assetManager.builtins._assets.find((function(assets) {
            return assets.find((function(builtinAsset) {
              return builtinAsset === asset;
            }));
          }));
          if (_isBuiltin) return;
          cc.assetManager.releaseAsset(asset);
        }
      },
      releaseAsset: function releaseAsset(asset) {
        cc.assetManager.releaseAsset(asset);
      },
      releaseRes: function releaseRes(url, type) {
        cc.resources.release(url, type);
      },
      releaseResDir: function releaseResDir() {
        true;
        cc.error("cc.loader.releaseResDir was removed, please use cc.assetManager.releaseAsset instead");
      },
      releaseAll: function releaseAll() {
        cc.assetManager.releaseAll();
        cc.assetManager.assets.clear();
      },
      removeItem: function removeItem(key) {
        cc.assetManager.assets.remove(key);
      },
      setAutoRelease: function setAutoRelease(asset, autoRelease) {
        "object" === typeof asset && (asset = asset._uuid);
        this._autoReleaseSetting[asset] = !!autoRelease;
      },
      setAutoReleaseRecursively: function setAutoReleaseRecursively(asset, autoRelease) {
        "object" === typeof asset && (asset = asset._uuid);
        autoRelease = !!autoRelease;
        this._autoReleaseSetting[asset] = autoRelease;
        var depends = dependUtil.getDepsRecursively(asset);
        for (var i = 0; i < depends.length; i++) {
          var depend = depends[i];
          this._autoReleaseSetting[depend] = autoRelease;
        }
      },
      isAutoRelease: function isAutoRelease(asset) {
        "object" === typeof asset && (asset = asset._uuid);
        return !!this._autoReleaseSetting[asset];
      }
    };
    downloader.loadSubpackage = function(name, completeCallback) {
      cc.assetManager.loadBundle(name, null, completeCallback);
    };
    var AssetLibrary = {
      init: function init(options) {
        options.importBase = options.libraryPath;
        options.nativeBase = options.rawAssetsBase;
        cc.assetManager.init(options);
        if (options.rawAssets) {
          var resources = new cc.AssetManager.Bundle();
          resources.init({
            name: cc.AssetManager.BuiltinBundleName.RESOURCES,
            importBase: options.importBase,
            nativeBase: options.nativeBase,
            paths: options.rawAssets.assets,
            uuids: Object.keys(options.rawAssets.assets)
          });
        }
      },
      loadAsset: function loadAsset(uuid, onComplete) {
        cc.assetManager.loadAny(uuid, onComplete);
      },
      getLibUrlNoExt: function getLibUrlNoExt() {
        true;
        cc.error("cc.AssetLibrary.getLibUrlNoExt was removed, if you want to transform url, please use cc.assetManager.helper.getUrlWithUuid instead");
      },
      queryAssetInfo: function queryAssetInfo() {
        true;
        cc.error("cc.AssetLibrary.queryAssetInfo was removed, only available in the editor by using cc.assetManager.editorExtend.queryAssetInfo");
      }
    };
    cc.url = {
      normalize: function normalize(url) {
        cc.warnID(1400, "cc.url.normalize", "cc.assetManager.utils.normalize");
        return cc.assetManager.utils.normalize(url);
      },
      raw: function raw(url) {
        cc.warnID(1400, "cc.url.raw", "cc.resources.load");
        if (url.startsWith("resources/")) return cc.assetManager._transform({
          path: cc.path.changeExtname(url.substr(10)),
          bundle: cc.AssetManager.BuiltinBundleName.RESOURCES,
          __isNative__: true,
          ext: cc.path.extname(url)
        });
        return "";
      }
    };
    var onceWarns = {
      loader: true,
      assetLibrary: true
    };
    Object.defineProperties(cc, {
      loader: {
        get: function get() {
          true;
          if (onceWarns.loader) {
            onceWarns.loader = false;
            cc.log("cc.loader is deprecated, use cc.assetManager instead please. See https://docs.cocos.com/creator/manual/zh/release-notes/asset-manager-upgrade-guide.html");
          }
          return loader;
        }
      },
      AssetLibrary: {
        get: function get() {
          true;
          if (onceWarns.assetLibrary) {
            onceWarns.assetLibrary = false;
            cc.log("cc.AssetLibrary is deprecated, use cc.assetManager instead please. See https://docs.cocos.com/creator/manual/zh/release-notes/asset-manager-upgrade-guide.html");
          }
          return AssetLibrary;
        }
      },
      LoadingItems: {
        get: function get() {
          cc.warnID(1400, "cc.LoadingItems", "cc.AssetManager.Task");
          return cc.AssetManager.Task;
        }
      },
      Pipeline: {
        get: function get() {
          cc.warnID(1400, "cc.Pipeline", "cc.AssetManager.Pipeline");
          return cc.AssetManager.Pipeline;
        }
      }
    });
    js.obsolete(cc, "cc.RawAsset", "cc.Asset");
    js.obsolete(cc.Asset.prototype, "cc.Asset.url", "nativeUrl");
    Object.defineProperties(cc.macro, {
      DOWNLOAD_MAX_CONCURRENT: {
        get: function get() {
          return cc.assetManager.downloader.maxConcurrency;
        },
        set: function set(val) {
          cc.assetManager.downloader.maxConcurrency = val;
        }
      }
    });
    Object.assign(cc.director, {
      _getSceneUuid: function _getSceneUuid(sceneName) {
        cc.assetManager.main.getSceneInfo(sceneName);
      }
    });
    Object.defineProperties(cc.game, {
      _sceneInfos: {
        get: function get() {
          var scenes = [];
          cc.assetManager.main._config.scenes.forEach((function(val) {
            scenes.push(val);
          }));
          return scenes;
        }
      }
    });
    var parseParameters = utilities.parseParameters;
    utilities.parseParameters = function(options, onProgress, onComplete) {
      var result = parseParameters(options, onProgress, onComplete);
      result.onProgress = result.onProgress || loader.onProgress;
      return result;
    };
    var autoRelease = releaseManager._autoRelease;
    releaseManager._autoRelease = function() {
      autoRelease.apply(this, arguments);
      var releaseSettings = loader._autoReleaseSetting;
      var keys = Object.keys(releaseSettings);
      for (var i = 0; i < keys.length; i++) {
        var key = keys[i];
        if (true === releaseSettings[key]) {
          var asset = cc.assetManager.assets.get(key);
          asset && releaseManager.tryRelease(asset);
        }
      }
    };
  }), {
    "../CCDirector": 24,
    "../platform/js": 158,
    "./depend-util": 35,
    "./downloader": 42,
    "./releaseManager": 53,
    "./utilities": 58
  } ],
  37: [ (function(require, module, exports) {
    "use strict";
    var js = require("../platform/js");
    var helper = require("./helper");
    var MissingClass = false;
    require("../platform/deserialize");
    function deserialize(json, options) {
      var classFinder, missingClass;
      var isScene = helper.isSceneObj(json);
      if (isScene) {
        false;
        classFinder = cc._MissingScript.safeFindClass;
      } else classFinder = function classFinder(id) {
        var cls = js._getClassById(id);
        if (cls) return cls;
        cc.warnID(4903, id);
        return Object;
      };
      var tdInfo = cc.deserialize.Details.pool.get();
      var asset;
      try {
        asset = cc.deserialize(json, tdInfo, {
          classFinder: classFinder,
          customEnv: options
        });
      } catch (e) {
        cc.deserialize.Details.pool.put(tdInfo);
        throw e;
      }
      false;
      var uuidList = tdInfo.uuidList;
      var objList = tdInfo.uuidObjList;
      var propList = tdInfo.uuidPropList;
      var depends = [];
      for (var i = 0; i < uuidList.length; i++) {
        var dependUuid = uuidList[i];
        depends[i] = {
          uuid: helper.decodeUuid(dependUuid),
          owner: objList[i],
          prop: propList[i]
        };
      }
      asset.__depends__ = depends;
      asset._native && (asset.__nativeDepend__ = true);
      cc.deserialize.Details.pool.put(tdInfo);
      return asset;
    }
    module.exports = deserialize;
  }), {
    "../platform/deserialize": 153,
    "../platform/js": 158,
    "./helper": 46
  } ],
  38: [ (function(require, module, exports) {
    "use strict";
    var __audioSupport = cc.sys.__audioSupport;
    var _require = require("./utilities"), parseParameters = _require.parseParameters;
    function downloadDomAudio(url, options, onComplete) {
      var _parseParameters = parseParameters(options, void 0, onComplete), options = _parseParameters.options, onComplete = _parseParameters.onComplete;
      var dom = document.createElement("audio");
      dom.src = url;
      var clearEvent = function clearEvent() {
        clearTimeout(timer);
        dom.removeEventListener("canplaythrough", success, false);
        dom.removeEventListener("error", failure, false);
        __audioSupport.USE_LOADER_EVENT && dom.removeEventListener(__audioSupport.USE_LOADER_EVENT, success, false);
      };
      var timer = setTimeout((function() {
        0 === dom.readyState ? failure() : success();
      }), 8e3);
      var success = function success() {
        clearEvent();
        onComplete && onComplete(null, dom);
      };
      var failure = function failure() {
        clearEvent();
        var message = "load audio failure - " + url;
        cc.log(message);
        onComplete && onComplete(new Error(message));
      };
      dom.addEventListener("canplaythrough", success, false);
      dom.addEventListener("error", failure, false);
      __audioSupport.USE_LOADER_EVENT && dom.addEventListener(__audioSupport.USE_LOADER_EVENT, success, false);
      return dom;
    }
    module.exports = downloadDomAudio;
  }), {
    "./utilities": 58
  } ],
  39: [ (function(require, module, exports) {
    "use strict";
    var _require = require("./utilities"), parseParameters = _require.parseParameters;
    function downloadDomImage(url, options, onComplete) {
      var _parseParameters = parseParameters(options, void 0, onComplete), options = _parseParameters.options, onComplete = _parseParameters.onComplete;
      var img = new Image();
      "file:" !== window.location.protocol && (img.crossOrigin = "anonymous");
      function loadCallback() {
        img.removeEventListener("load", loadCallback);
        img.removeEventListener("error", errorCallback);
        onComplete && onComplete(null, img);
      }
      function errorCallback() {
        img.removeEventListener("load", loadCallback);
        img.removeEventListener("error", errorCallback);
        onComplete && onComplete(new Error(cc.debug.getError(4930, url)));
      }
      img.addEventListener("load", loadCallback);
      img.addEventListener("error", errorCallback);
      img.src = url;
      return img;
    }
    module.exports = downloadDomImage;
  }), {
    "./utilities": 58
  } ],
  40: [ (function(require, module, exports) {
    "use strict";
    var _require = require("./utilities"), parseParameters = _require.parseParameters;
    function downloadFile(url, options, onProgress, onComplete) {
      var _parseParameters = parseParameters(options, onProgress, onComplete), options = _parseParameters.options, onProgress = _parseParameters.onProgress, onComplete = _parseParameters.onComplete;
      var xhr = new XMLHttpRequest(), errInfo = "download failed: " + url + ", status: ";
      xhr.open("GET", url, true);
      void 0 !== options.responseType && (xhr.responseType = options.responseType);
      void 0 !== options.withCredentials && (xhr.withCredentials = options.withCredentials);
      void 0 !== options.mimeType && xhr.overrideMimeType && xhr.overrideMimeType(options.mimeType);
      void 0 !== options.timeout && (xhr.timeout = options.timeout);
      if (options.header) for (var header in options.header) xhr.setRequestHeader(header, options.header[header]);
      xhr.onload = function() {
        200 === xhr.status || 0 === xhr.status ? onComplete && onComplete(null, xhr.response) : onComplete && onComplete(new Error(errInfo + xhr.status + "(no response)"));
      };
      onProgress && (xhr.onprogress = function(e) {
        e.lengthComputable && onProgress(e.loaded, e.total);
      });
      xhr.onerror = function() {
        onComplete && onComplete(new Error(errInfo + xhr.status + "(error)"));
      };
      xhr.ontimeout = function() {
        onComplete && onComplete(new Error(errInfo + xhr.status + "(time out)"));
      };
      xhr.onabort = function() {
        onComplete && onComplete(new Error(errInfo + xhr.status + "(abort)"));
      };
      xhr.send(null);
      return xhr;
    }
    module.exports = downloadFile;
  }), {
    "./utilities": 58
  } ],
  41: [ (function(require, module, exports) {
    "use strict";
    var _require = require("./utilities"), parseParameters = _require.parseParameters;
    var downloaded = {};
    function downloadScript(url, options, onComplete) {
      var _parseParameters = parseParameters(options, void 0, onComplete), options = _parseParameters.options, onComplete = _parseParameters.onComplete;
      if (downloaded[url]) return onComplete && onComplete(null);
      var d = document, s = document.createElement("script");
      "file:" !== window.location.protocol && (s.crossOrigin = "anonymous");
      s.async = void 0 === options.isAsync || options.isAsync;
      s.src = url;
      function loadHandler() {
        s.parentNode.removeChild(s);
        s.removeEventListener("load", loadHandler, false);
        s.removeEventListener("error", errorHandler, false);
        downloaded[url] = true;
        onComplete && onComplete(null);
      }
      function errorHandler() {
        s.parentNode.removeChild(s);
        s.removeEventListener("load", loadHandler, false);
        s.removeEventListener("error", errorHandler, false);
        onComplete && onComplete(new Error(cc.debug.getError(4928, url)));
      }
      s.addEventListener("load", loadHandler, false);
      s.addEventListener("error", errorHandler, false);
      d.body.appendChild(s);
    }
    module.exports = downloadScript;
  }), {
    "./utilities": 58
  } ],
  42: [ (function(require, module, exports) {
    "use strict";
    var js = require("../platform/js");
    var debug = require("../CCDebug");
    var _require = require("./font-loader"), loadFont = _require.loadFont;
    var callInNextTick = require("../platform/utils").callInNextTick;
    var downloadDomImage = require("./download-dom-image");
    var downloadDomAudio = require("./download-dom-audio");
    var downloadFile = require("./download-file");
    var downloadScript = require("./download-script.js");
    var Cache = require("./cache");
    var _require2 = require("./shared"), files = _require2.files;
    var _require3 = require("../platform/CCSys"), __audioSupport = _require3.__audioSupport, capabilities = _require3.capabilities;
    var _require4 = require("./utilities"), urlAppendTimestamp = _require4.urlAppendTimestamp, retry = _require4.retry;
    var REGEX = /^\w+:\/\/.*/;
    var formatSupport = __audioSupport.format || [];
    var unsupported = function unsupported(url, options, onComplete) {
      onComplete(new Error(debug.getError(4927)));
    };
    var downloadAudio = function downloadAudio(url, options, onComplete) {
      options.audioLoadMode !== cc.AudioClip.LoadMode.DOM_AUDIO ? downloadArrayBuffer(url, options, onComplete) : downloadDomAudio(url, options, onComplete);
    };
    var downloadAudio = 0 === formatSupport.length ? unsupported : __audioSupport.WEB_AUDIO ? downloadAudio : downloadDomAudio;
    var downloadImage = function downloadImage(url, options, onComplete) {
      var func = capabilities.imageBitmap && cc.macro.ALLOW_IMAGE_BITMAP ? downloadBlob : downloadDomImage;
      func.apply(this, arguments);
    };
    var downloadBlob = function downloadBlob(url, options, onComplete) {
      options.responseType = "blob";
      downloadFile(url, options, options.onFileProgress, onComplete);
    };
    var downloadJson = function downloadJson(url, options, onComplete) {
      options.responseType = "json";
      downloadFile(url, options, options.onFileProgress, (function(err, data) {
        if (!err && "string" === typeof data) try {
          data = JSON.parse(data);
        } catch (e) {
          err = e;
        }
        onComplete && onComplete(err, data);
      }));
    };
    var downloadArrayBuffer = function downloadArrayBuffer(url, options, onComplete) {
      options.responseType = "arraybuffer";
      downloadFile(url, options, options.onFileProgress, onComplete);
    };
    var downloadText = function downloadText(url, options, onComplete) {
      options.responseType = "text";
      downloadFile(url, options, options.onFileProgress, onComplete);
    };
    var downloadVideo = function downloadVideo(url, options, onComplete) {
      onComplete(null, url);
    };
    var downloadBundle = function downloadBundle(nameOrUrl, options, onComplete) {
      var bundleName = cc.path.basename(nameOrUrl);
      var url = nameOrUrl;
      REGEX.test(url) || (url = "assets/" + bundleName);
      var version = options.version || downloader.bundleVers[bundleName];
      var count = 0;
      var config = url + "/config." + (version ? version + "." : "") + "json";
      var out = null, error = null;
      downloadJson(config, options, (function(err, response) {
        err && (error = err);
        out = response;
        out && (out.base = url + "/");
        count++;
        2 === count && onComplete(error, out);
      }));
      var js = url + "/index." + (version ? version + "." : "") + "js";
      downloadScript(js, options, (function(err) {
        err && (error = err);
        count++;
        2 === count && onComplete(error, out);
      }));
    };
    var _downloading = new Cache();
    var _queue = [];
    var _queueDirty = false;
    var _totalNum = 0;
    var _totalNumThisPeriod = 0;
    var _lastDate = -1;
    var _checkNextPeriod = false;
    var updateTime = function updateTime() {
      var now = Date.now();
      if (now - _lastDate > 1e3 * cc.director._deltaTime) {
        _totalNumThisPeriod = 0;
        _lastDate = now;
      }
    };
    var handleQueue = function handleQueue(maxConcurrency, maxRequestsPerFrame) {
      _checkNextPeriod = false;
      updateTime();
      while (_queue.length > 0 && _totalNum < maxConcurrency && _totalNumThisPeriod < maxRequestsPerFrame) {
        if (_queueDirty) {
          _queue.sort((function(a, b) {
            return a.priority - b.priority;
          }));
          _queueDirty = false;
        }
        var nextOne = _queue.pop();
        if (!nextOne) break;
        _totalNum++;
        _totalNumThisPeriod++;
        nextOne.invoke();
      }
      if (_queue.length > 0 && _totalNum < maxConcurrency) {
        callInNextTick(handleQueue, maxConcurrency, maxRequestsPerFrame);
        _checkNextPeriod = true;
      }
    };
    var downloader = {
      maxConcurrency: 6,
      maxRequestsPerFrame: 6,
      maxRetryCount: 3,
      appendTimeStamp: false,
      limited: true,
      retryInterval: 2e3,
      bundleVers: null,
      downloadDomImage: downloadDomImage,
      downloadDomAudio: downloadDomAudio,
      downloadFile: downloadFile,
      downloadScript: downloadScript,
      init: function init(bundleVers) {
        _downloading.clear();
        _queue.length = 0;
        this.bundleVers = bundleVers || Object.create(null);
      },
      register: function register(type, handler) {
        "object" === typeof type ? js.mixin(downloaders, type) : downloaders[type] = handler;
      },
      download: function download(id, url, type, options, onComplete) {
        var func = downloaders[type] || downloaders["default"];
        var self = this;
        var file, downloadCallbacks;
        if (file = files.get(id)) onComplete(null, file); else if (downloadCallbacks = _downloading.get(id)) {
          downloadCallbacks.push(onComplete);
          for (var i = 0, l = _queue.length; i < l; i++) {
            var item = _queue[i];
            if (item.id === id) {
              var priority = options.priority || 0;
              if (item.priority < priority) {
                item.priority = priority;
                _queueDirty = true;
              }
              return;
            }
          }
        } else {
          var process = function process(index, callback) {
            0 === index && _downloading.add(id, [ onComplete ]);
            if (!self.limited) return func(urlAppendTimestamp(url), options, callback);
            updateTime();
            function invoke() {
              func(urlAppendTimestamp(url), options, (function() {
                _totalNum--;
                if (!_checkNextPeriod && _queue.length > 0) {
                  callInNextTick(handleQueue, maxConcurrency, maxRequestsPerFrame);
                  _checkNextPeriod = true;
                }
                callback.apply(this, arguments);
              }));
            }
            if (_totalNum < maxConcurrency && _totalNumThisPeriod < maxRequestsPerFrame) {
              invoke();
              _totalNum++;
              _totalNumThisPeriod++;
            } else {
              _queue.push({
                id: id,
                priority: options.priority || 0,
                invoke: invoke
              });
              _queueDirty = true;
              if (!_checkNextPeriod && _totalNum < maxConcurrency) {
                callInNextTick(handleQueue, maxConcurrency, maxRequestsPerFrame);
                _checkNextPeriod = true;
              }
            }
          };
          var finale = function finale(err, result) {
            err || files.add(id, result);
            var callbacks = _downloading.remove(id);
            for (var _i = 0, _l = callbacks.length; _i < _l; _i++) callbacks[_i](err, result);
          };
          var maxRetryCount = options.maxRetryCount || this.maxRetryCount;
          var maxConcurrency = options.maxConcurrency || this.maxConcurrency;
          var maxRequestsPerFrame = options.maxRequestsPerFrame || this.maxRequestsPerFrame;
          retry(process, maxRetryCount, this.retryInterval, finale);
        }
      }
    };
    var downloaders = {
      ".png": downloadImage,
      ".jpg": downloadImage,
      ".bmp": downloadImage,
      ".jpeg": downloadImage,
      ".gif": downloadImage,
      ".ico": downloadImage,
      ".tiff": downloadImage,
      ".webp": downloadImage,
      ".image": downloadImage,
      ".pvr": downloadArrayBuffer,
      ".pkm": downloadArrayBuffer,
      ".mp3": downloadAudio,
      ".ogg": downloadAudio,
      ".wav": downloadAudio,
      ".m4a": downloadAudio,
      ".txt": downloadText,
      ".xml": downloadText,
      ".vsh": downloadText,
      ".fsh": downloadText,
      ".atlas": downloadText,
      ".tmx": downloadText,
      ".tsx": downloadText,
      ".json": downloadJson,
      ".ExportJson": downloadJson,
      ".plist": downloadText,
      ".fnt": downloadText,
      ".font": loadFont,
      ".eot": loadFont,
      ".ttf": loadFont,
      ".woff": loadFont,
      ".svg": loadFont,
      ".ttc": loadFont,
      ".mp4": downloadVideo,
      ".avi": downloadVideo,
      ".mov": downloadVideo,
      ".mpg": downloadVideo,
      ".mpeg": downloadVideo,
      ".rm": downloadVideo,
      ".rmvb": downloadVideo,
      ".binary": downloadArrayBuffer,
      ".bin": downloadArrayBuffer,
      ".dbbin": downloadArrayBuffer,
      ".skel": downloadArrayBuffer,
      ".js": downloadScript,
      bundle: downloadBundle,
      default: downloadText
    };
    module.exports = downloader;
  }), {
    "../CCDebug": 23,
    "../platform/CCSys": 147,
    "../platform/js": 158,
    "../platform/utils": 161,
    "./cache": 33,
    "./download-dom-audio": 38,
    "./download-dom-image": 39,
    "./download-file": 40,
    "./download-script.js": 41,
    "./font-loader": 45,
    "./shared": 55,
    "./utilities": 58
  } ],
  43: [ (function(require, module, exports) {
    "use strict";
    var Bundle = require("./bundle");
    function createTexture(id, data, options, onComplete) {
      var out = null, err = null;
      try {
        out = new cc.Texture2D();
        out._uuid = id;
        out._nativeUrl = id;
        out._nativeAsset = data;
      } catch (e) {
        err = e;
      }
      onComplete && onComplete(err, out);
    }
    function createAudioClip(id, data, options, onComplete) {
      var out = new cc.AudioClip();
      out._uuid = id;
      out._nativeUrl = id;
      out._nativeAsset = data;
      out.duration = data.duration;
      onComplete && onComplete(null, out);
    }
    function createJsonAsset(id, data, options, onComplete) {
      var out = new cc.JsonAsset();
      out._uuid = id;
      out.json = data;
      onComplete && onComplete(null, out);
    }
    function createTextAsset(id, data, options, onComplete) {
      var out = new cc.TextAsset();
      out._uuid = id;
      out.text = data;
      onComplete && onComplete(null, out);
    }
    function createFont(id, data, options, onComplete) {
      var out = new cc.TTFFont();
      out._uuid = id;
      out._nativeUrl = id;
      out._nativeAsset = data;
      onComplete && onComplete(null, out);
    }
    function createBufferAsset(id, data, options, onComplete) {
      var out = new cc.BufferAsset();
      out._uuid = id;
      out._nativeUrl = id;
      out._nativeAsset = data;
      onComplete && onComplete(null, out);
    }
    function createAsset(id, data, options, onComplete) {
      var out = new cc.Asset();
      out._uuid = id;
      out._nativeUrl = id;
      out._nativeAsset = data;
      onComplete && onComplete(null, out);
    }
    function createBundle(id, data, options, onComplete) {
      var bundle = new Bundle();
      data.base = data.base || id + "/";
      bundle.init(data);
      onComplete && onComplete(null, bundle);
    }
    var factory = {
      register: function register(type, handler) {
        "object" === typeof type ? cc.js.mixin(producers, type) : producers[type] = handler;
      },
      create: function create(id, data, type, options, onComplete) {
        var func = producers[type] || producers["default"];
        func(id, data, options, onComplete);
      }
    };
    var producers = {
      ".png": createTexture,
      ".jpg": createTexture,
      ".bmp": createTexture,
      ".jpeg": createTexture,
      ".gif": createTexture,
      ".ico": createTexture,
      ".tiff": createTexture,
      ".webp": createTexture,
      ".image": createTexture,
      ".pvr": createTexture,
      ".pkm": createTexture,
      ".mp3": createAudioClip,
      ".ogg": createAudioClip,
      ".wav": createAudioClip,
      ".m4a": createAudioClip,
      ".txt": createTextAsset,
      ".xml": createTextAsset,
      ".vsh": createTextAsset,
      ".fsh": createTextAsset,
      ".atlas": createTextAsset,
      ".tmx": createTextAsset,
      ".tsx": createTextAsset,
      ".fnt": createTextAsset,
      ".json": createJsonAsset,
      ".ExportJson": createJsonAsset,
      ".font": createFont,
      ".eot": createFont,
      ".ttf": createFont,
      ".woff": createFont,
      ".svg": createFont,
      ".ttc": createFont,
      ".binary": createBufferAsset,
      ".bin": createBufferAsset,
      ".dbbin": createBufferAsset,
      ".skel": createBufferAsset,
      bundle: createBundle,
      default: createAsset
    };
    module.exports = factory;
  }), {
    "./bundle": 32
  } ],
  44: [ (function(require, module, exports) {
    "use strict";
    var packManager = require("./pack-manager");
    var Task = require("./task");
    var _require = require("./utilities"), getDepends = _require.getDepends, clear = _require.clear, forEach = _require.forEach;
    var _require2 = require("./shared"), assets = _require2.assets, fetchPipeline = _require2.fetchPipeline;
    function fetch(task, done) {
      var firstTask = false;
      if (!task.progress) {
        task.progress = {
          finish: 0,
          total: task.input.length
        };
        firstTask = true;
      }
      var options = task.options, depends = [], progress = task.progress, total = progress.total;
      options.__exclude__ = options.__exclude__ || Object.create(null);
      task.output = [];
      forEach(task.input, (function(item, cb) {
        if (!item.isNative && assets.has(item.uuid)) {
          var asset = assets.get(item.uuid);
          asset.addRef();
          handle(item, task, asset, null, asset.__asyncLoadAssets__, depends, total, done);
          return cb();
        }
        packManager.load(item, task.options, (function(err, data) {
          if (err) {
            if (!task.isFinish) if (cc.assetManager.force) handle(item, task, null, null, false, depends, total, done); else {
              cc.error(err.message, err.stack);
              done(err);
            }
          } else task.isFinish || handle(item, task, null, data, !item.isNative, depends, total, done);
          cb();
        }));
      }), (function() {
        if (task.isFinish) {
          clear(task, true);
          return task.dispatch("error");
        }
        if (depends.length > 0) {
          var subTask = Task.create({
            name: task.name + " dependencies",
            input: depends,
            progress: progress,
            options: options,
            onProgress: task.onProgress,
            onError: Task.prototype.recycle,
            onComplete: function onComplete(err) {
              if (!err) {
                task.output.push.apply(task.output, this.output);
                subTask.recycle();
              }
              firstTask && decreaseRef(task);
              done(err);
            }
          });
          fetchPipeline.async(subTask);
          return;
        }
        firstTask && decreaseRef(task);
        done();
      }));
    }
    function decreaseRef(task) {
      var output = task.output;
      for (var i = 0, l = output.length; i < l; i++) output[i].content && output[i].content.decRef(false);
    }
    function handle(item, task, content, file, loadDepends, depends, last, done) {
      var exclude = task.options.__exclude__;
      var progress = task.progress;
      item.content = content;
      item.file = file;
      task.output.push(item);
      if (loadDepends) {
        exclude[item.uuid] = true;
        var err = getDepends(item.uuid, file || content, exclude, depends, true, false, item.config);
        if (err) {
          if (!cc.assetManager.force) {
            cc.error(err.message, err.stack);
            return done(err);
          }
          item.file = null;
        }
        progress.total = last + depends.length;
      }
      task.dispatch("progress", ++progress.finish, progress.total, item);
    }
    module.exports = fetch;
  }), {
    "./pack-manager": 49,
    "./shared": 55,
    "./task": 56,
    "./utilities": 58
  } ],
  45: [ (function(require, module, exports) {
    "use strict";
    var textUtils = require("../utils/text-utils");
    var _canvasContext = null;
    var _testString = "BES bswy:->@123\u4e01\u3041\u1101";
    var _fontFaces = Object.create(null);
    var _intervalId = -1;
    var _loadingFonts = [];
    var _timeout = 3e3;
    var useNativeCheck = (function() {
      var nativeCheck = void 0;
      return function() {
        if (void 0 === nativeCheck) if (!window.FontFace) nativeCheck = false; else {
          var match = /Gecko.*Firefox\/(\d+)/.exec(window.navigator.userAgent);
          var safari10Match = /OS X.*Version\/10\..*Safari/.exec(window.navigator.userAgent) && /Apple/.exec(window.navigator.vendor);
          nativeCheck = match ? parseInt(match[1], 10) > 42 : !safari10Match;
        }
        return nativeCheck;
      };
    })();
    function _checkFontLoaded() {
      var allFontsLoaded = true;
      var now = Date.now();
      for (var i = _loadingFonts.length - 1; i >= 0; i--) {
        var fontLoadHandle = _loadingFonts[i];
        var fontFamily = fontLoadHandle.fontFamilyName;
        if (now - fontLoadHandle.startTime > _timeout) {
          cc.warnID(4933, fontFamily);
          fontLoadHandle.onComplete(null, fontFamily);
          _loadingFonts.splice(i, 1);
          continue;
        }
        var oldWidth = fontLoadHandle.refWidth;
        var fontDesc = "40px " + fontFamily;
        _canvasContext.font = fontDesc;
        var newWidth = textUtils.safeMeasureText(_canvasContext, _testString, fontDesc);
        if (oldWidth !== newWidth) {
          _loadingFonts.splice(i, 1);
          fontLoadHandle.onComplete(null, fontFamily);
        } else allFontsLoaded = false;
      }
      if (allFontsLoaded) {
        clearInterval(_intervalId);
        _intervalId = -1;
      }
    }
    function nativeCheckFontLoaded(start, font, callback) {
      var loader = new Promise(function(resolve, reject) {
        var check = function check() {
          var now = Date.now();
          now - start >= _timeout ? reject() : document.fonts.load("40px " + font).then((function(fonts) {
            fonts.length >= 1 ? resolve() : setTimeout(check, 100);
          }), (function() {
            reject();
          }));
        };
        check();
      });
      var timeoutId = null, timer = new Promise(function(resolve, reject) {
        timeoutId = setTimeout(reject, _timeout);
      });
      Promise.race([ timer, loader ]).then((function() {
        if (timeoutId) {
          clearTimeout(timeoutId);
          timeoutId = null;
        }
        callback(null, font);
      }), (function() {
        cc.warnID(4933, font);
        callback(null, font);
      }));
    }
    var fontLoader = {
      loadFont: function loadFont(url, options, onComplete) {
        var fontFamilyName = fontLoader._getFontFamily(url);
        if (_fontFaces[fontFamilyName]) return onComplete(null, fontFamilyName);
        if (!_canvasContext) {
          var labelCanvas = document.createElement("canvas");
          labelCanvas.width = 100;
          labelCanvas.height = 100;
          _canvasContext = labelCanvas.getContext("2d");
        }
        var fontDesc = "40px " + fontFamilyName;
        _canvasContext.font = fontDesc;
        var refWidth = textUtils.safeMeasureText(_canvasContext, _testString, fontDesc);
        var fontStyle = document.createElement("style");
        fontStyle.type = "text/css";
        var fontStr = "";
        isNaN(fontFamilyName - 0) ? fontStr += "@font-face { font-family:" + fontFamilyName + "; src:" : fontStr += "@font-face { font-family:'" + fontFamilyName + "'; src:";
        fontStr += "url('" + url + "');";
        fontStyle.textContent = fontStr + "}";
        document.body.appendChild(fontStyle);
        var preloadDiv = document.createElement("div");
        var divStyle = preloadDiv.style;
        divStyle.fontFamily = fontFamilyName;
        preloadDiv.innerHTML = ".";
        divStyle.position = "absolute";
        divStyle.left = "-100px";
        divStyle.top = "-100px";
        document.body.appendChild(preloadDiv);
        if (useNativeCheck()) nativeCheckFontLoaded(Date.now(), fontFamilyName, onComplete); else {
          var fontLoadHandle = {
            fontFamilyName: fontFamilyName,
            refWidth: refWidth,
            onComplete: onComplete,
            startTime: Date.now()
          };
          _loadingFonts.push(fontLoadHandle);
          -1 === _intervalId && (_intervalId = setInterval(_checkFontLoaded, 100));
        }
        _fontFaces[fontFamilyName] = fontStyle;
      },
      _getFontFamily: function _getFontFamily(fontHandle) {
        var ttfIndex = fontHandle.lastIndexOf(".ttf");
        if (-1 === ttfIndex) return fontHandle;
        var slashPos = fontHandle.lastIndexOf("/");
        var fontFamilyName;
        fontFamilyName = -1 === slashPos ? fontHandle.substring(0, ttfIndex) + "_LABEL" : fontHandle.substring(slashPos + 1, ttfIndex) + "_LABEL";
        -1 !== fontFamilyName.indexOf(" ") && (fontFamilyName = '"' + fontFamilyName + '"');
        return fontFamilyName;
      }
    };
    module.exports = fontLoader;
  }), {
    "../utils/text-utils": 216
  } ],
  46: [ (function(require, module, exports) {
    "use strict";
    var _require = require("./shared"), bundles = _require.bundles;
    var helper = {
      decodeUuid: require("../utils/decode-uuid"),
      getUuidFromURL: (function() {
        var _uuidRegex = /.*[/\\][0-9a-fA-F]{2}[/\\]([0-9a-fA-F-]{8,})/;
        return function(url) {
          var matches = url.match(_uuidRegex);
          if (matches) return matches[1];
          return "";
        };
      })(),
      getUrlWithUuid: function getUrlWithUuid(uuid, options) {
        options = options || Object.create(null);
        options.__isNative__ = options.isNative;
        var bundle = bundles.find((function(bundle) {
          return bundle.getAssetInfo(uuid);
        }));
        bundle && (options.bundle = bundle.name);
        return cc.assetManager._transform(uuid, options);
      },
      isSceneObj: function isSceneObj(json) {
        var SCENE_ID = "cc.Scene", PREFAB_ID = "cc.Prefab";
        return json && (json[0] && json[0].__type__ === SCENE_ID || json[1] && json[1].__type__ === SCENE_ID || json[0] && json[0].__type__ === PREFAB_ID);
      },
      isScene: function isScene(asset) {
        return asset && (asset.constructor === cc.SceneAsset || asset instanceof cc.Scene);
      },
      normalize: function normalize(url) {
        url && (46 === url.charCodeAt(0) && 47 === url.charCodeAt(1) ? url = url.slice(2) : 47 === url.charCodeAt(0) && (url = url.slice(1)));
        return url;
      }
    };
    module.exports = helper;
  }), {
    "../utils/decode-uuid": 204,
    "./shared": 55
  } ],
  47: [ (function(require, module, exports) {
    "use strict";
    require("./deprecated");
    require("./CCAssetManager");
  }), {
    "./CCAssetManager": 30,
    "./deprecated": 36
  } ],
  48: [ (function(require, module, exports) {
    "use strict";
    var packManager = require("./pack-manager");
    var Pipeline = require("./pipeline");
    var parser = require("./parser");
    var _require = require("./utilities"), getDepends = _require.getDepends, cache = _require.cache, gatherAsset = _require.gatherAsset, setProperties = _require.setProperties, forEach = _require.forEach, clear = _require.clear, checkCircleReference = _require.checkCircleReference;
    var _require2 = require("./shared"), assets = _require2.assets, files = _require2.files, parsed = _require2.parsed, pipeline = _require2.pipeline;
    var Task = require("./task");
    function load(task, done) {
      task.progress || (task.progress = {
        finish: 0,
        total: task.input.length
      });
      var options = task.options, progress = task.progress;
      options.__exclude__ = options.__exclude__ || Object.create(null);
      task.output = [];
      forEach(task.input, (function(item, cb) {
        var subTask = Task.create({
          input: item,
          onProgress: task.onProgress,
          options: options,
          progress: progress,
          onComplete: function onComplete(err, item) {
            !err || task.isFinish || cc.assetManager.force || done(err);
            task.output.push(item);
            subTask.recycle();
            cb();
          }
        });
        loadOneAssetPipeline.async(subTask);
      }), (function() {
        options.__exclude__ = null;
        if (task.isFinish) {
          clear(task, true);
          return task.dispatch("error");
        }
        gatherAsset(task);
        clear(task, true);
        done();
      }));
    }
    var loadOneAssetPipeline = new Pipeline("loadOneAsset", [ function fetch(task, done) {
      var item = task.output = task.input;
      var options = item.options, isNative = item.isNative, uuid = item.uuid, file = item.file;
      var reload = options.reload;
      if (file || !reload && !isNative && assets.has(uuid)) return done();
      packManager.load(item, task.options, (function(err, data) {
        if (err) {
          cc.assetManager.force ? err = null : cc.error(err.message, err.stack);
          data = null;
        }
        item.file = data;
        done(err);
      }));
    }, function parse(task, done) {
      var item = task.output = task.input, progress = task.progress, exclude = task.options.__exclude__;
      var id = item.id, file = item.file, options = item.options;
      if (item.isNative) parser.parse(id, file, item.ext, options, (function(err, asset) {
        if (err && !cc.assetManager.force) {
          cc.error(err.message, err.stack);
          return done(err);
        }
        item.content = asset;
        task.dispatch("progress", ++progress.finish, progress.total, item);
        files.remove(id);
        parsed.remove(id);
        done();
      })); else {
        var uuid = item.uuid;
        if (uuid in exclude) {
          var _exclude$uuid = exclude[uuid], finish = _exclude$uuid.finish, content = _exclude$uuid.content, err = _exclude$uuid.err, callbacks = _exclude$uuid.callbacks;
          task.dispatch("progress", ++progress.finish, progress.total, item);
          if (finish || checkCircleReference(uuid, uuid, exclude)) {
            content && content.addRef();
            item.content = content;
            done(err);
          } else callbacks.push({
            done: done,
            item: item
          });
        } else if (!options.reload && assets.has(uuid)) {
          var asset = assets.get(uuid);
          if (options.__asyncLoadAssets__ || !asset.__asyncLoadAssets__) {
            item.content = asset.addRef();
            task.dispatch("progress", ++progress.finish, progress.total, item);
            done();
          } else loadDepends(task, asset, done, false);
        } else parser.parse(id, file, "import", options, (function(err, asset) {
          if (err) {
            cc.assetManager.force ? err = null : cc.error(err.message, err.stack);
            return done(err);
          }
          asset._uuid = uuid;
          loadDepends(task, asset, done, true);
        }));
      }
    } ]);
    function loadDepends(task, asset, done, init) {
      var item = task.input, progress = task.progress;
      var uuid = item.uuid, id = item.id, options = item.options, config = item.config;
      var __asyncLoadAssets__ = options.__asyncLoadAssets__, cacheAsset = options.cacheAsset;
      var depends = [];
      asset.addRef && asset.addRef();
      getDepends(uuid, asset, Object.create(null), depends, false, __asyncLoadAssets__, config);
      task.dispatch("progress", ++progress.finish, progress.total += depends.length, item);
      var repeatItem = task.options.__exclude__[uuid] = {
        content: asset,
        finish: false,
        callbacks: [ {
          done: done,
          item: item
        } ]
      };
      var subTask = Task.create({
        input: depends,
        options: task.options,
        onProgress: task.onProgress,
        onError: Task.prototype.recycle,
        progress: progress,
        onComplete: function onComplete(err) {
          asset.decRef && asset.decRef(false);
          asset.__asyncLoadAssets__ = __asyncLoadAssets__;
          repeatItem.finish = true;
          repeatItem.err = err;
          if (!err) {
            var assets = Array.isArray(subTask.output) ? subTask.output : [ subTask.output ];
            var map = Object.create(null);
            for (var _i = 0, _l = assets.length; _i < _l; _i++) {
              var dependAsset = assets[_i];
              dependAsset && (map[dependAsset instanceof cc.Asset ? dependAsset._uuid + "@import" : uuid + "@native"] = dependAsset);
            }
            if (init) {
              var missingAsset = setProperties(uuid, asset, map);
              if (!missingAsset) try {
                asset.onLoad && asset.onLoad();
              } catch (e) {
                cc.error(e.message, e.stack);
              }
              files.remove(id);
              parsed.remove(id);
              cache(uuid, asset, void 0 !== cacheAsset ? cacheAsset : cc.assetManager.cacheAsset);
            } else if (asset.__nativeDepend__ && !asset._nativeAsset) {
              var missingAsset = setProperties(uuid, asset, map);
              if (!missingAsset) try {
                asset.onLoad && asset.onLoad();
              } catch (e) {
                cc.error(e.message, e.stack);
              }
            }
            subTask.recycle();
          }
          var callbacks = repeatItem.callbacks;
          for (var i = 0, l = callbacks.length; i < l; i++) {
            var cb = callbacks[i];
            asset.addRef && asset.addRef();
            cb.item.content = asset;
            cb.done(err);
          }
          callbacks.length = 0;
        }
      });
      pipeline.async(subTask);
    }
    module.exports = load;
  }), {
    "./pack-manager": 49,
    "./parser": 50,
    "./pipeline": 51,
    "./shared": 55,
    "./task": 56,
    "./utilities": 58
  } ],
  49: [ (function(require, module, exports) {
    "use strict";
    var downloader = require("./downloader");
    var Cache = require("./cache");
    var js = require("../platform/js");
    var _require = require("./shared"), files = _require.files;
    var _loading = new Cache();
    function isLoading(val) {
      return _loading.has(val.uuid);
    }
    var packManager = {
      unpackJson: function unpackJson(pack, json, options, onComplete) {
        var out = Object.create(null), err = null;
        if (Array.isArray(json)) {
          json.length !== pack.length && cc.errorID(4915);
          for (var i = 0; i < pack.length; i++) {
            var key = pack[i] + "@import";
            out[key] = json[i];
          }
        } else if (json.type === js._getClassId(cc.Texture2D)) {
          if (json.data) {
            var datas = json.data.split("|");
            datas.length !== pack.length && cc.errorID(4915);
            for (var _i = 0; _i < pack.length; _i++) out[pack[_i] + "@import"] = {
              __type__: json.type,
              content: datas[_i]
            };
          }
        } else {
          err = new Error("unmatched type pack!");
          out = null;
        }
        onComplete && onComplete(err, out);
      },
      init: function init() {
        _loading.clear();
      },
      register: function register(type, handler) {
        "object" === typeof type ? js.mixin(unpackers, type) : unpackers[type] = handler;
      },
      unpack: function unpack(pack, data, type, options, onComplete) {
        if (!data) {
          onComplete && onComplete(new Error("package data is wrong!"));
          return;
        }
        var unpacker = unpackers[type];
        unpacker(pack, data, options, onComplete);
      },
      load: function load(item, options, onComplete) {
        if (item.isNative || !item.info || !item.info.packs) return downloader.download(item.id, item.url, item.ext, item.options, onComplete);
        if (files.has(item.id)) return onComplete(null, files.get(item.id));
        var packs = item.info.packs;
        var pack = packs.find(isLoading);
        if (pack) return _loading.get(pack.uuid).push({
          onComplete: onComplete,
          id: item.id
        });
        pack = packs[0];
        _loading.add(pack.uuid, [ {
          onComplete: onComplete,
          id: item.id
        } ]);
        var url = cc.assetManager._transform(pack.uuid, {
          ext: pack.ext,
          bundle: item.config.name
        });
        downloader.download(pack.uuid, url, pack.ext, item.options, (function(err, data) {
          files.remove(pack.uuid);
          err && cc.error(err.message, err.stack);
          packManager.unpack(pack.packs, data, pack.ext, item.options, (function(err, result) {
            if (!err) for (var id in result) files.add(id, result[id]);
            var callbacks = _loading.remove(pack.uuid);
            for (var i = 0, l = callbacks.length; i < l; i++) {
              var cb = callbacks[i];
              if (err) {
                cb.onComplete(err);
                continue;
              }
              var data = result[cb.id];
              data ? cb.onComplete(null, data) : cb.onComplete(new Error("can not retrieve data from package"));
            }
          }));
        }));
      }
    };
    var unpackers = {
      ".json": packManager.unpackJson
    };
    module.exports = packManager;
  }), {
    "../platform/js": 158,
    "./cache": 33,
    "./downloader": 42,
    "./shared": 55
  } ],
  50: [ (function(require, module, exports) {
    "use strict";
    var plistParser = require("../platform/CCSAXParser").plistParser;
    var js = require("../platform/js");
    var deserialize = require("./deserialize");
    var Cache = require("./cache");
    var _require = require("./helper"), isScene = _require.isScene;
    var _require2 = require("./shared"), parsed = _require2.parsed, files = _require2.files;
    var _require3 = require("../platform/CCSys"), __audioSupport = _require3.__audioSupport, capabilities = _require3.capabilities;
    var _parsing = new Cache();
    var parser = {
      parseImage: function parseImage(file, options, onComplete) {
        if (capabilities.imageBitmap && file instanceof Blob) {
          var imageOptions = {};
          imageOptions.imageOrientation = options.__flipY__ ? "flipY" : "none";
          imageOptions.premultiplyAlpha = options.__premultiplyAlpha__ ? "premultiply" : "none";
          createImageBitmap(file, imageOptions).then((function(result) {
            result.flipY = !!options.__flipY__;
            result.premultiplyAlpha = !!options.__premultiplyAlpha__;
            onComplete && onComplete(null, result);
          }), (function(err) {
            onComplete && onComplete(err, null);
          }));
        } else onComplete && onComplete(null, file);
      },
      parseAudio: function parseAudio(file, options, onComplete) {
        file instanceof ArrayBuffer ? __audioSupport.context.decodeAudioData(file, (function(buffer) {
          onComplete && onComplete(null, buffer);
        }), (function(e) {
          onComplete && onComplete(e, null);
        })) : onComplete && onComplete(null, file);
      },
      parsePVRTex: (function() {
        var PVR_HEADER_LENGTH = 13;
        var PVR_MAGIC = 55727696;
        var PVR_HEADER_MAGIC = 0;
        var PVR_HEADER_FORMAT = 2;
        var PVR_HEADER_HEIGHT = 6;
        var PVR_HEADER_WIDTH = 7;
        var PVR_HEADER_MIPMAPCOUNT = 11;
        var PVR_HEADER_METADATA = 12;
        return function(file, options, onComplete) {
          var err = null, out = null;
          try {
            var buffer = file instanceof ArrayBuffer ? file : file.buffer;
            var header = new Int32Array(buffer, 0, PVR_HEADER_LENGTH);
            if (header[PVR_HEADER_MAGIC] != PVR_MAGIC) throw new Error("Invalid magic number in PVR header");
            var width = header[PVR_HEADER_WIDTH];
            var height = header[PVR_HEADER_HEIGHT];
            var dataOffset = header[PVR_HEADER_METADATA] + 52;
            var pvrtcData = new Uint8Array(buffer, dataOffset);
            out = {
              _data: pvrtcData,
              _compressed: true,
              width: width,
              height: height
            };
          } catch (e) {
            err = e;
          }
          onComplete && onComplete(err, out);
        };
      })(),
      parsePKMTex: (function() {
        var ETC_PKM_HEADER_SIZE = 16;
        var ETC_PKM_FORMAT_OFFSET = 6;
        var ETC_PKM_ENCODED_WIDTH_OFFSET = 8;
        var ETC_PKM_ENCODED_HEIGHT_OFFSET = 10;
        var ETC_PKM_WIDTH_OFFSET = 12;
        var ETC_PKM_HEIGHT_OFFSET = 14;
        var ETC1_RGB_NO_MIPMAPS = 0;
        var ETC2_RGB_NO_MIPMAPS = 1;
        var ETC2_RGBA_NO_MIPMAPS = 3;
        function readBEUint16(header, offset) {
          return header[offset] << 8 | header[offset + 1];
        }
        return function(file, options, onComplete) {
          var err = null, out = null;
          try {
            var buffer = file instanceof ArrayBuffer ? file : file.buffer;
            var header = new Uint8Array(buffer);
            var format = readBEUint16(header, ETC_PKM_FORMAT_OFFSET);
            if (format !== ETC1_RGB_NO_MIPMAPS && format !== ETC2_RGB_NO_MIPMAPS && format !== ETC2_RGBA_NO_MIPMAPS) return new Error("Invalid magic number in ETC header");
            var width = readBEUint16(header, ETC_PKM_WIDTH_OFFSET);
            var height = readBEUint16(header, ETC_PKM_HEIGHT_OFFSET);
            var encodedWidth = readBEUint16(header, ETC_PKM_ENCODED_WIDTH_OFFSET);
            var encodedHeight = readBEUint16(header, ETC_PKM_ENCODED_HEIGHT_OFFSET);
            var etcData = new Uint8Array(buffer, ETC_PKM_HEADER_SIZE);
            out = {
              _data: etcData,
              _compressed: true,
              width: width,
              height: height
            };
          } catch (e) {
            err = e;
          }
          onComplete && onComplete(err, out);
        };
      })(),
      parsePlist: function parsePlist(file, options, onComplete) {
        var err = null;
        var result = plistParser.parse(file);
        result || (err = new Error("parse failed"));
        onComplete && onComplete(err, result);
      },
      parseImport: function parseImport(file, options, onComplete) {
        if (!file) return onComplete && onComplete(new Error("Json is empty"));
        var result, err = null;
        try {
          result = deserialize(file, options);
        } catch (e) {
          err = e;
        }
        onComplete && onComplete(err, result);
      },
      init: function init() {
        _parsing.clear();
      },
      register: function register(type, handler) {
        "object" === typeof type ? js.mixin(parsers, type) : parsers[type] = handler;
      },
      parse: function parse(id, file, type, options, onComplete) {
        var parsedAsset, parsing, parseHandler;
        if (parsedAsset = parsed.get(id)) onComplete(null, parsedAsset); else if (parsing = _parsing.get(id)) parsing.push(onComplete); else if (parseHandler = parsers[type]) {
          _parsing.add(id, [ onComplete ]);
          parseHandler(file, options, (function(err, data) {
            err ? files.remove(id) : isScene(data) || parsed.add(id, data);
            var callbacks = _parsing.remove(id);
            for (var i = 0, l = callbacks.length; i < l; i++) callbacks[i](err, data);
          }));
        } else onComplete(null, file);
      }
    };
    var parsers = {
      ".png": parser.parseImage,
      ".jpg": parser.parseImage,
      ".bmp": parser.parseImage,
      ".jpeg": parser.parseImage,
      ".gif": parser.parseImage,
      ".ico": parser.parseImage,
      ".tiff": parser.parseImage,
      ".webp": parser.parseImage,
      ".image": parser.parseImage,
      ".pvr": parser.parsePVRTex,
      ".pkm": parser.parsePKMTex,
      ".mp3": parser.parseAudio,
      ".ogg": parser.parseAudio,
      ".wav": parser.parseAudio,
      ".m4a": parser.parseAudio,
      ".plist": parser.parsePlist,
      import: parser.parseImport
    };
    module.exports = parser;
  }), {
    "../platform/CCSAXParser": 145,
    "../platform/CCSys": 147,
    "../platform/js": 158,
    "./cache": 33,
    "./deserialize": 37,
    "./helper": 46,
    "./shared": 55
  } ],
  51: [ (function(require, module, exports) {
    "use strict";
    var Task = require("./task");
    var _pipelineId = 0;
    function Pipeline(name, funcs) {
      if (!Array.isArray(funcs)) {
        cc.warn("funcs must be an array");
        return;
      }
      this.id = _pipelineId++;
      this.name = name;
      this.pipes = [];
      for (var i = 0, l = funcs.length; i < l; i++) "function" === typeof funcs[i] && this.pipes.push(funcs[i]);
    }
    Pipeline.prototype = {
      constructor: Pipeline,
      insert: function insert(func, index) {
        if ("function" !== typeof func || index > this.pipes.length) {
          cc.warnID(4921);
          return;
        }
        this.pipes.splice(index, 0, func);
        return this;
      },
      append: function append(func) {
        if ("function" !== typeof func) return;
        this.pipes.push(func);
        return this;
      },
      remove: function remove(index) {
        if ("number" !== typeof index) return;
        this.pipes.splice(index, 1);
        return this;
      },
      sync: function sync(task) {
        var pipes = this.pipes;
        if (!(task instanceof Task) || 0 === pipes.length) return;
        if (null != task.output) {
          task.input = task.output;
          task.output = null;
        }
        task._isFinish = false;
        for (var i = 0, l = pipes.length; i < l; ) {
          var pipe = pipes[i];
          var result = pipe(task);
          if (result) {
            task._isFinish = true;
            return result;
          }
          i++;
          if (i !== l) {
            task.input = task.output;
            task.output = null;
          }
        }
        task._isFinish = true;
        return task.output;
      },
      async: function async(task) {
        var pipes = this.pipes;
        if (!(task instanceof Task) || 0 === pipes.length) return;
        if (null != task.output) {
          task.input = task.output;
          task.output = null;
        }
        task._isFinish = false;
        this._flow(0, task);
      },
      _flow: function _flow(index, task) {
        var self = this;
        var pipe = this.pipes[index];
        pipe(task, (function(result) {
          if (result) {
            task._isFinish = true;
            task.onComplete && task.onComplete(result);
          } else {
            index++;
            if (index < self.pipes.length) {
              task.input = task.output;
              task.output = null;
              self._flow(index, task);
            } else {
              task._isFinish = true;
              task.onComplete && task.onComplete(result, task.output);
            }
          }
        }));
      }
    };
    module.exports = Pipeline;
  }), {
    "./task": 56
  } ],
  52: [ (function(require, module, exports) {
    "use strict";
    var Task = require("./task");
    var _require = require("./shared"), transformPipeline = _require.transformPipeline, RequestType = _require.RequestType;
    function preprocess(task, done) {
      var options = task.options, subOptions = Object.create(null), leftOptions = Object.create(null);
      for (var op in options) switch (op) {
       case RequestType.PATH:
       case RequestType.UUID:
       case RequestType.DIR:
       case RequestType.SCENE:
       case RequestType.URL:
        break;

       case "__requestType__":
       case "__isNative__":
       case "ext":
       case "type":
       case "__nativeName__":
       case "audioLoadMode":
       case "bundle":
        subOptions[op] = options[op];
        break;

       case "__exclude__":
       case "__outputAsArray__":
        leftOptions[op] = options[op];
        break;

       default:
        subOptions[op] = options[op];
        leftOptions[op] = options[op];
      }
      task.options = leftOptions;
      var subTask = Task.create({
        input: task.input,
        options: subOptions
      });
      var err = null;
      try {
        task.output = task.source = transformPipeline.sync(subTask);
      } catch (e) {
        err = e;
        for (var i = 0, l = subTask.output.length; i < l; i++) subTask.output[i].recycle();
      }
      subTask.recycle();
      done(err);
    }
    module.exports = preprocess;
  }), {
    "./shared": 55,
    "./task": 56
  } ],
  53: [ (function(require, module, exports) {
    "use strict";
    var dependUtil = require("./depend-util");
    var Cache = require("./cache");
    require("../assets/CCAsset");
    var _require = require("./shared"), assets = _require.assets;
    function visitAsset(asset, deps) {
      if (!asset._uuid) return;
      deps.push(asset._uuid);
    }
    function visitComponent(comp, deps) {
      var props = Object.getOwnPropertyNames(comp);
      for (var i = 0; i < props.length; i++) {
        var propName = props[i];
        if ("node" === propName || "__eventTargets" === propName) continue;
        var value = comp[propName];
        if ("object" === typeof value && value) if (Array.isArray(value)) for (var j = 0; j < value.length; j++) {
          var val = value[j];
          val instanceof cc.Asset && visitAsset(val, deps);
        } else if (value.constructor && value.constructor !== Object) value instanceof cc.Asset && visitAsset(value, deps); else {
          var keys = Object.getOwnPropertyNames(value);
          for (var _j = 0; _j < keys.length; _j++) {
            var _val = value[keys[_j]];
            _val instanceof cc.Asset && visitAsset(_val, deps);
          }
        }
      }
    }
    var _temp = [];
    function visitNode(node, deps) {
      for (var i = 0; i < node._components.length; i++) visitComponent(node._components[i], deps);
      for (var _i = 0; _i < node._children.length; _i++) visitNode(node._children[_i], deps);
    }
    function descendOpRef(asset, refs, exclude, op) {
      exclude.push(asset._uuid);
      var depends = dependUtil.getDeps(asset._uuid);
      for (var i = 0, l = depends.length; i < l; i++) {
        var dependAsset = assets.get(depends[i]);
        if (dependAsset) {
          var uuid = dependAsset._uuid;
          uuid in refs ? refs[uuid] += op : refs[uuid] = dependAsset.refCount + op;
          if (exclude.includes(uuid)) continue;
          descendOpRef(dependAsset, refs, exclude, op);
        }
      }
    }
    function checkCircularReference(asset) {
      var refs = Object.create(null);
      refs[asset._uuid] = asset.refCount;
      descendOpRef(asset, refs, _temp, -1);
      _temp.length = 0;
      if (0 !== refs[asset._uuid]) return refs[asset._uuid];
      for (var uuid in refs) 0 !== refs[uuid] && descendOpRef(assets.get(uuid), refs, _temp, 1);
      _temp.length = 0;
      return refs[asset._uuid];
    }
    var _persistNodeDeps = new Cache();
    var _toDelete = new Cache();
    var eventListener = false;
    function freeAssets() {
      eventListener = false;
      _toDelete.forEach((function(asset) {
        releaseManager._free(asset);
      }));
      _toDelete.clear();
    }
    var releaseManager = {
      init: function init() {
        _persistNodeDeps.clear();
        _toDelete.clear();
      },
      _addPersistNodeRef: function _addPersistNodeRef(node) {
        var deps = [];
        visitNode(node, deps);
        for (var i = 0, l = deps.length; i < l; i++) {
          var dependAsset = assets.get(deps[i]);
          dependAsset && dependAsset.addRef();
        }
        _persistNodeDeps.add(node.uuid, deps);
      },
      _removePersistNodeRef: function _removePersistNodeRef(node) {
        if (_persistNodeDeps.has(node.uuid)) {
          var deps = _persistNodeDeps.get(node.uuid);
          for (var i = 0, l = deps.length; i < l; i++) {
            var dependAsset = assets.get(deps[i]);
            dependAsset && dependAsset.decRef();
          }
          _persistNodeDeps.remove(node.uuid);
        }
      },
      _autoRelease: function _autoRelease(oldScene, newScene, persistNodes) {
        for (var i = 0, l = persistNodes.length; i < l; i++) {
          var node = persistNodes[i];
          var sceneDeps = dependUtil._depends.get(newScene._id);
          var deps = _persistNodeDeps.get(node.uuid);
          for (var _i2 = 0, _l = deps.length; _i2 < _l; _i2++) {
            var dependAsset = assets.get(deps[_i2]);
            dependAsset && dependAsset.addRef();
          }
          if (sceneDeps) {
            !sceneDeps.persistDeps && (sceneDeps.persistDeps = []);
            sceneDeps.persistDeps.push.apply(sceneDeps.persistDeps, deps);
          }
        }
        if (oldScene) {
          var childs = dependUtil.getDeps(oldScene._id);
          for (var _i3 = 0, _l2 = childs.length; _i3 < _l2; _i3++) {
            var asset = assets.get(childs[_i3]);
            asset && asset.decRef((false, oldScene.autoReleaseAssets));
          }
          var dependencies = dependUtil._depends.get(oldScene._id);
          if (dependencies && dependencies.persistDeps) {
            var persistDeps = dependencies.persistDeps;
            for (var _i4 = 0, _l3 = persistDeps.length; _i4 < _l3; _i4++) {
              var _asset = assets.get(persistDeps[_i4]);
              _asset && _asset.decRef((false, oldScene.autoReleaseAssets));
            }
          }
          dependUtil.remove(oldScene._id);
        }
      },
      _free: function _free(asset, force) {
        _toDelete.remove(asset._uuid);
        if (!cc.isValid(asset, true)) return;
        if (!force && asset.refCount > 0 && checkCircularReference(asset) > 0) return;
        assets.remove(asset._uuid);
        var depends = dependUtil.getDeps(asset._uuid);
        for (var i = 0, l = depends.length; i < l; i++) {
          var dependAsset = assets.get(depends[i]);
          if (dependAsset) {
            dependAsset.decRef(false);
            releaseManager._free(dependAsset, false);
          }
        }
        asset.destroy();
        dependUtil.remove(asset._uuid);
      },
      tryRelease: function tryRelease(asset, force) {
        if (!(asset instanceof cc.Asset)) return;
        if (force) releaseManager._free(asset, force); else {
          _toDelete.add(asset._uuid, asset);
          if (!eventListener) {
            eventListener = true;
            cc.director.once(cc.Director.EVENT_AFTER_DRAW, freeAssets);
          }
        }
      }
    };
    module.exports = releaseManager;
  }), {
    "../assets/CCAsset": 59,
    "./cache": 33,
    "./depend-util": 35,
    "./shared": 55
  } ],
  54: [ (function(require, module, exports) {
    "use strict";
    var MAX_DEAD_NUM = 500;
    var _deadPool = [];
    function RequestItem() {
      this._id = "";
      this.uuid = "";
      this.url = "";
      this.ext = ".json";
      this.content = null;
      this.file = null;
      this.info = null;
      this.config = null;
      this.isNative = false;
      this.options = Object.create(null);
    }
    RequestItem.prototype = {
      constructor: RequestItem,
      get id() {
        this._id || (this._id = this.uuid + "@" + (this.isNative ? "native" : "import"));
        return this._id;
      },
      recycle: function recycle() {
        if (_deadPool.length === MAX_DEAD_NUM) return;
        this._id = "";
        this.uuid = "";
        this.url = "";
        this.ext = ".json";
        this.content = null;
        this.file = null;
        this.info = null;
        this.config = null;
        this.isNative = false;
        this.options = Object.create(null);
        _deadPool.push(this);
      }
    };
    RequestItem.create = function() {
      var out = null;
      out = 0 !== _deadPool.length ? _deadPool.pop() : new RequestItem();
      return out;
    };
    module.exports = RequestItem;
  }), {} ],
  55: [ (function(require, module, exports) {
    "use strict";
    var Cache = require("./cache");
    var Pipeline = require("./pipeline");
    var assets = new Cache();
    var files = new Cache();
    var parsed = new Cache();
    var bundles = new Cache();
    var pipeline = new Pipeline("normal load", []);
    var fetchPipeline = new Pipeline("fetch", []);
    var transformPipeline = new Pipeline("transform url", []);
    var RequestType = {
      UUID: "uuid",
      PATH: "path",
      DIR: "dir",
      URL: "url",
      SCENE: "scene"
    };
    var BuiltinBundleName = {
      RESOURCES: "resources",
      INTERNAL: "internal",
      MAIN: "main",
      START_SCENE: "start-scene"
    };
    module.exports = {
      assets: assets,
      files: files,
      parsed: parsed,
      pipeline: pipeline,
      fetchPipeline: fetchPipeline,
      transformPipeline: transformPipeline,
      RequestType: RequestType,
      bundles: bundles,
      BuiltinBundleName: BuiltinBundleName
    };
  }), {
    "./cache": 33,
    "./pipeline": 51
  } ],
  56: [ (function(require, module, exports) {
    "use strict";
    var _taskId = 0;
    var MAX_DEAD_NUM = 500;
    var _deadPool = [];
    function Task(options) {
      this.id = _taskId++;
      this._isFinish = true;
      this.onComplete = null;
      this.onProgress = null;
      this.onError = null;
      this.source = null;
      this.output = null;
      this.input = null;
      this.progress = null;
      this.options = null;
      this.set(options);
    }
    Task.prototype = {
      constructor: Task,
      set: function set(options) {
        options = options || Object.create(null);
        this.onComplete = options.onComplete;
        this.onProgress = options.onProgress;
        this.onError = options.onError;
        this.source = this.input = options.input;
        this.output = null;
        this.progress = options.progress;
        this.options = options.options || Object.create(null);
      },
      dispatch: function dispatch(event, param1, param2, param3, param4) {
        switch (event) {
         case "complete":
          this.onComplete && this.onComplete(param1, param2, param3, param4);
          break;

         case "progress":
          this.onProgress && this.onProgress(param1, param2, param3, param4);
          break;

         case "error":
          this.onError && this.onError(param1, param2, param3, param4);
          break;

         default:
          var str = "on" + event[0].toUpperCase() + event.substr(1);
          "function" === typeof this[str] && this[str](param1, param2, param3, param4);
        }
      },
      recycle: function recycle() {
        if (_deadPool.length === MAX_DEAD_NUM) return;
        this.onComplete = null;
        this.onProgress = null;
        this.onError = null;
        this.source = this.output = this.input = null;
        this.progress = null;
        this.options = null;
        _deadPool.push(this);
      },
      get isFinish() {
        return this._isFinish;
      }
    };
    Task.create = function(options) {
      var out = null;
      if (0 !== _deadPool.length) {
        out = _deadPool.pop();
        out.set(options);
      } else out = new Task(options);
      return out;
    };
    module.exports = Task;
  }), {} ],
  57: [ (function(require, module, exports) {
    "use strict";
    var _require = require("./helper"), decodeUuid = _require.decodeUuid;
    var RequestItem = require("./request-item");
    var _require2 = require("./shared"), RequestType = _require2.RequestType, bundles = _require2.bundles;
    function parse(task) {
      var input = task.input, options = task.options;
      input = Array.isArray(input) ? input : [ input ];
      task.output = [];
      for (var i = 0; i < input.length; i++) {
        var item = input[i];
        var out = RequestItem.create();
        if ("string" === typeof item) {
          item = Object.create(null);
          item[options.__requestType__ || RequestType.UUID] = input[i];
        }
        if ("object" === typeof item) {
          cc.js.addon(item, options);
          item.preset && cc.js.addon(item, cc.assetManager.presets[item.preset]);
          for (var key in item) {
            switch (key) {
             case RequestType.UUID:
              var uuid = out.uuid = decodeUuid(item.uuid);
              if (bundles.has(item.bundle)) {
                var config = bundles.get(item.bundle)._config;
                var info = config.getAssetInfo(uuid);
                if (info && info.redirect) {
                  if (!bundles.has(info.redirect)) throw new Error("Please load bundle " + info.redirect + " first");
                  config = bundles.get(info.redirect)._config;
                  info = config.getAssetInfo(uuid);
                }
                out.config = config;
                out.info = info;
              }
              out.ext = item.ext || ".json";
              break;

             case "__requestType__":
             case "ext":
             case "bundle":
             case "preset":
             case "type":
              break;

             case RequestType.DIR:
              if (bundles.has(item.bundle)) {
                var infos = [];
                bundles.get(item.bundle)._config.getDirWithPath(item.dir, item.type, infos);
                for (var _i = 0, l = infos.length; _i < l; _i++) {
                  var info = infos[_i];
                  input.push({
                    uuid: info.uuid,
                    __isNative__: false,
                    ext: ".json",
                    bundle: item.bundle
                  });
                }
              }
              out.recycle();
              out = null;
              break;

             case RequestType.PATH:
              if (bundles.has(item.bundle)) {
                var config = bundles.get(item.bundle)._config;
                var info = config.getInfoWithPath(item.path, item.type);
                if (info && info.redirect) {
                  if (!bundles.has(info.redirect)) throw new Error("you need to load bundle " + info.redirect + " first");
                  config = bundles.get(info.redirect)._config;
                  info = config.getAssetInfo(info.uuid);
                }
                if (!info) {
                  out.recycle();
                  throw new Error("Bundle " + item.bundle + " doesn't contain " + item.path);
                }
                out.config = config;
                out.uuid = info.uuid;
                out.info = info;
              }
              out.ext = item.ext || ".json";
              break;

             case RequestType.SCENE:
              if (bundles.has(item.bundle)) {
                var config = bundles.get(item.bundle)._config;
                var info = config.getSceneInfo(item.scene);
                if (info && info.redirect) {
                  if (!bundles.has(info.redirect)) throw new Error("you need to load bundle " + info.redirect + " first");
                  config = bundles.get(info.redirect)._config;
                  info = config.getAssetInfo(info.uuid);
                }
                if (!info) {
                  out.recycle();
                  throw new Error("Bundle " + config.name + " doesn't contain scene " + item.scene);
                }
                out.config = config;
                out.uuid = info.uuid;
                out.info = info;
              }
              break;

             case "__isNative__":
              out.isNative = item.__isNative__;
              break;

             case RequestType.URL:
              out.url = item.url;
              out.uuid = item.uuid || item.url;
              out.ext = item.ext || cc.path.extname(item.url);
              out.isNative = void 0 === item.__isNative__ || item.__isNative__;
              break;

             default:
              out.options[key] = item[key];
            }
            if (!out) break;
          }
        }
        if (!out) continue;
        task.output.push(out);
        if (!out.uuid && !out.url) throw new Error("unknown input:" + item.toString());
      }
      return null;
    }
    function combine(task) {
      var input = task.output = task.input;
      for (var i = 0; i < input.length; i++) {
        var item = input[i];
        if (item.url) continue;
        var url = "", base = "";
        var config = item.config;
        base = item.isNative ? config && config.nativeBase ? config.base + config.nativeBase : cc.assetManager.generalNativeBase : config && config.importBase ? config.base + config.importBase : cc.assetManager.generalImportBase;
        var uuid = item.uuid;
        var ver = "";
        item.info && (ver = item.isNative ? item.info.nativeVer ? "." + item.info.nativeVer : "" : item.info.ver ? "." + item.info.ver : "");
        url = ".ttf" === item.ext ? base + "/" + uuid.slice(0, 2) + "/" + uuid + ver + "/" + item.options.__nativeName__ : base + "/" + uuid.slice(0, 2) + "/" + uuid + ver + item.ext;
        item.url = url;
      }
      return null;
    }
    module.exports = {
      parse: parse,
      combine: combine
    };
  }), {
    "./helper": 46,
    "./request-item": 54,
    "./shared": 55
  } ],
  58: [ (function(require, module, exports) {
    "use strict";
    var dependUtil = require("./depend-util");
    var _require = require("./helper"), isScene = _require.isScene, decodeUuid = _require.decodeUuid;
    var _require2 = require("./shared"), assets = _require2.assets;
    var _require3 = require("../platform/utils"), callInNextTick = _require3.callInNextTick;
    var MissingObjectReporter = false;
    require("../assets/CCAsset");
    var utils = {
      processOptions: function processOptions(options) {
        false;
        var uuids = options.uuids;
        var paths = options.paths;
        var types = options.types;
        var bundles = options.deps;
        var realEntries = options.paths = Object.create(null);
        if (false === options.debug) {
          for (var i = 0, l = uuids.length; i < l; i++) uuids[i] = decodeUuid(uuids[i]);
          for (var id in paths) {
            var entry = paths[id];
            var type = entry[1];
            entry[1] = types[type];
          }
        } else {
          var out = Object.create(null);
          for (var _i = 0, _l = uuids.length; _i < _l; _i++) {
            var uuid = uuids[_i];
            uuids[_i] = out[uuid] = decodeUuid(uuid);
          }
          uuids = out;
        }
        for (var _id in paths) {
          var _entry = paths[_id];
          realEntries[uuids[_id]] = _entry;
        }
        var scenes = options.scenes;
        for (var name in scenes) {
          var _uuid = scenes[name];
          scenes[name] = uuids[_uuid];
        }
        var packs = options.packs;
        for (var packId in packs) {
          var packedIds = packs[packId];
          for (var j = 0; j < packedIds.length; ++j) packedIds[j] = uuids[packedIds[j]];
        }
        var versions = options.versions;
        if (versions) for (var folder in versions) {
          var entries = versions[folder];
          for (var _i2 = 0; _i2 < entries.length; _i2 += 2) {
            var _uuid2 = entries[_i2];
            entries[_i2] = uuids[_uuid2] || _uuid2;
          }
        }
        var redirect = options.redirect;
        if (redirect) for (var _i3 = 0; _i3 < redirect.length; _i3 += 2) {
          redirect[_i3] = uuids[redirect[_i3]];
          redirect[_i3 + 1] = bundles[redirect[_i3 + 1]];
        }
      },
      clear: function clear(task, clearRef) {
        for (var i = 0, l = task.input.length; i < l; i++) {
          var item = task.input[i];
          clearRef && !item.isNative && item.content && item.content.decRef && item.content.decRef(false);
          item.recycle();
        }
        task.input = null;
      },
      urlAppendTimestamp: function urlAppendTimestamp(url) {
        if (cc.assetManager.downloader.appendTimeStamp && "string" === typeof url) return /\?/.test(url) ? url + "&_t=" + (new Date() - 0) : url + "?_t=" + (new Date() - 0);
        return url;
      },
      retry: function retry(process, times, wait, onComplete, index) {
        index = index || 0;
        process(index, (function(err, result) {
          index++;
          !err || index > times ? onComplete && onComplete(err, result) : setTimeout((function() {
            utils.retry(process, times, wait, onComplete, index);
          }), wait);
        }));
      },
      getDepends: function getDepends(uuid, data, exclude, depends, preload, asyncLoadAssets, config) {
        var err = null;
        try {
          var info = dependUtil.parse(uuid, data);
          var includeNative = true;
          data instanceof cc.Asset && (!data.__nativeDepend__ || data._nativeAsset) && (includeNative = false);
          if (preload) {
            for (var _i4 = 0, _l2 = info.deps.length; _i4 < _l2; _i4++) {
              var _dep = info.deps[_i4];
              if (!(_dep in exclude)) {
                exclude[_dep] = true;
                depends.push({
                  uuid: _dep,
                  bundle: config && config.name
                });
              }
            }
            if (includeNative && info.nativeDep) {
              config && (info.nativeDep.bundle = config.name);
              depends.push(info.nativeDep);
            }
          } else {
            asyncLoadAssets = (true, !!data.asyncLoadAssets || asyncLoadAssets && !info.preventDeferredLoadDependents);
            for (var i = 0, l = info.deps.length; i < l; i++) {
              var dep = info.deps[i];
              if (!(dep in exclude)) {
                exclude[dep] = true;
                depends.push({
                  uuid: dep,
                  __asyncLoadAssets__: asyncLoadAssets,
                  bundle: config && config.name
                });
              }
            }
            if (includeNative && !asyncLoadAssets && !info.preventPreloadNativeObject && info.nativeDep) {
              config && (info.nativeDep.bundle = config.name);
              depends.push(info.nativeDep);
            }
          }
        } catch (e) {
          err = e;
        }
        return err;
      },
      cache: function cache(id, asset, cacheAsset) {
        if (!asset) return;
        var _isScene = isScene(asset);
        !_isScene && cacheAsset && assets.add(id, asset);
        _isScene && false;
      },
      setProperties: function setProperties(uuid, asset, assetsMap) {
        var missingAsset = false;
        var depends = asset.__depends__;
        if (depends) {
          var missingAssetReporter = null;
          for (var i = 0, l = depends.length; i < l; i++) {
            var depend = depends[i];
            var dependAsset = assetsMap[depend.uuid + "@import"];
            if (dependAsset) depend.owner[depend.prop] = dependAsset.addRef(); else {
              false;
              cc.error("The asset " + depend.uuid + " is missing!");
              missingAsset = true;
            }
          }
          missingAssetReporter && missingAssetReporter.reportByOwner();
          asset.__depends__ = void 0;
        }
        if (asset.__nativeDepend__) {
          if (!asset._nativeAsset) if (assetsMap[uuid + "@native"]) asset._nativeAsset = assetsMap[uuid + "@native"]; else {
            missingAsset = true;
            false;
          }
          asset.__nativeDepend__ = void 0;
        }
        return missingAsset;
      },
      gatherAsset: function gatherAsset(task) {
        var source = task.source;
        if (task.options.__outputAsArray__ || 1 !== source.length) {
          var output = task.output = [];
          for (var i = 0, l = source.length; i < l; i++) output.push(source[i].content);
        } else task.output = source[0].content;
      },
      forEach: function forEach(array, process, onComplete) {
        var count = 0;
        var errs = [];
        0 === array.length && onComplete && onComplete(errs);
        for (var i = 0, l = array.length; i < l; i++) process(array[i], (function(err) {
          err && errs.push(err);
          count++;
          count === l && onComplete && onComplete(errs);
        }));
      },
      parseParameters: function parseParameters(options, onProgress, onComplete) {
        if (void 0 === onComplete) {
          var isCallback = "function" === typeof options;
          if (onProgress) {
            onComplete = onProgress;
            isCallback || (onProgress = null);
          } else if (void 0 === onProgress && isCallback) {
            onComplete = options;
            options = null;
            onProgress = null;
          }
          if (void 0 !== onProgress && isCallback) {
            onProgress = options;
            options = null;
          }
        }
        options = options || Object.create(null);
        return {
          options: options,
          onProgress: onProgress,
          onComplete: onComplete
        };
      },
      parseLoadResArgs: function parseLoadResArgs(type, onProgress, onComplete) {
        if (void 0 === onComplete) {
          var isValidType = cc.js.isChildClassOf(type, cc.Asset);
          if (onProgress) {
            onComplete = onProgress;
            isValidType && (onProgress = null);
          } else if (void 0 === onProgress && !isValidType) {
            onComplete = type;
            onProgress = null;
            type = null;
          }
          if (void 0 !== onProgress && !isValidType) {
            onProgress = type;
            type = null;
          }
        }
        return {
          type: type,
          onProgress: onProgress,
          onComplete: onComplete
        };
      },
      checkCircleReference: function checkCircleReference(owner, uuid, map, checked) {
        checked || (checked = Object.create(null));
        var item = map[uuid];
        if (!item || checked[uuid]) return false;
        checked[uuid] = true;
        var result = false;
        var deps = item.content && item.content.__depends__;
        if (deps) for (var i = 0, l = deps.length; i < l; i++) {
          var dep = deps[i];
          if (dep.uuid === owner || utils.checkCircleReference(owner, dep.uuid, map, checked)) {
            result = true;
            break;
          }
        }
        return result;
      },
      asyncify: function asyncify(cb) {
        return function(p1, p2) {
          cb && callInNextTick(cb, p1, p2);
        };
      }
    };
    module.exports = utils;
  }), {
    "../assets/CCAsset": 59,
    "../platform/utils": 161,
    "./depend-util": 35,
    "./helper": 46,
    "./shared": 55
  } ],
  59: [ (function(require, module, exports) {
    "use strict";
    var CCObject = require("../platform/CCObject");
    cc.Asset = cc.Class({
      name: "cc.Asset",
      extends: CCObject,
      ctor: function ctor() {
        Object.defineProperty(this, "_uuid", {
          value: "",
          writable: true
        });
        this.loaded = true;
        this._nativeUrl = "";
        this._ref = 0;
      },
      properties: {
        nativeUrl: {
          get: function get() {
            if (!this._nativeUrl && this._native) {
              var name = this._native;
              if (47 === name.charCodeAt(0)) return name.slice(1);
              46 === name.charCodeAt(0) ? this._nativeUrl = cc.assetManager.utils.getUrlWithUuid(this._uuid, {
                ext: name,
                isNative: true
              }) : this._nativeUrl = cc.assetManager.utils.getUrlWithUuid(this._uuid, {
                __nativeName__: name,
                ext: cc.path.extname(name),
                isNative: true
              });
            }
            return this._nativeUrl;
          },
          visible: false
        },
        refCount: {
          get: function get() {
            return this._ref;
          }
        },
        _native: "",
        _nativeAsset: {
          get: function get() {
            return this._$nativeAsset;
          },
          set: function set(obj) {
            this._$nativeAsset = obj;
          }
        },
        _nativeDep: {
          get: function get() {
            if (this._native) return {
              __isNative__: true,
              uuid: this._uuid,
              ext: this._native
            };
          }
        }
      },
      statics: {
        deserialize: false,
        preventDeferredLoadDependents: false,
        preventPreloadNativeObject: false,
        _parseDepsFromJson: function _parseDepsFromJson(json) {
          var depends = [];
          parseDependRecursively(json, depends);
          return depends;
        },
        _parseNativeDepFromJson: function _parseNativeDepFromJson(json) {
          if (json._native) return {
            __isNative__: true,
            ext: json._native
          };
          return null;
        }
      },
      toString: function toString() {
        return this.nativeUrl;
      },
      serialize: false,
      createNode: null,
      _setRawAsset: function _setRawAsset(filename, inLibrary) {
        this._native = false !== inLibrary ? filename || void 0 : "/" + filename;
      },
      addRef: function addRef() {
        this._ref++;
        return this;
      },
      decRef: function decRef(autoRelease) {
        this._ref--;
        false !== autoRelease && cc.assetManager._releaseManager.tryRelease(this);
        return this;
      }
    });
    function parseDependRecursively(data, out) {
      if (!data || "object" !== typeof data || data.__id__) return;
      var uuid = data.__uuid__;
      if (Array.isArray(data)) for (var i = 0, l = data.length; i < l; i++) parseDependRecursively(data[i], out); else if (uuid) out.push(cc.assetManager.utils.decodeUuid(uuid)); else for (var prop in data) parseDependRecursively(data[prop], out);
    }
    module.exports = cc.Asset;
  }), {
    "../platform/CCObject": 144
  } ],
  60: [ (function(require, module, exports) {
    "use strict";
    var Asset = require("./CCAsset");
    var EventTarget = require("../event/event-target");
    var LoadMode = cc.Enum({
      WEB_AUDIO: 0,
      DOM_AUDIO: 1
    });
    var AudioClip = cc.Class({
      name: "cc.AudioClip",
      extends: Asset,
      mixins: [ EventTarget ],
      ctor: function ctor() {
        this._loading = false;
        this.loaded = false;
        this._audio = null;
      },
      properties: {
        duration: 0,
        loadMode: {
          default: LoadMode.WEB_AUDIO,
          type: LoadMode
        },
        _nativeAsset: {
          get: function get() {
            return this._audio;
          },
          set: function set(value) {
            value instanceof cc.AudioClip ? this._audio = value._nativeAsset : this._audio = value;
            if (this._audio) {
              this.loaded = true;
              this.emit("load");
            }
          },
          override: true
        },
        _nativeDep: {
          get: function get() {
            return {
              uuid: this._uuid,
              audioLoadMode: this.loadMode,
              ext: cc.path.extname(this._native),
              __isNative__: true
            };
          },
          override: true
        }
      },
      statics: {
        LoadMode: LoadMode,
        _loadByUrl: function _loadByUrl(url, callback) {
          var audioClip = cc.assetManager.assets.get(url);
          audioClip ? callback(null, audioClip) : cc.assetManager.loadRemote(url, (function(error, data) {
            if (error) return callback(error);
            callback(null, data);
          }));
        },
        _parseDepsFromJson: function _parseDepsFromJson() {
          return [];
        },
        _parseNativeDepFromJson: function _parseNativeDepFromJson(json) {
          return {
            audioLoadMode: json.loadMode,
            ext: cc.path.extname(json._native),
            __isNative__: true
          };
        }
      },
      _ensureLoaded: function _ensureLoaded(onComplete) {
        if (this.loaded) return onComplete && onComplete();
        onComplete && this.once("load", onComplete);
        if (!this._loading) {
          this._loading = true;
          var self = this;
          cc.assetManager.postLoadNative(this, (function(err) {
            self._loading = false;
          }));
        }
      },
      destroy: function destroy() {
        cc.audioEngine.uncache(this);
        this._super();
      }
    });
    cc.AudioClip = AudioClip;
    module.exports = AudioClip;
  }), {
    "../event/event-target": 121,
    "./CCAsset": 59
  } ],
  61: [ (function(require, module, exports) {
    "use strict";
    var FontLetterDefinition = function FontLetterDefinition() {
      this.u = 0;
      this.v = 0;
      this.w = 0;
      this.h = 0;
      this.offsetX = 0;
      this.offsetY = 0;
      this.textureID = 0;
      this.valid = false;
      this.xAdvance = 0;
    };
    var FontAtlas = function FontAtlas(texture) {
      this._letterDefinitions = {};
      this._texture = texture;
    };
    FontAtlas.prototype = {
      constructor: FontAtlas,
      addLetterDefinitions: function addLetterDefinitions(letter, letterDefinition) {
        this._letterDefinitions[letter] = letterDefinition;
      },
      cloneLetterDefinition: function cloneLetterDefinition() {
        var copyLetterDefinitions = {};
        for (var key in this._letterDefinitions) {
          var value = new FontLetterDefinition();
          cc.js.mixin(value, this._letterDefinitions[key]);
          copyLetterDefinitions[key] = value;
        }
        return copyLetterDefinitions;
      },
      getTexture: function getTexture() {
        return this._texture;
      },
      getLetter: function getLetter(key) {
        return this._letterDefinitions[key];
      },
      getLetterDefinitionForChar: function getLetterDefinitionForChar(_char) {
        var key = _char.charCodeAt(0);
        var hasKey = this._letterDefinitions.hasOwnProperty(key);
        var letter;
        letter = hasKey ? this._letterDefinitions[key] : null;
        return letter;
      },
      clear: function clear() {
        this._letterDefinitions = {};
      }
    };
    var BitmapFont = 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 onLoad() {
        var spriteFrame = this.spriteFrame;
        !this._fontDefDictionary && spriteFrame && (this._fontDefDictionary = new FontAtlas(spriteFrame._texture));
        var fntConfig = this._fntConfig;
        if (!fntConfig) return;
        var fontDict = fntConfig.fontDefDictionary;
        for (var fontDef in fontDict) {
          var letter = new FontLetterDefinition();
          var rect = fontDict[fontDef].rect;
          letter.offsetX = fontDict[fontDef].xOffset;
          letter.offsetY = fontDict[fontDef].yOffset;
          letter.w = rect.width;
          letter.h = rect.height;
          letter.u = rect.x;
          letter.v = rect.y;
          letter.textureID = 0;
          letter.valid = true;
          letter.xAdvance = fontDict[fontDef].xAdvance;
          this._fontDefDictionary.addLetterDefinitions(fontDef, letter);
        }
      }
    });
    cc.BitmapFont = BitmapFont;
    cc.BitmapFont.FontLetterDefinition = FontLetterDefinition;
    cc.BitmapFont.FontAtlas = FontAtlas;
    module.exports = BitmapFont;
  }), {} ],
  62: [ (function(require, module, exports) {
    "use strict";
    var BufferAsset = cc.Class({
      name: "cc.BufferAsset",
      extends: cc.Asset,
      ctor: function ctor() {
        this._buffer = null;
      },
      properties: {
        _nativeAsset: {
          get: function get() {
            return this._buffer;
          },
          set: function set(bin) {
            this._buffer = bin.buffer || bin;
          },
          override: true
        },
        buffer: function buffer() {
          return this._buffer;
        }
      }
    });
    cc.BufferAsset = module.exports = BufferAsset;
  }), {} ],
  63: [ (function(require, module, exports) {
    "use strict";
    var Font = cc.Class({
      name: "cc.Font",
      extends: cc.Asset
    });
    cc.Font = module.exports = Font;
  }), {} ],
  64: [ (function(require, module, exports) {
    "use strict";
    var JsonAsset = cc.Class({
      name: "cc.JsonAsset",
      extends: cc.Asset,
      properties: {
        json: null
      }
    });
    module.exports = cc.JsonAsset = JsonAsset;
  }), {} ],
  65: [ (function(require, module, exports) {
    "use strict";
    var LabelAtlas = cc.Class({
      name: "cc.LabelAtlas",
      extends: cc.BitmapFont,
      onLoad: function onLoad() {
        if (!this.spriteFrame) {
          cc.warnID(9100, this.name);
          return;
        }
        if (!this._fntConfig) {
          cc.warnID(9101, this.name);
          return;
        }
        this._super();
      }
    });
    cc.LabelAtlas = LabelAtlas;
    module.exports = LabelAtlas;
  }), {} ],
  66: [ (function(require, module, exports) {
    "use strict";
    var OptimizationPolicy = cc.Enum({
      AUTO: 0,
      SINGLE_INSTANCE: 1,
      MULTI_INSTANCE: 2
    });
    var Prefab = cc.Class({
      name: "cc.Prefab",
      extends: cc.Asset,
      ctor: function ctor() {
        this._createFunction = null;
        this._instantiatedTimes = 0;
      },
      properties: {
        data: null,
        optimizationPolicy: OptimizationPolicy.AUTO,
        asyncLoadAssets: false,
        readonly: {
          default: false,
          editorOnly: true
        }
      },
      statics: {
        OptimizationPolicy: OptimizationPolicy,
        OptimizationPolicyThreshold: 3
      },
      createNode: false,
      compileCreateFunction: function compileCreateFunction() {
        var jit = require("../platform/instantiate-jit");
        this._createFunction = jit.compile(this.data);
      },
      _doInstantiate: function _doInstantiate(rootToRedirect) {
        this.data._prefab ? this.data._prefab._synced = true : cc.warnID(3700);
        this._createFunction || this.compileCreateFunction();
        return this._createFunction(rootToRedirect);
      },
      _instantiate: function _instantiate() {
        var node, useJit = false;
        false;
        if (useJit) {
          node = this._doInstantiate();
          this.data._instantiate(node);
        } else {
          this.data._prefab._synced = true;
          node = this.data._instantiate();
        }
        ++this._instantiatedTimes;
        var PrefabUtils;
        false, false;
        return node;
      },
      destroy: function destroy() {
        this.data && this.data.destroy();
        this._super();
      }
    });
    cc.Prefab = module.exports = Prefab;
    cc.js.obsolete(cc, "cc._Prefab", "Prefab");
  }), {
    "../platform/instantiate-jit": 156
  } ],
  67: [ (function(require, module, exports) {
    "use strict";
    var _gfx = _interopRequireDefault(require("../../renderer/gfx"));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    var renderer = require("../renderer");
    var Texture2D = require("./CCTexture2D");
    var DepthStencilFormat = cc.Enum({
      RB_FMT_D24S8: _gfx["default"].RB_FMT_D24S8,
      RB_FMT_S8: _gfx["default"].RB_FMT_S8,
      RB_FMT_D16: _gfx["default"].RB_FMT_D16
    });
    var RenderTexture = cc.Class({
      name: "cc.RenderTexture",
      extends: Texture2D,
      statics: {
        DepthStencilFormat: DepthStencilFormat
      },
      ctor: function ctor() {
        this._framebuffer = null;
      },
      initWithSize: function initWithSize(width, height, depthStencilFormat) {
        this.width = Math.floor(width || cc.visibleRect.width);
        this.height = Math.floor(height || cc.visibleRect.height);
        this._resetUnderlyingMipmaps();
        var opts = {
          colors: [ this._texture ]
        };
        this._depthStencilBuffer && this._depthStencilBuffer.destroy();
        var depthStencilBuffer;
        if (depthStencilFormat) {
          depthStencilBuffer = new _gfx["default"].RenderBuffer(renderer.device, depthStencilFormat, width, height);
          depthStencilFormat === _gfx["default"].RB_FMT_D24S8 ? opts.depthStencil = depthStencilBuffer : depthStencilFormat === _gfx["default"].RB_FMT_S8 ? opts.stencil = depthStencilBuffer : depthStencilFormat === _gfx["default"].RB_FMT_D16 && (opts.depth = depthStencilBuffer);
        }
        this._depthStencilBuffer = depthStencilBuffer;
        this._framebuffer && this._framebuffer.destroy();
        this._framebuffer = new _gfx["default"].FrameBuffer(renderer.device, width, height, opts);
        this._packable = false;
        this.loaded = true;
        this.emit("load");
      },
      updateSize: function updateSize(width, height) {
        this.width = Math.floor(width || cc.visibleRect.width);
        this.height = Math.floor(height || cc.visibleRect.height);
        this._resetUnderlyingMipmaps();
        var rbo = this._depthStencilBuffer;
        rbo && rbo.update(this.width, this.height);
        this._framebuffer._width = width;
        this._framebuffer._height = height;
      },
      drawTextureAt: function drawTextureAt(texture, x, y) {
        if (!texture._image || 0 === texture._image.width) return;
        this._texture.updateSubImage({
          x: x,
          y: y,
          image: texture._image,
          width: texture.width,
          height: texture.height,
          level: 0,
          flipY: false,
          premultiplyAlpha: texture._premultiplyAlpha
        });
      },
      readPixels: function readPixels(data, x, y, w, h) {
        if (!this._framebuffer || !this._texture) return data;
        x = x || 0;
        y = y || 0;
        var width = w || this.width;
        var height = h || this.height;
        data = data || new Uint8Array(width * height * 4);
        var gl = cc.game._renderContext;
        var oldFBO = gl.getParameter(gl.FRAMEBUFFER_BINDING);
        gl.bindFramebuffer(gl.FRAMEBUFFER, this._framebuffer.getHandle());
        gl.readPixels(x, y, width, height, gl.RGBA, gl.UNSIGNED_BYTE, data);
        gl.bindFramebuffer(gl.FRAMEBUFFER, oldFBO);
        return data;
      },
      destroy: function destroy() {
        this._super();
        if (this._framebuffer) {
          this._framebuffer.destroy();
          this._framebuffer = null;
        }
      }
    });
    cc.RenderTexture = module.exports = RenderTexture;
  }), {
    "../../renderer/gfx": 251,
    "../renderer": 168,
    "./CCTexture2D": 74
  } ],
  68: [ (function(require, module, exports) {
    "use strict";
    var Scene = cc.Class({
      name: "cc.SceneAsset",
      extends: cc.Asset,
      properties: {
        scene: null,
        asyncLoadAssets: void 0
      }
    });
    cc.SceneAsset = Scene;
    module.exports = Scene;
  }), {} ],
  69: [ (function(require, module, exports) {
    "use strict";
    var Script = cc.Class({
      name: "cc.Script",
      extends: cc.Asset
    });
    cc._Script = Script;
    var JavaScript = cc.Class({
      name: "cc.JavaScript",
      extends: Script
    });
    cc._JavaScript = JavaScript;
    var TypeScript = cc.Class({
      name: "cc.TypeScript",
      extends: Script
    });
    cc._TypeScript = TypeScript;
  }), {} ],
  70: [ (function(require, module, exports) {
    "use strict";
    var SpriteAtlas = cc.Class({
      name: "cc.SpriteAtlas",
      extends: cc.Asset,
      properties: {
        _spriteFrames: {
          default: {}
        }
      },
      getTexture: function getTexture() {
        var keys = Object.keys(this._spriteFrames);
        if (keys.length > 0) {
          var spriteFrame = this._spriteFrames[keys[0]];
          return spriteFrame ? spriteFrame.getTexture() : null;
        }
        return null;
      },
      getSpriteFrame: function getSpriteFrame(key) {
        var sf = this._spriteFrames[key];
        if (!sf) return null;
        sf.name || (sf.name = key);
        return sf;
      },
      getSpriteFrames: function getSpriteFrames() {
        var frames = [];
        var spriteFrames = this._spriteFrames;
        for (var key in spriteFrames) frames.push(this.getSpriteFrame(key));
        return frames;
      }
    });
    cc.SpriteAtlas = SpriteAtlas;
    module.exports = SpriteAtlas;
  }), {} ],
  71: [ (function(require, module, exports) {
    "use strict";
    var EventTarget = require("../event/event-target");
    var textureUtil = require("../utils/texture-util");
    var INSET_LEFT = 0;
    var INSET_TOP = 1;
    var INSET_RIGHT = 2;
    var INSET_BOTTOM = 3;
    var temp_uvs = [ {
      u: 0,
      v: 0
    }, {
      u: 0,
      v: 0
    }, {
      u: 0,
      v: 0
    }, {
      u: 0,
      v: 0
    } ];
    var SpriteFrame = cc.Class({
      name: "cc.SpriteFrame",
      extends: require("../assets/CCAsset"),
      mixins: [ EventTarget ],
      properties: {
        _textureSetter: {
          set: function set(texture) {
            if (texture) {
              false;
              this._texture !== texture && this._refreshTexture(texture);
            }
          }
        },
        insetTop: {
          get: function get() {
            return this._capInsets[INSET_TOP];
          },
          set: function set(value) {
            this._capInsets[INSET_TOP] = value;
            this._texture && this._calculateSlicedUV();
          }
        },
        insetBottom: {
          get: function get() {
            return this._capInsets[INSET_BOTTOM];
          },
          set: function set(value) {
            this._capInsets[INSET_BOTTOM] = value;
            this._texture && this._calculateSlicedUV();
          }
        },
        insetLeft: {
          get: function get() {
            return this._capInsets[INSET_LEFT];
          },
          set: function set(value) {
            this._capInsets[INSET_LEFT] = value;
            this._texture && this._calculateSlicedUV();
          }
        },
        insetRight: {
          get: function get() {
            return this._capInsets[INSET_RIGHT];
          },
          set: function set(value) {
            this._capInsets[INSET_RIGHT] = value;
            this._texture && this._calculateSlicedUV();
          }
        }
      },
      statics: {
        _parseDepsFromJson: function _parseDepsFromJson(json) {
          return [ cc.assetManager.utils.decodeUuid(json.content.texture) ];
        }
      },
      ctor: function ctor() {
        EventTarget.call(this);
        var filename = arguments[0];
        var rect = arguments[1];
        var rotated = arguments[2];
        var offset = arguments[3];
        var originalSize = arguments[4];
        this._rect = null;
        this.uv = [];
        this._texture = null;
        this._original = null;
        this._offset = null;
        this._originalSize = null;
        this._rotated = false;
        this._flipX = false;
        this._flipY = false;
        this.vertices = null;
        this._capInsets = [ 0, 0, 0, 0 ];
        this.uvSliced = [];
        false;
        void 0 !== filename && this.setTexture(filename, rect, rotated, offset, originalSize);
      },
      textureLoaded: function textureLoaded() {
        return this._texture && this._texture.loaded;
      },
      onTextureLoaded: function onTextureLoaded(callback, target) {
        if (!this.textureLoaded()) {
          this.once("load", callback, target);
          this.ensureLoadTexture();
          return false;
        }
        callback.call(target);
        return true;
      },
      isRotated: function isRotated() {
        return this._rotated;
      },
      setRotated: function setRotated(bRotated) {
        this._rotated = bRotated;
        this._texture && this._calculateUV();
      },
      isFlipX: function isFlipX() {
        return this._flipX;
      },
      isFlipY: function isFlipY() {
        return this._flipY;
      },
      setFlipX: function setFlipX(flipX) {
        this._flipX = flipX;
        this._texture && this._calculateUV();
      },
      setFlipY: function setFlipY(flipY) {
        this._flipY = flipY;
        this._texture && this._calculateUV();
      },
      getRect: function getRect() {
        return cc.rect(this._rect);
      },
      setRect: function setRect(rect) {
        this._rect = rect;
        this._texture && this._calculateUV();
      },
      getOriginalSize: function getOriginalSize() {
        return cc.size(this._originalSize);
      },
      setOriginalSize: function setOriginalSize(size) {
        if (this._originalSize) {
          this._originalSize.width = size.width;
          this._originalSize.height = size.height;
        } else this._originalSize = cc.size(size);
      },
      getTexture: function getTexture() {
        return this._texture;
      },
      _textureLoadedCallback: function _textureLoadedCallback() {
        var self = this;
        var texture = this._texture;
        if (!texture) return;
        var w = texture.width, h = texture.height;
        self._rect ? self._checkRect(self._texture) : self._rect = cc.rect(0, 0, w, h);
        self._originalSize || self.setOriginalSize(cc.size(w, h));
        self._offset || self.setOffset(cc.v2(0, 0));
        self._calculateUV();
        self.emit("load");
      },
      _refreshTexture: function _refreshTexture(texture) {
        this._texture = texture;
        texture.loaded ? this._textureLoadedCallback() : texture.once("load", this._textureLoadedCallback, this);
      },
      getOffset: function getOffset() {
        return cc.v2(this._offset);
      },
      setOffset: function setOffset(offsets) {
        this._offset = cc.v2(offsets);
      },
      clone: function clone() {
        return new SpriteFrame(this._texture, this._rect, this._rotated, this._offset, this._originalSize);
      },
      setTexture: function setTexture(texture, rect, rotated, offset, originalSize) {
        this._rect = rect || null;
        offset ? this.setOffset(offset) : this._offset = null;
        originalSize ? this.setOriginalSize(originalSize) : this._originalSize = null;
        this._rotated = rotated || false;
        if ("string" === typeof texture) {
          cc.errorID(3401);
          return;
        }
        texture instanceof cc.Texture2D && this._texture !== texture && this._refreshTexture(texture);
        return true;
      },
      ensureLoadTexture: function ensureLoadTexture() {
        if (this._texture && !this._texture.loaded) {
          this._refreshTexture(this._texture);
          cc.assetManager.postLoadNative(this._texture);
        }
      },
      _checkRect: function _checkRect(texture) {
        var rect = this._rect;
        var maxX = rect.x, maxY = rect.y;
        if (this._rotated) {
          maxX += rect.height;
          maxY += rect.width;
        } else {
          maxX += rect.width;
          maxY += rect.height;
        }
        maxX > texture.width && cc.errorID(3300, texture.nativeUrl + "/" + this.name, maxX, texture.width);
        maxY > texture.height && cc.errorID(3400, texture.nativeUrl + "/" + this.name, maxY, texture.height);
      },
      _flipXY: function _flipXY(uvs) {
        if (this._flipX) {
          var tempVal = uvs[0];
          uvs[0] = uvs[1];
          uvs[1] = tempVal;
          tempVal = uvs[2];
          uvs[2] = uvs[3];
          uvs[3] = tempVal;
        }
        if (this._flipY) {
          var _tempVal = uvs[0];
          uvs[0] = uvs[2];
          uvs[2] = _tempVal;
          _tempVal = uvs[1];
          uvs[1] = uvs[3];
          uvs[3] = _tempVal;
        }
      },
      _calculateSlicedUV: function _calculateSlicedUV() {
        var rect = this._rect;
        var atlasWidth = this._texture.width;
        var atlasHeight = this._texture.height;
        var leftWidth = this._capInsets[INSET_LEFT];
        var rightWidth = this._capInsets[INSET_RIGHT];
        var centerWidth = rect.width - leftWidth - rightWidth;
        var topHeight = this._capInsets[INSET_TOP];
        var bottomHeight = this._capInsets[INSET_BOTTOM];
        var centerHeight = rect.height - topHeight - bottomHeight;
        var uvSliced = this.uvSliced;
        uvSliced.length = 0;
        if (this._rotated) {
          temp_uvs[0].u = rect.x / atlasWidth;
          temp_uvs[1].u = (rect.x + bottomHeight) / atlasWidth;
          temp_uvs[2].u = (rect.x + bottomHeight + centerHeight) / atlasWidth;
          temp_uvs[3].u = (rect.x + rect.height) / atlasWidth;
          temp_uvs[3].v = rect.y / atlasHeight;
          temp_uvs[2].v = (rect.y + leftWidth) / atlasHeight;
          temp_uvs[1].v = (rect.y + leftWidth + centerWidth) / atlasHeight;
          temp_uvs[0].v = (rect.y + rect.width) / atlasHeight;
          this._flipXY(temp_uvs);
          for (var row = 0; row < 4; ++row) {
            var rowD = temp_uvs[row];
            for (var col = 0; col < 4; ++col) {
              var colD = temp_uvs[3 - col];
              uvSliced.push({
                u: rowD.u,
                v: colD.v
              });
            }
          }
        } else {
          temp_uvs[0].u = rect.x / atlasWidth;
          temp_uvs[1].u = (rect.x + leftWidth) / atlasWidth;
          temp_uvs[2].u = (rect.x + leftWidth + centerWidth) / atlasWidth;
          temp_uvs[3].u = (rect.x + rect.width) / atlasWidth;
          temp_uvs[3].v = rect.y / atlasHeight;
          temp_uvs[2].v = (rect.y + topHeight) / atlasHeight;
          temp_uvs[1].v = (rect.y + topHeight + centerHeight) / atlasHeight;
          temp_uvs[0].v = (rect.y + rect.height) / atlasHeight;
          this._flipXY(temp_uvs);
          for (var _row = 0; _row < 4; ++_row) {
            var _rowD = temp_uvs[_row];
            for (var _col = 0; _col < 4; ++_col) {
              var _colD = temp_uvs[_col];
              uvSliced.push({
                u: _colD.u,
                v: _rowD.v
              });
            }
          }
        }
      },
      _setDynamicAtlasFrame: function _setDynamicAtlasFrame(frame) {
        if (!frame) return;
        this._original = {
          _texture: this._texture,
          _x: this._rect.x,
          _y: this._rect.y
        };
        this._texture = frame.texture;
        this._rect.x = frame.x;
        this._rect.y = frame.y;
        this._calculateUV();
      },
      _resetDynamicAtlasFrame: function _resetDynamicAtlasFrame() {
        if (!this._original) return;
        this._rect.x = this._original._x;
        this._rect.y = this._original._y;
        this._texture = this._original._texture;
        this._original = null;
        this._calculateUV();
      },
      _calculateUV: function _calculateUV() {
        var rect = this._rect, texture = this._texture, uv = this.uv, texw = texture.width, texh = texture.height;
        if (this._rotated) {
          var l = 0 === texw ? 0 : rect.x / texw;
          var r = 0 === texw ? 0 : (rect.x + rect.height) / texw;
          var b = 0 === texh ? 0 : (rect.y + rect.width) / texh;
          var t = 0 === texh ? 0 : rect.y / texh;
          uv[0] = l;
          uv[1] = t;
          uv[2] = l;
          uv[3] = b;
          uv[4] = r;
          uv[5] = t;
          uv[6] = r;
          uv[7] = b;
        } else {
          var _l = 0 === texw ? 0 : rect.x / texw;
          var _r = 0 === texw ? 0 : (rect.x + rect.width) / texw;
          var _b = 0 === texh ? 0 : (rect.y + rect.height) / texh;
          var _t = 0 === texh ? 0 : rect.y / texh;
          uv[0] = _l;
          uv[1] = _b;
          uv[2] = _r;
          uv[3] = _b;
          uv[4] = _l;
          uv[5] = _t;
          uv[6] = _r;
          uv[7] = _t;
        }
        if (this._flipX) {
          var tempVal = uv[0];
          uv[0] = uv[2];
          uv[2] = tempVal;
          tempVal = uv[1];
          uv[1] = uv[3];
          uv[3] = tempVal;
          tempVal = uv[4];
          uv[4] = uv[6];
          uv[6] = tempVal;
          tempVal = uv[5];
          uv[5] = uv[7];
          uv[7] = tempVal;
        }
        if (this._flipY) {
          var _tempVal2 = uv[0];
          uv[0] = uv[4];
          uv[4] = _tempVal2;
          _tempVal2 = uv[1];
          uv[1] = uv[5];
          uv[5] = _tempVal2;
          _tempVal2 = uv[2];
          uv[2] = uv[6];
          uv[6] = _tempVal2;
          _tempVal2 = uv[3];
          uv[3] = uv[7];
          uv[7] = _tempVal2;
        }
        var vertices = this.vertices;
        if (vertices) {
          vertices.nu.length = 0;
          vertices.nv.length = 0;
          for (var i = 0; i < vertices.u.length; i++) {
            vertices.nu[i] = vertices.u[i] / texw;
            vertices.nv[i] = vertices.v[i] / texh;
          }
        }
        this._calculateSlicedUV();
      },
      _serialize: false,
      _deserialize: function _deserialize(data, handle) {
        var rect = data.rect;
        rect && (this._rect = new cc.Rect(rect[0], rect[1], rect[2], rect[3]));
        data.offset && this.setOffset(new cc.Vec2(data.offset[0], data.offset[1]));
        data.originalSize && this.setOriginalSize(new cc.Size(data.originalSize[0], data.originalSize[1]));
        this._rotated = 1 === data.rotated;
        this._name = data.name;
        var capInsets = data.capInsets;
        if (capInsets) {
          this._capInsets[INSET_LEFT] = capInsets[INSET_LEFT];
          this._capInsets[INSET_TOP] = capInsets[INSET_TOP];
          this._capInsets[INSET_RIGHT] = capInsets[INSET_RIGHT];
          this._capInsets[INSET_BOTTOM] = capInsets[INSET_BOTTOM];
        }
        false;
        this.vertices = data.vertices;
        if (this.vertices) {
          this.vertices.nu = [];
          this.vertices.nv = [];
        }
        var textureUuid = data.texture;
        textureUuid && handle.result.push(this, "_textureSetter", textureUuid);
      }
    });
    var proto = SpriteFrame.prototype;
    proto.copyWithZone = proto.clone;
    proto.copy = proto.clone;
    proto.initWithTexture = proto.setTexture;
    cc.SpriteFrame = SpriteFrame;
    module.exports = SpriteFrame;
  }), {
    "../assets/CCAsset": 59,
    "../event/event-target": 121,
    "../utils/texture-util": 217
  } ],
  72: [ (function(require, module, exports) {
    "use strict";
    var Font = require("./CCFont");
    var TTFFont = cc.Class({
      name: "cc.TTFFont",
      extends: Font,
      properties: {
        _fontFamily: null,
        _nativeAsset: {
          type: cc.String,
          get: function get() {
            return this._fontFamily;
          },
          set: function set(value) {
            this._fontFamily = value || "Arial";
          },
          override: true
        },
        _nativeDep: {
          get: function get() {
            return {
              uuid: this._uuid,
              __nativeName__: this._native,
              ext: cc.path.extname(this._native),
              __isNative__: true
            };
          },
          override: true
        }
      },
      statics: {
        _parseDepsFromJson: function _parseDepsFromJson() {
          return [];
        },
        _parseNativeDepFromJson: function _parseNativeDepFromJson(json) {
          return {
            __nativeName__: json._native,
            ext: cc.path.extname(json._native),
            __isNative__: true
          };
        }
      }
    });
    cc.TTFFont = module.exports = TTFFont;
  }), {
    "./CCFont": 63
  } ],
  73: [ (function(require, module, exports) {
    "use strict";
    var TextAsset = cc.Class({
      name: "cc.TextAsset",
      extends: cc.Asset,
      properties: {
        text: ""
      },
      toString: function toString() {
        return this.text;
      }
    });
    module.exports = cc.TextAsset = TextAsset;
  }), {} ],
  74: [ (function(require, module, exports) {
    "use strict";
    var _gfx = _interopRequireDefault(require("../../renderer/gfx"));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    var EventTarget = require("../event/event-target");
    var renderer = require("../renderer");
    require("../platform/CCClass");
    var GL_NEAREST = 9728;
    var GL_LINEAR = 9729;
    var GL_REPEAT = 10497;
    var GL_CLAMP_TO_EDGE = 33071;
    var GL_MIRRORED_REPEAT = 33648;
    var GL_RGBA = 6408;
    var CHAR_CODE_0 = 48;
    var CHAR_CODE_1 = 49;
    var idGenerater = new (require("../platform/id-generater"))("Tex");
    var CUSTOM_PIXEL_FORMAT = 1024;
    var PixelFormat = cc.Enum({
      RGB565: _gfx["default"].TEXTURE_FMT_R5_G6_B5,
      RGB5A1: _gfx["default"].TEXTURE_FMT_R5_G5_B5_A1,
      RGBA4444: _gfx["default"].TEXTURE_FMT_R4_G4_B4_A4,
      RGB888: _gfx["default"].TEXTURE_FMT_RGB8,
      RGBA8888: _gfx["default"].TEXTURE_FMT_RGBA8,
      RGBA32F: _gfx["default"].TEXTURE_FMT_RGBA32F,
      A8: _gfx["default"].TEXTURE_FMT_A8,
      I8: _gfx["default"].TEXTURE_FMT_L8,
      AI8: _gfx["default"].TEXTURE_FMT_L8_A8,
      RGB_PVRTC_2BPPV1: _gfx["default"].TEXTURE_FMT_RGB_PVRTC_2BPPV1,
      RGBA_PVRTC_2BPPV1: _gfx["default"].TEXTURE_FMT_RGBA_PVRTC_2BPPV1,
      RGB_A_PVRTC_2BPPV1: CUSTOM_PIXEL_FORMAT++,
      RGB_PVRTC_4BPPV1: _gfx["default"].TEXTURE_FMT_RGB_PVRTC_4BPPV1,
      RGBA_PVRTC_4BPPV1: _gfx["default"].TEXTURE_FMT_RGBA_PVRTC_4BPPV1,
      RGB_A_PVRTC_4BPPV1: CUSTOM_PIXEL_FORMAT++,
      RGB_ETC1: _gfx["default"].TEXTURE_FMT_RGB_ETC1,
      RGBA_ETC1: CUSTOM_PIXEL_FORMAT++,
      RGB_ETC2: _gfx["default"].TEXTURE_FMT_RGB_ETC2,
      RGBA_ETC2: _gfx["default"].TEXTURE_FMT_RGBA_ETC2
    });
    var WrapMode = cc.Enum({
      REPEAT: GL_REPEAT,
      CLAMP_TO_EDGE: GL_CLAMP_TO_EDGE,
      MIRRORED_REPEAT: GL_MIRRORED_REPEAT
    });
    var Filter = cc.Enum({
      LINEAR: GL_LINEAR,
      NEAREST: GL_NEAREST
    });
    var FilterIndex = {
      9728: 0,
      9729: 1
    };
    var _images = [];
    var _sharedOpts = {
      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 _getSharedOptions() {
      for (var key in _sharedOpts) _sharedOpts[key] = void 0;
      _images.length = 0;
      _sharedOpts.images = _images;
      return _sharedOpts;
    }
    var Texture2D = cc.Class({
      name: "cc.Texture2D",
      extends: require("../assets/CCAsset"),
      mixins: [ EventTarget ],
      properties: {
        _nativeAsset: {
          get: function get() {
            return this._image;
          },
          set: function set(data) {
            data._data ? this.initWithData(data._data, this._format, data.width, data.height) : this.initWithElement(data);
          },
          override: true
        },
        _format: PixelFormat.RGBA8888,
        _premultiplyAlpha: false,
        _flipY: false,
        _minFilter: Filter.LINEAR,
        _magFilter: Filter.LINEAR,
        _mipFilter: Filter.LINEAR,
        _wrapS: WrapMode.CLAMP_TO_EDGE,
        _wrapT: WrapMode.CLAMP_TO_EDGE,
        _isAlphaAtlas: false,
        _genMipmaps: false,
        genMipmaps: {
          get: function get() {
            return this._genMipmaps;
          },
          set: function set(genMipmaps) {
            if (this._genMipmaps !== genMipmaps) {
              var opts = _getSharedOptions();
              opts.genMipmaps = genMipmaps;
              this.update(opts);
            }
          }
        },
        _packable: true,
        packable: {
          get: function get() {
            return this._packable;
          },
          set: function set(val) {
            this._packable = val;
          }
        },
        _nativeDep: {
          get: function get() {
            return {
              __isNative__: true,
              uuid: this._uuid,
              ext: this._native,
              __flipY__: this._flipY,
              __premultiplyAlpha__: this._premultiplyAlpha
            };
          },
          override: true
        }
      },
      statics: {
        PixelFormat: PixelFormat,
        WrapMode: WrapMode,
        Filter: Filter,
        _FilterIndex: FilterIndex,
        extnames: [ ".png", ".jpg", ".jpeg", ".bmp", ".webp", ".pvr", ".pkm" ],
        _parseNativeDepFromJson: function _parseNativeDepFromJson(json) {
          var data = json.content;
          var fields = data.split(",");
          var extIdStr = fields[0];
          var ext = "";
          if (extIdStr) {
            var result = Texture2D._parseExt(extIdStr, PixelFormat.RGBA8888);
            ext = result.bestExt || result.defaultExt;
          }
          return {
            __isNative__: true,
            ext: ext,
            __flipY__: false,
            __premultiplyAlpha__: fields[5] && fields[5].charCodeAt(0) === CHAR_CODE_1
          };
        },
        _parseExt: function _parseExt(extIdStr, defaultFormat) {
          var device = cc.renderer.device;
          var extIds = extIdStr.split("_");
          var defaultExt = "";
          var bestExt = "";
          var bestIndex = 999;
          var bestFormat = defaultFormat;
          var SupportTextureFormats = cc.macro.SUPPORT_TEXTURE_FORMATS;
          for (var i = 0; i < extIds.length; i++) {
            var extFormat = extIds[i].split("@");
            var tmpExt = extFormat[0];
            tmpExt = Texture2D.extnames[tmpExt.charCodeAt(0) - CHAR_CODE_0] || tmpExt;
            var index = SupportTextureFormats.indexOf(tmpExt);
            if (-1 !== index && index < bestIndex) {
              var tmpFormat = extFormat[1] ? parseInt(extFormat[1]) : defaultFormat;
              if (".pvr" === tmpExt && !device.ext("WEBGL_compressed_texture_pvrtc")) continue;
              if (!(tmpFormat !== PixelFormat.RGB_ETC1 && tmpFormat !== PixelFormat.RGBA_ETC1 || device.ext("WEBGL_compressed_texture_etc1"))) continue;
              if (!(tmpFormat !== PixelFormat.RGB_ETC2 && tmpFormat !== PixelFormat.RGBA_ETC2 || device.ext("WEBGL_compressed_texture_etc"))) continue;
              if (".webp" === tmpExt && !cc.sys.capabilities.webp) continue;
              bestIndex = index;
              bestExt = tmpExt;
              bestFormat = tmpFormat;
            } else defaultExt || (defaultExt = tmpExt);
          }
          return {
            bestExt: bestExt,
            bestFormat: bestFormat,
            defaultExt: defaultExt
          };
        },
        _parseDepsFromJson: function _parseDepsFromJson() {
          return [];
        }
      },
      ctor: function ctor() {
        this._id = idGenerater.getNewId();
        this.loaded = false;
        this.width = 0;
        this.height = 0;
        this._hashDirty = true;
        this._hash = 0;
        this._texture = null;
        false;
      },
      getImpl: function getImpl() {
        return this._texture;
      },
      getId: function getId() {
        return this._id;
      },
      toString: function toString() {
        return this.nativeUrl || "";
      },
      update: function update(options) {
        if (options) {
          var updateImg = false;
          void 0 !== options.width && (this.width = options.width);
          void 0 !== options.height && (this.height = options.height);
          if (void 0 !== options.minFilter) {
            this._minFilter = options.minFilter;
            options.minFilter = FilterIndex[options.minFilter];
          }
          if (void 0 !== options.magFilter) {
            this._magFilter = options.magFilter;
            options.magFilter = FilterIndex[options.magFilter];
          }
          if (void 0 !== options.mipFilter) {
            this._mipFilter = options.mipFilter;
            options.mipFilter = FilterIndex[options.mipFilter];
          }
          void 0 !== options.wrapS && (this._wrapS = options.wrapS);
          void 0 !== options.wrapT && (this._wrapT = options.wrapT);
          void 0 !== options.format && (this._format = options.format);
          if (void 0 !== options.flipY) {
            this._flipY = options.flipY;
            updateImg = true;
          }
          if (void 0 !== options.premultiplyAlpha) {
            this._premultiplyAlpha = options.premultiplyAlpha;
            updateImg = true;
          }
          void 0 !== options.genMipmaps && (this._genMipmaps = options.genMipmaps);
          cc.sys.capabilities.imageBitmap && this._image instanceof ImageBitmap ? this._checkImageBitmap(this._upload.bind(this, options, updateImg)) : this._upload(options, updateImg);
        }
      },
      _upload: function _upload(options, updateImg) {
        updateImg && this._image && (options.image = this._image);
        if (options.images && options.images.length > 0) this._image = options.images[0]; else if (void 0 !== options.image) {
          this._image = options.image;
          if (!options.images) {
            _images.length = 0;
            options.images = _images;
          }
          options.images.push(options.image);
        }
        this._texture && this._texture.update(options);
        this._hashDirty = true;
      },
      initWithElement: function initWithElement(element) {
        if (!element) return;
        this._image = element;
        if (element.complete || element instanceof HTMLCanvasElement) this.handleLoadedTexture(); else if (cc.sys.capabilities.imageBitmap && element instanceof ImageBitmap) this._checkImageBitmap(this.handleLoadedTexture.bind(this)); else {
          var self = this;
          element.addEventListener("load", (function() {
            self.handleLoadedTexture();
          }));
          element.addEventListener("error", (function(err) {
            cc.warnID(3119, err.message);
          }));
        }
      },
      initWithData: function initWithData(data, pixelFormat, pixelsWidth, pixelsHeight) {
        var opts = _getSharedOptions();
        opts.image = data;
        opts.images = [ opts.image ];
        opts.genMipmaps = this._genMipmaps;
        opts.premultiplyAlpha = this._premultiplyAlpha;
        opts.flipY = this._flipY;
        opts.minFilter = FilterIndex[this._minFilter];
        opts.magFilter = FilterIndex[this._magFilter];
        opts.wrapS = this._wrapS;
        opts.wrapT = this._wrapT;
        opts.format = this._getGFXPixelFormat(pixelFormat);
        opts.width = pixelsWidth;
        opts.height = pixelsHeight;
        this._texture ? this._texture.update(opts) : this._texture = new renderer.Texture2D(renderer.device, opts);
        this.width = pixelsWidth;
        this.height = pixelsHeight;
        this._updateFormat();
        this._checkPackable();
        this.loaded = true;
        this.emit("load");
        return true;
      },
      getHtmlElementObj: function getHtmlElementObj() {
        return this._image;
      },
      destroy: function destroy() {
        cc.sys.capabilities.imageBitmap && this._image instanceof ImageBitmap && this._image.close && this._image.close();
        this._packable && cc.dynamicAtlasManager && cc.dynamicAtlasManager.deleteAtlasTexture(this);
        this._image = null;
        this._texture && this._texture.destroy();
        this._super();
      },
      getPixelFormat: function getPixelFormat() {
        return this._format;
      },
      hasPremultipliedAlpha: function hasPremultipliedAlpha() {
        return this._premultiplyAlpha || false;
      },
      isAlphaAtlas: function isAlphaAtlas() {
        return this._isAlphaAtlas;
      },
      handleLoadedTexture: function handleLoadedTexture() {
        if (!this._image || !this._image.width || !this._image.height) return;
        this.width = this._image.width;
        this.height = this._image.height;
        var opts = _getSharedOptions();
        opts.image = this._image;
        opts.images = [ opts.image ];
        opts.width = this.width;
        opts.height = this.height;
        opts.genMipmaps = this._genMipmaps;
        opts.format = this._getGFXPixelFormat(this._format);
        opts.premultiplyAlpha = this._premultiplyAlpha;
        opts.flipY = this._flipY;
        opts.minFilter = FilterIndex[this._minFilter];
        opts.magFilter = FilterIndex[this._magFilter];
        opts.wrapS = this._wrapS;
        opts.wrapT = this._wrapT;
        this._texture ? this._texture.update(opts) : this._texture = new renderer.Texture2D(renderer.device, opts);
        this._updateFormat();
        this._checkPackable();
        this.loaded = true;
        this.emit("load");
        cc.macro.CLEANUP_IMAGE_CACHE && (this._image instanceof HTMLImageElement ? this._clearImage() : cc.sys.capabilities.imageBitmap && this._image instanceof ImageBitmap && this._image.close && this._image.close());
      },
      description: function description() {
        return "<cc.Texture2D | Name = " + this.nativeUrl + " | Dimensions = " + this.width + " x " + this.height + ">";
      },
      releaseTexture: function releaseTexture() {
        this._image = null;
        this._texture && this._texture.destroy();
      },
      setWrapMode: function setWrapMode(wrapS, wrapT) {
        if (this._wrapS !== wrapS || this._wrapT !== wrapT) {
          var opts = _getSharedOptions();
          opts.wrapS = wrapS;
          opts.wrapT = wrapT;
          this.update(opts);
        }
      },
      setFilters: function setFilters(minFilter, magFilter) {
        if (this._minFilter !== minFilter || this._magFilter !== magFilter) {
          var opts = _getSharedOptions();
          opts.minFilter = minFilter;
          opts.magFilter = magFilter;
          this.update(opts);
        }
      },
      setFlipY: function setFlipY(flipY) {
        if (this._flipY !== flipY) {
          var opts = _getSharedOptions();
          opts.flipY = flipY;
          opts.premultiplyAlpha = this._premultiplyAlpha;
          this.update(opts);
        }
      },
      setPremultiplyAlpha: function setPremultiplyAlpha(premultiply) {
        if (this._premultiplyAlpha !== premultiply) {
          var opts = _getSharedOptions();
          opts.flipY = this._flipY;
          opts.premultiplyAlpha = premultiply;
          this.update(opts);
        }
      },
      _updateFormat: function _updateFormat() {
        this._isAlphaAtlas = this._format === PixelFormat.RGBA_ETC1 || this._format === PixelFormat.RGB_A_PVRTC_4BPPV1 || this._format === PixelFormat.RGB_A_PVRTC_2BPPV1;
        false;
      },
      _checkPackable: function _checkPackable() {
        var dynamicAtlas = cc.dynamicAtlasManager;
        if (!dynamicAtlas) return;
        if (this._isCompressed()) {
          this._packable = false;
          return;
        }
        var w = this.width, h = this.height;
        if (!this._image || w > dynamicAtlas.maxFrameSize || h > dynamicAtlas.maxFrameSize || this._getHash() !== dynamicAtlas.Atlas.DEFAULT_HASH) {
          this._packable = false;
          return;
        }
        this._image && this._image instanceof HTMLCanvasElement && (this._packable = true);
      },
      _getOpts: function _getOpts() {
        var opts = _getSharedOptions();
        opts.width = this.width;
        opts.height = this.height;
        opts.genMipmaps = this._genMipmaps;
        opts.format = this._format;
        opts.premultiplyAlpha = this._premultiplyAlpha;
        opts.anisotropy = this._anisotropy;
        opts.flipY = this._flipY;
        opts.minFilter = FilterIndex[this._minFilter];
        opts.magFilter = FilterIndex[this._magFilter];
        opts.mipFilter = FilterIndex[this._mipFilter];
        opts.wrapS = this._wrapS;
        opts.wrapT = this._wrapT;
        return opts;
      },
      _getGFXPixelFormat: function _getGFXPixelFormat(format) {
        format === PixelFormat.RGBA_ETC1 ? format = PixelFormat.RGB_ETC1 : format === PixelFormat.RGB_A_PVRTC_4BPPV1 ? format = PixelFormat.RGB_PVRTC_4BPPV1 : format === PixelFormat.RGB_A_PVRTC_2BPPV1 && (format = PixelFormat.RGB_PVRTC_2BPPV1);
        return format;
      },
      _resetUnderlyingMipmaps: function _resetUnderlyingMipmaps(mipmapSources) {
        var opts = this._getOpts();
        opts.images = mipmapSources || [ null ];
        this._texture ? this._texture.update(opts) : this._texture = new renderer.Texture2D(renderer.device, opts);
      },
      _serialize: (false, false) && function() {
        var extId = "";
        var exportedExts = this._exportedExts;
        !exportedExts && this._native && (exportedExts = [ this._native ]);
        if (exportedExts) {
          var exts = [];
          for (var i = 0; i < exportedExts.length; i++) {
            var _extId = "";
            var ext = exportedExts[i];
            if (ext) {
              var extFormat = ext.split("@");
              _extId = Texture2D.extnames.indexOf(extFormat[0]);
              _extId < 0 && (_extId = ext);
              extFormat[1] && (_extId += "@" + extFormat[1]);
            }
            exts.push(_extId);
          }
          extId = exts.join("_");
        }
        var asset = extId + "," + this._minFilter + "," + this._magFilter + "," + this._wrapS + "," + this._wrapT + "," + (this._premultiplyAlpha ? 1 : 0) + "," + (this._genMipmaps ? 1 : 0) + "," + (this._packable ? 1 : 0);
        return asset;
      },
      _deserialize: function _deserialize(data, handle) {
        var fields = data.split(",");
        var extIdStr = fields[0];
        if (extIdStr) {
          var result = Texture2D._parseExt(extIdStr, this._format);
          if (result.bestExt) {
            this._setRawAsset(result.bestExt);
            this._format = result.bestFormat;
          } else {
            this._setRawAsset(result.defaultExt);
            cc.warnID(3120, handle.customEnv.url, result.defaultExt, result.defaultExt);
          }
        }
        if (8 === fields.length) {
          this._minFilter = parseInt(fields[1]);
          this._magFilter = parseInt(fields[2]);
          this._wrapS = parseInt(fields[3]);
          this._wrapT = parseInt(fields[4]);
          this._premultiplyAlpha = fields[5].charCodeAt(0) === CHAR_CODE_1;
          this._genMipmaps = fields[6].charCodeAt(0) === CHAR_CODE_1;
          this._packable = fields[7].charCodeAt(0) === CHAR_CODE_1;
        }
      },
      _getHash: function _getHash() {
        if (!this._hashDirty) return this._hash;
        var genMipmaps = this._genMipmaps ? 1 : 0;
        var premultiplyAlpha = this._premultiplyAlpha ? 1 : 0;
        var flipY = this._flipY ? 1 : 0;
        var minFilter = this._minFilter === Filter.LINEAR ? 1 : 2;
        var magFilter = this._magFilter === Filter.LINEAR ? 1 : 2;
        var wrapS = this._wrapS === WrapMode.REPEAT ? 1 : this._wrapS === WrapMode.CLAMP_TO_EDGE ? 2 : 3;
        var wrapT = this._wrapT === WrapMode.REPEAT ? 1 : this._wrapT === WrapMode.CLAMP_TO_EDGE ? 2 : 3;
        var pixelFormat = this._format;
        var image = this._image;
        false;
        this._hash = Number("" + minFilter + magFilter + pixelFormat + wrapS + wrapT + genMipmaps + premultiplyAlpha + flipY);
        this._hashDirty = false;
        return this._hash;
      },
      _isCompressed: function _isCompressed() {
        return this._format < PixelFormat.A8 || this._format > PixelFormat.RGBA32F;
      },
      _clearImage: function _clearImage() {
        this._image.src = "";
      },
      _checkImageBitmap: function _checkImageBitmap(cb) {
        var _this = this;
        var image = this._image;
        var flipY = this._flipY;
        var premultiplyAlpha = this._premultiplyAlpha;
        this._flipY !== image.flipY || this._premultiplyAlpha !== image.premultiplyAlpha ? createImageBitmap(image, {
          imageOrientation: flipY !== image.flipY ? "flipY" : "none",
          premultiplyAlpha: premultiplyAlpha ? "premultiply" : "none"
        }).then((function(result) {
          image.close && image.close();
          result.flipY = flipY;
          result.premultiplyAlpha = premultiplyAlpha;
          _this._image = result;
          cb();
        }), (function(err) {
          cc.error(err.message);
        })) : cb();
      }
    });
    cc.Texture2D = module.exports = Texture2D;
  }), {
    "../../renderer/gfx": 251,
    "../assets/CCAsset": 59,
    "../event/event-target": 121,
    "../platform/CCClass": 138,
    "../platform/id-generater": 154,
    "../renderer": 168
  } ],
  75: [ (function(require, module, exports) {
    "use strict";
    require("./CCAsset");
    require("./CCFont");
    require("./CCPrefab");
    require("./CCAudioClip");
    require("./CCScripts");
    require("./CCSceneAsset");
    require("./CCSpriteFrame");
    require("./CCTexture2D");
    require("./CCRenderTexture");
    require("./CCTTFFont");
    require("./CCSpriteAtlas");
    require("./CCBitmapFont");
    require("./CCLabelAtlas");
    require("./CCTextAsset");
    require("./CCJsonAsset");
    require("./CCBufferAsset");
    require("./material");
  }), {
    "./CCAsset": 59,
    "./CCAudioClip": 60,
    "./CCBitmapFont": 61,
    "./CCBufferAsset": 62,
    "./CCFont": 63,
    "./CCJsonAsset": 64,
    "./CCLabelAtlas": 65,
    "./CCPrefab": 66,
    "./CCRenderTexture": 67,
    "./CCSceneAsset": 68,
    "./CCScripts": 69,
    "./CCSpriteAtlas": 70,
    "./CCSpriteFrame": 71,
    "./CCTTFFont": 72,
    "./CCTextAsset": 73,
    "./CCTexture2D": 74,
    "./material": 82
  } ],
  76: [ (function(require, module, exports) {
    "use strict";
    var _CCAsset = _interopRequireDefault(require("../CCAsset"));
    var _effectParser = require("./effect-parser");
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    var EffectAsset = cc.Class({
      name: "cc.EffectAsset",
      extends: _CCAsset["default"],
      ctor: function ctor() {
        this._effect = null;
      },
      properties: {
        properties: Object,
        techniques: [],
        shaders: []
      },
      onLoad: function onLoad() {
        if (cc.game.renderType === cc.game.RENDER_TYPE_CANVAS) return;
        var lib = cc.renderer._forward._programLib;
        for (var i = 0; i < this.shaders.length; i++) lib.define(this.shaders[i]);
        this._initEffect();
      },
      _initEffect: function _initEffect() {
        if (this._effect) return;
        this._effect = (0, _effectParser.parseEffect)(this);
        Object.freeze(this._effect);
      },
      getInstantiatedEffect: function getInstantiatedEffect() {
        this._initEffect();
        return this._effect.clone();
      },
      getEffect: function getEffect() {
        this._initEffect();
        return this._effect;
      }
    });
    module.exports = cc.EffectAsset = EffectAsset;
  }), {
    "../CCAsset": 59,
    "./effect-parser": 79
  } ],
  77: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var Asset = require("../CCAsset");
    var Texture = require("../CCTexture2D");
    var PixelFormat = Texture.PixelFormat;
    var EffectAsset = require("./CCEffectAsset");
    var textureUtil = require("../../utils/texture-util");
    var gfx = cc.gfx;
    var BUILTIN_NAME = cc.Enum({
      SPRITE: "2d-sprite",
      GRAY_SPRITE: "2d-gray-sprite",
      UNLIT: "unlit"
    });
    var Material = cc.Class({
      name: "cc.Material",
      extends: Asset,
      ctor: function ctor() {
        this.loaded = false;
        this._manualHash = false;
        this._dirty = true;
        this._effect = null;
      },
      properties: {
        _defines: {
          default: void 0,
          type: Object
        },
        _props: {
          default: void 0,
          type: Object
        },
        _effectAsset: {
          type: EffectAsset,
          default: null
        },
        _techniqueIndex: 0,
        _techniqueData: Object,
        effectName: void 0,
        effectAsset: {
          get: function get() {
            return this._effectAsset;
          },
          set: function set(asset) {
            if (cc.game.renderType === cc.game.RENDER_TYPE_CANVAS) return;
            this._effectAsset = asset;
            if (!asset) {
              cc.error("Can not set an empty effect asset.");
              return;
            }
            this._effect = this._effectAsset.getInstantiatedEffect();
          }
        },
        effect: {
          get: function get() {
            return this._effect;
          }
        },
        techniqueIndex: {
          get: function get() {
            return this._techniqueIndex;
          },
          set: function set(v) {
            this._techniqueIndex = v;
            this._effect.switchTechnique(v);
          }
        }
      },
      statics: {
        getBuiltinMaterial: function getBuiltinMaterial(name) {
          if (cc.game.renderType === cc.game.RENDER_TYPE_CANVAS) return new cc.Material();
          return cc.assetManager.builtins.getBuiltin("material", "builtin-" + name);
        },
        BUILTIN_NAME: BUILTIN_NAME,
        createWithBuiltin: function createWithBuiltin(effectName, techniqueIndex) {
          void 0 === techniqueIndex && (techniqueIndex = 0);
          var effectAsset = cc.assetManager.builtins.getBuiltin("effect", "builtin-" + effectName);
          return Material.create(effectAsset, techniqueIndex);
        },
        create: function create(effectAsset, techniqueIndex) {
          void 0 === techniqueIndex && (techniqueIndex = 0);
          if (!effectAsset) return null;
          var material = new Material();
          material.effectAsset = effectAsset;
          material.techniqueIndex = techniqueIndex;
          return material;
        }
      },
      setProperty: function setProperty(name, val, passIdx, directly) {
        if (cc.game.renderType === cc.game.RENDER_TYPE_CANVAS) return;
        "string" === typeof passIdx && (passIdx = parseInt(passIdx));
        if (val instanceof Texture) {
          var loaded = function loaded() {
            this._effect.setProperty(name, val, passIdx);
          };
          var isAlphaAtlas = val.isAlphaAtlas();
          var key = "CC_USE_ALPHA_ATLAS_" + name;
          var def = this.getDefine(key, passIdx);
          (isAlphaAtlas || def) && this.define(key, isAlphaAtlas);
          if (!val.loaded) {
            val.once("load", loaded, this);
            cc.assetManager.postLoadNative(val);
            return;
          }
        }
        this._effect.setProperty(name, val, passIdx, directly);
      },
      getProperty: function getProperty(name, passIdx) {
        "string" === typeof passIdx && (passIdx = parseInt(passIdx));
        return this._effect.getProperty(name, passIdx);
      },
      define: function define(name, val, passIdx, force) {
        if (cc.game.renderType === cc.game.RENDER_TYPE_CANVAS) return;
        "string" === typeof passIdx && (passIdx = parseInt(passIdx));
        this._effect.define(name, val, passIdx, force);
      },
      getDefine: function getDefine(name, passIdx) {
        "string" === typeof passIdx && (passIdx = parseInt(passIdx));
        return this._effect.getDefine(name, passIdx);
      },
      setCullMode: function setCullMode(cullMode, passIdx) {
        void 0 === cullMode && (cullMode = gfx.CULL_BACK);
        this._effect.setCullMode(cullMode, passIdx);
      },
      setDepth: function setDepth(depthTest, depthWrite, depthFunc, passIdx) {
        void 0 === depthTest && (depthTest = false);
        void 0 === depthWrite && (depthWrite = false);
        void 0 === depthFunc && (depthFunc = gfx.DS_FUNC_LESS);
        this._effect.setDepth(depthTest, depthWrite, depthFunc, passIdx);
      },
      setBlend: function setBlend(enabled, blendEq, blendSrc, blendDst, blendAlphaEq, blendSrcAlpha, blendDstAlpha, blendColor, passIdx) {
        void 0 === enabled && (enabled = false);
        void 0 === blendEq && (blendEq = gfx.BLEND_FUNC_ADD);
        void 0 === blendSrc && (blendSrc = gfx.BLEND_SRC_ALPHA);
        void 0 === blendDst && (blendDst = gfx.BLEND_ONE_MINUS_SRC_ALPHA);
        void 0 === blendAlphaEq && (blendAlphaEq = gfx.BLEND_FUNC_ADD);
        void 0 === blendSrcAlpha && (blendSrcAlpha = gfx.BLEND_SRC_ALPHA);
        void 0 === blendDstAlpha && (blendDstAlpha = gfx.BLEND_ONE_MINUS_SRC_ALPHA);
        void 0 === blendColor && (blendColor = 4294967295);
        this._effect.setBlend(enabled, blendEq, blendSrc, blendDst, blendAlphaEq, blendSrcAlpha, blendDstAlpha, blendColor, passIdx);
      },
      setStencilEnabled: function setStencilEnabled(stencilTest, passIdx) {
        void 0 === stencilTest && (stencilTest = gfx.STENCIL_INHERIT);
        this._effect.setStencilEnabled(stencilTest, passIdx);
      },
      setStencil: function setStencil(stencilTest, stencilFunc, stencilRef, stencilMask, stencilFailOp, stencilZFailOp, stencilZPassOp, stencilWriteMask, passIdx) {
        void 0 === stencilTest && (stencilTest = gfx.STENCIL_INHERIT);
        void 0 === stencilFunc && (stencilFunc = gfx.DS_FUNC_ALWAYS);
        void 0 === stencilRef && (stencilRef = 0);
        void 0 === stencilMask && (stencilMask = 255);
        void 0 === stencilFailOp && (stencilFailOp = gfx.STENCIL_OP_KEEP);
        void 0 === stencilZFailOp && (stencilZFailOp = gfx.STENCIL_OP_KEEP);
        void 0 === stencilZPassOp && (stencilZPassOp = gfx.STENCIL_OP_KEEP);
        void 0 === stencilWriteMask && (stencilWriteMask = 255);
        this._effect.setStencil(stencilTest, stencilFunc, stencilRef, stencilMask, stencilFailOp, stencilZFailOp, stencilZPassOp, stencilWriteMask, passIdx);
      },
      updateHash: function updateHash(hash) {
        this._manualHash = hash;
        this._effect && this._effect.updateHash(hash);
      },
      getHash: function getHash() {
        return this._manualHash || this._effect && this._effect.getHash();
      },
      onLoad: function onLoad() {
        this.effectAsset = this._effectAsset;
        if (!this._effect) return;
        this._techniqueIndex && this._effect.switchTechnique(this._techniqueIndex);
        this._techniqueData = this._techniqueData || {};
        var passDatas = this._techniqueData;
        for (var index in passDatas) {
          index = parseInt(index);
          var passData = passDatas[index];
          if (!passData) continue;
          for (var def in passData.defines) this.define(def, passData.defines[def], index);
          for (var prop in passData.props) this.setProperty(prop, passData.props[prop], index);
        }
      }
    });
    var _default = Material;
    exports["default"] = _default;
    cc.Material = Material;
    module.exports = exports["default"];
  }), {
    "../../utils/texture-util": 217,
    "../CCAsset": 59,
    "../CCTexture2D": 74,
    "./CCEffectAsset": 76
  } ],
  78: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _pass = _interopRequireDefault(require("../../../renderer/core/pass"));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    function _defineProperties(target, props) {
      for (var i = 0; i < props.length; i++) {
        var descriptor = props[i];
        descriptor.enumerable = descriptor.enumerable || false;
        descriptor.configurable = true;
        "value" in descriptor && (descriptor.writable = true);
        Object.defineProperty(target, descriptor.key, descriptor);
      }
    }
    function _createClass(Constructor, protoProps, staticProps) {
      protoProps && _defineProperties(Constructor.prototype, protoProps);
      staticProps && _defineProperties(Constructor, staticProps);
      return Constructor;
    }
    var gfx = cc.gfx;
    var EffectBase = (function() {
      function EffectBase() {
        this._dirty = true;
        this._name = "";
        this._technique = null;
      }
      var _proto = EffectBase.prototype;
      _proto._createPassProp = function _createPassProp(name, pass) {
        var prop = pass._properties[name];
        if (!prop) return;
        var uniform = Object.create(null);
        uniform.name = name;
        uniform.type = prop.type;
        prop.value instanceof Float32Array ? uniform.value = new Float32Array(prop.value) : uniform.value = prop.value;
        pass._properties[name] = uniform;
        return uniform;
      };
      _proto._setPassProperty = function _setPassProperty(name, value, pass, directly) {
        var properties = pass._properties;
        var uniform = properties.hasOwnProperty(name);
        if (uniform) {
          if (uniform.value === value) return;
        } else uniform = this._createPassProp(name, pass);
        this._dirty = true;
        return _pass["default"].prototype.setProperty.call(pass, name, value, directly);
      };
      _proto.setProperty = function setProperty(name, value, passIdx, directly) {
        var success = false;
        var passes = this.passes;
        var start = 0, end = passes.length;
        void 0 !== passIdx && (start = passIdx, end = passIdx + 1);
        for (var i = start; i < end; i++) this._setPassProperty(name, value, passes[i], directly) && (success = true);
        success || cc.warnID(9103, this.name, name);
      };
      _proto.getProperty = function getProperty(name, passIdx) {
        var passes = this.passes;
        if (passIdx >= passes.length) return;
        var start = 0, end = passes.length;
        void 0 !== passIdx && (start = passIdx, end = passIdx + 1);
        for (var i = start; i < end; i++) {
          var value = passes[i].getProperty(name);
          if (void 0 !== value) return value;
        }
      };
      _proto.define = function define(name, value, passIdx, force) {
        var success = false;
        var passes = this.passes;
        var start = 0, end = passes.length;
        void 0 !== passIdx && (start = passIdx, end = passIdx + 1);
        for (var i = start; i < end; i++) passes[i].define(name, value, force) && (success = true);
        success || cc.warnID(9104, this.name, name);
      };
      _proto.getDefine = function getDefine(name, passIdx) {
        var passes = this.passes;
        if (passIdx >= passes.length) return;
        var start = 0, end = passes.length;
        void 0 !== passIdx && (start = passIdx, end = passIdx + 1);
        for (var i = start; i < end; i++) {
          var value = passes[i].getDefine(name);
          if (void 0 !== value) return value;
        }
      };
      _proto.setCullMode = function setCullMode(cullMode, passIdx) {
        void 0 === cullMode && (cullMode = gfx.CULL_BACK);
        var passes = this.passes;
        var start = 0, end = passes.length;
        void 0 !== passIdx && (start = passIdx, end = passIdx + 1);
        for (var i = start; i < end; i++) passes[i].setCullMode(cullMode);
        this._dirty = true;
      };
      _proto.setDepth = function setDepth(depthTest, depthWrite, depthFunc, passIdx) {
        var passes = this.passes;
        var start = 0, end = passes.length;
        void 0 !== passIdx && (start = passIdx, end = passIdx + 1);
        for (var i = start; i < end; i++) passes[i].setDepth(depthTest, depthWrite, depthFunc);
        this._dirty = true;
      };
      _proto.setBlend = function setBlend(enabled, blendEq, blendSrc, blendDst, blendAlphaEq, blendSrcAlpha, blendDstAlpha, blendColor, passIdx) {
        var passes = this.passes;
        var start = 0, end = passes.length;
        void 0 !== passIdx && (start = passIdx, end = passIdx + 1);
        for (var i = start; i < end; i++) passes[i].setBlend(enabled, blendEq, blendSrc, blendDst, blendAlphaEq, blendSrcAlpha, blendDstAlpha, blendColor);
        this._dirty = true;
      };
      _proto.setStencilEnabled = function setStencilEnabled(stencilTest, passIdx) {
        void 0 === stencilTest && (stencilTest = gfx.STENCIL_INHERIT);
        var passes = this.passes;
        var start = 0, end = passes.length;
        void 0 !== passIdx && (start = passIdx, end = passIdx + 1);
        for (var i = start; i < end; i++) passes[i].setStencilEnabled(stencilTest);
        this._dirty = true;
      };
      _proto.setStencil = function setStencil(enabled, stencilFunc, stencilRef, stencilMask, stencilFailOp, stencilZFailOp, stencilZPassOp, stencilWriteMask, passIdx) {
        var passes = this.passes;
        var start = 0, end = passes.length;
        void 0 !== passIdx && (start = passIdx, end = passIdx + 1);
        for (var i = start; i < end; i++) {
          var pass = passes[i];
          pass.setStencilFront(enabled, stencilFunc, stencilRef, stencilMask, stencilFailOp, stencilZFailOp, stencilZPassOp, stencilWriteMask);
          pass.setStencilBack(enabled, stencilFunc, stencilRef, stencilMask, stencilFailOp, stencilZFailOp, stencilZPassOp, stencilWriteMask);
        }
        this._dirty = true;
      };
      _createClass(EffectBase, [ {
        key: "name",
        get: function get() {
          return this._name;
        }
      }, {
        key: "technique",
        get: function get() {
          return this._technique;
        }
      }, {
        key: "passes",
        get: function get() {
          return [];
        }
      } ]);
      return EffectBase;
    })();
    exports["default"] = EffectBase;
    cc.EffectBase = EffectBase;
    module.exports = exports["default"];
  }), {
    "../../../renderer/core/pass": 242
  } ],
  79: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports.parseEffect = parseEffect;
    var _pass = _interopRequireDefault(require("../../../renderer/core/pass"));
    var _types = require("../../../renderer/types");
    var _enums = _interopRequireDefault(require("../../../renderer/enums"));
    var _effect = _interopRequireDefault(require("./effect"));
    var _technique = _interopRequireDefault(require("../../../renderer/core/technique"));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    function getInvolvedProgram(programName) {
      var lib = cc.renderer._forward._programLib;
      return lib.getTemplate(programName);
    }
    function parseProperties(effectAsset, passJson) {
      var propertiesJson = passJson.properties || {};
      var program = getInvolvedProgram(passJson.program);
      var _loop = function _loop(prop) {
        var uniformInfo = program.uniforms.find((function(u) {
          return u.name === prop;
        }));
        if (!uniformInfo) {
          cc.warnID(9107, effectAsset.name, prop);
          return "continue";
        }
      };
      for (var prop in propertiesJson) {
        var _ret = _loop(prop);
        if ("continue" === _ret) continue;
      }
      var properties = {};
      program.uniforms.forEach((function(u) {
        var name = u.name, prop = properties[name] = Object.assign({}, u), propInfo = propertiesJson[name];
        var value = _types.enums2default[u.type];
        value = propInfo ? propInfo.type === _enums["default"].PARAM_TEXTURE_2D ? null : propInfo.type === _enums["default"].PARAM_INT || propInfo.type === _enums["default"].PARAM_FLOAT ? Array.isArray(propInfo.value) ? propInfo.value[0] : propInfo.value : new Float32Array(propInfo.value) : _types.enums2default[u.type];
        prop.value = value;
      }));
      return properties;
    }
    function passDefines(pass) {
      var defines = {};
      var program = getInvolvedProgram(pass.program);
      program.defines.forEach((function(d) {
        defines[d.name] = _types.enums2default[d.type];
      }));
      return defines;
    }
    function parseTechniques(effectAsset) {
      var techNum = effectAsset.techniques.length;
      var techniques = new Array(techNum);
      for (var j = 0; j < techNum; ++j) {
        var tech = effectAsset.techniques[j];
        var techName = tech.name || j;
        var passNum = tech.passes.length;
        var passes = new Array(passNum);
        for (var k = 0; k < passNum; ++k) {
          var pass = tech.passes[k];
          var passName = pass.name || k;
          var detailName = effectAsset.name + "-" + techName + "-" + passName;
          var stage = pass.stage || "opaque";
          var properties = parseProperties(effectAsset, pass);
          var defines = passDefines(pass);
          var newPass = passes[k] = new _pass["default"](passName, detailName, pass.program, stage, properties, defines);
          pass.rasterizerState && newPass.setCullMode(pass.rasterizerState.cullMode);
          var blendState = pass.blendState && pass.blendState.targets[0];
          blendState && newPass.setBlend(blendState.blend, blendState.blendEq, blendState.blendSrc, blendState.blendDst, blendState.blendAlphaEq, blendState.blendSrcAlpha, blendState.blendDstAlpha, blendState.blendColor);
          var depthStencilState = pass.depthStencilState;
          if (depthStencilState) {
            newPass.setDepth(depthStencilState.depthTest, depthStencilState.depthWrite, depthStencilState.depthFunc);
            newPass.setStencilFront(depthStencilState.stencilTest, depthStencilState.stencilFuncFront, depthStencilState.stencilRefFront, depthStencilState.stencilMaskFront, depthStencilState.stencilFailOpFront, depthStencilState.stencilZFailOpFront, depthStencilState.stencilZPassOpFront, depthStencilState.stencilWriteMaskFront);
            newPass.setStencilBack(depthStencilState.stencilTest, depthStencilState.stencilFuncBack, depthStencilState.stencilRefBack, depthStencilState.stencilMaskBack, depthStencilState.stencilFailOpBack, depthStencilState.stencilZFailOpBack, depthStencilState.stencilZPassOpBack, depthStencilState.stencilWriteMaskBack);
          }
        }
        techniques[j] = new _technique["default"](techName, passes);
      }
      return techniques;
    }
    function parseEffect(effect) {
      var techniques = parseTechniques(effect);
      return new _effect["default"](effect.name, techniques, 0, effect);
    }
    false;
  }), {
    "../../../renderer/core/pass": 242,
    "../../../renderer/core/technique": 244,
    "../../../renderer/enums": 246,
    "../../../renderer/types": 274,
    "./effect": 81
  } ],
  80: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _murmurhash2_gc = _interopRequireDefault(require("../../../renderer/murmurhash2_gc"));
    var _utils = _interopRequireDefault(require("./utils"));
    var _effectBase = _interopRequireDefault(require("./effect-base"));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    function _defineProperties(target, props) {
      for (var i = 0; i < props.length; i++) {
        var descriptor = props[i];
        descriptor.enumerable = descriptor.enumerable || false;
        descriptor.configurable = true;
        "value" in descriptor && (descriptor.writable = true);
        Object.defineProperty(target, descriptor.key, descriptor);
      }
    }
    function _createClass(Constructor, protoProps, staticProps) {
      protoProps && _defineProperties(Constructor.prototype, protoProps);
      staticProps && _defineProperties(Constructor, staticProps);
      return Constructor;
    }
    function _inheritsLoose(subClass, superClass) {
      subClass.prototype = Object.create(superClass.prototype);
      subClass.prototype.constructor = subClass;
      subClass.__proto__ = superClass;
    }
    var gfx = cc.gfx;
    var EffectVariant = (function(_EffectBase) {
      _inheritsLoose(EffectVariant, _EffectBase);
      _createClass(EffectVariant, [ {
        key: "effect",
        get: function get() {
          return this._effect;
        }
      }, {
        key: "name",
        get: function get() {
          return this._effect && this._effect.name + " (variant)";
        }
      }, {
        key: "passes",
        get: function get() {
          return this._passes;
        }
      }, {
        key: "stagePasses",
        get: function get() {
          return this._stagePasses;
        }
      } ]);
      function EffectVariant(effect) {
        var _this;
        _this = _EffectBase.call(this) || this;
        _this._effect = void 0;
        _this._passes = [];
        _this._stagePasses = {};
        _this._hash = 0;
        _this.init(effect);
        return _this;
      }
      var _proto = EffectVariant.prototype;
      _proto._onEffectChanged = function _onEffectChanged() {};
      _proto.init = function init(effect) {
        effect instanceof EffectVariant && (effect = effect.effect);
        this._effect = effect;
        this._dirty = true;
        if (effect) {
          var passes = effect.passes;
          var variantPasses = this._passes;
          variantPasses.length = 0;
          var stagePasses = this._stagePasses = {};
          for (var i = 0; i < passes.length; i++) {
            var variant = variantPasses[i] = Object.setPrototypeOf({}, passes[i]);
            variant._properties = Object.setPrototypeOf({}, passes[i]._properties);
            variant._defines = Object.setPrototypeOf({}, passes[i]._defines);
            stagePasses[variant._stage] || (stagePasses[variant._stage] = []);
            stagePasses[variant._stage].push(variant);
          }
        }
      };
      _proto.updateHash = function updateHash(hash) {};
      _proto.getHash = function getHash() {
        if (!this._dirty) return this._hash;
        this._dirty = false;
        var hash = "";
        hash += _utils["default"].serializePasses(this._passes);
        var effect = this._effect;
        effect && (hash += _utils["default"].serializePasses(effect.passes));
        this._hash = (0, _murmurhash2_gc["default"])(hash, 666);
        this.updateHash(this._hash);
        return this._hash;
      };
      return EffectVariant;
    })(_effectBase["default"]);
    exports["default"] = EffectVariant;
    cc.EffectVariant = EffectVariant;
    module.exports = exports["default"];
  }), {
    "../../../renderer/murmurhash2_gc": 269,
    "./effect-base": 78,
    "./utils": 85
  } ],
  81: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _effectBase = _interopRequireDefault(require("./effect-base"));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    function _defineProperties(target, props) {
      for (var i = 0; i < props.length; i++) {
        var descriptor = props[i];
        descriptor.enumerable = descriptor.enumerable || false;
        descriptor.configurable = true;
        "value" in descriptor && (descriptor.writable = true);
        Object.defineProperty(target, descriptor.key, descriptor);
      }
    }
    function _createClass(Constructor, protoProps, staticProps) {
      protoProps && _defineProperties(Constructor.prototype, protoProps);
      staticProps && _defineProperties(Constructor, staticProps);
      return Constructor;
    }
    function _inheritsLoose(subClass, superClass) {
      subClass.prototype = Object.create(superClass.prototype);
      subClass.prototype.constructor = subClass;
      subClass.__proto__ = superClass;
    }
    var Effect = (function(_EffectBase) {
      _inheritsLoose(Effect, _EffectBase);
      _createClass(Effect, [ {
        key: "technique",
        get: function get() {
          return this._technique;
        }
      }, {
        key: "passes",
        get: function get() {
          return this._technique.passes;
        }
      } ]);
      function Effect(name, techniques, techniqueIndex, asset) {
        var _this;
        _this = _EffectBase.call(this) || this;
        _this._techniques = [];
        _this._asset = null;
        _this.init(name, techniques, techniqueIndex, asset, true);
        return _this;
      }
      var _proto = Effect.prototype;
      _proto.init = function init(name, techniques, techniqueIndex, asset, createNative) {
        this._name = name;
        this._techniques = techniques;
        this._technique = techniques[techniqueIndex];
        this._asset = asset;
      };
      _proto.switchTechnique = function switchTechnique(index) {
        if (index >= this._techniques.length) {
          cc.warn("Can not switch to technique with index [" + index + "]");
          return;
        }
        this._technique = this._techniques[index];
      };
      _proto.clear = function clear() {
        this._techniques = [];
      };
      _proto.clone = function clone() {
        var techniques = [];
        for (var i = 0; i < this._techniques.length; i++) techniques.push(this._techniques[i].clone());
        var techniqueIndex = this._techniques.indexOf(this._technique);
        return new Effect(this._name, techniques, techniqueIndex, this._asset);
      };
      return Effect;
    })(_effectBase["default"]);
    exports["default"] = Effect;
    cc.Effect = Effect;
    module.exports = exports["default"];
  }), {
    "./effect-base": 78
  } ],
  82: [ (function(require, module, exports) {
    "use strict";
    require("./CCEffectAsset");
    require("./CCMaterial");
    require("./material-variant");
  }), {
    "./CCEffectAsset": 76,
    "./CCMaterial": 77,
    "./material-variant": 84
  } ],
  83: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _utils = _interopRequireDefault(require("./utils"));
    var _pool = _interopRequireDefault(require("../../utils/pool"));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    function _inheritsLoose(subClass, superClass) {
      subClass.prototype = Object.create(superClass.prototype);
      subClass.prototype.constructor = subClass;
      subClass.__proto__ = superClass;
    }
    var MaterialPool = (function(_Pool) {
      _inheritsLoose(MaterialPool, _Pool);
      function MaterialPool() {
        var _this;
        for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) args[_key] = arguments[_key];
        _this = _Pool.call.apply(_Pool, [ this ].concat(args)) || this;
        _this.enabled = false;
        _this._pool = {};
        return _this;
      }
      var _proto = MaterialPool.prototype;
      _proto.get = function get(exampleMat, renderComponent) {
        var pool = this._pool;
        if (exampleMat instanceof cc.MaterialVariant) {
          if (!exampleMat._owner) {
            exampleMat._owner = renderComponent;
            return exampleMat;
          }
          if (exampleMat._owner === renderComponent) return exampleMat;
          exampleMat = exampleMat.material;
        }
        var instance;
        if (this.enabled) {
          var uuid = exampleMat.effectAsset._uuid;
          if (pool[uuid]) {
            var key = _utils["default"].serializeDefines(exampleMat._effect._defines) + _utils["default"].serializeTechniques(exampleMat._effect._techniques);
            instance = pool[uuid][key] && pool[uuid][key].pop();
          }
        }
        if (instance) this.count--; else {
          instance = new cc.MaterialVariant(exampleMat);
          instance._name = exampleMat._name + " (Instance)";
          instance._uuid = exampleMat._uuid;
        }
        instance._owner = renderComponent;
        return instance;
      };
      _proto.put = function put(mat) {
        if (!this.enabled || !mat._owner) return;
        var pool = this._pool;
        var uuid = mat.effectAsset._uuid;
        pool[uuid] || (pool[uuid] = {});
        var key = _utils["default"].serializeDefines(mat._effect._defines) + _utils["default"].serializeTechniques(mat._effect._techniques);
        pool[uuid][key] || (pool[uuid][key] = []);
        if (this.count > this.maxSize) return;
        this._clean(mat);
        pool[uuid][key].push(mat);
        this.count++;
      };
      _proto.clear = function clear() {
        this._pool = {};
        this.count = 0;
      };
      _proto._clean = function _clean(mat) {
        mat._owner = null;
      };
      return MaterialPool;
    })(_pool["default"]);
    var materialPool = new MaterialPool();
    _pool["default"].register("material", materialPool);
    var _default = materialPool;
    exports["default"] = _default;
    module.exports = exports["default"];
  }), {
    "../../utils/pool": 211,
    "./utils": 85
  } ],
  84: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _CCMaterial = _interopRequireDefault(require("./CCMaterial"));
    var _effectVariant = _interopRequireDefault(require("./effect-variant"));
    var _materialPool = _interopRequireDefault(require("./material-pool"));
    var _dec, _class, _temp;
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    function _defineProperties(target, props) {
      for (var i = 0; i < props.length; i++) {
        var descriptor = props[i];
        descriptor.enumerable = descriptor.enumerable || false;
        descriptor.configurable = true;
        "value" in descriptor && (descriptor.writable = true);
        Object.defineProperty(target, descriptor.key, descriptor);
      }
    }
    function _createClass(Constructor, protoProps, staticProps) {
      protoProps && _defineProperties(Constructor.prototype, protoProps);
      staticProps && _defineProperties(Constructor, staticProps);
      return Constructor;
    }
    function _inheritsLoose(subClass, superClass) {
      subClass.prototype = Object.create(superClass.prototype);
      subClass.prototype.constructor = subClass;
      subClass.__proto__ = superClass;
    }
    var ccclass = cc._decorator.ccclass;
    var MaterialVariant = (_dec = ccclass("cc.MaterialVariant"), _dec(_class = (_temp = (function(_Material) {
      _inheritsLoose(MaterialVariant, _Material);
      MaterialVariant.createWithBuiltin = function createWithBuiltin(materialName, owner) {
        return MaterialVariant.create(_CCMaterial["default"].getBuiltinMaterial(materialName), owner);
      };
      MaterialVariant.create = function create(material, owner) {
        if (!material) return null;
        return _materialPool["default"].get(material, owner);
      };
      _createClass(MaterialVariant, [ {
        key: "uuid",
        get: function get() {
          return this._material.uuid;
        }
      }, {
        key: "owner",
        get: function get() {
          return this._owner;
        }
      }, {
        key: "material",
        get: function get() {
          return this._material;
        }
      } ]);
      function MaterialVariant(material) {
        var _this;
        _this = _Material.call(this) || this;
        _this._owner = null;
        _this._material = null;
        _this.init(material);
        return _this;
      }
      var _proto = MaterialVariant.prototype;
      _proto.init = function init(material) {
        this._effect = new _effectVariant["default"](material.effect);
        this._effectAsset = material._effectAsset;
        this._material = material;
      };
      return MaterialVariant;
    })(_CCMaterial["default"]), _temp)) || _class);
    exports["default"] = MaterialVariant;
    cc.MaterialVariant = MaterialVariant;
    module.exports = exports["default"];
  }), {
    "./CCMaterial": 77,
    "./effect-variant": 80,
    "./material-pool": 83
  } ],
  85: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _enums = _interopRequireDefault(require("../../../renderer/enums"));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    function serializeDefines(defines) {
      var str = "";
      for (var name in defines) str += name + defines[name];
      return str;
    }
    function serializePass(pass, excludeProperties) {
      var str = pass._programName + pass._cullMode;
      pass._blend && (str += pass._blendEq + pass._blendAlphaEq + pass._blendSrc + pass._blendDst + pass._blendSrcAlpha + pass._blendDstAlpha + pass._blendColor);
      pass._depthTest && (str += pass._depthWrite + pass._depthFunc);
      pass._stencilTest && (str += pass._stencilFuncFront + pass._stencilRefFront + pass._stencilMaskFront + pass._stencilFailOpFront + pass._stencilZFailOpFront + pass._stencilZPassOpFront + pass._stencilWriteMaskFront + pass._stencilFuncBack + pass._stencilRefBack + pass._stencilMaskBack + pass._stencilFailOpBack + pass._stencilZFailOpBack + pass._stencilZPassOpBack + pass._stencilWriteMaskBack);
      excludeProperties || (str += serializeUniforms(pass._properties));
      str += serializeDefines(pass._defines);
      return str;
    }
    function serializePasses(passes) {
      var hashData = "";
      for (var i = 0; i < passes.length; i++) hashData += serializePass(passes[i]);
      return hashData;
    }
    function serializeUniforms(uniforms) {
      var hashData = "";
      for (var name in uniforms) {
        var param = uniforms[name];
        var prop = param.value;
        if (!prop) continue;
        param.type === _enums["default"].PARAM_TEXTURE_2D || param.type === _enums["default"].PARAM_TEXTURE_CUBE ? hashData += prop._id + ";" : hashData += prop.toString() + ";";
      }
      return hashData;
    }
    var _default = {
      serializeDefines: serializeDefines,
      serializePasses: serializePasses,
      serializeUniforms: serializeUniforms
    };
    exports["default"] = _default;
    module.exports = exports["default"];
  }), {
    "../../../renderer/enums": 246
  } ],
  86: [ (function(require, module, exports) {
    "use strict";
    var Event;
    true;
    Event = require("../CCNode").EventType;
    var TOP = 1;
    var MID = 2;
    var BOT = 4;
    var LEFT = 8;
    var CENTER = 16;
    var RIGHT = 32;
    var HORIZONTAL = LEFT | CENTER | RIGHT;
    var VERTICAL = TOP | MID | BOT;
    var AlignMode = cc.Enum({
      ONCE: 0,
      ON_WINDOW_RESIZE: 1,
      ALWAYS: 2
    });
    function getReadonlyNodeSize(parent) {
      return parent instanceof cc.Scene ? cc.visibleRect : parent._contentSize;
    }
    function computeInverseTransForTarget(widgetNode, target, out_inverseTranslate, out_inverseScale) {
      var scaleX = widgetNode._parent.scaleX;
      var scaleY = widgetNode._parent.scaleY;
      var translateX = 0;
      var translateY = 0;
      for (var node = widgetNode._parent; ;) {
        translateX += node.x;
        translateY += node.y;
        node = node._parent;
        if (!node) {
          out_inverseTranslate.x = out_inverseTranslate.y = 0;
          out_inverseScale.x = out_inverseScale.y = 1;
          return;
        }
        if (node === target) break;
        var sx = node.scaleX;
        var sy = node.scaleY;
        translateX *= sx;
        translateY *= sy;
        scaleX *= sx;
        scaleY *= sy;
      }
      out_inverseScale.x = 0 !== scaleX ? 1 / scaleX : 1;
      out_inverseScale.y = 0 !== scaleY ? 1 / scaleY : 1;
      out_inverseTranslate.x = -translateX;
      out_inverseTranslate.y = -translateY;
    }
    var tInverseTranslate = cc.Vec2.ZERO;
    var tInverseScale = cc.Vec2.ONE;
    function align(node, widget) {
      var hasTarget = widget._target;
      var target;
      var inverseTranslate, inverseScale;
      if (hasTarget) {
        target = hasTarget;
        inverseTranslate = tInverseTranslate;
        inverseScale = tInverseScale;
        computeInverseTransForTarget(node, target, inverseTranslate, inverseScale);
      } else target = node._parent;
      var targetSize = getReadonlyNodeSize(target);
      var targetAnchor = target._anchorPoint;
      var isRoot = (true, target instanceof cc.Scene);
      var x = node.x, y = node.y;
      var anchor = node._anchorPoint;
      if (widget._alignFlags & HORIZONTAL) {
        var localLeft, localRight, targetWidth = targetSize.width;
        if (isRoot) {
          localLeft = cc.visibleRect.left.x;
          localRight = cc.visibleRect.right.x;
        } else {
          localLeft = -targetAnchor.x * targetWidth;
          localRight = localLeft + targetWidth;
        }
        localLeft += widget._isAbsLeft ? widget._left : widget._left * targetWidth;
        localRight -= widget._isAbsRight ? widget._right : widget._right * targetWidth;
        if (hasTarget) {
          localLeft += inverseTranslate.x;
          localLeft *= inverseScale.x;
          localRight += inverseTranslate.x;
          localRight *= inverseScale.x;
        }
        var width, anchorX = anchor.x, scaleX = node.scaleX;
        if (scaleX < 0) {
          anchorX = 1 - anchorX;
          scaleX = -scaleX;
        }
        if (widget.isStretchWidth) {
          width = localRight - localLeft;
          0 !== scaleX && (node.width = width / scaleX);
          x = localLeft + anchorX * width;
        } else {
          width = node.width * scaleX;
          if (widget.isAlignHorizontalCenter) {
            var localHorizontalCenter = widget._isAbsHorizontalCenter ? widget._horizontalCenter : widget._horizontalCenter * targetWidth;
            var targetCenter = (.5 - targetAnchor.x) * targetSize.width;
            if (hasTarget) {
              localHorizontalCenter *= inverseScale.x;
              targetCenter += inverseTranslate.x;
              targetCenter *= inverseScale.x;
            }
            x = targetCenter + (anchorX - .5) * width + localHorizontalCenter;
          } else x = widget.isAlignLeft ? localLeft + anchorX * width : localRight + (anchorX - 1) * width;
        }
      }
      if (widget._alignFlags & VERTICAL) {
        var localTop, localBottom, targetHeight = targetSize.height;
        if (isRoot) {
          localBottom = cc.visibleRect.bottom.y;
          localTop = cc.visibleRect.top.y;
        } else {
          localBottom = -targetAnchor.y * targetHeight;
          localTop = localBottom + targetHeight;
        }
        localBottom += widget._isAbsBottom ? widget._bottom : widget._bottom * targetHeight;
        localTop -= widget._isAbsTop ? widget._top : widget._top * targetHeight;
        if (hasTarget) {
          localBottom += inverseTranslate.y;
          localBottom *= inverseScale.y;
          localTop += inverseTranslate.y;
          localTop *= inverseScale.y;
        }
        var height, anchorY = anchor.y, scaleY = node.scaleY;
        if (scaleY < 0) {
          anchorY = 1 - anchorY;
          scaleY = -scaleY;
        }
        if (widget.isStretchHeight) {
          height = localTop - localBottom;
          0 !== scaleY && (node.height = height / scaleY);
          y = localBottom + anchorY * height;
        } else {
          height = node.height * scaleY;
          if (widget.isAlignVerticalCenter) {
            var localVerticalCenter = widget._isAbsVerticalCenter ? widget._verticalCenter : widget._verticalCenter * targetHeight;
            var targetMiddle = (.5 - targetAnchor.y) * targetSize.height;
            if (hasTarget) {
              localVerticalCenter *= inverseScale.y;
              targetMiddle += inverseTranslate.y;
              targetMiddle *= inverseScale.y;
            }
            y = targetMiddle + (anchorY - .5) * height + localVerticalCenter;
          } else y = widget.isAlignBottom ? localBottom + anchorY * height : localTop + (anchorY - 1) * height;
        }
      }
      node.setPosition(x, y);
    }
    function visitNode(node) {
      var widget = node._widget;
      if (widget) {
        false;
        align(node, widget);
        true, widget.alignMode !== AlignMode.ALWAYS ? widget.enabled = false : activeWidgets.push(widget);
      }
      var children = node._children;
      for (var i = 0; i < children.length; i++) {
        var child = children[i];
        child._active && visitNode(child);
      }
    }
    var animationState;
    false;
    function refreshScene() {
      var AnimUtils;
      var EditMode;
      var nowPreviewing;
      var component;
      var animation;
      var _component;
      var _animation;
      false;
      var scene = cc.director.getScene();
      if (scene) {
        widgetManager.isAligning = true;
        if (widgetManager._nodesOrderDirty) {
          activeWidgets.length = 0;
          visitNode(scene);
          widgetManager._nodesOrderDirty = false;
        } else {
          var i, widget, iterator = widgetManager._activeWidgetsIterator;
          var AnimUtils;
          var editingNode;
          var node;
          false;
          for (iterator.i = 0; iterator.i < activeWidgets.length; ++iterator.i) {
            widget = activeWidgets[iterator.i];
            align(widget.node, widget);
          }
        }
        widgetManager.isAligning = false;
      }
      false;
    }
    var adjustWidgetToAllowMovingInEditor = false;
    var adjustWidgetToAllowResizingInEditor = false;
    var activeWidgets = [];
    function updateAlignment(node) {
      var parent = node._parent;
      cc.Node.isNode(parent) && updateAlignment(parent);
      var widget = node._widget || node.getComponent(cc.Widget);
      widget && parent && align(node, widget);
    }
    var widgetManager = cc._widgetManager = module.exports = {
      _AlignFlags: {
        TOP: TOP,
        MID: MID,
        BOT: BOT,
        LEFT: LEFT,
        CENTER: CENTER,
        RIGHT: RIGHT
      },
      isAligning: false,
      _nodesOrderDirty: false,
      _activeWidgetsIterator: new cc.js.array.MutableForwardIterator(activeWidgets),
      init: function init(director) {
        director.on(cc.Director.EVENT_AFTER_UPDATE, refreshScene);
        false;
        var thisOnResized = this.onResized.bind(this);
        window.addEventListener("resize", thisOnResized);
        window.addEventListener("orientationchange", thisOnResized);
      },
      add: function add(widget) {
        widget.node._widget = widget;
        this._nodesOrderDirty = true;
        false;
      },
      remove: function remove(widget) {
        widget.node._widget = null;
        this._activeWidgetsIterator.remove(widget);
        false;
      },
      onResized: function onResized() {
        var scene = cc.director.getScene();
        scene && this.refreshWidgetOnResized(scene);
      },
      refreshWidgetOnResized: function refreshWidgetOnResized(node) {
        var widget = cc.Node.isNode(node) && node.getComponent(cc.Widget);
        widget && widget.alignMode === AlignMode.ON_WINDOW_RESIZE && (widget.enabled = true);
        var children = node._children;
        for (var i = 0; i < children.length; i++) {
          var child = children[i];
          this.refreshWidgetOnResized(child);
        }
      },
      updateAlignment: updateAlignment,
      AlignMode: AlignMode
    };
    false;
  }), {
    "../CCNode": 26
  } ],
  87: [ (function(require, module, exports) {
    "use strict";
    var _valueTypes = require("../value-types");
    var _geomUtils = require("../geom-utils");
    var AffineTrans = require("../utils/affine-transform");
    var renderer = require("../renderer/index");
    var RenderFlow = require("../renderer/render-flow");
    var game = require("../CCGame");
    var RendererCamera = null;
    false;
    RendererCamera = require("../../renderer/scene/camera");
    var _mat4_temp_1 = cc.mat4();
    var _mat4_temp_2 = cc.mat4();
    var _v3_temp_1 = cc.v3();
    var _v3_temp_2 = cc.v3();
    var _v3_temp_3 = cc.v3();
    var _cameras = [];
    function updateMainCamera() {
      for (var i = 0, minDepth = Number.MAX_VALUE; i < _cameras.length; i++) {
        var camera = _cameras[i];
        if (camera._depth < minDepth) {
          Camera.main = camera;
          minDepth = camera._depth;
        }
      }
    }
    var _debugCamera = null;
    function repositionDebugCamera() {
      if (!_debugCamera) return;
      var node = _debugCamera.getNode();
      var canvas = cc.game.canvas;
      node.z = canvas.height / 1.1566;
      node.x = canvas.width / 2;
      node.y = canvas.height / 2;
    }
    var ClearFlags = cc.Enum({
      COLOR: 1,
      DEPTH: 2,
      STENCIL: 4
    });
    var StageFlags = cc.Enum({
      OPAQUE: 1,
      TRANSPARENT: 2
    });
    var Camera = cc.Class({
      name: "cc.Camera",
      extends: cc.Component,
      ctor: function ctor() {
        if (game.renderType !== game.RENDER_TYPE_CANVAS) {
          var camera = new RendererCamera();
          camera.setStages([ "opaque" ]);
          camera.dirty = true;
          this._inited = false;
          this._camera = camera;
        } else this._inited = true;
      },
      editor: false,
      properties: {
        _cullingMask: 4294967295,
        _clearFlags: ClearFlags.DEPTH | ClearFlags.STENCIL,
        _backgroundColor: cc.color(0, 0, 0, 255),
        _depth: 0,
        _zoomRatio: 1,
        _targetTexture: null,
        _fov: 60,
        _orthoSize: 10,
        _nearClip: 1,
        _farClip: 4096,
        _ortho: true,
        _rect: cc.rect(0, 0, 1, 1),
        _renderStages: 1,
        _alignWithScreen: true,
        zoomRatio: {
          get: function get() {
            return this._zoomRatio;
          },
          set: function set(value) {
            this._zoomRatio = value;
          },
          tooltip: false
        },
        fov: {
          get: function get() {
            return this._fov;
          },
          set: function set(v) {
            this._fov = v;
          },
          tooltip: false
        },
        orthoSize: {
          get: function get() {
            return this._orthoSize;
          },
          set: function set(v) {
            this._orthoSize = v;
          },
          tooltip: false
        },
        nearClip: {
          get: function get() {
            return this._nearClip;
          },
          set: function set(v) {
            this._nearClip = v;
            this._updateClippingpPlanes();
          },
          tooltip: false
        },
        farClip: {
          get: function get() {
            return this._farClip;
          },
          set: function set(v) {
            this._farClip = v;
            this._updateClippingpPlanes();
          },
          tooltip: false
        },
        ortho: {
          get: function get() {
            return this._ortho;
          },
          set: function set(v) {
            this._ortho = v;
            this._updateProjection();
          },
          tooltip: false
        },
        rect: {
          get: function get() {
            return this._rect;
          },
          set: function set(v) {
            this._rect = v;
            this._updateRect();
          },
          tooltip: false
        },
        cullingMask: {
          get: function get() {
            return this._cullingMask;
          },
          set: function set(value) {
            this._cullingMask = value;
            this._updateCameraMask();
          },
          tooltip: false
        },
        clearFlags: {
          get: function get() {
            return this._clearFlags;
          },
          set: function set(value) {
            this._clearFlags = value;
            this._camera && this._camera.setClearFlags(value);
          },
          tooltip: false
        },
        backgroundColor: {
          get: function get() {
            return this._backgroundColor;
          },
          set: function set(value) {
            if (!this._backgroundColor.equals(value)) {
              this._backgroundColor.set(value);
              this._updateBackgroundColor();
            }
          },
          tooltip: false
        },
        depth: {
          get: function get() {
            return this._depth;
          },
          set: function set(value) {
            Camera.main === this ? this._depth < value && updateMainCamera() : Camera.main && value < Camera.main._depth && _cameras.includes(this) && (Camera.main = this);
            this._depth = value;
            this._camera && this._camera.setPriority(value);
          },
          tooltip: false
        },
        targetTexture: {
          get: function get() {
            return this._targetTexture;
          },
          set: function set(value) {
            this._targetTexture = value;
            this._updateTargetTexture();
          },
          tooltip: false
        },
        renderStages: {
          get: function get() {
            return this._renderStages;
          },
          set: function set(val) {
            this._renderStages = val;
            this._updateStages();
          },
          tooltip: false
        },
        alignWithScreen: {
          get: function get() {
            return this._alignWithScreen;
          },
          set: function set(v) {
            this._alignWithScreen = v;
          }
        },
        _is3D: {
          get: function get() {
            return this.node && this.node._is3DNode;
          }
        }
      },
      statics: {
        main: null,
        cameras: _cameras,
        ClearFlags: ClearFlags,
        findCamera: function findCamera(node) {
          for (var i = 0, l = _cameras.length; i < l; i++) {
            var camera = _cameras[i];
            if (camera.containsNode(node)) return camera;
          }
          return null;
        },
        _findRendererCamera: function _findRendererCamera(node) {
          var cameras = renderer.scene._cameras;
          for (var i = 0; i < cameras._count; i++) if (cameras._data[i]._cullingMask & node._cullingMask) return cameras._data[i];
          return null;
        },
        _setupDebugCamera: function _setupDebugCamera() {
          if (_debugCamera) return;
          if (game.renderType === game.RENDER_TYPE_CANVAS) return;
          var camera = new RendererCamera();
          _debugCamera = camera;
          camera.setStages([ "opaque" ]);
          camera.setFov(60 * Math.PI / 180);
          camera.setNear(.1);
          camera.setFar(4096);
          camera.dirty = true;
          camera.cullingMask = 1 << cc.Node.BuiltinGroupIndex.DEBUG;
          camera.setPriority(cc.macro.MAX_ZINDEX);
          camera.setClearFlags(0);
          camera.setColor(0, 0, 0, 0);
          var node = new cc.Node();
          camera.setNode(node);
          repositionDebugCamera();
          cc.view.on("design-resolution-changed", repositionDebugCamera);
          renderer.scene.addCamera(camera);
        }
      },
      _updateCameraMask: function _updateCameraMask() {
        if (this._camera) {
          var mask = this._cullingMask & ~(1 << cc.Node.BuiltinGroupIndex.DEBUG);
          this._camera.cullingMask = mask;
        }
      },
      _updateBackgroundColor: function _updateBackgroundColor() {
        if (!this._camera) return;
        var color = this._backgroundColor;
        this._camera.setColor(color.r / 255, color.g / 255, color.b / 255, color.a / 255);
      },
      _updateTargetTexture: function _updateTargetTexture() {
        if (!this._camera) return;
        var texture = this._targetTexture;
        this._camera.setFrameBuffer(texture ? texture._framebuffer : null);
      },
      _updateClippingpPlanes: function _updateClippingpPlanes() {
        if (!this._camera) return;
        this._camera.setNear(this._nearClip);
        this._camera.setFar(this._farClip);
      },
      _updateProjection: function _updateProjection() {
        if (!this._camera) return;
        var type = this._ortho ? 1 : 0;
        this._camera.setType(type);
      },
      _updateRect: function _updateRect() {
        if (!this._camera) return;
        var rect = this._rect;
        this._camera.setRect(rect.x, rect.y, rect.width, rect.height);
      },
      _updateStages: function _updateStages() {
        var flags = this._renderStages;
        var stages = [];
        flags & StageFlags.OPAQUE && stages.push("opaque");
        flags & StageFlags.TRANSPARENT && stages.push("transparent");
        this._camera.setStages(stages);
      },
      _init: function _init() {
        if (this._inited) return;
        this._inited = true;
        var camera = this._camera;
        if (!camera) return;
        camera.setNode(this.node);
        camera.setClearFlags(this._clearFlags);
        camera.setPriority(this._depth);
        this._updateBackgroundColor();
        this._updateCameraMask();
        this._updateTargetTexture();
        this._updateClippingpPlanes();
        this._updateProjection();
        this._updateStages();
        this._updateRect();
        this.beforeDraw();
      },
      onLoad: function onLoad() {
        this._init();
      },
      onEnable: function onEnable() {
        if (true, game.renderType !== game.RENDER_TYPE_CANVAS) {
          cc.director.on(cc.Director.EVENT_BEFORE_DRAW, this.beforeDraw, this);
          renderer.scene.addCamera(this._camera);
        }
        _cameras.push(this);
        (!Camera.main || this._depth < Camera.main._depth) && (Camera.main = this);
      },
      onDisable: function onDisable() {
        if (true, game.renderType !== game.RENDER_TYPE_CANVAS) {
          cc.director.off(cc.Director.EVENT_BEFORE_DRAW, this.beforeDraw, this);
          renderer.scene.removeCamera(this._camera);
        }
        cc.js.array.fastRemove(_cameras, this);
        if (Camera.main === this) {
          Camera.main = null;
          updateMainCamera();
        }
      },
      getScreenToWorldMatrix2D: function getScreenToWorldMatrix2D(out) {
        this.getWorldToScreenMatrix2D(out);
        _valueTypes.Mat4.invert(out, out);
        return out;
      },
      getWorldToScreenMatrix2D: function getWorldToScreenMatrix2D(out) {
        this.node.getWorldRT(_mat4_temp_1);
        var zoomRatio = this.zoomRatio;
        var _mat4_temp_1m = _mat4_temp_1.m;
        _mat4_temp_1m[0] *= zoomRatio;
        _mat4_temp_1m[1] *= zoomRatio;
        _mat4_temp_1m[4] *= zoomRatio;
        _mat4_temp_1m[5] *= zoomRatio;
        var m12 = _mat4_temp_1m[12];
        var m13 = _mat4_temp_1m[13];
        var center = cc.visibleRect.center;
        _mat4_temp_1m[12] = center.x - (_mat4_temp_1m[0] * m12 + _mat4_temp_1m[4] * m13);
        _mat4_temp_1m[13] = center.y - (_mat4_temp_1m[1] * m12 + _mat4_temp_1m[5] * m13);
        out !== _mat4_temp_1 && _valueTypes.Mat4.copy(out, _mat4_temp_1);
        return out;
      },
      getScreenToWorldPoint: function getScreenToWorldPoint(screenPosition, out) {
        if (this.node.is3DNode) {
          out = out || new cc.Vec3();
          this._camera.screenToWorld(out, screenPosition, cc.visibleRect.width, cc.visibleRect.height);
        } else {
          out = out || new cc.Vec2();
          this.getScreenToWorldMatrix2D(_mat4_temp_1);
          _valueTypes.Vec2.transformMat4(out, screenPosition, _mat4_temp_1);
        }
        return out;
      },
      getWorldToScreenPoint: function getWorldToScreenPoint(worldPosition, out) {
        if (this.node.is3DNode) {
          out = out || new cc.Vec3();
          this._camera.worldToScreen(out, worldPosition, cc.visibleRect.width, cc.visibleRect.height);
        } else {
          out = out || new cc.Vec2();
          this.getWorldToScreenMatrix2D(_mat4_temp_1);
          _valueTypes.Vec2.transformMat4(out, worldPosition, _mat4_temp_1);
        }
        return out;
      },
      getRay: function getRay(screenPos) {
        if (!cc.geomUtils) return screenPos;
        _valueTypes.Vec3.set(_v3_temp_3, screenPos.x, screenPos.y, 1);
        this._camera.screenToWorld(_v3_temp_2, _v3_temp_3, cc.visibleRect.width, cc.visibleRect.height);
        if (this.ortho) {
          _valueTypes.Vec3.set(_v3_temp_3, screenPos.x, screenPos.y, -1);
          this._camera.screenToWorld(_v3_temp_1, _v3_temp_3, cc.visibleRect.width, cc.visibleRect.height);
        } else this.node.getWorldPosition(_v3_temp_1);
        return _geomUtils.Ray.fromPoints(new _geomUtils.Ray(), _v3_temp_1, _v3_temp_2);
      },
      containsNode: function containsNode(node) {
        return (node._cullingMask & this.cullingMask) > 0;
      },
      render: function render(rootNode) {
        rootNode = rootNode || cc.director.getScene();
        if (!rootNode) return null;
        this.node.getWorldMatrix(_mat4_temp_1);
        this.beforeDraw();
        RenderFlow.renderCamera(this._camera, rootNode);
      },
      _onAlignWithScreen: function _onAlignWithScreen() {
        var height = cc.game.canvas.height / cc.view._scaleY;
        var targetTexture = this._targetTexture;
        if (targetTexture) {
          false;
          height = cc.visibleRect.height;
        }
        var fov = this._fov * cc.macro.RAD;
        this.node.z = height / (2 * Math.tan(fov / 2));
        fov = 2 * Math.atan(Math.tan(fov / 2) / this.zoomRatio);
        this._camera.setFov(fov);
        this._camera.setOrthoHeight(height / 2 / this.zoomRatio);
        this.node.setRotation(0, 0, 0, 1);
      },
      beforeDraw: function beforeDraw() {
        if (!this._camera) return;
        if (this._alignWithScreen) this._onAlignWithScreen(); else {
          var fov = this._fov * cc.macro.RAD;
          fov = 2 * Math.atan(Math.tan(fov / 2) / this.zoomRatio);
          this._camera.setFov(fov);
          this._camera.setOrthoHeight(this._orthoSize / this.zoomRatio);
        }
        this._camera.dirty = true;
      }
    });
    cc.js.mixin(Camera.prototype, {
      getNodeToCameraTransform: function getNodeToCameraTransform(node) {
        var out = AffineTrans.identity();
        node.getWorldMatrix(_mat4_temp_2);
        if (this.containsNode(node)) {
          this.getWorldToCameraMatrix(_mat4_temp_1);
          _valueTypes.Mat4.mul(_mat4_temp_2, _mat4_temp_2, _mat4_temp_1);
        }
        AffineTrans.fromMat4(out, _mat4_temp_2);
        return out;
      },
      getCameraToWorldPoint: function getCameraToWorldPoint(point, out) {
        return this.getScreenToWorldPoint(point, out);
      },
      getWorldToCameraPoint: function getWorldToCameraPoint(point, out) {
        return this.getWorldToScreenPoint(point, out);
      },
      getCameraToWorldMatrix: function getCameraToWorldMatrix(out) {
        return this.getScreenToWorldMatrix2D(out);
      },
      getWorldToCameraMatrix: function getWorldToCameraMatrix(out) {
        return this.getWorldToScreenMatrix2D(out);
      }
    });
    module.exports = cc.Camera = Camera;
  }), {
    "../../renderer/scene/camera": 271,
    "../CCGame": 25,
    "../geom-utils": void 0,
    "../renderer/index": 168,
    "../renderer/render-flow": 169,
    "../utils/affine-transform": 200,
    "../value-types": 224
  } ],
  88: [ (function(require, module, exports) {
    "use strict";
    require("./platform/CCClass");
    var Flags = require("./platform/CCObject").Flags;
    var jsArray = require("./platform/js").array;
    var IsStartCalled = Flags.IsStartCalled;
    var IsOnEnableCalled = Flags.IsOnEnableCalled;
    var IsEditorOnEnableCalled = Flags.IsEditorOnEnableCalled;
    var callerFunctor = false;
    var callOnEnableInTryCatch = false;
    var callOnDisableInTryCatch = false;
    function sortedIndex(array, comp) {
      var order = comp.constructor._executionOrder;
      var id = comp._id;
      for (var l = 0, h = array.length - 1, m = h >>> 1; l <= h; m = l + h >>> 1) {
        var test = array[m];
        var testOrder = test.constructor._executionOrder;
        if (testOrder > order) h = m - 1; else if (testOrder < order) l = m + 1; else {
          var testId = test._id;
          if (testId > id) h = m - 1; else {
            if (!(testId < id)) return m;
            l = m + 1;
          }
        }
      }
      return ~l;
    }
    function stableRemoveInactive(iterator, flagToClear) {
      var array = iterator.array;
      var next = iterator.i + 1;
      while (next < array.length) {
        var comp = array[next];
        if (comp._enabled && comp.node._activeInHierarchy) ++next; else {
          iterator.removeAt(next);
          flagToClear && (comp._objFlags &= ~flagToClear);
        }
      }
    }
    var LifeCycleInvoker = cc.Class({
      __ctor__: function __ctor__(invokeFunc) {
        var Iterator = jsArray.MutableForwardIterator;
        this._zero = new Iterator([]);
        this._neg = new Iterator([]);
        this._pos = new Iterator([]);
        false;
        this._invoke = invokeFunc;
      },
      statics: {
        stableRemoveInactive: stableRemoveInactive
      },
      add: null,
      remove: null,
      invoke: null
    });
    function compareOrder(a, b) {
      return a.constructor._executionOrder - b.constructor._executionOrder;
    }
    var OneOffInvoker = cc.Class({
      extends: LifeCycleInvoker,
      add: function add(comp) {
        var order = comp.constructor._executionOrder;
        (0 === order ? this._zero : order < 0 ? this._neg : this._pos).array.push(comp);
      },
      remove: function remove(comp) {
        var order = comp.constructor._executionOrder;
        (0 === order ? this._zero : order < 0 ? this._neg : this._pos).fastRemove(comp);
      },
      cancelInactive: function cancelInactive(flagToClear) {
        stableRemoveInactive(this._zero, flagToClear);
        stableRemoveInactive(this._neg, flagToClear);
        stableRemoveInactive(this._pos, flagToClear);
      },
      invoke: function invoke() {
        var compsNeg = this._neg;
        if (compsNeg.array.length > 0) {
          compsNeg.array.sort(compareOrder);
          this._invoke(compsNeg);
          compsNeg.array.length = 0;
        }
        this._invoke(this._zero);
        this._zero.array.length = 0;
        var compsPos = this._pos;
        if (compsPos.array.length > 0) {
          compsPos.array.sort(compareOrder);
          this._invoke(compsPos);
          compsPos.array.length = 0;
        }
      }
    });
    var ReusableInvoker = cc.Class({
      extends: LifeCycleInvoker,
      add: function add(comp) {
        var order = comp.constructor._executionOrder;
        if (0 === order) this._zero.array.push(comp); else {
          var array = order < 0 ? this._neg.array : this._pos.array;
          var i = sortedIndex(array, comp);
          i < 0 && array.splice(~i, 0, comp);
        }
      },
      remove: function remove(comp) {
        var order = comp.constructor._executionOrder;
        if (0 === order) this._zero.fastRemove(comp); else {
          var iterator = order < 0 ? this._neg : this._pos;
          var i = sortedIndex(iterator.array, comp);
          i >= 0 && iterator.removeAt(i);
        }
      },
      invoke: function invoke(dt) {
        this._neg.array.length > 0 && this._invoke(this._neg, dt);
        this._invoke(this._zero, dt);
        this._pos.array.length > 0 && this._invoke(this._pos, dt);
      }
    });
    function enableInEditor(comp) {
      if (!(comp._objFlags & IsEditorOnEnableCalled)) {
        cc.engine.emit("component-enabled", comp.uuid);
        comp._objFlags |= IsEditorOnEnableCalled;
      }
    }
    function createInvokeImpl(indiePath, useDt, ensureFlag, fastPath) {
      var body;
      false;
      return function(iterator, dt) {
        try {
          fastPath(iterator, dt);
        } catch (e) {
          cc._throw(e);
          var array = iterator.array;
          ensureFlag && (array[iterator.i]._objFlags |= ensureFlag);
          ++iterator.i;
          for (;iterator.i < array.length; ++iterator.i) try {
            indiePath(array[iterator.i], dt);
          } catch (e) {
            cc._throw(e);
            ensureFlag && (array[iterator.i]._objFlags |= ensureFlag);
          }
        }
      };
    }
    var invokeStart = createInvokeImpl((function(c) {
      c.start();
      c._objFlags |= IsStartCalled;
    }), false, IsStartCalled, (function(iterator) {
      var array = iterator.array;
      for (iterator.i = 0; iterator.i < array.length; ++iterator.i) {
        var comp = array[iterator.i];
        comp.start();
        comp._objFlags |= IsStartCalled;
      }
    }));
    var invokeUpdate = createInvokeImpl((function(c, dt) {
      c.update(dt);
    }), true, void 0, (function(iterator, dt) {
      var array = iterator.array;
      for (iterator.i = 0; iterator.i < array.length; ++iterator.i) array[iterator.i].update(dt);
    }));
    var invokeLateUpdate = createInvokeImpl((function(c, dt) {
      c.lateUpdate(dt);
    }), true, void 0, (function(iterator, dt) {
      var array = iterator.array;
      for (iterator.i = 0; iterator.i < array.length; ++iterator.i) array[iterator.i].lateUpdate(dt);
    }));
    function ctor() {
      this.startInvoker = new OneOffInvoker(invokeStart);
      this.updateInvoker = new ReusableInvoker(invokeUpdate);
      this.lateUpdateInvoker = new ReusableInvoker(invokeLateUpdate);
      this._deferredComps = [];
      this._updating = false;
    }
    var ComponentScheduler = cc.Class({
      ctor: ctor,
      unscheduleAll: ctor,
      statics: {
        LifeCycleInvoker: LifeCycleInvoker,
        OneOffInvoker: OneOffInvoker,
        createInvokeImpl: createInvokeImpl,
        invokeOnEnable: function(iterator) {
          var compScheduler = cc.director._compScheduler;
          var array = iterator.array;
          for (iterator.i = 0; iterator.i < array.length; ++iterator.i) {
            var comp = array[iterator.i];
            if (comp._enabled) {
              comp.onEnable();
              var deactivatedDuringOnEnable = !comp.node._activeInHierarchy;
              deactivatedDuringOnEnable || compScheduler._onEnabled(comp);
            }
          }
        }
      },
      _onEnabled: function _onEnabled(comp) {
        cc.director.getScheduler().resumeTarget(comp);
        comp._objFlags |= IsOnEnableCalled;
        this._updating ? this._deferredComps.push(comp) : this._scheduleImmediate(comp);
      },
      _onDisabled: function _onDisabled(comp) {
        cc.director.getScheduler().pauseTarget(comp);
        comp._objFlags &= ~IsOnEnableCalled;
        var index = this._deferredComps.indexOf(comp);
        if (index >= 0) {
          jsArray.fastRemoveAt(this._deferredComps, index);
          return;
        }
        !comp.start || comp._objFlags & IsStartCalled || this.startInvoker.remove(comp);
        comp.update && this.updateInvoker.remove(comp);
        comp.lateUpdate && this.lateUpdateInvoker.remove(comp);
      },
      enableComp: function(comp, invoker) {
        if (!(comp._objFlags & IsOnEnableCalled)) {
          if (comp.onEnable) {
            if (invoker) {
              invoker.add(comp);
              return;
            }
            comp.onEnable();
            var deactivatedDuringOnEnable = !comp.node._activeInHierarchy;
            if (deactivatedDuringOnEnable) return;
          }
          this._onEnabled(comp);
        }
      },
      disableComp: function(comp) {
        if (comp._objFlags & IsOnEnableCalled) {
          comp.onDisable && comp.onDisable();
          this._onDisabled(comp);
        }
      },
      _scheduleImmediate: function _scheduleImmediate(comp) {
        "function" !== typeof comp.start || comp._objFlags & IsStartCalled || this.startInvoker.add(comp);
        "function" === typeof comp.update && this.updateInvoker.add(comp);
        "function" === typeof comp.lateUpdate && this.lateUpdateInvoker.add(comp);
      },
      _deferredSchedule: function _deferredSchedule() {
        var comps = this._deferredComps;
        for (var i = 0, len = comps.length; i < len; i++) this._scheduleImmediate(comps[i]);
        comps.length = 0;
      },
      _startForNewComps: function _startForNewComps() {
        if (this._deferredComps.length > 0) {
          this._deferredSchedule();
          this.startInvoker.invoke();
        }
      },
      startPhase: function startPhase() {
        this._updating = true;
        this.startInvoker.invoke();
        this._startForNewComps();
      },
      updatePhase: function updatePhase(dt) {
        this.updateInvoker.invoke(dt);
      },
      lateUpdatePhase: function lateUpdatePhase(dt) {
        this.lateUpdateInvoker.invoke(dt);
        this._updating = false;
        this._startForNewComps();
      }
    });
    module.exports = ComponentScheduler;
  }), {
    "./platform/CCClass": 138,
    "./platform/CCObject": 144,
    "./platform/js": 158,
    "./utils/misc": 209
  } ],
  89: [ (function(require, module, exports) {
    "use strict";
    var AnimationAnimator = require("../../animation/animation-animator");
    var AnimationClip = require("../../animation/animation-clip");
    var EventTarget = require("../event/event-target");
    var js = require("../platform/js");
    var equalClips = function(clip1, clip2) {
      return clip1 === clip2;
    };
    var EventType = cc.Enum({
      PLAY: "play",
      STOP: "stop",
      PAUSE: "pause",
      RESUME: "resume",
      LASTFRAME: "lastframe",
      FINISHED: "finished"
    });
    var Animation = cc.Class({
      name: "cc.Animation",
      extends: require("./CCComponent"),
      mixins: [ EventTarget ],
      editor: false,
      statics: {
        EventType: EventType
      },
      ctor: function ctor() {
        cc.EventTarget.call(this);
        this._animator = null;
        this._nameToState = js.createMap(true);
        this._didInit = false;
        this._currentClip = null;
      },
      properties: {
        _defaultClip: {
          default: null,
          type: AnimationClip
        },
        defaultClip: {
          type: AnimationClip,
          get: function get() {
            return this._defaultClip;
          },
          set: function set(value) {
            true;
            return;
          },
          tooltip: false
        },
        currentClip: {
          get: function get() {
            return this._currentClip;
          },
          set: function set(value) {
            this._currentClip = value;
          },
          type: AnimationClip,
          visible: false
        },
        _writableClips: {
          get: function get() {
            return this._clips;
          },
          set: function set(val) {
            this._didInit = false;
            this._clips = val;
            this._init();
          },
          type: [ AnimationClip ]
        },
        _clips: {
          default: [],
          type: [ AnimationClip ],
          tooltip: false,
          visible: true
        },
        playOnLoad: {
          default: false,
          tooltip: false
        }
      },
      start: function start() {
        if ((true, this.playOnLoad) && this._defaultClip) {
          var isPlaying = this._animator && this._animator.isPlaying;
          if (!isPlaying) {
            var state = this.getAnimationState(this._defaultClip.name);
            this._animator.playState(state);
          }
        }
      },
      onEnable: function onEnable() {
        this._animator && this._animator.resume();
      },
      onDisable: function onDisable() {
        this._animator && this._animator.pause();
      },
      onDestroy: function onDestroy() {
        this.stop();
      },
      getClips: function getClips() {
        return this._clips;
      },
      play: function play(name, startTime) {
        var state = this.playAdditive(name, startTime);
        this._animator.stopStatesExcept(state);
        return state;
      },
      playAdditive: function playAdditive(name, startTime) {
        this._init();
        var state = this.getAnimationState(name || this._defaultClip && this._defaultClip.name);
        if (state) {
          this.enabled = true;
          var animator = this._animator;
          if (animator.isPlaying && state.isPlaying) if (state.isPaused) animator.resumeState(state); else {
            animator.stopState(state);
            animator.playState(state, startTime);
          } else animator.playState(state, startTime);
          this.enabledInHierarchy || animator.pause();
          this.currentClip = state.clip;
        }
        return state;
      },
      stop: function stop(name) {
        if (!this._didInit) return;
        if (name) {
          var state = this._nameToState[name];
          state && this._animator.stopState(state);
        } else this._animator.stop();
      },
      pause: function pause(name) {
        if (!this._didInit) return;
        if (name) {
          var state = this._nameToState[name];
          state && this._animator.pauseState(state);
        } else this.enabled = false;
      },
      resume: function resume(name) {
        if (!this._didInit) return;
        if (name) {
          var state = this._nameToState[name];
          state && this._animator.resumeState(state);
        } else this.enabled = true;
      },
      setCurrentTime: function setCurrentTime(time, name) {
        this._init();
        if (name) {
          var state = this._nameToState[name];
          state && this._animator.setStateTime(state, time);
        } else this._animator.setStateTime(time);
      },
      getAnimationState: function getAnimationState(name) {
        this._init();
        var state = this._nameToState[name];
        false;
        state && !state.curveLoaded && this._animator._reloadClip(state);
        return state || null;
      },
      addClip: function addClip(clip, newName) {
        if (!clip) {
          cc.warnID(3900);
          return;
        }
        this._init();
        cc.js.array.contains(this._clips, clip) || this._clips.push(clip);
        newName = newName || clip.name;
        var oldState = this._nameToState[newName];
        if (oldState) {
          if (oldState.clip === clip) return oldState;
          var index = this._clips.indexOf(oldState.clip);
          -1 !== index && this._clips.splice(index, 1);
        }
        var newState = new cc.AnimationState(clip, newName);
        this._nameToState[newName] = newState;
        return newState;
      },
      removeClip: function removeClip(clip, force) {
        if (!clip) {
          cc.warnID(3901);
          return;
        }
        this._init();
        var state;
        for (var name in this._nameToState) {
          state = this._nameToState[name];
          if (equalClips(state.clip, clip)) break;
        }
        if (clip === this._defaultClip) {
          if (!force) {
            true;
            cc.warnID(3902);
            return;
          }
          this._defaultClip = null;
        }
        if (state && state.isPlaying) {
          if (!force) {
            true;
            cc.warnID(3903);
            return;
          }
          this.stop(state.name);
        }
        this._clips = this._clips.filter((function(item) {
          return !equalClips(item, clip);
        }));
        state && delete this._nameToState[state.name];
      },
      sample: function sample(name) {
        this._init();
        if (name) {
          var state = this._nameToState[name];
          state && state.sample();
        } else this._animator.sample();
      },
      on: function on(type, callback, target, useCapture) {
        this._init();
        var ret = this._EventTargetOn(type, callback, target, useCapture);
        if ("lastframe" === type) {
          var states = this._nameToState;
          for (var name in states) states[name]._lastframeEventOn = true;
        }
        return ret;
      },
      off: function off(type, callback, target, useCapture) {
        this._init();
        if ("lastframe" === type) {
          var states = this._nameToState;
          for (var name in states) states[name]._lastframeEventOn = false;
        }
        this._EventTargetOff(type, callback, target, useCapture);
      },
      _init: function _init() {
        if (this._didInit) return;
        this._didInit = true;
        this._animator = new AnimationAnimator(this.node, this);
        this._createStates();
      },
      _createStates: function _createStates() {
        this._nameToState = js.createMap(true);
        var state = null;
        var defaultClipState = false;
        for (var i = 0; i < this._clips.length; ++i) {
          var clip = this._clips[i];
          if (clip) {
            state = new cc.AnimationState(clip);
            false;
            this._nameToState[state.name] = state;
            equalClips(this._defaultClip, clip) && (defaultClipState = state);
          }
        }
        if (this._defaultClip && !defaultClipState) {
          state = new cc.AnimationState(this._defaultClip);
          false;
          this._nameToState[state.name] = state;
        }
      }
    });
    Animation.prototype._EventTargetOn = EventTarget.prototype.on;
    Animation.prototype._EventTargetOff = EventTarget.prototype.off;
    cc.Animation = module.exports = Animation;
  }), {
    "../../animation/animation-animator": 10,
    "../../animation/animation-clip": 11,
    "../event/event-target": 121,
    "../platform/js": 158,
    "./CCComponent": 94
  } ],
  90: [ (function(require, module, exports) {
    "use strict";
    var misc = require("../utils/misc");
    var Component = require("./CCComponent");
    var AudioClip = require("../assets/CCAudioClip");
    var AudioSource = cc.Class({
      name: "cc.AudioSource",
      extends: Component,
      editor: false,
      ctor: function ctor() {
        this.audio = new cc._Audio();
      },
      properties: {
        _clip: {
          default: null,
          type: AudioClip
        },
        _volume: 1,
        _mute: false,
        _loop: false,
        _pausedFlag: {
          default: false,
          serializable: false
        },
        isPlaying: {
          get: function get() {
            var state = this.audio.getState();
            return state === cc._Audio.State.PLAYING;
          },
          visible: false
        },
        clip: {
          get: function get() {
            return this._clip;
          },
          set: function set(value) {
            if (value === this._clip) return;
            if (!(value instanceof AudioClip)) return cc.error("Wrong type of AudioClip.");
            this._clip = value;
            this.audio.stop();
            this.preload && (this.audio.src = this._clip);
          },
          type: AudioClip,
          tooltip: false,
          animatable: false
        },
        volume: {
          get: function get() {
            return this._volume;
          },
          set: function set(value) {
            value = misc.clamp01(value);
            this._volume = value;
            this._mute || this.audio.setVolume(value);
            return value;
          },
          tooltip: false
        },
        mute: {
          get: function get() {
            return this._mute;
          },
          set: function set(value) {
            this._mute = value;
            this.audio.setVolume(value ? 0 : this._volume);
            return value;
          },
          animatable: false,
          tooltip: false
        },
        loop: {
          get: function get() {
            return this._loop;
          },
          set: function set(value) {
            this._loop = value;
            this.audio.setLoop(value);
            return value;
          },
          animatable: false,
          tooltip: false
        },
        playOnLoad: {
          default: false,
          tooltip: false,
          animatable: false
        },
        preload: {
          default: false,
          animatable: false
        }
      },
      _ensureDataLoaded: function _ensureDataLoaded() {
        this.audio.src !== this._clip && (this.audio.src = this._clip);
      },
      _pausedCallback: function _pausedCallback() {
        var state = this.audio.getState();
        if (state === cc._Audio.State.PLAYING) {
          this.audio.pause();
          this._pausedFlag = true;
        }
      },
      _restoreCallback: function _restoreCallback() {
        this._pausedFlag && this.audio.resume();
        this._pausedFlag = false;
      },
      onLoad: function onLoad() {
        this.audio.setVolume(this._mute ? 0 : this._volume);
        this.audio.setLoop(this._loop);
      },
      onEnable: function onEnable() {
        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 onDisable() {
        this.stop();
        cc.game.off(cc.game.EVENT_HIDE, this._pausedCallback, this);
        cc.game.off(cc.game.EVENT_SHOW, this._restoreCallback, this);
      },
      onDestroy: function onDestroy() {
        this.stop();
        this.audio.destroy();
        cc.audioEngine.uncache(this._clip);
      },
      play: function play() {
        if (!this._clip) return;
        var audio = this.audio;
        this._clip.loaded && audio.stop();
        this._ensureDataLoaded();
        audio.setCurrentTime(0);
        audio.play();
      },
      stop: function stop() {
        this.audio.stop();
      },
      pause: function pause() {
        this.audio.pause();
      },
      resume: function resume() {
        this._ensureDataLoaded();
        this.audio.resume();
      },
      rewind: function rewind() {
        this.audio.setCurrentTime(0);
      },
      getCurrentTime: function getCurrentTime() {
        return this.audio.getCurrentTime();
      },
      setCurrentTime: function setCurrentTime(time) {
        this.audio.setCurrentTime(time);
        return time;
      },
      getDuration: function getDuration() {
        return this.audio.getDuration();
      }
    });
    cc.AudioSource = module.exports = AudioSource;
  }), {
    "../assets/CCAudioClip": 60,
    "../utils/misc": 209,
    "./CCComponent": 94
  } ],
  91: [ (function(require, module, exports) {
    "use strict";
    var BlockEvents = [ "touchstart", "touchmove", "touchend", "mousedown", "mousemove", "mouseup", "mouseenter", "mouseleave", "mousewheel" ];
    function stopPropagation(event) {
      event.stopPropagation();
    }
    var BlockInputEvents = cc.Class({
      name: "cc.BlockInputEvents",
      extends: require("./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 onEnable() {
        for (var i = 0; i < BlockEvents.length; i++) this.node.on(BlockEvents[i], stopPropagation, this);
      },
      onDisable: function onDisable() {
        for (var i = 0; i < BlockEvents.length; i++) this.node.off(BlockEvents[i], stopPropagation, this);
      }
    });
    cc.BlockInputEvents = module.exports = BlockInputEvents;
  }), {
    "./CCComponent": 94
  } ],
  92: [ (function(require, module, exports) {
    "use strict";
    var Component = require("./CCComponent");
    var GraySpriteState = require("../utils/gray-sprite-state");
    var Transition = cc.Enum({
      NONE: 0,
      COLOR: 1,
      SPRITE: 2,
      SCALE: 3
    });
    var State = cc.Enum({
      NORMAL: 0,
      HOVER: 1,
      PRESSED: 2,
      DISABLED: 3
    });
    var Button = cc.Class({
      name: "cc.Button",
      extends: Component,
      mixins: [ GraySpriteState ],
      ctor: function ctor() {
        this._pressed = false;
        this._hovered = false;
        this._fromColor = null;
        this._toColor = null;
        this._time = 0;
        this._transitionFinished = true;
        this._fromScale = cc.Vec2.ZERO;
        this._toScale = cc.Vec2.ZERO;
        this._originalScale = null;
        this._graySpriteMaterial = null;
        this._spriteMaterial = null;
        this._sprite = null;
      },
      editor: false,
      properties: {
        interactable: {
          default: true,
          tooltip: false,
          notify: function notify() {
            this._updateState();
            this.interactable || this._resetState();
          },
          animatable: false
        },
        _resizeToTarget: {
          animatable: false,
          set: function set(value) {
            value && this._resizeNodeToTargetNode();
          }
        },
        enableAutoGrayEffect: {
          default: false,
          tooltip: false,
          notify: function notify() {
            this._updateDisabledState(true);
          }
        },
        transition: {
          default: Transition.NONE,
          tooltip: false,
          type: Transition,
          animatable: false,
          notify: function notify(oldValue) {
            this._updateTransition(oldValue);
          },
          formerlySerializedAs: "transition"
        },
        normalColor: {
          default: cc.Color.WHITE,
          displayName: "Normal",
          tooltip: false,
          notify: function notify() {
            this.transition === Transition.Color && this._getButtonState() === State.NORMAL && (this._getTarget().opacity = this.normalColor.a);
            this._updateState();
          }
        },
        pressedColor: {
          default: cc.color(211, 211, 211),
          displayName: "Pressed",
          tooltip: false,
          notify: function notify() {
            this.transition === Transition.Color && this._getButtonState() === State.PRESSED && (this._getTarget().opacity = this.pressedColor.a);
            this._updateState();
          },
          formerlySerializedAs: "pressedColor"
        },
        hoverColor: {
          default: cc.Color.WHITE,
          displayName: "Hover",
          tooltip: false,
          notify: function notify() {
            this.transition === Transition.Color && this._getButtonState() === State.HOVER && (this._getTarget().opacity = this.hoverColor.a);
            this._updateState();
          },
          formerlySerializedAs: "hoverColor"
        },
        disabledColor: {
          default: cc.color(124, 124, 124),
          displayName: "Disabled",
          tooltip: false,
          notify: function notify() {
            this.transition === Transition.Color && this._getButtonState() === State.DISABLED && (this._getTarget().opacity = this.disabledColor.a);
            this._updateState();
          }
        },
        duration: {
          default: .1,
          range: [ 0, 10 ],
          tooltip: false
        },
        zoomScale: {
          default: 1.2,
          tooltip: false
        },
        normalSprite: {
          default: null,
          type: cc.SpriteFrame,
          displayName: "Normal",
          tooltip: false,
          notify: function notify() {
            this._updateState();
          }
        },
        pressedSprite: {
          default: null,
          type: cc.SpriteFrame,
          displayName: "Pressed",
          tooltip: false,
          formerlySerializedAs: "pressedSprite",
          notify: function notify() {
            this._updateState();
          }
        },
        hoverSprite: {
          default: null,
          type: cc.SpriteFrame,
          displayName: "Hover",
          tooltip: false,
          formerlySerializedAs: "hoverSprite",
          notify: function notify() {
            this._updateState();
          }
        },
        disabledSprite: {
          default: null,
          type: cc.SpriteFrame,
          displayName: "Disabled",
          tooltip: false,
          notify: function notify() {
            this._updateState();
          }
        },
        target: {
          default: null,
          type: cc.Node,
          tooltip: false,
          notify: function notify(oldValue) {
            this._applyTarget();
            oldValue && this.target !== oldValue && this._unregisterTargetEvent(oldValue);
          }
        },
        clickEvents: {
          default: [],
          type: cc.Component.EventHandler,
          tooltip: false
        }
      },
      statics: {
        Transition: Transition
      },
      __preload: function __preload() {
        this._applyTarget();
        this._resetState();
      },
      _resetState: function _resetState() {
        this._pressed = false;
        this._hovered = false;
        var target = this._getTarget();
        var transition = this.transition;
        var originalScale = this._originalScale;
        transition === Transition.COLOR && this.interactable ? this._setTargetColor(this.normalColor) : transition === Transition.SCALE && originalScale && target.setScale(originalScale.x, originalScale.y);
        this._transitionFinished = true;
      },
      onEnable: function onEnable() {
        this.normalSprite && this.normalSprite.ensureLoadTexture();
        this.hoverSprite && this.hoverSprite.ensureLoadTexture();
        this.pressedSprite && this.pressedSprite.ensureLoadTexture();
        this.disabledSprite && this.disabledSprite.ensureLoadTexture();
        true;
        this._registerNodeEvent();
        this._updateState();
      },
      onDisable: function onDisable() {
        this._resetState();
        true;
        this._unregisterNodeEvent();
      },
      _getTarget: function _getTarget() {
        return this.target ? this.target : this.node;
      },
      _onTargetSpriteFrameChanged: function _onTargetSpriteFrameChanged(comp) {
        this.transition === Transition.SPRITE && this._setCurrentStateSprite(comp.spriteFrame);
      },
      _onTargetColorChanged: function _onTargetColorChanged(color) {
        this.transition === Transition.COLOR && this._setCurrentStateColor(color);
      },
      _onTargetScaleChanged: function _onTargetScaleChanged() {
        var target = this._getTarget();
        if (this._originalScale && (this.transition !== Transition.SCALE || this._transitionFinished)) {
          this._originalScale.x = target.scaleX;
          this._originalScale.y = target.scaleY;
        }
      },
      _setTargetColor: function _setTargetColor(color) {
        var target = this._getTarget();
        var cloneColor = color.clone();
        target.opacity = cloneColor.a;
        cloneColor.a = 255;
        target.color = cloneColor;
      },
      _getStateColor: function _getStateColor(state) {
        switch (state) {
         case State.NORMAL:
          return this.normalColor;

         case State.HOVER:
          return this.hoverColor;

         case State.PRESSED:
          return this.pressedColor;

         case State.DISABLED:
          return this.disabledColor;
        }
      },
      _getStateSprite: function _getStateSprite(state) {
        switch (state) {
         case State.NORMAL:
          return this.normalSprite;

         case State.HOVER:
          return this.hoverSprite;

         case State.PRESSED:
          return this.pressedSprite;

         case State.DISABLED:
          return this.disabledSprite;
        }
      },
      _setCurrentStateColor: function _setCurrentStateColor(color) {
        switch (this._getButtonState()) {
         case State.NORMAL:
          this.normalColor = color;
          break;

         case State.HOVER:
          this.hoverColor = color;
          break;

         case State.PRESSED:
          this.pressedColor = color;
          break;

         case State.DISABLED:
          this.disabledColor = color;
        }
      },
      _setCurrentStateSprite: function _setCurrentStateSprite(spriteFrame) {
        switch (this._getButtonState()) {
         case State.NORMAL:
          this.normalSprite = spriteFrame;
          break;

         case State.HOVER:
          this.hoverSprite = spriteFrame;
          break;

         case State.PRESSED:
          this.pressedSprite = spriteFrame;
          break;

         case State.DISABLED:
          this.disabledSprite = spriteFrame;
        }
      },
      update: function update(dt) {
        var target = this._getTarget();
        if (this._transitionFinished) return;
        if (this.transition !== Transition.COLOR && this.transition !== Transition.SCALE) return;
        this.time += dt;
        var ratio = 1;
        this.duration > 0 && (ratio = this.time / this.duration);
        ratio >= 1 && (ratio = 1);
        if (this.transition === Transition.COLOR) {
          var color = this._fromColor.lerp(this._toColor, ratio);
          this._setTargetColor(color);
        } else this.transition === Transition.SCALE && this._originalScale && (target.scale = this._fromScale.lerp(this._toScale, ratio));
        1 === ratio && (this._transitionFinished = true);
      },
      _registerNodeEvent: function _registerNodeEvent() {
        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 _unregisterNodeEvent() {
        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 _registerTargetEvent(target) {
        false;
        target.on(cc.Node.EventType.SCALE_CHANGED, this._onTargetScaleChanged, this);
      },
      _unregisterTargetEvent: function _unregisterTargetEvent(target) {
        false;
        target.off(cc.Node.EventType.SCALE_CHANGED, this._onTargetScaleChanged, this);
      },
      _getTargetSprite: function _getTargetSprite(target) {
        var sprite = null;
        target && (sprite = target.getComponent(cc.Sprite));
        return sprite;
      },
      _applyTarget: function _applyTarget() {
        var target = this._getTarget();
        this._sprite = this._getTargetSprite(target);
        this._originalScale || (this._originalScale = cc.Vec2.ZERO);
        this._originalScale.x = target.scaleX;
        this._originalScale.y = target.scaleY;
        this._registerTargetEvent(target);
      },
      _onTouchBegan: function _onTouchBegan(event) {
        if (!this.interactable || !this.enabledInHierarchy) return;
        this._pressed = true;
        this._updateState();
        event.stopPropagation();
      },
      _onTouchMove: function _onTouchMove(event) {
        if (!this.interactable || !this.enabledInHierarchy || !this._pressed) return;
        var touch = event.touch;
        var hit = this.node._hitTest(touch.getLocation());
        var target = this._getTarget();
        var originalScale = this._originalScale;
        if (this.transition === Transition.SCALE && originalScale) if (hit) {
          this._fromScale.x = originalScale.x;
          this._fromScale.y = originalScale.y;
          this._toScale.x = originalScale.x * this.zoomScale;
          this._toScale.y = originalScale.y * this.zoomScale;
          this._transitionFinished = false;
        } else {
          this.time = 0;
          this._transitionFinished = true;
          target.setScale(originalScale.x, originalScale.y);
        } else {
          var state;
          state = hit ? State.PRESSED : State.NORMAL;
          this._applyTransition(state);
        }
        event.stopPropagation();
      },
      _onTouchEnded: function _onTouchEnded(event) {
        if (!this.interactable || !this.enabledInHierarchy) return;
        if (this._pressed) {
          cc.Component.EventHandler.emitEvents(this.clickEvents, event);
          this.node.emit("click", this);
        }
        this._pressed = false;
        this._updateState();
        event.stopPropagation();
      },
      _onTouchCancel: function _onTouchCancel() {
        if (!this.interactable || !this.enabledInHierarchy) return;
        this._pressed = false;
        this._updateState();
      },
      _onMouseMoveIn: function _onMouseMoveIn() {
        if (this._pressed || !this.interactable || !this.enabledInHierarchy) return;
        if (this.transition === Transition.SPRITE && !this.hoverSprite) return;
        if (!this._hovered) {
          this._hovered = true;
          this._updateState();
        }
      },
      _onMouseMoveOut: function _onMouseMoveOut() {
        if (this._hovered) {
          this._hovered = false;
          this._updateState();
        }
      },
      _updateState: function _updateState() {
        var state = this._getButtonState();
        this._applyTransition(state);
        this._updateDisabledState();
      },
      _getButtonState: function _getButtonState() {
        var state;
        state = this.interactable ? this._pressed ? State.PRESSED : this._hovered ? State.HOVER : State.NORMAL : State.DISABLED;
        return state;
      },
      _updateColorTransitionImmediately: function _updateColorTransitionImmediately(state) {
        var color = this._getStateColor(state);
        this._setTargetColor(color);
        this._fromColor = color.clone();
        this._toColor = color;
      },
      _updateColorTransition: function _updateColorTransition(state) {
        if (false, state === State.DISABLED) this._updateColorTransitionImmediately(state); else {
          var target = this._getTarget();
          var color = this._getStateColor(state);
          this._fromColor = target.color.clone();
          this._toColor = color;
          this.time = 0;
          this._transitionFinished = false;
        }
      },
      _updateSpriteTransition: function _updateSpriteTransition(state) {
        var sprite = this._getStateSprite(state);
        this._sprite && sprite && (this._sprite.spriteFrame = sprite);
      },
      _updateScaleTransition: function _updateScaleTransition(state) {
        state === State.PRESSED ? this._zoomUp() : this._zoomBack();
      },
      _zoomUp: function _zoomUp() {
        if (!this._originalScale) return;
        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 = false;
      },
      _zoomBack: function _zoomBack() {
        if (!this._originalScale) return;
        var target = this._getTarget();
        this._fromScale.x = target.scaleX;
        this._fromScale.y = target.scaleY;
        this._toScale.x = this._originalScale.x;
        this._toScale.y = this._originalScale.y;
        this.time = 0;
        this._transitionFinished = false;
      },
      _updateTransition: function _updateTransition(oldTransition) {
        oldTransition === Transition.COLOR ? this._updateColorTransitionImmediately(State.NORMAL) : oldTransition === Transition.SPRITE && this._updateSpriteTransition(State.NORMAL);
        this._updateState();
      },
      _applyTransition: function _applyTransition(state) {
        var transition = this.transition;
        transition === Transition.COLOR ? this._updateColorTransition(state) : transition === Transition.SPRITE ? this._updateSpriteTransition(state) : transition === Transition.SCALE && this._updateScaleTransition(state);
      },
      _resizeNodeToTargetNode: false,
      _updateDisabledState: function _updateDisabledState(force) {
        if (!this._sprite) return;
        if (this.enableAutoGrayEffect || force) {
          var useGrayMaterial = false;
          this.transition === Transition.SPRITE && this.disabledSprite || (useGrayMaterial = this.enableAutoGrayEffect && !this.interactable);
          this._switchGrayMaterial(useGrayMaterial, this._sprite);
        }
      }
    });
    cc.Button = module.exports = Button;
  }), {
    "../utils/gray-sprite-state": 206,
    "./CCComponent": 94
  } ],
  93: [ (function(require, module, exports) {
    "use strict";
    var Camera = require("../camera/CCCamera");
    var Component = require("./CCComponent");
    function resetWidgetComponent(canvas) {
      var widget = canvas.node.getComponent(cc.Widget);
      widget || (widget = canvas.node.addComponent(cc.Widget));
      widget.isAlignTop = true;
      widget.isAlignBottom = true;
      widget.isAlignLeft = true;
      widget.isAlignRight = true;
      widget.top = 0;
      widget.bottom = 0;
      widget.left = 0;
      widget.right = 0;
    }
    var Canvas = cc.Class({
      name: "cc.Canvas",
      extends: Component,
      editor: false,
      resetInEditor: false,
      statics: {
        instance: null
      },
      properties: {
        _designResolution: cc.size(960, 640),
        designResolution: {
          get: function get() {
            return cc.size(this._designResolution);
          },
          set: function set(value) {
            this._designResolution.width = value.width;
            this._designResolution.height = value.height;
            this.applySettings();
          },
          tooltip: false
        },
        _fitWidth: false,
        _fitHeight: true,
        fitHeight: {
          get: function get() {
            return this._fitHeight;
          },
          set: function set(value) {
            if (this._fitHeight !== value) {
              this._fitHeight = value;
              this.applySettings();
            }
          },
          tooltip: false
        },
        fitWidth: {
          get: function get() {
            return this._fitWidth;
          },
          set: function set(value) {
            if (this._fitWidth !== value) {
              this._fitWidth = value;
              this.applySettings();
            }
          },
          tooltip: false
        }
      },
      _fitDesignResolution: false,
      __preload: function __preload() {
        var Flags;
        false;
        if (Canvas.instance) return cc.warnID(6700, this.node.name, Canvas.instance.node.name);
        Canvas.instance = this;
        this.applySettings();
        var widget = this.getComponent(cc.Widget);
        !!widget && widget.updateAlignment();
        false;
      },
      start: function start() {
        if (!Camera.main && cc.game.renderType !== cc.game.RENDER_TYPE_CANVAS) {
          var cameraNode = new cc.Node("Main Camera");
          cameraNode.parent = this.node;
          cameraNode.setSiblingIndex(0);
          var camera = cameraNode.addComponent(Camera);
          var ClearFlags = Camera.ClearFlags;
          camera.clearFlags = ClearFlags.COLOR | ClearFlags.DEPTH | ClearFlags.STENCIL;
          camera.depth = -1;
        }
      },
      onDestroy: function onDestroy() {
        false;
        Canvas.instance === this && (Canvas.instance = null);
      },
      applySettings: function applySettings() {
        var ResolutionPolicy = cc.ResolutionPolicy;
        var policy;
        policy = this.fitHeight && this.fitWidth ? ResolutionPolicy.SHOW_ALL : this.fitHeight || this.fitWidth ? this.fitWidth ? ResolutionPolicy.FIXED_WIDTH : ResolutionPolicy.FIXED_HEIGHT : ResolutionPolicy.NO_BORDER;
        var designRes = this._designResolution;
        false;
        cc.view.setDesignResolutionSize(designRes.width, designRes.height, policy);
      }
    });
    cc.Canvas = module.exports = Canvas;
  }), {
    "../camera/CCCamera": 87,
    "./CCComponent": 94
  } ],
  94: [ (function(require, module, exports) {
    "use strict";
    var CCObject = require("../platform/CCObject");
    var js = require("../platform/js");
    var idGenerater = new (require("../platform/id-generater"))("Comp");
    var IsOnEnableCalled = CCObject.Flags.IsOnEnableCalled;
    var IsOnLoadCalled = CCObject.Flags.IsOnLoadCalled;
    var ActionManagerExist = !!cc.ActionManager;
    var Component = cc.Class({
      name: "cc.Component",
      extends: CCObject,
      ctor: function() {
        this._id = idGenerater.getNewId();
        this.__eventTargets = [];
      },
      properties: {
        node: {
          default: null,
          visible: false
        },
        name: {
          get: function get() {
            if (this._name) return this._name;
            var className = cc.js.getClassName(this);
            var trimLeft = className.lastIndexOf(".");
            trimLeft >= 0 && (className = className.slice(trimLeft + 1));
            return this.node.name + "<" + className + ">";
          },
          set: function set(value) {
            this._name = value;
          },
          visible: false
        },
        uuid: {
          get: function get() {
            return this._id;
          },
          visible: false
        },
        __scriptAsset: false,
        _enabled: true,
        enabled: {
          get: function get() {
            return this._enabled;
          },
          set: function set(value) {
            if (this._enabled !== value) {
              this._enabled = value;
              if (this.node._activeInHierarchy) {
                var compScheduler = cc.director._compScheduler;
                value ? compScheduler.enableComp(this) : compScheduler.disableComp(this);
              }
            }
          },
          visible: false,
          animatable: true
        },
        enabledInHierarchy: {
          get: function get() {
            return this._enabled && this.node._activeInHierarchy;
          },
          visible: false
        },
        _isOnLoadCalled: {
          get: function get() {
            return this._objFlags & IsOnLoadCalled;
          }
        }
      },
      update: null,
      lateUpdate: null,
      __preload: null,
      onLoad: null,
      start: null,
      onEnable: null,
      onDisable: null,
      onDestroy: null,
      onFocusInEditor: null,
      onLostFocusInEditor: null,
      resetInEditor: null,
      addComponent: function addComponent(typeOrClassName) {
        return this.node.addComponent(typeOrClassName);
      },
      getComponent: function getComponent(typeOrClassName) {
        return this.node.getComponent(typeOrClassName);
      },
      getComponents: function getComponents(typeOrClassName) {
        return this.node.getComponents(typeOrClassName);
      },
      getComponentInChildren: function getComponentInChildren(typeOrClassName) {
        return this.node.getComponentInChildren(typeOrClassName);
      },
      getComponentsInChildren: function getComponentsInChildren(typeOrClassName) {
        return this.node.getComponentsInChildren(typeOrClassName);
      },
      _getLocalBounds: null,
      onRestore: null,
      destroy: function destroy() {
        var depend;
        false;
        this._super() && this._enabled && this.node._activeInHierarchy && cc.director._compScheduler.disableComp(this);
      },
      _onPreDestroy: function _onPreDestroy() {
        ActionManagerExist && cc.director.getActionManager().removeAllActionsFromTarget(this);
        this.unscheduleAllCallbacks();
        var eventTargets = this.__eventTargets;
        for (var i = eventTargets.length - 1; i >= 0; --i) {
          var target = eventTargets[i];
          target && target.targetOff(this);
        }
        eventTargets.length = 0;
        false;
        cc.director._nodeActivator.destroyComp(this);
        this.node._removeComponent(this);
      },
      _instantiate: function _instantiate(cloned) {
        cloned || (cloned = cc.instantiate._clone(this, this));
        cloned.node = null;
        return cloned;
      },
      schedule: function schedule(callback, interval, repeat, delay) {
        cc.assertID(callback, 1619);
        interval = interval || 0;
        cc.assertID(interval >= 0, 1620);
        repeat = isNaN(repeat) ? cc.macro.REPEAT_FOREVER : repeat;
        delay = delay || 0;
        var scheduler = cc.director.getScheduler();
        var paused = scheduler.isTargetPaused(this);
        scheduler.schedule(callback, this, interval, repeat, delay, paused);
      },
      scheduleOnce: function scheduleOnce(callback, delay) {
        this.schedule(callback, 0, 0, delay);
      },
      unschedule: function unschedule(callback_fn) {
        if (!callback_fn) return;
        cc.director.getScheduler().unschedule(callback_fn, this);
      },
      unscheduleAllCallbacks: function unscheduleAllCallbacks() {
        cc.director.getScheduler().unscheduleAllForTarget(this);
      }
    });
    Component._requireComponent = null;
    Component._executionOrder = 0;
    false;
    false, false;
    js.value(Component, "_registerEditorProps", (function(cls, props) {
      var reqComp = props.requireComponent;
      reqComp && (cls._requireComponent = reqComp);
      var order = props.executionOrder;
      order && "number" === typeof order && (cls._executionOrder = order);
      (false, false) && "disallowMultiple" in props && (cls._disallowMultiple = cls);
      var name;
      var key;
      var val;
      var willExecuteInEditMode;
      false, false;
    }));
    Component.prototype.__scriptUuid = "";
    cc.Component = module.exports = Component;
  }), {
    "../platform/CCObject": 144,
    "../platform/id-generater": 154,
    "../platform/js": 158
  } ],
  95: [ (function(require, module, exports) {
    "use strict";
    cc.Component.EventHandler = cc.Class({
      name: "cc.ClickEvent",
      properties: {
        target: {
          default: null,
          type: cc.Node
        },
        component: "",
        _componentId: "",
        _componentName: {
          get: function get() {
            this._genCompIdIfNeeded();
            return this._compId2Name(this._componentId);
          },
          set: function set(value) {
            this._componentId = this._compName2Id(value);
          }
        },
        handler: {
          default: ""
        },
        customEventData: {
          default: ""
        }
      },
      statics: {
        emitEvents: function emitEvents(events) {
          var args;
          if (arguments.length > 0) {
            args = new Array(arguments.length - 1);
            for (var i = 0, l = args.length; i < l; i++) args[i] = arguments[i + 1];
          }
          for (var _i = 0, _l = events.length; _i < _l; _i++) {
            var event = events[_i];
            if (!(event instanceof cc.Component.EventHandler)) continue;
            event.emit(args);
          }
        }
      },
      emit: function emit(params) {
        var target = this.target;
        if (!cc.isValid(target)) return;
        this._genCompIdIfNeeded();
        var compType = cc.js._getClassById(this._componentId);
        var comp = target.getComponent(compType);
        if (!cc.isValid(comp)) return;
        var handler = comp[this.handler];
        if ("function" !== typeof handler) return;
        if (null != this.customEventData && "" !== this.customEventData) {
          params = params.slice();
          params.push(this.customEventData);
        }
        handler.apply(comp, params);
      },
      _compName2Id: function _compName2Id(compName) {
        var comp = cc.js.getClassByName(compName);
        return cc.js._getClassId(comp);
      },
      _compId2Name: function _compId2Name(compId) {
        var comp = cc.js._getClassById(compId);
        return cc.js.getClassName(comp);
      },
      _genCompIdIfNeeded: function _genCompIdIfNeeded() {
        if (!this._componentId) {
          this._componentName = this.component;
          this.component = "";
        }
      }
    });
  }), {} ],
  96: [ (function(require, module, exports) {
    "use strict";
    var macro = require("../platform/CCMacro");
    var RenderComponent = require("./CCRenderComponent");
    var Material = require("../assets/material/CCMaterial");
    var LabelFrame = require("../renderer/utils/label/label-frame");
    var BlendFunc = require("../utils/blend-func");
    var HorizontalAlign = macro.TextAlignment;
    var VerticalAlign = macro.VerticalTextAlignment;
    var Overflow = cc.Enum({
      NONE: 0,
      CLAMP: 1,
      SHRINK: 2,
      RESIZE_HEIGHT: 3
    });
    var CacheMode = cc.Enum({
      NONE: 0,
      BITMAP: 1,
      CHAR: 2
    });
    var BOLD_FLAG = 1;
    var ITALIC_FLAG = 2;
    var UNDERLINE_FLAG = 4;
    var Label = cc.Class({
      name: "cc.Label",
      extends: RenderComponent,
      mixins: [ BlendFunc ],
      ctor: function ctor() {
        false;
        this._actualFontSize = 0;
        this._assemblerData = null;
        this._frame = null;
        this._ttfTexture = null;
        this._letterTexture = null;
        cc.game.renderType === cc.game.RENDER_TYPE_CANVAS ? this._updateMaterial = this._updateMaterialCanvas : this._updateMaterial = this._updateMaterialWebgl;
      },
      editor: false,
      properties: {
        _useOriginalSize: true,
        _string: {
          default: "",
          formerlySerializedAs: "_N$string"
        },
        string: {
          get: function get() {
            return this._string;
          },
          set: function set(value) {
            var oldValue = this._string;
            this._string = "" + value;
            this.string !== oldValue && this.setVertsDirty();
            this._checkStringEmpty();
          },
          multiline: true,
          tooltip: false
        },
        horizontalAlign: {
          default: HorizontalAlign.LEFT,
          type: HorizontalAlign,
          tooltip: false,
          notify: function notify(oldValue) {
            if (this.horizontalAlign === oldValue) return;
            this.setVertsDirty();
          },
          animatable: false
        },
        verticalAlign: {
          default: VerticalAlign.TOP,
          type: VerticalAlign,
          tooltip: false,
          notify: function notify(oldValue) {
            if (this.verticalAlign === oldValue) return;
            this.setVertsDirty();
          },
          animatable: false
        },
        actualFontSize: {
          displayName: "Actual Font Size",
          animatable: false,
          readonly: true,
          get: function get() {
            return this._actualFontSize;
          },
          tooltip: false
        },
        _fontSize: 40,
        fontSize: {
          get: function get() {
            return this._fontSize;
          },
          set: function set(value) {
            if (this._fontSize === value) return;
            this._fontSize = value;
            this.setVertsDirty();
          },
          range: [ 0, 512 ],
          tooltip: false
        },
        fontFamily: {
          default: "Arial",
          tooltip: false,
          notify: function notify(oldValue) {
            if (this.fontFamily === oldValue) return;
            this.setVertsDirty();
          },
          animatable: false
        },
        _lineHeight: 40,
        lineHeight: {
          get: function get() {
            return this._lineHeight;
          },
          set: function set(value) {
            if (this._lineHeight === value) return;
            this._lineHeight = value;
            this.setVertsDirty();
          },
          tooltip: false
        },
        overflow: {
          default: Overflow.NONE,
          type: Overflow,
          tooltip: false,
          notify: function notify(oldValue) {
            if (this.overflow === oldValue) return;
            this.setVertsDirty();
          },
          animatable: false
        },
        _enableWrapText: true,
        enableWrapText: {
          get: function get() {
            return this._enableWrapText;
          },
          set: function set(value) {
            if (this._enableWrapText === value) return;
            this._enableWrapText = value;
            this.setVertsDirty();
          },
          animatable: false,
          tooltip: false
        },
        _N$file: null,
        font: {
          get: function get() {
            return this._N$file;
          },
          set: function set(value) {
            if (this.font === value) return;
            value || (this._isSystemFontUsed = true);
            false;
            this._N$file = value;
            value && this._isSystemFontUsed && (this._isSystemFontUsed = false);
            if (!this.enabledInHierarchy) return;
            this._forceUpdateRenderData();
          },
          type: cc.Font,
          tooltip: false,
          animatable: false
        },
        _isSystemFontUsed: true,
        useSystemFont: {
          get: function get() {
            return this._isSystemFontUsed;
          },
          set: function set(value) {
            if (this._isSystemFontUsed === value) return;
            this._isSystemFontUsed = !!value;
            false;
            if (value) {
              this.font = null;
              if (!this.enabledInHierarchy) return;
              this._forceUpdateRenderData();
            }
            this.markForValidate();
          },
          animatable: false,
          tooltip: false
        },
        _bmFontOriginalSize: {
          displayName: "BMFont Original Size",
          get: function get() {
            return this._N$file instanceof cc.BitmapFont ? this._N$file.fontSize : -1;
          },
          visible: true,
          animatable: false
        },
        _spacingX: 0,
        spacingX: {
          get: function get() {
            return this._spacingX;
          },
          set: function set(value) {
            this._spacingX = value;
            this.setVertsDirty();
          },
          tooltip: false
        },
        _batchAsBitmap: false,
        cacheMode: {
          default: CacheMode.NONE,
          type: CacheMode,
          tooltip: false,
          notify: function notify(oldValue) {
            if (this.cacheMode === oldValue) return;
            oldValue !== CacheMode.BITMAP || this.font instanceof cc.BitmapFont || this._frame && this._frame._resetDynamicAtlasFrame();
            oldValue === CacheMode.CHAR && (this._ttfTexture = null);
            if (!this.enabledInHierarchy) return;
            this._forceUpdateRenderData();
          },
          animatable: false
        },
        _styleFlags: 0,
        enableBold: {
          get: function get() {
            return !!(this._styleFlags & BOLD_FLAG);
          },
          set: function set(value) {
            value ? this._styleFlags |= BOLD_FLAG : this._styleFlags &= ~BOLD_FLAG;
            this.setVertsDirty();
          },
          animatable: false,
          tooltip: false
        },
        enableItalic: {
          get: function get() {
            return !!(this._styleFlags & ITALIC_FLAG);
          },
          set: function set(value) {
            value ? this._styleFlags |= ITALIC_FLAG : this._styleFlags &= ~ITALIC_FLAG;
            this.setVertsDirty();
          },
          animatable: false,
          tooltip: false
        },
        enableUnderline: {
          get: function get() {
            return !!(this._styleFlags & UNDERLINE_FLAG);
          },
          set: function set(value) {
            value ? this._styleFlags |= UNDERLINE_FLAG : this._styleFlags &= ~UNDERLINE_FLAG;
            this.setVertsDirty();
          },
          animatable: false,
          tooltip: false
        },
        _underlineHeight: 0,
        underlineHeight: {
          get: function get() {
            return this._underlineHeight;
          },
          set: function set(value) {
            if (this._underlineHeight === value) return;
            this._underlineHeight = value;
            this.setVertsDirty();
          },
          tooltip: false
        }
      },
      statics: {
        HorizontalAlign: HorizontalAlign,
        VerticalAlign: VerticalAlign,
        Overflow: Overflow,
        CacheMode: CacheMode,
        _shareAtlas: null,
        clearCharCache: function clearCharCache() {
          Label._shareAtlas && Label._shareAtlas.clearAllCache();
        }
      },
      onLoad: function onLoad() {
        if (this._batchAsBitmap && this.cacheMode === CacheMode.NONE) {
          this.cacheMode = CacheMode.BITMAP;
          this._batchAsBitmap = false;
        }
        cc.game.renderType === cc.game.RENDER_TYPE_CANVAS && (this.cacheMode = CacheMode.NONE);
      },
      onEnable: function onEnable() {
        this._super();
        this.node.on(cc.Node.EventType.SIZE_CHANGED, this._nodeSizeChanged, this);
        this.node.on(cc.Node.EventType.ANCHOR_CHANGED, this.setVertsDirty, this);
        this._forceUpdateRenderData();
      },
      onDisable: function onDisable() {
        this._super();
        this.node.off(cc.Node.EventType.SIZE_CHANGED, this._nodeSizeChanged, this);
        this.node.off(cc.Node.EventType.ANCHOR_CHANGED, this.setVertsDirty, this);
      },
      onDestroy: function onDestroy() {
        this._assembler && this._assembler._resetAssemblerData && this._assembler._resetAssemblerData(this._assemblerData);
        this._assemblerData = null;
        this._letterTexture = null;
        if (this._ttfTexture) {
          this._ttfTexture.destroy();
          this._ttfTexture = null;
        }
        this._super();
      },
      _nodeSizeChanged: function _nodeSizeChanged() {
        (false, this.overflow !== Overflow.NONE) && this.setVertsDirty();
      },
      setVertsDirty: function setVertsDirty() {
        false;
        this._super();
      },
      _updateColor: function _updateColor() {
        this.font instanceof cc.BitmapFont || this._srcBlendFactor === cc.macro.BlendFactor.SRC_ALPHA && this.node._renderFlag & cc.RenderFlow.FLAG_OPACITY || this.setVertsDirty();
        RenderComponent.prototype._updateColor.call(this);
      },
      _validateRender: function _validateRender() {
        if (!this.string) {
          this.disableRender();
          return;
        }
        if (this._materials[0]) {
          var font = this.font;
          if (!(font instanceof cc.BitmapFont)) return;
          var spriteFrame = font.spriteFrame;
          if (spriteFrame && spriteFrame.textureLoaded() && font._fntConfig) return;
        }
        this.disableRender();
      },
      _resetAssembler: function _resetAssembler() {
        this._frame = null;
        RenderComponent.prototype._resetAssembler.call(this);
      },
      _checkStringEmpty: function _checkStringEmpty() {
        this.markForRender(!!this.string);
      },
      _on3DNodeChanged: function _on3DNodeChanged() {
        this._resetAssembler();
        this._applyFontTexture();
      },
      _onBMFontTextureLoaded: function _onBMFontTextureLoaded() {
        this._frame._texture = this.font.spriteFrame._texture;
        this.markForRender(true);
        this._updateMaterial();
        this._assembler && this._assembler.updateRenderData(this);
      },
      _onBlendChanged: function _onBlendChanged() {
        if (!this.useSystemFont || !this.enabledInHierarchy) return;
        this._forceUpdateRenderData();
      },
      _applyFontTexture: function _applyFontTexture() {
        var font = this.font;
        if (font instanceof cc.BitmapFont) {
          var spriteFrame = font.spriteFrame;
          this._frame = spriteFrame;
          spriteFrame && spriteFrame.onTextureLoaded(this._onBMFontTextureLoaded, this);
        } else {
          if (!this._nativeTTF()) {
            this._frame || (this._frame = new LabelFrame());
            if (this.cacheMode === CacheMode.CHAR) {
              this._letterTexture = this._assembler._getAssemblerData();
              this._frame._refreshTexture(this._letterTexture);
            } else if (!this._ttfTexture) {
              this._ttfTexture = new cc.Texture2D();
              this._assemblerData = this._assembler._getAssemblerData();
              this._ttfTexture.initWithElement(this._assemblerData.canvas);
            }
            if (this.cacheMode !== CacheMode.CHAR) {
              this._frame._resetDynamicAtlasFrame();
              this._frame._refreshTexture(this._ttfTexture);
              this._srcBlendFactor === cc.macro.BlendFactor.ONE && true && this._ttfTexture.setPremultiplyAlpha(true);
            }
            this._updateMaterial();
          }
          this._assembler && this._assembler.updateRenderData(this);
        }
        this.markForValidate();
      },
      _updateMaterialCanvas: function _updateMaterialCanvas() {
        if (!this._frame) return;
        this._frame._texture._nativeUrl = this.uuid + "_texture";
      },
      _updateMaterialWebgl: function _updateMaterialWebgl() {
        var material = this.getMaterial(0);
        if (this._nativeTTF()) {
          material && this._assembler._updateTTFMaterial(this);
          return;
        }
        if (!this._frame) return;
        material && material.setProperty("texture", this._frame._texture);
        BlendFunc.prototype._updateMaterial.call(this);
      },
      _nativeTTF: function _nativeTTF() {
        return !!this._assembler && !!this._assembler._updateTTFMaterial;
      },
      _forceUpdateRenderData: function _forceUpdateRenderData() {
        this.setVertsDirty();
        this._resetAssembler();
        this._applyFontTexture();
      },
      _enableBold: function _enableBold(enabled) {
        true;
        cc.warn("`label._enableBold` is deprecated, use `label.enableBold = true` instead please");
        this.enableBold = !!enabled;
      },
      _enableItalics: function _enableItalics(enabled) {
        true;
        cc.warn("`label._enableItalics` is deprecated, use `label.enableItalics = true` instead please");
        this.enableItalic = !!enabled;
      },
      _enableUnderline: function _enableUnderline(enabled) {
        true;
        cc.warn("`label._enableUnderline` is deprecated, use `label.enableUnderline = true` instead please");
        this.enableUnderline = !!enabled;
      }
    });
    cc.Label = module.exports = Label;
  }), {
    "../assets/material/CCMaterial": 77,
    "../platform/CCMacro": 143,
    "../renderer/utils/label/label-frame": 171,
    "../utils/blend-func": 203,
    "./CCRenderComponent": 100
  } ],
  97: [ (function(require, module, exports) {
    "use strict";
    var NodeEvent = require("../CCNode").EventType;
    var Type = cc.Enum({
      NONE: 0,
      HORIZONTAL: 1,
      VERTICAL: 2,
      GRID: 3
    });
    var ResizeMode = cc.Enum({
      NONE: 0,
      CONTAINER: 1,
      CHILDREN: 2
    });
    var AxisDirection = cc.Enum({
      HORIZONTAL: 0,
      VERTICAL: 1
    });
    var VerticalDirection = cc.Enum({
      BOTTOM_TO_TOP: 0,
      TOP_TO_BOTTOM: 1
    });
    var HorizontalDirection = cc.Enum({
      LEFT_TO_RIGHT: 0,
      RIGHT_TO_LEFT: 1
    });
    var Layout = cc.Class({
      name: "cc.Layout",
      extends: require("./CCComponent"),
      editor: false,
      properties: {
        _layoutSize: cc.size(300, 200),
        _layoutDirty: {
          default: true,
          serializable: false
        },
        _resize: ResizeMode.NONE,
        _N$layoutType: Type.NONE,
        type: {
          type: Type,
          get: function get() {
            return this._N$layoutType;
          },
          set: function set(value) {
            this._N$layoutType = value;
            var reLayouted;
            false;
            this._doLayoutDirty();
          },
          tooltip: false,
          animatable: false
        },
        resizeMode: {
          type: ResizeMode,
          tooltip: false,
          animatable: false,
          get: function get() {
            return this._resize;
          },
          set: function set(value) {
            if (this.type === Type.NONE && value === ResizeMode.CHILDREN) return;
            this._resize = value;
            var reLayouted;
            false;
            this._doLayoutDirty();
          }
        },
        cellSize: {
          default: cc.size(40, 40),
          tooltip: false,
          type: cc.Size,
          notify: function notify() {
            this._doLayoutDirty();
          }
        },
        startAxis: {
          default: AxisDirection.HORIZONTAL,
          tooltip: false,
          type: AxisDirection,
          notify: function notify() {
            var reLayouted;
            false;
            this._doLayoutDirty();
          },
          animatable: false
        },
        paddingLeft: {
          default: 0,
          tooltip: false,
          notify: function notify() {
            this._doLayoutDirty();
          }
        },
        paddingRight: {
          default: 0,
          tooltip: false,
          notify: function notify() {
            this._doLayoutDirty();
          }
        },
        paddingTop: {
          default: 0,
          tooltip: false,
          notify: function notify() {
            this._doLayoutDirty();
          }
        },
        paddingBottom: {
          default: 0,
          tooltip: false,
          notify: function notify() {
            this._doLayoutDirty();
          }
        },
        spacingX: {
          default: 0,
          notify: function notify() {
            this._doLayoutDirty();
          },
          tooltip: false
        },
        spacingY: {
          default: 0,
          notify: function notify() {
            this._doLayoutDirty();
          },
          tooltip: false
        },
        verticalDirection: {
          default: VerticalDirection.TOP_TO_BOTTOM,
          type: VerticalDirection,
          notify: function notify() {
            this._doLayoutDirty();
          },
          tooltip: false,
          animatable: false
        },
        horizontalDirection: {
          default: HorizontalDirection.LEFT_TO_RIGHT,
          type: HorizontalDirection,
          notify: function notify() {
            this._doLayoutDirty();
          },
          tooltip: false,
          animatable: false
        },
        affectedByScale: {
          default: false,
          notify: function notify() {
            this._doLayoutDirty();
          },
          animatable: false,
          tooltip: false
        }
      },
      statics: {
        Type: Type,
        VerticalDirection: VerticalDirection,
        HorizontalDirection: HorizontalDirection,
        ResizeMode: ResizeMode,
        AxisDirection: AxisDirection
      },
      onEnable: function onEnable() {
        this._addEventListeners();
        this.node.getContentSize().equals(cc.size(0, 0)) && this.node.setContentSize(this._layoutSize);
        this._doLayoutDirty();
      },
      onDisable: function onDisable() {
        this._removeEventListeners();
      },
      _doLayoutDirty: function _doLayoutDirty() {
        this._layoutDirty = true;
      },
      _doScaleDirty: function _doScaleDirty() {
        this._layoutDirty = this._layoutDirty || this.affectedByScale;
      },
      _addEventListeners: function _addEventListeners() {
        cc.director.on(cc.Director.EVENT_AFTER_UPDATE, this.updateLayout, this);
        this.node.on(NodeEvent.SIZE_CHANGED, this._resized, this);
        this.node.on(NodeEvent.ANCHOR_CHANGED, this._doLayoutDirty, this);
        this.node.on(NodeEvent.CHILD_ADDED, this._childAdded, this);
        this.node.on(NodeEvent.CHILD_REMOVED, this._childRemoved, this);
        this.node.on(NodeEvent.CHILD_REORDER, this._doLayoutDirty, this);
        this._addChildrenEventListeners();
      },
      _removeEventListeners: function _removeEventListeners() {
        cc.director.off(cc.Director.EVENT_AFTER_UPDATE, this.updateLayout, this);
        this.node.off(NodeEvent.SIZE_CHANGED, this._resized, this);
        this.node.off(NodeEvent.ANCHOR_CHANGED, this._doLayoutDirty, this);
        this.node.off(NodeEvent.CHILD_ADDED, this._childAdded, this);
        this.node.off(NodeEvent.CHILD_REMOVED, this._childRemoved, this);
        this.node.off(NodeEvent.CHILD_REORDER, this._doLayoutDirty, this);
        this._removeChildrenEventListeners();
      },
      _addChildrenEventListeners: function _addChildrenEventListeners() {
        var children = this.node.children;
        for (var i = 0; i < children.length; ++i) {
          var child = children[i];
          child.on(NodeEvent.SCALE_CHANGED, this._doScaleDirty, this);
          child.on(NodeEvent.SIZE_CHANGED, this._doLayoutDirty, this);
          child.on(NodeEvent.POSITION_CHANGED, this._doLayoutDirty, this);
          child.on(NodeEvent.ANCHOR_CHANGED, this._doLayoutDirty, this);
          child.on("active-in-hierarchy-changed", this._doLayoutDirty, this);
        }
      },
      _removeChildrenEventListeners: function _removeChildrenEventListeners() {
        var children = this.node.children;
        for (var i = 0; i < children.length; ++i) {
          var child = children[i];
          child.off(NodeEvent.SCALE_CHANGED, this._doScaleDirty, this);
          child.off(NodeEvent.SIZE_CHANGED, this._doLayoutDirty, this);
          child.off(NodeEvent.POSITION_CHANGED, this._doLayoutDirty, this);
          child.off(NodeEvent.ANCHOR_CHANGED, this._doLayoutDirty, this);
          child.off("active-in-hierarchy-changed", this._doLayoutDirty, this);
        }
      },
      _childAdded: function _childAdded(child) {
        child.on(NodeEvent.SCALE_CHANGED, this._doScaleDirty, this);
        child.on(NodeEvent.SIZE_CHANGED, this._doLayoutDirty, this);
        child.on(NodeEvent.POSITION_CHANGED, this._doLayoutDirty, this);
        child.on(NodeEvent.ANCHOR_CHANGED, this._doLayoutDirty, this);
        child.on("active-in-hierarchy-changed", this._doLayoutDirty, this);
        this._doLayoutDirty();
      },
      _childRemoved: function _childRemoved(child) {
        child.off(NodeEvent.SCALE_CHANGED, this._doScaleDirty, this);
        child.off(NodeEvent.SIZE_CHANGED, this._doLayoutDirty, this);
        child.off(NodeEvent.POSITION_CHANGED, this._doLayoutDirty, this);
        child.off(NodeEvent.ANCHOR_CHANGED, this._doLayoutDirty, this);
        child.off("active-in-hierarchy-changed", this._doLayoutDirty, this);
        this._doLayoutDirty();
      },
      _resized: function _resized() {
        this._layoutSize = this.node.getContentSize();
        this._doLayoutDirty();
      },
      _doLayoutHorizontally: function _doLayoutHorizontally(baseWidth, rowBreak, fnPositionY, applyChildren) {
        var layoutAnchor = this.node.getAnchorPoint();
        var children = this.node.children;
        var sign = 1;
        var paddingX = this.paddingLeft;
        var leftBoundaryOfLayout = -layoutAnchor.x * baseWidth;
        if (this.horizontalDirection === HorizontalDirection.RIGHT_TO_LEFT) {
          sign = -1;
          leftBoundaryOfLayout = (1 - layoutAnchor.x) * baseWidth;
          paddingX = this.paddingRight;
        }
        var nextX = leftBoundaryOfLayout + sign * paddingX - sign * this.spacingX;
        var rowMaxHeight = 0;
        var tempMaxHeight = 0;
        var secondMaxHeight = 0;
        var row = 0;
        var containerResizeBoundary = 0;
        var maxHeightChildAnchorY = 0;
        var activeChildCount = 0;
        for (var i = 0; i < children.length; ++i) {
          var child = children[i];
          child.activeInHierarchy && activeChildCount++;
        }
        var newChildWidth = this.cellSize.width;
        this.type !== Type.GRID && this.resizeMode === ResizeMode.CHILDREN && (newChildWidth = (baseWidth - (this.paddingLeft + this.paddingRight) - (activeChildCount - 1) * this.spacingX) / activeChildCount);
        for (var i = 0; i < children.length; ++i) {
          var child = children[i];
          var childScaleX = this._getUsedScaleValue(child.scaleX);
          var childScaleY = this._getUsedScaleValue(child.scaleY);
          if (!child.activeInHierarchy) continue;
          if (this._resize === ResizeMode.CHILDREN) {
            child.width = newChildWidth / childScaleX;
            this.type === Type.GRID && (child.height = this.cellSize.height / childScaleY);
          }
          var anchorX = child.anchorX;
          var childBoundingBoxWidth = child.width * childScaleX;
          var childBoundingBoxHeight = child.height * childScaleY;
          secondMaxHeight > tempMaxHeight && (tempMaxHeight = secondMaxHeight);
          if (childBoundingBoxHeight >= tempMaxHeight) {
            secondMaxHeight = tempMaxHeight;
            tempMaxHeight = childBoundingBoxHeight;
            maxHeightChildAnchorY = child.getAnchorPoint().y;
          }
          this.horizontalDirection === HorizontalDirection.RIGHT_TO_LEFT && (anchorX = 1 - child.anchorX);
          nextX = nextX + sign * anchorX * childBoundingBoxWidth + sign * this.spacingX;
          var rightBoundaryOfChild = sign * (1 - anchorX) * childBoundingBoxWidth;
          if (rowBreak) {
            var rowBreakBoundary = nextX + rightBoundaryOfChild + sign * (sign > 0 ? this.paddingRight : this.paddingLeft);
            var leftToRightRowBreak = this.horizontalDirection === HorizontalDirection.LEFT_TO_RIGHT && rowBreakBoundary > (1 - layoutAnchor.x) * baseWidth;
            var rightToLeftRowBreak = this.horizontalDirection === HorizontalDirection.RIGHT_TO_LEFT && rowBreakBoundary < -layoutAnchor.x * baseWidth;
            if (leftToRightRowBreak || rightToLeftRowBreak) {
              if (childBoundingBoxHeight >= tempMaxHeight) {
                0 === secondMaxHeight && (secondMaxHeight = tempMaxHeight);
                rowMaxHeight += secondMaxHeight;
                secondMaxHeight = tempMaxHeight;
              } else {
                rowMaxHeight += tempMaxHeight;
                secondMaxHeight = childBoundingBoxHeight;
                tempMaxHeight = 0;
              }
              nextX = leftBoundaryOfLayout + sign * (paddingX + anchorX * childBoundingBoxWidth);
              row++;
            }
          }
          var finalPositionY = fnPositionY(child, rowMaxHeight, row);
          baseWidth >= childBoundingBoxWidth + this.paddingLeft + this.paddingRight && applyChildren && child.setPosition(cc.v2(nextX, finalPositionY));
          var signX = 1;
          var tempFinalPositionY;
          var topMarign = 0 === tempMaxHeight ? childBoundingBoxHeight : tempMaxHeight;
          if (this.verticalDirection === VerticalDirection.TOP_TO_BOTTOM) {
            containerResizeBoundary = containerResizeBoundary || this.node._contentSize.height;
            signX = -1;
            tempFinalPositionY = finalPositionY + signX * (topMarign * maxHeightChildAnchorY + this.paddingBottom);
            tempFinalPositionY < containerResizeBoundary && (containerResizeBoundary = tempFinalPositionY);
          } else {
            containerResizeBoundary = containerResizeBoundary || -this.node._contentSize.height;
            tempFinalPositionY = finalPositionY + signX * (topMarign * maxHeightChildAnchorY + this.paddingTop);
            tempFinalPositionY > containerResizeBoundary && (containerResizeBoundary = tempFinalPositionY);
          }
          nextX += rightBoundaryOfChild;
        }
        return containerResizeBoundary;
      },
      _getVerticalBaseHeight: function _getVerticalBaseHeight(children) {
        var newHeight = 0;
        var activeChildCount = 0;
        if (this.resizeMode === ResizeMode.CONTAINER) {
          for (var i = 0; i < children.length; ++i) {
            var child = children[i];
            if (child.activeInHierarchy) {
              activeChildCount++;
              newHeight += child.height * this._getUsedScaleValue(child.scaleY);
            }
          }
          newHeight += (activeChildCount - 1) * this.spacingY + this.paddingBottom + this.paddingTop;
        } else newHeight = this.node.getContentSize().height;
        return newHeight;
      },
      _doLayoutVertically: function _doLayoutVertically(baseHeight, columnBreak, fnPositionX, applyChildren) {
        var layoutAnchor = this.node.getAnchorPoint();
        var children = this.node.children;
        var sign = 1;
        var paddingY = this.paddingBottom;
        var bottomBoundaryOfLayout = -layoutAnchor.y * baseHeight;
        if (this.verticalDirection === VerticalDirection.TOP_TO_BOTTOM) {
          sign = -1;
          bottomBoundaryOfLayout = (1 - layoutAnchor.y) * baseHeight;
          paddingY = this.paddingTop;
        }
        var nextY = bottomBoundaryOfLayout + sign * paddingY - sign * this.spacingY;
        var columnMaxWidth = 0;
        var tempMaxWidth = 0;
        var secondMaxWidth = 0;
        var column = 0;
        var containerResizeBoundary = 0;
        var maxWidthChildAnchorX = 0;
        var activeChildCount = 0;
        for (var i = 0; i < children.length; ++i) {
          var child = children[i];
          child.activeInHierarchy && activeChildCount++;
        }
        var newChildHeight = this.cellSize.height;
        this.type !== Type.GRID && this.resizeMode === ResizeMode.CHILDREN && (newChildHeight = (baseHeight - (this.paddingTop + this.paddingBottom) - (activeChildCount - 1) * this.spacingY) / activeChildCount);
        for (var i = 0; i < children.length; ++i) {
          var child = children[i];
          var childScaleX = this._getUsedScaleValue(child.scaleX);
          var childScaleY = this._getUsedScaleValue(child.scaleY);
          if (!child.activeInHierarchy) continue;
          if (this.resizeMode === ResizeMode.CHILDREN) {
            child.height = newChildHeight / childScaleY;
            this.type === Type.GRID && (child.width = this.cellSize.width / childScaleX);
          }
          var anchorY = child.anchorY;
          var childBoundingBoxWidth = child.width * childScaleX;
          var childBoundingBoxHeight = child.height * childScaleY;
          secondMaxWidth > tempMaxWidth && (tempMaxWidth = secondMaxWidth);
          if (childBoundingBoxWidth >= tempMaxWidth) {
            secondMaxWidth = tempMaxWidth;
            tempMaxWidth = childBoundingBoxWidth;
            maxWidthChildAnchorX = child.getAnchorPoint().x;
          }
          this.verticalDirection === VerticalDirection.TOP_TO_BOTTOM && (anchorY = 1 - child.anchorY);
          nextY = nextY + sign * anchorY * childBoundingBoxHeight + sign * this.spacingY;
          var topBoundaryOfChild = sign * (1 - anchorY) * childBoundingBoxHeight;
          if (columnBreak) {
            var columnBreakBoundary = nextY + topBoundaryOfChild + sign * (sign > 0 ? this.paddingTop : this.paddingBottom);
            var bottomToTopColumnBreak = this.verticalDirection === VerticalDirection.BOTTOM_TO_TOP && columnBreakBoundary > (1 - layoutAnchor.y) * baseHeight;
            var topToBottomColumnBreak = this.verticalDirection === VerticalDirection.TOP_TO_BOTTOM && columnBreakBoundary < -layoutAnchor.y * baseHeight;
            if (bottomToTopColumnBreak || topToBottomColumnBreak) {
              if (childBoundingBoxWidth >= tempMaxWidth) {
                0 === secondMaxWidth && (secondMaxWidth = tempMaxWidth);
                columnMaxWidth += secondMaxWidth;
                secondMaxWidth = tempMaxWidth;
              } else {
                columnMaxWidth += tempMaxWidth;
                secondMaxWidth = childBoundingBoxWidth;
                tempMaxWidth = 0;
              }
              nextY = bottomBoundaryOfLayout + sign * (paddingY + anchorY * childBoundingBoxHeight);
              column++;
            }
          }
          var finalPositionX = fnPositionX(child, columnMaxWidth, column);
          baseHeight >= childBoundingBoxHeight + (this.paddingTop + this.paddingBottom) && applyChildren && child.setPosition(cc.v2(finalPositionX, nextY));
          var signX = 1;
          var tempFinalPositionX;
          var rightMarign = 0 === tempMaxWidth ? childBoundingBoxWidth : tempMaxWidth;
          if (this.horizontalDirection === HorizontalDirection.RIGHT_TO_LEFT) {
            signX = -1;
            containerResizeBoundary = containerResizeBoundary || this.node._contentSize.width;
            tempFinalPositionX = finalPositionX + signX * (rightMarign * maxWidthChildAnchorX + this.paddingLeft);
            tempFinalPositionX < containerResizeBoundary && (containerResizeBoundary = tempFinalPositionX);
          } else {
            containerResizeBoundary = containerResizeBoundary || -this.node._contentSize.width;
            tempFinalPositionX = finalPositionX + signX * (rightMarign * maxWidthChildAnchorX + this.paddingRight);
            tempFinalPositionX > containerResizeBoundary && (containerResizeBoundary = tempFinalPositionX);
          }
          nextY += topBoundaryOfChild;
        }
        return containerResizeBoundary;
      },
      _doLayoutBasic: function _doLayoutBasic() {
        var children = this.node.children;
        var allChildrenBoundingBox = null;
        for (var i = 0; i < children.length; ++i) {
          var child = children[i];
          child.activeInHierarchy && (allChildrenBoundingBox ? allChildrenBoundingBox.union(allChildrenBoundingBox, child.getBoundingBoxToWorld()) : allChildrenBoundingBox = child.getBoundingBoxToWorld());
        }
        if (allChildrenBoundingBox) {
          var leftBottomSpace = this.node.convertToNodeSpaceAR(cc.v2(allChildrenBoundingBox.x, allChildrenBoundingBox.y));
          leftBottomSpace = cc.v2(leftBottomSpace.x - this.paddingLeft, leftBottomSpace.y - this.paddingBottom);
          var rightTopSpace = this.node.convertToNodeSpaceAR(cc.v2(allChildrenBoundingBox.xMax, allChildrenBoundingBox.yMax));
          rightTopSpace = cc.v2(rightTopSpace.x + this.paddingRight, rightTopSpace.y + this.paddingTop);
          var newSize = rightTopSpace.sub(leftBottomSpace);
          newSize = cc.size(parseFloat(newSize.x.toFixed(2)), parseFloat(newSize.y.toFixed(2)));
          if (0 !== newSize.width) {
            var newAnchorX = -leftBottomSpace.x / newSize.width;
            this.node.anchorX = parseFloat(newAnchorX.toFixed(2));
          }
          if (0 !== newSize.height) {
            var newAnchorY = -leftBottomSpace.y / newSize.height;
            this.node.anchorY = parseFloat(newAnchorY.toFixed(2));
          }
          this.node.setContentSize(newSize);
        }
      },
      _doLayoutGridAxisHorizontal: function _doLayoutGridAxisHorizontal(layoutAnchor, layoutSize) {
        var baseWidth = layoutSize.width;
        var sign = 1;
        var bottomBoundaryOfLayout = -layoutAnchor.y * layoutSize.height;
        var paddingY = this.paddingBottom;
        if (this.verticalDirection === VerticalDirection.TOP_TO_BOTTOM) {
          sign = -1;
          bottomBoundaryOfLayout = (1 - layoutAnchor.y) * layoutSize.height;
          paddingY = this.paddingTop;
        }
        var fnPositionY = function(child, topOffset, row) {
          return bottomBoundaryOfLayout + sign * (topOffset + child.anchorY * child.height * this._getUsedScaleValue(child.scaleY) + paddingY + row * this.spacingY);
        }.bind(this);
        var newHeight = 0;
        if (this.resizeMode === ResizeMode.CONTAINER) {
          var boundary = this._doLayoutHorizontally(baseWidth, true, fnPositionY, false);
          newHeight = bottomBoundaryOfLayout - boundary;
          newHeight < 0 && (newHeight *= -1);
          bottomBoundaryOfLayout = -layoutAnchor.y * newHeight;
          if (this.verticalDirection === VerticalDirection.TOP_TO_BOTTOM) {
            sign = -1;
            bottomBoundaryOfLayout = (1 - layoutAnchor.y) * newHeight;
          }
        }
        this._doLayoutHorizontally(baseWidth, true, fnPositionY, true);
        this.resizeMode === ResizeMode.CONTAINER && this.node.setContentSize(baseWidth, newHeight);
      },
      _doLayoutGridAxisVertical: function _doLayoutGridAxisVertical(layoutAnchor, layoutSize) {
        var baseHeight = layoutSize.height;
        var sign = 1;
        var leftBoundaryOfLayout = -layoutAnchor.x * layoutSize.width;
        var paddingX = this.paddingLeft;
        if (this.horizontalDirection === HorizontalDirection.RIGHT_TO_LEFT) {
          sign = -1;
          leftBoundaryOfLayout = (1 - layoutAnchor.x) * layoutSize.width;
          paddingX = this.paddingRight;
        }
        var fnPositionX = function(child, leftOffset, column) {
          return leftBoundaryOfLayout + sign * (leftOffset + child.anchorX * child.width * this._getUsedScaleValue(child.scaleX) + paddingX + column * this.spacingX);
        }.bind(this);
        var newWidth = 0;
        if (this.resizeMode === ResizeMode.CONTAINER) {
          var boundary = this._doLayoutVertically(baseHeight, true, fnPositionX, false);
          newWidth = leftBoundaryOfLayout - boundary;
          newWidth < 0 && (newWidth *= -1);
          leftBoundaryOfLayout = -layoutAnchor.x * newWidth;
          if (this.horizontalDirection === HorizontalDirection.RIGHT_TO_LEFT) {
            sign = -1;
            leftBoundaryOfLayout = (1 - layoutAnchor.x) * newWidth;
          }
        }
        this._doLayoutVertically(baseHeight, true, fnPositionX, true);
        this.resizeMode === ResizeMode.CONTAINER && this.node.setContentSize(newWidth, baseHeight);
      },
      _doLayoutGrid: function _doLayoutGrid() {
        var layoutAnchor = this.node.getAnchorPoint();
        var layoutSize = this.node.getContentSize();
        this.startAxis === AxisDirection.HORIZONTAL ? this._doLayoutGridAxisHorizontal(layoutAnchor, layoutSize) : this.startAxis === AxisDirection.VERTICAL && this._doLayoutGridAxisVertical(layoutAnchor, layoutSize);
      },
      _getHorizontalBaseWidth: function _getHorizontalBaseWidth(children) {
        var newWidth = 0;
        var activeChildCount = 0;
        if (this.resizeMode === ResizeMode.CONTAINER) {
          for (var i = 0; i < children.length; ++i) {
            var child = children[i];
            if (child.activeInHierarchy) {
              activeChildCount++;
              newWidth += child.width * this._getUsedScaleValue(child.scaleX);
            }
          }
          newWidth += (activeChildCount - 1) * this.spacingX + this.paddingLeft + this.paddingRight;
        } else newWidth = this.node.getContentSize().width;
        return newWidth;
      },
      _doLayout: function _doLayout() {
        if (this.type === Type.HORIZONTAL) {
          var newWidth = this._getHorizontalBaseWidth(this.node.children);
          var fnPositionY = function fnPositionY(child) {
            return child.y;
          };
          this._doLayoutHorizontally(newWidth, false, fnPositionY, true);
          this.node.width = newWidth;
        } else if (this.type === Type.VERTICAL) {
          var newHeight = this._getVerticalBaseHeight(this.node.children);
          var fnPositionX = function fnPositionX(child) {
            return child.x;
          };
          this._doLayoutVertically(newHeight, false, fnPositionX, true);
          this.node.height = newHeight;
        } else this.type === Type.NONE ? this.resizeMode === ResizeMode.CONTAINER && this._doLayoutBasic() : this.type === Type.GRID && this._doLayoutGrid();
      },
      _getUsedScaleValue: function _getUsedScaleValue(value) {
        return this.affectedByScale ? Math.abs(value) : 1;
      },
      updateLayout: function updateLayout() {
        if (this._layoutDirty && this.node.children.length > 0) {
          this._doLayout();
          this._layoutDirty = false;
        }
      }
    });
    cc.Layout = module.exports = Layout;
  }), {
    "../CCNode": 26,
    "./CCComponent": 94
  } ],
  98: [ (function(require, module, exports) {
    "use strict";
    var _gfx = _interopRequireDefault(require("../../renderer/gfx"));
    var _mat = _interopRequireDefault(require("../value-types/mat4"));
    var _vec = _interopRequireDefault(require("../value-types/vec2"));
    var _materialVariant = _interopRequireDefault(require("../assets/material/material-variant"));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    var misc = require("../utils/misc");
    var RenderComponent = require("./CCRenderComponent");
    var RenderFlow = require("../renderer/render-flow");
    var Graphics = require("../graphics/graphics");
    var _vec2_temp = new _vec["default"]();
    var _mat4_temp = new _mat["default"]();
    var _circlepoints = [];
    function _calculateCircle(center, radius, segements) {
      _circlepoints.length = 0;
      var anglePerStep = 2 * Math.PI / segements;
      for (var step = 0; step < segements; ++step) _circlepoints.push(cc.v2(radius.x * Math.cos(anglePerStep * step) + center.x, radius.y * Math.sin(anglePerStep * step) + center.y));
      return _circlepoints;
    }
    var MaskType = cc.Enum({
      RECT: 0,
      ELLIPSE: 1,
      IMAGE_STENCIL: 2
    });
    var SEGEMENTS_MIN = 3;
    var SEGEMENTS_MAX = 1e4;
    var Mask = cc.Class({
      name: "cc.Mask",
      extends: RenderComponent,
      editor: false,
      ctor: function ctor() {
        this._graphics = null;
        this._enableMaterial = null;
        this._exitMaterial = null;
        this._clearMaterial = null;
      },
      properties: {
        _spriteFrame: {
          default: null,
          type: cc.SpriteFrame
        },
        _type: MaskType.RECT,
        type: {
          get: function get() {
            return this._type;
          },
          set: function set(value) {
            this._type !== value && this._resetAssembler();
            this._type = value;
            if (this._type !== MaskType.IMAGE_STENCIL) {
              this.spriteFrame = null;
              this.alphaThreshold = 0;
              this._updateGraphics();
            }
            this._activateMaterial();
          },
          type: MaskType,
          tooltip: false
        },
        spriteFrame: {
          type: cc.SpriteFrame,
          tooltip: false,
          get: function get() {
            return this._spriteFrame;
          },
          set: function set(value) {
            var lastSprite = this._spriteFrame;
            false;
            if (lastSprite === value) return;
            this._spriteFrame = value;
            this.setVertsDirty();
            this._updateMaterial();
          }
        },
        alphaThreshold: {
          default: .1,
          type: cc.Float,
          range: [ 0, 1, .1 ],
          slide: true,
          tooltip: false,
          notify: function notify() {
            if (cc.game.renderType === cc.game.RENDER_TYPE_CANVAS) {
              cc.warnID(4201);
              return;
            }
            this._updateMaterial();
          }
        },
        inverted: {
          default: false,
          type: cc.Boolean,
          tooltip: false,
          notify: function notify() {
            cc.game.renderType === cc.game.RENDER_TYPE_CANVAS && cc.warnID(4202);
          }
        },
        _segments: 64,
        segements: {
          get: function get() {
            return this._segments;
          },
          set: function set(value) {
            this._segments = misc.clampf(value, SEGEMENTS_MIN, SEGEMENTS_MAX);
            this._updateGraphics();
          },
          type: cc.Integer,
          tooltip: false
        },
        _resizeToTarget: {
          animatable: false,
          set: function set(value) {
            value && this._resizeNodeToTargetNode();
          }
        }
      },
      statics: {
        Type: MaskType
      },
      onRestore: function onRestore() {
        this._activateMaterial();
      },
      onEnable: function onEnable() {
        this._super();
        this._type !== MaskType.IMAGE_STENCIL && 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);
      },
      onDisable: function onDisable() {
        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 &= ~RenderFlow.FLAG_POST_RENDER;
      },
      onDestroy: function onDestroy() {
        this._super();
        this._removeGraphics();
      },
      _resizeNodeToTargetNode: false,
      _validateRender: function _validateRender() {
        if (this._type !== MaskType.IMAGE_STENCIL) return;
        var spriteFrame = this._spriteFrame;
        if (spriteFrame && spriteFrame.textureLoaded()) return;
        this.disableRender();
      },
      _activateMaterial: function _activateMaterial() {
        this._createGraphics();
        var material = this._materials[0];
        material = material ? _materialVariant["default"].create(material, this) : _materialVariant["default"].createWithBuiltin("2d-sprite", this);
        material.define("USE_ALPHA_TEST", true);
        if (this._type === MaskType.IMAGE_STENCIL) {
          material.define("CC_USE_MODEL", false);
          material.define("USE_TEXTURE", true);
        } else {
          material.define("CC_USE_MODEL", true);
          material.define("USE_TEXTURE", false);
        }
        this._enableMaterial || (this._enableMaterial = _materialVariant["default"].createWithBuiltin("2d-sprite", this));
        if (!this._exitMaterial) {
          this._exitMaterial = _materialVariant["default"].createWithBuiltin("2d-sprite", this);
          this._exitMaterial.setStencilEnabled(_gfx["default"].STENCIL_DISABLE);
        }
        this._clearMaterial || (this._clearMaterial = _materialVariant["default"].createWithBuiltin("clear-stencil", this));
        this.setMaterial(0, material);
        this._graphics._materials[0] = material;
        this._updateMaterial();
      },
      _updateMaterial: function _updateMaterial() {
        var material = this._materials[0];
        if (!material) return;
        if (this._type === MaskType.IMAGE_STENCIL && this.spriteFrame) {
          var texture = this.spriteFrame.getTexture();
          material.setProperty("texture", texture);
        }
        material.setProperty("alphaThreshold", this.alphaThreshold);
      },
      _createGraphics: function _createGraphics() {
        if (!this._graphics) {
          this._graphics = new Graphics();
          cc.Assembler.init(this._graphics);
          this._graphics.node = this.node;
          this._graphics.lineWidth = 0;
          this._graphics.strokeColor = cc.color(0, 0, 0, 0);
        }
      },
      _updateGraphics: function _updateGraphics() {
        var node = this.node;
        var graphics = this._graphics;
        graphics.clear(false);
        var width = node._contentSize.width;
        var height = node._contentSize.height;
        var x = -width * node._anchorPoint.x;
        var y = -height * node._anchorPoint.y;
        if (this._type === MaskType.RECT) graphics.rect(x, y, width, height); else if (this._type === MaskType.ELLIPSE) {
          var center = cc.v2(x + width / 2, y + height / 2);
          var radius = {
            x: width / 2,
            y: height / 2
          };
          var points = _calculateCircle(center, radius, this._segments);
          for (var i = 0; i < points.length; ++i) {
            var point = points[i];
            0 === i ? graphics.moveTo(point.x, point.y) : graphics.lineTo(point.x, point.y);
          }
          graphics.close();
        }
        cc.game.renderType === cc.game.RENDER_TYPE_CANVAS ? graphics.stroke() : graphics.fill();
      },
      _removeGraphics: function _removeGraphics() {
        if (this._graphics) {
          this._graphics.destroy();
          this._graphics._destroyImmediate();
          this._graphics = null;
        }
      },
      _hitTest: function _hitTest(cameraPt) {
        var node = this.node;
        var size = node.getContentSize(), w = size.width, h = size.height, testPt = _vec2_temp;
        node._updateWorldMatrix();
        if (!_mat["default"].invert(_mat4_temp, node._worldMatrix)) return false;
        _vec["default"].transformMat4(testPt, cameraPt, _mat4_temp);
        testPt.x += node._anchorPoint.x * w;
        testPt.y += node._anchorPoint.y * h;
        var result = false;
        if (this.type === MaskType.RECT || this.type === MaskType.IMAGE_STENCIL) result = testPt.x >= 0 && testPt.y >= 0 && testPt.x <= w && testPt.y <= h; else if (this.type === MaskType.ELLIPSE) {
          var rx = w / 2, ry = h / 2;
          var px = testPt.x - .5 * w, py = testPt.y - .5 * h;
          result = px * px / (rx * rx) + py * py / (ry * ry) < 1;
        }
        this.inverted && (result = !result);
        return result;
      },
      markForRender: function markForRender(enable) {
        var flag = RenderFlow.FLAG_RENDER | RenderFlow.FLAG_UPDATE_RENDER_DATA | RenderFlow.FLAG_POST_RENDER;
        if (enable) {
          this.node._renderFlag |= flag;
          this.markForValidate();
        } else enable || (this.node._renderFlag &= ~flag);
      },
      disableRender: function disableRender() {
        this.node._renderFlag &= ~(RenderFlow.FLAG_RENDER | RenderFlow.FLAG_UPDATE_RENDER_DATA | RenderFlow.FLAG_POST_RENDER);
      }
    });
    cc.Mask = module.exports = Mask;
  }), {
    "../../renderer/gfx": 251,
    "../assets/material/material-variant": 84,
    "../graphics/graphics": 127,
    "../renderer/render-flow": 169,
    "../utils/misc": 209,
    "../value-types/mat4": 226,
    "../value-types/vec2": 233,
    "./CCRenderComponent": 100
  } ],
  99: [ (function(require, module, exports) {
    "use strict";
    var misc = require("../utils/misc");
    var Component = require("./CCComponent");
    var Mode = cc.Enum({
      HORIZONTAL: 0,
      VERTICAL: 1,
      FILLED: 2
    });
    var ProgressBar = cc.Class({
      name: "cc.ProgressBar",
      extends: Component,
      editor: false,
      _initBarSprite: function _initBarSprite() {
        if (this.barSprite) {
          var entity = this.barSprite.node;
          if (!entity) return;
          var nodeSize = this.node.getContentSize();
          var nodeAnchor = this.node.getAnchorPoint();
          var entitySize = entity.getContentSize();
          entity.parent === this.node && this.node.setContentSize(entitySize);
          this.barSprite.fillType === cc.Sprite.FillType.RADIAL && (this.mode = Mode.FILLED);
          var barSpriteSize = entity.getContentSize();
          this.mode === Mode.HORIZONTAL ? this.totalLength = barSpriteSize.width : this.mode === Mode.VERTICAL ? this.totalLength = barSpriteSize.height : this.totalLength = this.barSprite.fillRange;
          if (entity.parent === this.node) {
            var x = -nodeSize.width * nodeAnchor.x;
            var y = 0;
            entity.setPosition(cc.v2(x, y));
          }
        }
      },
      _updateBarStatus: function _updateBarStatus() {
        if (this.barSprite) {
          var entity = this.barSprite.node;
          if (!entity) return;
          var entityAnchorPoint = entity.getAnchorPoint();
          var entitySize = entity.getContentSize();
          var entityPosition = entity.getPosition();
          var anchorPoint = cc.v2(0, .5);
          var progress = misc.clamp01(this.progress);
          var actualLenth = this.totalLength * progress;
          var finalContentSize;
          var totalWidth;
          var totalHeight;
          switch (this.mode) {
           case Mode.HORIZONTAL:
            this.reverse && (anchorPoint = cc.v2(1, .5));
            finalContentSize = cc.size(actualLenth, entitySize.height);
            totalWidth = this.totalLength;
            totalHeight = entitySize.height;
            break;

           case Mode.VERTICAL:
            anchorPoint = this.reverse ? cc.v2(.5, 1) : cc.v2(.5, 0);
            finalContentSize = cc.size(entitySize.width, actualLenth);
            totalWidth = entitySize.width;
            totalHeight = this.totalLength;
          }
          if (this.mode === Mode.FILLED) if (this.barSprite.type !== cc.Sprite.Type.FILLED) cc.warn("ProgressBar FILLED mode only works when barSprite's Type is FILLED!"); else {
            this.reverse && (actualLenth *= -1);
            this.barSprite.fillRange = actualLenth;
          } else if (this.barSprite.type !== cc.Sprite.Type.FILLED) {
            var anchorOffsetX = anchorPoint.x - entityAnchorPoint.x;
            var anchorOffsetY = anchorPoint.y - entityAnchorPoint.y;
            var finalPosition = cc.v2(totalWidth * anchorOffsetX, totalHeight * anchorOffsetY);
            entity.setPosition(entityPosition.x + finalPosition.x, entityPosition.y + finalPosition.y);
            entity.setAnchorPoint(anchorPoint);
            entity.setContentSize(finalContentSize);
          } else cc.warn("ProgressBar non-FILLED mode only works when barSprite's Type is non-FILLED!");
        }
      },
      properties: {
        barSprite: {
          default: null,
          type: cc.Sprite,
          tooltip: false,
          notify: function notify() {
            this._initBarSprite();
          },
          animatable: false
        },
        mode: {
          default: Mode.HORIZONTAL,
          type: Mode,
          tooltip: false,
          notify: function notify() {
            if (this.barSprite) {
              var entity = this.barSprite.node;
              if (!entity) return;
              var entitySize = entity.getContentSize();
              this.mode === Mode.HORIZONTAL ? this.totalLength = entitySize.width : this.mode === Mode.VERTICAL ? this.totalLength = entitySize.height : this.mode === Mode.FILLED && (this.totalLength = this.barSprite.fillRange);
            }
          },
          animatable: false
        },
        _N$totalLength: 1,
        totalLength: {
          range: [ 0, Number.MAX_VALUE ],
          tooltip: false,
          get: function get() {
            return this._N$totalLength;
          },
          set: function set(value) {
            this.mode === Mode.FILLED && (value = misc.clamp01(value));
            this._N$totalLength = value;
            this._updateBarStatus();
          }
        },
        progress: {
          default: 1,
          type: cc.Float,
          range: [ 0, 1, .1 ],
          slide: true,
          tooltip: false,
          notify: function notify() {
            this._updateBarStatus();
          }
        },
        reverse: {
          default: false,
          tooltip: false,
          notify: function notify() {
            this.barSprite && (this.barSprite.fillStart = 1 - this.barSprite.fillStart);
            this._updateBarStatus();
          },
          animatable: false
        }
      },
      statics: {
        Mode: Mode
      }
    });
    cc.ProgressBar = module.exports = ProgressBar;
  }), {
    "../utils/misc": 209,
    "./CCComponent": 94
  } ],
  100: [ (function(require, module, exports) {
    "use strict";
    var _assembler = _interopRequireDefault(require("../renderer/assembler"));
    var _materialVariant = _interopRequireDefault(require("../assets/material/material-variant"));
    var _valueTypes = require("../value-types");
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    var Component = require("./CCComponent");
    var RenderFlow = require("../renderer/render-flow");
    var Material = require("../assets/material/CCMaterial");
    var _temp_color = new _valueTypes.Color();
    var RenderComponent = cc.Class({
      name: "RenderComponent",
      extends: Component,
      editor: false,
      properties: {
        _materials: {
          default: [],
          type: Material
        },
        materials: {
          get: function get() {
            return this._materials;
          },
          set: function set(val) {
            this._materials = val;
            this._activateMaterial();
          },
          type: [ Material ],
          displayName: "Materials",
          animatable: false
        }
      },
      ctor: function ctor() {
        this._vertsDirty = true;
        this._assembler = null;
      },
      _resetAssembler: function _resetAssembler() {
        _assembler["default"].init(this);
        this._updateColor();
        this.setVertsDirty();
      },
      __preload: function __preload() {
        this._resetAssembler();
        this._activateMaterial();
      },
      onEnable: function onEnable() {
        this.node._renderComponent && (this.node._renderComponent.enabled = false);
        this.node._renderComponent = this;
        this.node._renderFlag |= RenderFlow.FLAG_OPACITY_COLOR;
        this.setVertsDirty();
      },
      onDisable: function onDisable() {
        this.node._renderComponent = null;
        this.disableRender();
      },
      onDestroy: function onDestroy() {
        var materials = this._materials;
        for (var i = 0; i < materials.length; i++) cc.pool.material.put(materials[i]);
        materials.length = 0;
        cc.pool.assembler.put(this._assembler);
      },
      setVertsDirty: function setVertsDirty() {
        this._vertsDirty = true;
        this.markForRender(true);
      },
      _on3DNodeChanged: function _on3DNodeChanged() {
        this._resetAssembler();
      },
      _validateRender: function _validateRender() {},
      markForValidate: function markForValidate() {
        cc.RenderFlow.registerValidate(this);
      },
      markForRender: function markForRender(enable) {
        var flag = RenderFlow.FLAG_RENDER | RenderFlow.FLAG_UPDATE_RENDER_DATA;
        if (enable) {
          this.node._renderFlag |= flag;
          this.markForValidate();
        } else this.node._renderFlag &= ~flag;
      },
      disableRender: function disableRender() {
        this.node._renderFlag &= ~(RenderFlow.FLAG_RENDER | RenderFlow.FLAG_UPDATE_RENDER_DATA);
      },
      getMaterial: function getMaterial(index) {
        if (index < 0 || index >= this._materials.length) return null;
        var material = this._materials[index];
        if (!material) return null;
        var instantiated = _materialVariant["default"].create(material, this);
        instantiated !== material && this.setMaterial(index, instantiated);
        return instantiated;
      },
      getMaterials: function getMaterials() {
        var materials = this._materials;
        for (var i = 0; i < materials.length; i++) materials[i] = _materialVariant["default"].create(materials[i], this);
        return materials;
      },
      setMaterial: function setMaterial(index, material) {
        if (material !== this._materials[index]) {
          material = _materialVariant["default"].create(material, this);
          this._materials[index] = material;
        }
        this._updateMaterial();
        this.markForRender(true);
        return material;
      },
      _getDefaultMaterial: function _getDefaultMaterial() {
        return Material.getBuiltinMaterial("2d-sprite");
      },
      _activateMaterial: function _activateMaterial() {
        var materials = this._materials;
        if (!materials[0]) {
          var material = this._getDefaultMaterial();
          materials[0] = material;
        }
        for (var i = 0; i < materials.length; i++) materials[i] = _materialVariant["default"].create(materials[i], this);
        this._updateMaterial();
      },
      _updateMaterial: function _updateMaterial() {},
      _updateColor: function _updateColor() {
        if (this._assembler.updateColor) {
          var premultiply = this.srcBlendFactor === cc.macro.BlendFactor.ONE;
          premultiply && _valueTypes.Color.premultiplyAlpha(_temp_color, this.node._color);
          var color = premultiply ? _temp_color._val : null;
          this._assembler.updateColor(this, color);
        }
      },
      _checkBacth: function _checkBacth(renderer, cullingMask) {
        var material = this._materials[0];
        if (material && material.getHash() !== renderer.material.getHash() || renderer.cullingMask !== cullingMask) {
          renderer._flush();
          renderer.node = material.getDefine("CC_USE_MODEL") ? this.node : renderer._dummyNode;
          renderer.material = material;
          renderer.cullingMask = cullingMask;
        }
      }
    });
    cc.RenderComponent = module.exports = RenderComponent;
  }), {
    "../assets/material/CCMaterial": 77,
    "../assets/material/material-variant": 84,
    "../renderer/assembler": 165,
    "../renderer/render-flow": 169,
    "../value-types": 224,
    "./CCComponent": 94
  } ],
  101: [ (function(require, module, exports) {
    "use strict";
    var js = require("../platform/js");
    var macro = require("../platform/CCMacro");
    var textUtils = require("../utils/text-utils");
    var HtmlTextParser = require("../utils/html-text-parser");
    var _htmlTextParser = new HtmlTextParser();
    var HorizontalAlign = macro.TextAlignment;
    var VerticalAlign = macro.VerticalTextAlignment;
    var RichTextChildName = "RICHTEXT_CHILD";
    var RichTextChildImageName = "RICHTEXT_Image_CHILD";
    var CacheMode = cc.Label.CacheMode;
    function debounce(func, wait, immediate) {
      var timeout;
      return function() {
        var context = this;
        var later = function later() {
          timeout = null;
          immediate || func.apply(context, arguments);
        };
        var callNow = immediate && !timeout;
        clearTimeout(timeout);
        timeout = setTimeout(later, wait);
        callNow && func.apply(context, arguments);
      };
    }
    var pool = new js.Pool(function(node) {
      false;
      false;
      if (!cc.isValid(node)) return false;
      var outline = node.getComponent(cc.LabelOutline);
      outline && (outline.width = 0);
      return true;
    }, 20);
    pool.get = function(string, richtext) {
      var labelNode = this._get();
      labelNode || (labelNode = new cc.PrivateNode(RichTextChildName));
      labelNode.setPosition(0, 0);
      labelNode.setAnchorPoint(.5, .5);
      labelNode.skewX = 0;
      var labelComponent = labelNode.getComponent(cc.Label);
      labelComponent || (labelComponent = labelNode.addComponent(cc.Label));
      labelComponent.string = "";
      labelComponent.horizontalAlign = HorizontalAlign.LEFT;
      labelComponent.verticalAlign = VerticalAlign.CENTER;
      return labelNode;
    };
    var RichText = cc.Class({
      name: "cc.RichText",
      extends: cc.Component,
      ctor: function ctor() {
        this._textArray = null;
        this._labelSegments = [];
        this._labelSegmentsCache = [];
        this._linesWidth = [];
        false;
        this._updateRichTextStatus = this._updateRichText;
      },
      editor: false,
      properties: {
        string: {
          default: "<color=#00ff00>Rich</c><color=#0fffff>Text</color>",
          multiline: true,
          tooltip: false,
          notify: function notify() {
            this._updateRichTextStatus();
          }
        },
        horizontalAlign: {
          default: HorizontalAlign.LEFT,
          type: HorizontalAlign,
          tooltip: false,
          animatable: false,
          notify: function notify(oldValue) {
            if (this.horizontalAlign === oldValue) return;
            this._layoutDirty = true;
            this._updateRichTextStatus();
          }
        },
        fontSize: {
          default: 40,
          tooltip: false,
          notify: function notify(oldValue) {
            if (this.fontSize === oldValue) return;
            this._layoutDirty = true;
            this._updateRichTextStatus();
          }
        },
        _fontFamily: "Arial",
        fontFamily: {
          tooltip: false,
          get: function get() {
            return this._fontFamily;
          },
          set: function set(value) {
            if (this._fontFamily === value) return;
            this._fontFamily = value;
            this._layoutDirty = true;
            this._updateRichTextStatus();
          },
          animatable: false
        },
        font: {
          default: null,
          type: cc.TTFFont,
          tooltip: false,
          notify: function notify(oldValue) {
            if (this.font === oldValue) return;
            this._layoutDirty = true;
            if (this.font) {
              false;
              this.useSystemFont = false;
              this._onTTFLoaded();
            } else this.useSystemFont = true;
            this._updateRichTextStatus();
          }
        },
        _isSystemFontUsed: true,
        useSystemFont: {
          get: function get() {
            return this._isSystemFontUsed;
          },
          set: function set(value) {
            if (this._isSystemFontUsed === value) return;
            this._isSystemFontUsed = value;
            false;
            this._layoutDirty = true;
            this._updateRichTextStatus();
          },
          animatable: false,
          tooltip: false
        },
        cacheMode: {
          default: CacheMode.NONE,
          type: CacheMode,
          tooltip: false,
          notify: function notify(oldValue) {
            if (this.cacheMode === oldValue) return;
            this._updateRichTextStatus();
          },
          animatable: false
        },
        maxWidth: {
          default: 0,
          tooltip: false,
          notify: function notify(oldValue) {
            if (this.maxWidth === oldValue) return;
            this._layoutDirty = true;
            this._updateRichTextStatus();
          }
        },
        lineHeight: {
          default: 40,
          tooltip: false,
          notify: function notify(oldValue) {
            if (this.lineHeight === oldValue) return;
            this._layoutDirty = true;
            this._updateRichTextStatus();
          }
        },
        imageAtlas: {
          default: null,
          type: cc.SpriteAtlas,
          tooltip: false,
          notify: function notify(oldValue) {
            if (this.imageAtlas === oldValue) return;
            this._layoutDirty = true;
            this._updateRichTextStatus();
          }
        },
        handleTouchEvent: {
          default: true,
          tooltip: false,
          notify: function notify(oldValue) {
            if (this.handleTouchEvent === oldValue) return;
            this.enabledInHierarchy && (this.handleTouchEvent ? this._addEventListeners() : this._removeEventListeners());
          }
        }
      },
      statics: {
        HorizontalAlign: HorizontalAlign,
        VerticalAlign: VerticalAlign
      },
      onEnable: function onEnable() {
        this.handleTouchEvent && this._addEventListeners();
        this._updateRichText();
        this._activateChildren(true);
      },
      onDisable: function onDisable() {
        this.handleTouchEvent && this._removeEventListeners();
        this._activateChildren(false);
      },
      start: function start() {
        this._onTTFLoaded();
      },
      _onColorChanged: function _onColorChanged(parentColor) {
        var children = this.node.children;
        children.forEach((function(childNode) {
          childNode.color = parentColor;
        }));
      },
      _addEventListeners: function _addEventListeners() {
        this.node.on(cc.Node.EventType.TOUCH_END, this._onTouchEnded, this);
        this.node.on(cc.Node.EventType.COLOR_CHANGED, this._onColorChanged, this);
      },
      _removeEventListeners: function _removeEventListeners() {
        this.node.off(cc.Node.EventType.TOUCH_END, this._onTouchEnded, this);
        this.node.off(cc.Node.EventType.COLOR_CHANGED, this._onColorChanged, this);
      },
      _updateLabelSegmentTextAttributes: function _updateLabelSegmentTextAttributes() {
        this._labelSegments.forEach(function(item) {
          this._applyTextAttribute(item, null, true);
        }.bind(this));
      },
      _createFontLabel: function _createFontLabel(string) {
        return pool.get(string, this);
      },
      _onTTFLoaded: function _onTTFLoaded() {
        if (this.font instanceof cc.TTFFont) if (this.font._nativeAsset) {
          this._layoutDirty = true;
          this._updateRichText();
        } else {
          var self = this;
          cc.assetManager.postLoadNative(this.font, (function(err) {
            self._layoutDirty = true;
            self._updateRichText();
          }));
        } else {
          this._layoutDirty = true;
          this._updateRichText();
        }
      },
      _measureText: function _measureText(styleIndex, string) {
        var self = this;
        var func = function func(string) {
          var label;
          if (0 === self._labelSegmentsCache.length) {
            label = self._createFontLabel(string);
            self._labelSegmentsCache.push(label);
          } else label = self._labelSegmentsCache[0];
          label._styleIndex = styleIndex;
          self._applyTextAttribute(label, string, true);
          var labelSize = label.getContentSize();
          return labelSize.width;
        };
        return string ? func(string) : func;
      },
      _onTouchEnded: function _onTouchEnded(event) {
        var _this = this;
        var components = this.node.getComponents(cc.Component);
        var _loop = function _loop(i) {
          var labelSegment = _this._labelSegments[i];
          var clickHandler = labelSegment._clickHandler;
          var clickParam = labelSegment._clickParam;
          if (clickHandler && _this._containsTouchLocation(labelSegment, event.touch.getLocation())) {
            components.forEach((function(component) {
              component.enabledInHierarchy && component[clickHandler] && component[clickHandler](event, clickParam);
            }));
            event.stopPropagation();
          }
        };
        for (var i = 0; i < this._labelSegments.length; ++i) _loop(i);
      },
      _containsTouchLocation: function _containsTouchLocation(label, point) {
        var myRect = label.getBoundingBoxToWorld();
        return myRect.contains(point);
      },
      _resetState: function _resetState() {
        var children = this.node.children;
        for (var i = children.length - 1; i >= 0; i--) {
          var child = children[i];
          if (child.name === RichTextChildName || child.name === RichTextChildImageName) {
            child.parent === this.node ? child.parent = null : children.splice(i, 1);
            child.name === RichTextChildName && pool.put(child);
          }
        }
        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 = true;
      },
      onRestore: false,
      _activateChildren: function _activateChildren(active) {
        for (var i = this.node.children.length - 1; i >= 0; i--) {
          var child = this.node.children[i];
          child.name !== RichTextChildName && child.name !== RichTextChildImageName || (child.active = active);
        }
      },
      _addLabelSegment: function _addLabelSegment(stringToken, styleIndex) {
        var labelSegment;
        labelSegment = 0 === this._labelSegmentsCache.length ? this._createFontLabel(stringToken) : this._labelSegmentsCache.pop();
        labelSegment._styleIndex = styleIndex;
        labelSegment._lineCount = this._lineCount;
        labelSegment.active = this.node.active;
        labelSegment.setAnchorPoint(0, 0);
        this._applyTextAttribute(labelSegment, stringToken);
        this.node.addChild(labelSegment);
        this._labelSegments.push(labelSegment);
        return labelSegment;
      },
      _updateRichTextWithMaxWidth: function _updateRichTextWithMaxWidth(labelString, labelWidth, styleIndex) {
        var fragmentWidth = labelWidth;
        var labelSegment;
        if (this._lineOffsetX > 0 && fragmentWidth + this._lineOffsetX > this.maxWidth) {
          var checkStartIndex = 0;
          while (this._lineOffsetX <= this.maxWidth) {
            var checkEndIndex = this._getFirstWordLen(labelString, checkStartIndex, labelString.length);
            var checkString = labelString.substr(checkStartIndex, checkEndIndex);
            var checkStringWidth = this._measureText(styleIndex, checkString);
            if (!(this._lineOffsetX + checkStringWidth <= this.maxWidth)) {
              if (checkStartIndex > 0) {
                var remainingString = labelString.substr(0, checkStartIndex);
                this._addLabelSegment(remainingString, styleIndex);
                labelString = labelString.substr(checkStartIndex, labelString.length);
                fragmentWidth = this._measureText(styleIndex, labelString);
              }
              this._updateLineInfo();
              break;
            }
            this._lineOffsetX += checkStringWidth;
            checkStartIndex += checkEndIndex;
          }
        }
        if (fragmentWidth > this.maxWidth) {
          var fragments = textUtils.fragmentText(labelString, fragmentWidth, this.maxWidth, this._measureText(styleIndex));
          for (var k = 0; k < fragments.length; ++k) {
            var splitString = fragments[k];
            labelSegment = this._addLabelSegment(splitString, styleIndex);
            var labelSize = labelSegment.getContentSize();
            this._lineOffsetX += labelSize.width;
            fragments.length > 1 && k < fragments.length - 1 && this._updateLineInfo();
          }
        } else {
          this._lineOffsetX += fragmentWidth;
          this._addLabelSegment(labelString, styleIndex);
        }
      },
      _isLastComponentCR: function _isLastComponentCR(stringToken) {
        return stringToken.length - 1 === stringToken.lastIndexOf("\n");
      },
      _updateLineInfo: function _updateLineInfo() {
        this._linesWidth.push(this._lineOffsetX);
        this._lineOffsetX = 0;
        this._lineCount++;
      },
      _needsUpdateTextLayout: function _needsUpdateTextLayout(newTextArray) {
        if (this._layoutDirty || !this._textArray || !newTextArray) return true;
        if (this._textArray.length !== newTextArray.length) return true;
        for (var i = 0; i < this._textArray.length; ++i) {
          var oldItem = this._textArray[i];
          var newItem = newTextArray[i];
          if (oldItem.text !== newItem.text) return true;
          var oldStyle = oldItem.style, newStyle = newItem.style;
          if (oldStyle) {
            if (newStyle) {
              if (!oldStyle.outline !== !newStyle.outline) return true;
              if (oldStyle.size !== newStyle.size || !oldStyle.italic !== !newStyle.italic || oldStyle.isImage !== newStyle.isImage) return true;
              if (oldStyle.src !== newStyle.src || oldStyle.imageAlign !== newStyle.imageAlign || oldStyle.imageHeight !== newStyle.imageHeight || oldStyle.imageWidth !== newStyle.imageWidth || oldStyle.imageOffset !== newStyle.imageOffset) return true;
            } else if (oldStyle.size || oldStyle.italic || oldStyle.isImage || oldStyle.outline) return true;
          } else if (newStyle && (newStyle.size || newStyle.italic || newStyle.isImage || newStyle.outline)) return true;
        }
        return false;
      },
      _addRichTextImageElement: function _addRichTextImageElement(richTextElement) {
        var spriteFrameName = richTextElement.style.src;
        var spriteFrame = this.imageAtlas.getSpriteFrame(spriteFrameName);
        if (spriteFrame) {
          var spriteNode = new cc.PrivateNode(RichTextChildImageName);
          var spriteComponent = spriteNode.addComponent(cc.Sprite);
          switch (richTextElement.style.imageAlign) {
           case "top":
            spriteNode.setAnchorPoint(0, 1);
            break;

           case "center":
            spriteNode.setAnchorPoint(0, .5);
            break;

           default:
            spriteNode.setAnchorPoint(0, 0);
          }
          richTextElement.style.imageOffset && (spriteNode._imageOffset = richTextElement.style.imageOffset);
          spriteComponent.type = cc.Sprite.Type.SLICED;
          spriteComponent.sizeMode = cc.Sprite.SizeMode.CUSTOM;
          this.node.addChild(spriteNode);
          this._labelSegments.push(spriteNode);
          var spriteRect = spriteFrame.getRect();
          var scaleFactor = 1;
          var spriteWidth = spriteRect.width;
          var spriteHeight = spriteRect.height;
          var expectWidth = richTextElement.style.imageWidth;
          var expectHeight = richTextElement.style.imageHeight;
          if (expectHeight > 0) {
            scaleFactor = expectHeight / spriteHeight;
            spriteWidth *= scaleFactor;
            spriteHeight *= scaleFactor;
          } else {
            scaleFactor = this.lineHeight / spriteHeight;
            spriteWidth *= scaleFactor;
            spriteHeight *= scaleFactor;
          }
          expectWidth > 0 && (spriteWidth = expectWidth);
          if (this.maxWidth > 0) {
            this._lineOffsetX + spriteWidth > this.maxWidth && this._updateLineInfo();
            this._lineOffsetX += spriteWidth;
          } else {
            this._lineOffsetX += spriteWidth;
            this._lineOffsetX > this._labelWidth && (this._labelWidth = this._lineOffsetX);
          }
          spriteComponent.spriteFrame = spriteFrame;
          spriteNode.setContentSize(spriteWidth, spriteHeight);
          spriteNode._lineCount = this._lineCount;
          if (richTextElement.style.event) {
            richTextElement.style.event.click && (spriteNode._clickHandler = richTextElement.style.event.click);
            richTextElement.style.event.param ? spriteNode._clickParam = richTextElement.style.event.param : spriteNode._clickParam = "";
          } else spriteNode._clickHandler = null;
        } else cc.warnID(4400);
      },
      _updateRichText: function _updateRichText() {
        if (!this.enabledInHierarchy) return;
        var newTextArray = _htmlTextParser.parse(this.string);
        if (!this._needsUpdateTextLayout(newTextArray)) {
          this._textArray = newTextArray;
          this._updateLabelSegmentTextAttributes();
          return;
        }
        this._textArray = newTextArray;
        this._resetState();
        var lastEmptyLine = false;
        var label;
        var labelSize;
        for (var i = 0; i < this._textArray.length; ++i) {
          var richTextElement = this._textArray[i];
          var text = richTextElement.text;
          if ("" === text) {
            if (richTextElement.style && richTextElement.style.newline) {
              this._updateLineInfo();
              continue;
            }
            if (richTextElement.style && richTextElement.style.isImage && this.imageAtlas) {
              this._addRichTextImageElement(richTextElement);
              continue;
            }
          }
          var multilineTexts = text.split("\n");
          for (var j = 0; j < multilineTexts.length; ++j) {
            var labelString = multilineTexts[j];
            if ("" === labelString) {
              if (this._isLastComponentCR(text) && j === multilineTexts.length - 1) continue;
              this._updateLineInfo();
              lastEmptyLine = true;
              continue;
            }
            lastEmptyLine = false;
            if (this.maxWidth > 0) {
              var labelWidth = this._measureText(i, labelString);
              this._updateRichTextWithMaxWidth(labelString, labelWidth, i);
              multilineTexts.length > 1 && j < multilineTexts.length - 1 && this._updateLineInfo();
            } else {
              label = this._addLabelSegment(labelString, i);
              labelSize = label.getContentSize();
              this._lineOffsetX += labelSize.width;
              this._lineOffsetX > this._labelWidth && (this._labelWidth = this._lineOffsetX);
              multilineTexts.length > 1 && j < multilineTexts.length - 1 && this._updateLineInfo();
            }
          }
        }
        lastEmptyLine || this._linesWidth.push(this._lineOffsetX);
        this.maxWidth > 0 && (this._labelWidth = this.maxWidth);
        this._labelHeight = (this._lineCount + textUtils.BASELINE_RATIO) * this.lineHeight;
        this.node.setContentSize(this._labelWidth, this._labelHeight);
        this._updateRichTextPosition();
        this._layoutDirty = false;
      },
      _getFirstWordLen: function _getFirstWordLen(text, startIndex, textLen) {
        var character = text.charAt(startIndex);
        if (textUtils.isUnicodeCJK(character) || textUtils.isUnicodeSpace(character)) return 1;
        var len = 1;
        for (var index = startIndex + 1; index < textLen; ++index) {
          character = text.charAt(index);
          if (textUtils.isUnicodeSpace(character) || textUtils.isUnicodeCJK(character)) break;
          len++;
        }
        return len;
      },
      _updateRichTextPosition: function _updateRichTextPosition() {
        var nextTokenX = 0;
        var nextLineIndex = 1;
        var totalLineCount = this._lineCount;
        for (var i = 0; i < this._labelSegments.length; ++i) {
          var label = this._labelSegments[i];
          var lineCount = label._lineCount;
          if (lineCount > nextLineIndex) {
            nextTokenX = 0;
            nextLineIndex = lineCount;
          }
          var lineOffsetX = 0;
          switch (this.horizontalAlign) {
           case HorizontalAlign.LEFT:
            lineOffsetX = -this._labelWidth / 2;
            break;

           case HorizontalAlign.CENTER:
            lineOffsetX = -this._linesWidth[lineCount - 1] / 2;
            break;

           case HorizontalAlign.RIGHT:
            lineOffsetX = this._labelWidth / 2 - this._linesWidth[lineCount - 1];
          }
          label.x = nextTokenX + lineOffsetX;
          var labelSize = label.getContentSize();
          label.y = this.lineHeight * (totalLineCount - lineCount) - this._labelHeight / 2;
          lineCount === nextLineIndex && (nextTokenX += labelSize.width);
          var sprite = label.getComponent(cc.Sprite);
          if (sprite) {
            var lineHeightSet = this.lineHeight;
            var lineHeightReal = this.lineHeight * (1 + textUtils.BASELINE_RATIO);
            switch (label.anchorY) {
             case 1:
              label.y += lineHeightSet + (lineHeightReal - lineHeightSet) / 2;
              break;

             case .5:
              label.y += lineHeightReal / 2;
              break;

             default:
              label.y += (lineHeightReal - lineHeightSet) / 2;
            }
            if (label._imageOffset) {
              var offsets = label._imageOffset.split(",");
              if (1 === offsets.length && offsets[0]) {
                var offsetY = parseFloat(offsets[0]);
                Number.isInteger(offsetY) && (label.y += offsetY);
              } else if (2 === offsets.length) {
                var offsetX = parseFloat(offsets[0]);
                var _offsetY = parseFloat(offsets[1]);
                Number.isInteger(offsetX) && (label.x += offsetX);
                Number.isInteger(_offsetY) && (label.y += _offsetY);
              }
            }
          }
          var outline = label.getComponent(cc.LabelOutline);
          outline && outline.width && (label.y = label.y - outline.width);
        }
      },
      _convertLiteralColorValue: function _convertLiteralColorValue(color) {
        var colorValue = color.toUpperCase();
        if (cc.Color[colorValue]) return cc.Color[colorValue];
        var out = cc.color();
        return out.fromHEX(color);
      },
      _applyTextAttribute: function _applyTextAttribute(labelNode, string, force) {
        var labelComponent = labelNode.getComponent(cc.Label);
        if (!labelComponent) return;
        var index = labelNode._styleIndex;
        var textStyle = null;
        this._textArray[index] && (textStyle = this._textArray[index].style);
        textStyle && textStyle.color ? labelNode.color = this._convertLiteralColorValue(textStyle.color) : labelNode.color = this.node.color;
        labelComponent.cacheMode = this.cacheMode;
        var isAsset = this.font instanceof cc.Font;
        isAsset && !this._isSystemFontUsed ? labelComponent.font = this.font : labelComponent.fontFamily = this.fontFamily;
        labelComponent.useSystemFont = this._isSystemFontUsed;
        labelComponent.lineHeight = this.lineHeight;
        labelComponent.enableBold = textStyle && textStyle.bold;
        labelComponent.enableItalics = textStyle && textStyle.italic;
        textStyle && textStyle.italic && (labelNode.skewX = 12);
        labelComponent.enableUnderline = textStyle && textStyle.underline;
        if (textStyle && textStyle.outline) {
          var labelOutlineComponent = labelNode.getComponent(cc.LabelOutline);
          labelOutlineComponent || (labelOutlineComponent = labelNode.addComponent(cc.LabelOutline));
          labelOutlineComponent.color = this._convertLiteralColorValue(textStyle.outline.color);
          labelOutlineComponent.width = textStyle.outline.width;
        }
        textStyle && textStyle.size ? labelComponent.fontSize = textStyle.size : labelComponent.fontSize = this.fontSize;
        if (null !== string) {
          "string" !== typeof string && (string = "" + string);
          labelComponent.string = string;
        }
        force && labelComponent._forceUpdateRenderData();
        if (textStyle && textStyle.event) {
          textStyle.event.click && (labelNode._clickHandler = textStyle.event.click);
          textStyle.event.param ? labelNode._clickParam = textStyle.event.param : labelNode._clickParam = "";
        } else labelNode._clickHandler = null;
      },
      onDestroy: function onDestroy() {
        for (var i = 0; i < this._labelSegments.length; ++i) {
          this._labelSegments[i].removeFromParent();
          pool.put(this._labelSegments[i]);
        }
      }
    });
    cc.RichText = module.exports = RichText;
  }), {
    "../platform/CCMacro": 143,
    "../platform/js": 158,
    "../utils/html-text-parser": 207,
    "../utils/text-utils": 216
  } ],
  102: [ (function(require, module, exports) {
    "use strict";
    var Widget = require("./CCWidget");
    var SafeArea = cc.Class({
      name: "cc.SafeArea",
      extends: require("./CCComponent"),
      editor: false,
      onEnable: function onEnable() {
        this.updateArea();
        cc.view.on("canvas-resize", this.updateArea, this);
      },
      onDisable: function onDisable() {
        cc.view.off("canvas-resize", this.updateArea, this);
      },
      updateArea: function updateArea() {
        var widget = this.node.getComponent(Widget);
        if (!widget) return;
        false;
        widget.updateAlignment();
        var lastPos = this.node.position;
        var lastAnchorPoint = this.node.getAnchorPoint();
        widget.isAlignTop = widget.isAlignBottom = widget.isAlignLeft = widget.isAlignRight = true;
        var screenWidth = cc.winSize.width, screenHeight = cc.winSize.height;
        var safeArea = cc.sys.getSafeAreaRect();
        widget.top = screenHeight - safeArea.y - safeArea.height;
        widget.bottom = safeArea.y;
        widget.left = safeArea.x;
        widget.right = screenWidth - safeArea.x - safeArea.width;
        widget.updateAlignment();
        var curPos = this.node.position;
        var anchorX = lastAnchorPoint.x - (curPos.x - lastPos.x) / this.node.width;
        var anchorY = lastAnchorPoint.y - (curPos.y - lastPos.y) / this.node.height;
        this.node.setAnchorPoint(anchorX, anchorY);
        widget.enabled = true;
      }
    });
    cc.SafeArea = module.exports = SafeArea;
  }), {
    "./CCComponent": 94,
    "./CCWidget": 111
  } ],
  103: [ (function(require, module, exports) {
    "use strict";
    var misc = require("../utils/misc");
    var Component = require("./CCComponent");
    var GETTINGSHORTERFACTOR = 20;
    var Direction = cc.Enum({
      HORIZONTAL: 0,
      VERTICAL: 1
    });
    var Scrollbar = cc.Class({
      name: "cc.Scrollbar",
      extends: require("./CCComponent"),
      editor: false,
      properties: {
        _scrollView: null,
        _touching: false,
        _autoHideRemainingTime: {
          default: 0,
          serializable: false
        },
        _opacity: 255,
        handle: {
          default: null,
          type: cc.Sprite,
          tooltip: false,
          notify: function notify() {
            this._onScroll(cc.v2(0, 0));
          },
          animatable: false
        },
        direction: {
          default: Direction.HORIZONTAL,
          type: Direction,
          tooltip: false,
          notify: function notify() {
            this._onScroll(cc.v2(0, 0));
          },
          animatable: false
        },
        enableAutoHide: {
          default: true,
          animatable: false,
          tooltip: false
        },
        autoHideTime: {
          default: 1,
          animatable: false,
          tooltip: false
        }
      },
      statics: {
        Direction: Direction
      },
      setTargetScrollView: function setTargetScrollView(scrollView) {
        this._scrollView = scrollView;
      },
      _convertToScrollViewSpace: function _convertToScrollViewSpace(content) {
        var scrollViewNode = this._scrollView.node;
        var worldSpacePos = content.convertToWorldSpaceAR(cc.v2(-content.anchorX * content.width, -content.anchorY * content.height));
        var scrollViewSpacePos = scrollViewNode.convertToNodeSpaceAR(worldSpacePos);
        scrollViewSpacePos.x += scrollViewNode.anchorX * scrollViewNode.width;
        scrollViewSpacePos.y += scrollViewNode.anchorY * scrollViewNode.height;
        return scrollViewSpacePos;
      },
      _setOpacity: function _setOpacity(opacity) {
        if (this.handle) {
          this.node.opacity = opacity;
          this.handle.node.opacity = opacity;
        }
      },
      _onScroll: function _onScroll(outOfBoundary) {
        if (this._scrollView) {
          var content = this._scrollView.content;
          if (content) {
            var contentSize = content.getContentSize();
            var scrollViewSize = this._scrollView.node.getContentSize();
            var handleNodeSize = this.node.getContentSize();
            if (this._conditionalDisableScrollBar(contentSize, scrollViewSize)) return;
            if (this.enableAutoHide) {
              this._autoHideRemainingTime = this.autoHideTime;
              this._setOpacity(this._opacity);
            }
            var contentMeasure = 0;
            var scrollViewMeasure = 0;
            var outOfBoundaryValue = 0;
            var contentPosition = 0;
            var handleNodeMeasure = 0;
            if (this.direction === Direction.HORIZONTAL) {
              contentMeasure = contentSize.width;
              scrollViewMeasure = scrollViewSize.width;
              handleNodeMeasure = handleNodeSize.width;
              outOfBoundaryValue = outOfBoundary.x;
              contentPosition = -this._convertToScrollViewSpace(content).x;
            } else if (this.direction === Direction.VERTICAL) {
              contentMeasure = contentSize.height;
              scrollViewMeasure = scrollViewSize.height;
              handleNodeMeasure = handleNodeSize.height;
              outOfBoundaryValue = outOfBoundary.y;
              contentPosition = -this._convertToScrollViewSpace(content).y;
            }
            var length = this._calculateLength(contentMeasure, scrollViewMeasure, handleNodeMeasure, outOfBoundaryValue);
            var position = this._calculatePosition(contentMeasure, scrollViewMeasure, handleNodeMeasure, contentPosition, outOfBoundaryValue, length);
            this._updateLength(length);
            this._updateHanlderPosition(position);
          }
        }
      },
      _updateHanlderPosition: function _updateHanlderPosition(position) {
        if (this.handle) {
          var oldPosition = this._fixupHandlerPosition();
          this.handle.node.setPosition(position.x + oldPosition.x, position.y + oldPosition.y);
        }
      },
      _fixupHandlerPosition: function _fixupHandlerPosition() {
        var barSize = this.node.getContentSize();
        var barAnchor = this.node.getAnchorPoint();
        var handleSize = this.handle.node.getContentSize();
        var handleParent = this.handle.node.parent;
        var leftBottomWorldPosition = this.node.convertToWorldSpaceAR(cc.v2(-barSize.width * barAnchor.x, -barSize.height * barAnchor.y));
        var fixupPosition = handleParent.convertToNodeSpaceAR(leftBottomWorldPosition);
        this.direction === Direction.HORIZONTAL ? fixupPosition = cc.v2(fixupPosition.x, fixupPosition.y + (barSize.height - handleSize.height) / 2) : this.direction === Direction.VERTICAL && (fixupPosition = cc.v2(fixupPosition.x + (barSize.width - handleSize.width) / 2, fixupPosition.y));
        this.handle.node.setPosition(fixupPosition);
        return fixupPosition;
      },
      _onTouchBegan: function _onTouchBegan() {
        if (!this.enableAutoHide) return;
        this._touching = true;
      },
      _conditionalDisableScrollBar: function _conditionalDisableScrollBar(contentSize, scrollViewSize) {
        if (contentSize.width <= scrollViewSize.width && this.direction === Direction.HORIZONTAL) return true;
        if (contentSize.height <= scrollViewSize.height && this.direction === Direction.VERTICAL) return true;
        return false;
      },
      _onTouchEnded: function _onTouchEnded() {
        if (!this.enableAutoHide) return;
        this._touching = false;
        if (this.autoHideTime <= 0) return;
        if (this._scrollView) {
          var content = this._scrollView.content;
          if (content) {
            var contentSize = content.getContentSize();
            var scrollViewSize = this._scrollView.node.getContentSize();
            if (this._conditionalDisableScrollBar(contentSize, scrollViewSize)) return;
          }
        }
        this._autoHideRemainingTime = this.autoHideTime;
      },
      _calculateLength: function _calculateLength(contentMeasure, scrollViewMeasure, handleNodeMeasure, outOfBoundary) {
        var denominatorValue = contentMeasure;
        outOfBoundary && (denominatorValue += (outOfBoundary > 0 ? outOfBoundary : -outOfBoundary) * GETTINGSHORTERFACTOR);
        var lengthRation = scrollViewMeasure / denominatorValue;
        return handleNodeMeasure * lengthRation;
      },
      _calculatePosition: function _calculatePosition(contentMeasure, scrollViewMeasure, handleNodeMeasure, contentPosition, outOfBoundary, actualLenth) {
        var denominatorValue = contentMeasure - scrollViewMeasure;
        outOfBoundary && (denominatorValue += Math.abs(outOfBoundary));
        var positionRatio = 0;
        if (denominatorValue) {
          positionRatio = contentPosition / denominatorValue;
          positionRatio = misc.clamp01(positionRatio);
        }
        var position = (handleNodeMeasure - actualLenth) * positionRatio;
        return this.direction === Direction.VERTICAL ? cc.v2(0, position) : cc.v2(position, 0);
      },
      _updateLength: function _updateLength(length) {
        if (this.handle) {
          var handleNode = this.handle.node;
          var handleNodeSize = handleNode.getContentSize();
          handleNode.setAnchorPoint(cc.v2(0, 0));
          this.direction === Direction.HORIZONTAL ? handleNode.setContentSize(length, handleNodeSize.height) : handleNode.setContentSize(handleNodeSize.width, length);
        }
      },
      _processAutoHide: function _processAutoHide(deltaTime) {
        if (!this.enableAutoHide || this._autoHideRemainingTime <= 0) return;
        if (this._touching) return;
        this._autoHideRemainingTime -= deltaTime;
        if (this._autoHideRemainingTime <= this.autoHideTime) {
          this._autoHideRemainingTime = Math.max(0, this._autoHideRemainingTime);
          var opacity = this._opacity * (this._autoHideRemainingTime / this.autoHideTime);
          this._setOpacity(opacity);
        }
      },
      start: function start() {
        this.enableAutoHide && this._setOpacity(0);
      },
      hide: function hide() {
        this._autoHideRemainingTime = 0;
        this._setOpacity(0);
      },
      show: function show() {
        this._autoHideRemainingTime = this.autoHideTime;
        this._setOpacity(this._opacity);
      },
      update: function update(dt) {
        this._processAutoHide(dt);
      }
    });
    cc.Scrollbar = module.exports = Scrollbar;
  }), {
    "../utils/misc": 209,
    "./CCComponent": 94
  } ],
  104: [ (function(require, module, exports) {
    "use strict";
    var NodeEvent = require("../CCNode").EventType;
    var NUMBER_OF_GATHERED_TOUCHES_FOR_MOVE_SPEED = 5;
    var OUT_OF_BOUNDARY_BREAKING_FACTOR = .05;
    var EPSILON = 1e-4;
    var MOVEMENT_FACTOR = .7;
    var _tempPoint = cc.v2();
    var _tempPrevPoint = cc.v2();
    var quintEaseOut = function quintEaseOut(time) {
      time -= 1;
      return time * time * time * time * time + 1;
    };
    var getTimeInMilliseconds = function getTimeInMilliseconds() {
      var currentTime = new Date();
      return currentTime.getMilliseconds();
    };
    var EventType = 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
    });
    var eventMap = {
      "scroll-to-top": EventType.SCROLL_TO_TOP,
      "scroll-to-bottom": EventType.SCROLL_TO_BOTTOM,
      "scroll-to-left": EventType.SCROLL_TO_LEFT,
      "scroll-to-right": EventType.SCROLL_TO_RIGHT,
      scrolling: EventType.SCROLLING,
      "bounce-bottom": EventType.BOUNCE_BOTTOM,
      "bounce-left": EventType.BOUNCE_LEFT,
      "bounce-right": EventType.BOUNCE_RIGHT,
      "bounce-top": EventType.BOUNCE_TOP,
      "scroll-ended": EventType.SCROLL_ENDED,
      "touch-up": EventType.TOUCH_UP,
      "scroll-ended-with-threshold": EventType.AUTOSCROLL_ENDED_WITH_THRESHOLD,
      "scroll-began": EventType.SCROLL_BEGAN
    };
    var ScrollView = cc.Class({
      name: "cc.ScrollView",
      extends: require("./CCViewGroup"),
      editor: false,
      ctor: function ctor() {
        this._topBoundary = 0;
        this._bottomBoundary = 0;
        this._leftBoundary = 0;
        this._rightBoundary = 0;
        this._touchMoveDisplacements = [];
        this._touchMoveTimeDeltas = [];
        this._touchMovePreviousTimestamp = 0;
        this._touchMoved = false;
        this._autoScrolling = false;
        this._autoScrollAttenuate = false;
        this._autoScrollStartPosition = cc.v2(0, 0);
        this._autoScrollTargetDelta = cc.v2(0, 0);
        this._autoScrollTotalTime = 0;
        this._autoScrollAccumulatedTime = 0;
        this._autoScrollCurrentlyOutOfBoundary = false;
        this._autoScrollBraking = false;
        this._autoScrollBrakingStartPosition = cc.v2(0, 0);
        this._outOfBoundaryAmount = cc.v2(0, 0);
        this._outOfBoundaryAmountDirty = true;
        this._stopMouseWheel = false;
        this._mouseWheelEventElapsedTime = 0;
        this._isScrollEndedWithThresholdEventFired = false;
        this._scrollEventEmitMask = 0;
        this._isBouncing = false;
        this._scrolling = false;
      },
      properties: {
        content: {
          default: void 0,
          type: cc.Node,
          tooltip: false,
          formerlySerializedAs: "content",
          notify: function notify(oldValue) {
            this._calculateBoundary();
          }
        },
        horizontal: {
          default: true,
          animatable: false,
          tooltip: false
        },
        vertical: {
          default: true,
          animatable: false,
          tooltip: false
        },
        inertia: {
          default: true,
          tooltip: false
        },
        brake: {
          default: .5,
          type: cc.Float,
          range: [ 0, 1, .1 ],
          tooltip: false
        },
        elastic: {
          default: true,
          animatable: false,
          tooltip: false
        },
        bounceDuration: {
          default: 1,
          range: [ 0, 10 ],
          tooltip: false
        },
        horizontalScrollBar: {
          default: void 0,
          type: cc.Scrollbar,
          tooltip: false,
          notify: function notify() {
            if (this.horizontalScrollBar) {
              this.horizontalScrollBar.setTargetScrollView(this);
              this._updateScrollBar(0);
            }
          },
          animatable: false
        },
        verticalScrollBar: {
          default: void 0,
          type: cc.Scrollbar,
          tooltip: false,
          notify: function notify() {
            if (this.verticalScrollBar) {
              this.verticalScrollBar.setTargetScrollView(this);
              this._updateScrollBar(0);
            }
          },
          animatable: false
        },
        scrollEvents: {
          default: [],
          type: cc.Component.EventHandler,
          tooltip: false
        },
        cancelInnerEvents: {
          default: true,
          animatable: false,
          tooltip: false
        },
        _view: {
          get: function get() {
            if (this.content) return this.content.parent;
          }
        }
      },
      statics: {
        EventType: EventType
      },
      scrollToBottom: function scrollToBottom(timeInSecond, attenuated) {
        var moveDelta = this._calculateMovePercentDelta({
          anchor: cc.v2(0, 0),
          applyToHorizontal: false,
          applyToVertical: true
        });
        timeInSecond ? this._startAutoScroll(moveDelta, timeInSecond, false !== attenuated) : this._moveContent(moveDelta, true);
      },
      scrollToTop: function scrollToTop(timeInSecond, attenuated) {
        var moveDelta = this._calculateMovePercentDelta({
          anchor: cc.v2(0, 1),
          applyToHorizontal: false,
          applyToVertical: true
        });
        timeInSecond ? this._startAutoScroll(moveDelta, timeInSecond, false !== attenuated) : this._moveContent(moveDelta);
      },
      scrollToLeft: function scrollToLeft(timeInSecond, attenuated) {
        var moveDelta = this._calculateMovePercentDelta({
          anchor: cc.v2(0, 0),
          applyToHorizontal: true,
          applyToVertical: false
        });
        timeInSecond ? this._startAutoScroll(moveDelta, timeInSecond, false !== attenuated) : this._moveContent(moveDelta);
      },
      scrollToRight: function scrollToRight(timeInSecond, attenuated) {
        var moveDelta = this._calculateMovePercentDelta({
          anchor: cc.v2(1, 0),
          applyToHorizontal: true,
          applyToVertical: false
        });
        timeInSecond ? this._startAutoScroll(moveDelta, timeInSecond, false !== attenuated) : this._moveContent(moveDelta);
      },
      scrollToTopLeft: function scrollToTopLeft(timeInSecond, attenuated) {
        var moveDelta = this._calculateMovePercentDelta({
          anchor: cc.v2(0, 1),
          applyToHorizontal: true,
          applyToVertical: true
        });
        timeInSecond ? this._startAutoScroll(moveDelta, timeInSecond, false !== attenuated) : this._moveContent(moveDelta);
      },
      scrollToTopRight: function scrollToTopRight(timeInSecond, attenuated) {
        var moveDelta = this._calculateMovePercentDelta({
          anchor: cc.v2(1, 1),
          applyToHorizontal: true,
          applyToVertical: true
        });
        timeInSecond ? this._startAutoScroll(moveDelta, timeInSecond, false !== attenuated) : this._moveContent(moveDelta);
      },
      scrollToBottomLeft: function scrollToBottomLeft(timeInSecond, attenuated) {
        var moveDelta = this._calculateMovePercentDelta({
          anchor: cc.v2(0, 0),
          applyToHorizontal: true,
          applyToVertical: true
        });
        timeInSecond ? this._startAutoScroll(moveDelta, timeInSecond, false !== attenuated) : this._moveContent(moveDelta);
      },
      scrollToBottomRight: function scrollToBottomRight(timeInSecond, attenuated) {
        var moveDelta = this._calculateMovePercentDelta({
          anchor: cc.v2(1, 0),
          applyToHorizontal: true,
          applyToVertical: true
        });
        timeInSecond ? this._startAutoScroll(moveDelta, timeInSecond, false !== attenuated) : this._moveContent(moveDelta);
      },
      scrollToOffset: function scrollToOffset(offset, timeInSecond, attenuated) {
        var maxScrollOffset = this.getMaxScrollOffset();
        var anchor = cc.v2(0, 0);
        0 === maxScrollOffset.x ? anchor.x = 0 : anchor.x = offset.x / maxScrollOffset.x;
        0 === maxScrollOffset.y ? anchor.y = 1 : anchor.y = (maxScrollOffset.y - offset.y) / maxScrollOffset.y;
        this.scrollTo(anchor, timeInSecond, attenuated);
      },
      getScrollOffset: function getScrollOffset() {
        var topDelta = this._getContentTopBoundary() - this._topBoundary;
        var leftDeta = this._getContentLeftBoundary() - this._leftBoundary;
        return cc.v2(leftDeta, topDelta);
      },
      getMaxScrollOffset: function getMaxScrollOffset() {
        var viewSize = this._view.getContentSize();
        var contentSize = this.content.getContentSize();
        var horizontalMaximizeOffset = contentSize.width - viewSize.width;
        var verticalMaximizeOffset = contentSize.height - viewSize.height;
        horizontalMaximizeOffset = horizontalMaximizeOffset >= 0 ? horizontalMaximizeOffset : 0;
        verticalMaximizeOffset = verticalMaximizeOffset >= 0 ? verticalMaximizeOffset : 0;
        return cc.v2(horizontalMaximizeOffset, verticalMaximizeOffset);
      },
      scrollToPercentHorizontal: function scrollToPercentHorizontal(percent, timeInSecond, attenuated) {
        var moveDelta = this._calculateMovePercentDelta({
          anchor: cc.v2(percent, 0),
          applyToHorizontal: true,
          applyToVertical: false
        });
        timeInSecond ? this._startAutoScroll(moveDelta, timeInSecond, false !== attenuated) : this._moveContent(moveDelta);
      },
      scrollTo: function scrollTo(anchor, timeInSecond, attenuated) {
        var moveDelta = this._calculateMovePercentDelta({
          anchor: cc.v2(anchor),
          applyToHorizontal: true,
          applyToVertical: true
        });
        timeInSecond ? this._startAutoScroll(moveDelta, timeInSecond, false !== attenuated) : this._moveContent(moveDelta);
      },
      scrollToPercentVertical: function scrollToPercentVertical(percent, timeInSecond, attenuated) {
        var moveDelta = this._calculateMovePercentDelta({
          anchor: cc.v2(0, percent),
          applyToHorizontal: false,
          applyToVertical: true
        });
        timeInSecond ? this._startAutoScroll(moveDelta, timeInSecond, false !== attenuated) : this._moveContent(moveDelta);
      },
      stopAutoScroll: function stopAutoScroll() {
        this._autoScrolling = false;
        this._autoScrollAccumulatedTime = this._autoScrollTotalTime;
      },
      setContentPosition: function setContentPosition(position) {
        if (position.fuzzyEquals(this.getContentPosition(), EPSILON)) return;
        this.content.setPosition(position);
        this._outOfBoundaryAmountDirty = true;
      },
      getContentPosition: function getContentPosition() {
        return this.content.getPosition();
      },
      isScrolling: function isScrolling() {
        return this._scrolling;
      },
      isAutoScrolling: function isAutoScrolling() {
        return this._autoScrolling;
      },
      _registerEvent: function _registerEvent() {
        this.node.on(cc.Node.EventType.TOUCH_START, this._onTouchBegan, this, true);
        this.node.on(cc.Node.EventType.TOUCH_MOVE, this._onTouchMoved, this, true);
        this.node.on(cc.Node.EventType.TOUCH_END, this._onTouchEnded, this, true);
        this.node.on(cc.Node.EventType.TOUCH_CANCEL, this._onTouchCancelled, this, true);
        this.node.on(cc.Node.EventType.MOUSE_WHEEL, this._onMouseWheel, this, true);
      },
      _unregisterEvent: function _unregisterEvent() {
        this.node.off(cc.Node.EventType.TOUCH_START, this._onTouchBegan, this, true);
        this.node.off(cc.Node.EventType.TOUCH_MOVE, this._onTouchMoved, this, true);
        this.node.off(cc.Node.EventType.TOUCH_END, this._onTouchEnded, this, true);
        this.node.off(cc.Node.EventType.TOUCH_CANCEL, this._onTouchCancelled, this, true);
        this.node.off(cc.Node.EventType.MOUSE_WHEEL, this._onMouseWheel, this, true);
      },
      _onMouseWheel: function _onMouseWheel(event, captureListeners) {
        if (!this.enabledInHierarchy) return;
        if (this._hasNestedViewGroup(event, captureListeners)) return;
        var deltaMove = cc.v2(0, 0);
        var wheelPrecision = -.1;
        false, false;
        this.vertical ? deltaMove = cc.v2(0, event.getScrollY() * wheelPrecision) : this.horizontal && (deltaMove = cc.v2(event.getScrollY() * wheelPrecision, 0));
        this._mouseWheelEventElapsedTime = 0;
        this._processDeltaMove(deltaMove);
        if (!this._stopMouseWheel) {
          this._handlePressLogic();
          this.schedule(this._checkMouseWheel, 1 / 60);
          this._stopMouseWheel = true;
        }
        this._stopPropagationIfTargetIsMe(event);
      },
      _checkMouseWheel: function _checkMouseWheel(dt) {
        var currentOutOfBoundary = this._getHowMuchOutOfBoundary();
        var maxElapsedTime = .1;
        if (!currentOutOfBoundary.fuzzyEquals(cc.v2(0, 0), EPSILON)) {
          this._processInertiaScroll();
          this.unschedule(this._checkMouseWheel);
          this._dispatchEvent("scroll-ended");
          this._stopMouseWheel = false;
          return;
        }
        this._mouseWheelEventElapsedTime += dt;
        if (this._mouseWheelEventElapsedTime > maxElapsedTime) {
          this._onScrollBarTouchEnded();
          this.unschedule(this._checkMouseWheel);
          this._dispatchEvent("scroll-ended");
          this._stopMouseWheel = false;
        }
      },
      _calculateMovePercentDelta: function _calculateMovePercentDelta(options) {
        var anchor = options.anchor;
        var applyToHorizontal = options.applyToHorizontal;
        var applyToVertical = options.applyToVertical;
        this._calculateBoundary();
        anchor = anchor.clampf(cc.v2(0, 0), cc.v2(1, 1));
        var scrollSize = this._view.getContentSize();
        var contentSize = this.content.getContentSize();
        var bottomDeta = this._getContentBottomBoundary() - this._bottomBoundary;
        bottomDeta = -bottomDeta;
        var leftDeta = this._getContentLeftBoundary() - this._leftBoundary;
        leftDeta = -leftDeta;
        var moveDelta = cc.v2(0, 0);
        var totalScrollDelta = 0;
        if (applyToHorizontal) {
          totalScrollDelta = contentSize.width - scrollSize.width;
          moveDelta.x = leftDeta - totalScrollDelta * anchor.x;
        }
        if (applyToVertical) {
          totalScrollDelta = contentSize.height - scrollSize.height;
          moveDelta.y = bottomDeta - totalScrollDelta * anchor.y;
        }
        return moveDelta;
      },
      _moveContentToTopLeft: function _moveContentToTopLeft(scrollViewSize) {
        var contentSize = this.content.getContentSize();
        var bottomDeta = this._getContentBottomBoundary() - this._bottomBoundary;
        bottomDeta = -bottomDeta;
        var moveDelta = cc.v2(0, 0);
        var totalScrollDelta = 0;
        var leftDeta = this._getContentLeftBoundary() - this._leftBoundary;
        leftDeta = -leftDeta;
        if (contentSize.height < scrollViewSize.height) {
          totalScrollDelta = contentSize.height - scrollViewSize.height;
          moveDelta.y = bottomDeta - totalScrollDelta;
        }
        if (contentSize.width < scrollViewSize.width) {
          totalScrollDelta = contentSize.width - scrollViewSize.width;
          moveDelta.x = leftDeta;
        }
        this._updateScrollBarState();
        this._moveContent(moveDelta);
        this._adjustContentOutOfBoundary();
      },
      _calculateBoundary: function _calculateBoundary() {
        if (this.content) {
          var layout = this.content.getComponent(cc.Layout);
          layout && layout.enabledInHierarchy && layout.updateLayout();
          var viewSize = this._view.getContentSize();
          var anchorX = viewSize.width * this._view.anchorX;
          var anchorY = viewSize.height * this._view.anchorY;
          this._leftBoundary = -anchorX;
          this._bottomBoundary = -anchorY;
          this._rightBoundary = this._leftBoundary + viewSize.width;
          this._topBoundary = this._bottomBoundary + viewSize.height;
          this._moveContentToTopLeft(viewSize);
        }
      },
      _hasNestedViewGroup: function _hasNestedViewGroup(event, captureListeners) {
        if (event.eventPhase !== cc.Event.CAPTURING_PHASE) return;
        if (captureListeners) for (var i = 0; i < captureListeners.length; ++i) {
          var item = captureListeners[i];
          if (this.node === item) {
            if (event.target.getComponent(cc.ViewGroup)) return true;
            return false;
          }
          if (item.getComponent(cc.ViewGroup)) return true;
        }
        return false;
      },
      _stopPropagationIfTargetIsMe: function _stopPropagationIfTargetIsMe(event) {
        event.eventPhase === cc.Event.AT_TARGET && event.target === this.node && event.stopPropagation();
      },
      _onTouchBegan: function _onTouchBegan(event, captureListeners) {
        if (!this.enabledInHierarchy) return;
        if (this._hasNestedViewGroup(event, captureListeners)) return;
        var touch = event.touch;
        this.content && this._handlePressLogic(touch);
        this._touchMoved = false;
        this._stopPropagationIfTargetIsMe(event);
      },
      _onTouchMoved: function _onTouchMoved(event, captureListeners) {
        if (!this.enabledInHierarchy) return;
        if (this._hasNestedViewGroup(event, captureListeners)) return;
        var touch = event.touch;
        this.content && this._handleMoveLogic(touch);
        if (!this.cancelInnerEvents) return;
        var deltaMove = touch.getLocation().sub(touch.getStartLocation());
        if (deltaMove.mag() > 7 && !this._touchMoved && event.target !== this.node) {
          var cancelEvent = new cc.Event.EventTouch(event.getTouches(), event.bubbles);
          cancelEvent.type = cc.Node.EventType.TOUCH_CANCEL;
          cancelEvent.touch = event.touch;
          cancelEvent.simulate = true;
          event.target.dispatchEvent(cancelEvent);
          this._touchMoved = true;
        }
        this._stopPropagationIfTargetIsMe(event);
      },
      _onTouchEnded: function _onTouchEnded(event, captureListeners) {
        if (!this.enabledInHierarchy) return;
        if (this._hasNestedViewGroup(event, captureListeners)) return;
        this._dispatchEvent("touch-up");
        var touch = event.touch;
        this.content && this._handleReleaseLogic(touch);
        this._touchMoved ? event.stopPropagation() : this._stopPropagationIfTargetIsMe(event);
      },
      _onTouchCancelled: function _onTouchCancelled(event, captureListeners) {
        if (!this.enabledInHierarchy) return;
        if (this._hasNestedViewGroup(event, captureListeners)) return;
        if (!event.simulate) {
          var touch = event.touch;
          this.content && this._handleReleaseLogic(touch);
        }
        this._stopPropagationIfTargetIsMe(event);
      },
      _processDeltaMove: function _processDeltaMove(deltaMove) {
        this._scrollChildren(deltaMove);
        this._gatherTouchMove(deltaMove);
      },
      _getLocalAxisAlignDelta: function _getLocalAxisAlignDelta(touch) {
        this.node.convertToNodeSpaceAR(touch.getLocation(), _tempPoint);
        this.node.convertToNodeSpaceAR(touch.getPreviousLocation(), _tempPrevPoint);
        return _tempPoint.sub(_tempPrevPoint);
      },
      _handleMoveLogic: function _handleMoveLogic(touch) {
        var deltaMove = this._getLocalAxisAlignDelta(touch);
        this._processDeltaMove(deltaMove);
      },
      _scrollChildren: function _scrollChildren(deltaMove) {
        deltaMove = this._clampDelta(deltaMove);
        var realMove = deltaMove;
        var outOfBoundary;
        if (this.elastic) {
          outOfBoundary = this._getHowMuchOutOfBoundary();
          realMove.x *= 0 === outOfBoundary.x ? 1 : .5;
          realMove.y *= 0 === outOfBoundary.y ? 1 : .5;
        }
        if (!this.elastic) {
          outOfBoundary = this._getHowMuchOutOfBoundary(realMove);
          realMove = realMove.add(outOfBoundary);
        }
        var scrollEventType = -1;
        if (realMove.y > 0) {
          var icBottomPos = this.content.y - this.content.anchorY * this.content.height;
          icBottomPos + realMove.y >= this._bottomBoundary && (scrollEventType = "scroll-to-bottom");
        } else if (realMove.y < 0) {
          var icTopPos = this.content.y - this.content.anchorY * this.content.height + this.content.height;
          icTopPos + realMove.y <= this._topBoundary && (scrollEventType = "scroll-to-top");
        }
        if (realMove.x < 0) {
          var icRightPos = this.content.x - this.content.anchorX * this.content.width + this.content.width;
          icRightPos + realMove.x <= this._rightBoundary && (scrollEventType = "scroll-to-right");
        } else if (realMove.x > 0) {
          var icLeftPos = this.content.x - this.content.anchorX * this.content.width;
          icLeftPos + realMove.x >= this._leftBoundary && (scrollEventType = "scroll-to-left");
        }
        this._moveContent(realMove, false);
        if (0 !== realMove.x || 0 !== realMove.y) {
          if (!this._scrolling) {
            this._scrolling = true;
            this._dispatchEvent("scroll-began");
          }
          this._dispatchEvent("scrolling");
        }
        -1 !== scrollEventType && this._dispatchEvent(scrollEventType);
      },
      _handlePressLogic: function _handlePressLogic() {
        this._autoScrolling && this._dispatchEvent("scroll-ended");
        this._autoScrolling = false;
        this._isBouncing = false;
        this._touchMovePreviousTimestamp = getTimeInMilliseconds();
        this._touchMoveDisplacements.length = 0;
        this._touchMoveTimeDeltas.length = 0;
        this._onScrollBarTouchBegan();
      },
      _clampDelta: function _clampDelta(delta) {
        var contentSize = this.content.getContentSize();
        var scrollViewSize = this._view.getContentSize();
        contentSize.width < scrollViewSize.width && (delta.x = 0);
        contentSize.height < scrollViewSize.height && (delta.y = 0);
        return delta;
      },
      _gatherTouchMove: function _gatherTouchMove(delta) {
        delta = this._clampDelta(delta);
        while (this._touchMoveDisplacements.length >= NUMBER_OF_GATHERED_TOUCHES_FOR_MOVE_SPEED) {
          this._touchMoveDisplacements.shift();
          this._touchMoveTimeDeltas.shift();
        }
        this._touchMoveDisplacements.push(delta);
        var timeStamp = getTimeInMilliseconds();
        this._touchMoveTimeDeltas.push((timeStamp - this._touchMovePreviousTimestamp) / 1e3);
        this._touchMovePreviousTimestamp = timeStamp;
      },
      _startBounceBackIfNeeded: function _startBounceBackIfNeeded() {
        if (!this.elastic) return false;
        var bounceBackAmount = this._getHowMuchOutOfBoundary();
        bounceBackAmount = this._clampDelta(bounceBackAmount);
        if (bounceBackAmount.fuzzyEquals(cc.v2(0, 0), EPSILON)) return false;
        var bounceBackTime = Math.max(this.bounceDuration, 0);
        this._startAutoScroll(bounceBackAmount, bounceBackTime, true);
        if (!this._isBouncing) {
          bounceBackAmount.y > 0 && this._dispatchEvent("bounce-top");
          bounceBackAmount.y < 0 && this._dispatchEvent("bounce-bottom");
          bounceBackAmount.x > 0 && this._dispatchEvent("bounce-right");
          bounceBackAmount.x < 0 && this._dispatchEvent("bounce-left");
          this._isBouncing = true;
        }
        return true;
      },
      _processInertiaScroll: function _processInertiaScroll() {
        var bounceBackStarted = this._startBounceBackIfNeeded();
        if (!bounceBackStarted && this.inertia) {
          var touchMoveVelocity = this._calculateTouchMoveVelocity();
          !touchMoveVelocity.fuzzyEquals(cc.v2(0, 0), EPSILON) && this.brake < 1 && this._startInertiaScroll(touchMoveVelocity);
        }
        this._onScrollBarTouchEnded();
      },
      _handleReleaseLogic: function _handleReleaseLogic(touch) {
        var delta = this._getLocalAxisAlignDelta(touch);
        this._gatherTouchMove(delta);
        this._processInertiaScroll();
        if (this._scrolling) {
          this._scrolling = false;
          this._autoScrolling || this._dispatchEvent("scroll-ended");
        }
      },
      _isOutOfBoundary: function _isOutOfBoundary() {
        var outOfBoundary = this._getHowMuchOutOfBoundary();
        return !outOfBoundary.fuzzyEquals(cc.v2(0, 0), EPSILON);
      },
      _isNecessaryAutoScrollBrake: function _isNecessaryAutoScrollBrake() {
        if (this._autoScrollBraking) return true;
        if (this._isOutOfBoundary()) {
          if (!this._autoScrollCurrentlyOutOfBoundary) {
            this._autoScrollCurrentlyOutOfBoundary = true;
            this._autoScrollBraking = true;
            this._autoScrollBrakingStartPosition = this.getContentPosition();
            return true;
          }
        } else this._autoScrollCurrentlyOutOfBoundary = false;
        return false;
      },
      getScrollEndedEventTiming: function getScrollEndedEventTiming() {
        return EPSILON;
      },
      _processAutoScrolling: function _processAutoScrolling(dt) {
        var isAutoScrollBrake = this._isNecessaryAutoScrollBrake();
        var brakingFactor = isAutoScrollBrake ? OUT_OF_BOUNDARY_BREAKING_FACTOR : 1;
        this._autoScrollAccumulatedTime += dt * (1 / brakingFactor);
        var percentage = Math.min(1, this._autoScrollAccumulatedTime / this._autoScrollTotalTime);
        this._autoScrollAttenuate && (percentage = quintEaseOut(percentage));
        var newPosition = this._autoScrollStartPosition.add(this._autoScrollTargetDelta.mul(percentage));
        var reachedEnd = Math.abs(percentage - 1) <= EPSILON;
        var fireEvent = Math.abs(percentage - 1) <= this.getScrollEndedEventTiming();
        if (fireEvent && !this._isScrollEndedWithThresholdEventFired) {
          this._dispatchEvent("scroll-ended-with-threshold");
          this._isScrollEndedWithThresholdEventFired = true;
        }
        if (this.elastic) {
          var brakeOffsetPosition = newPosition.sub(this._autoScrollBrakingStartPosition);
          isAutoScrollBrake && (brakeOffsetPosition = brakeOffsetPosition.mul(brakingFactor));
          newPosition = this._autoScrollBrakingStartPosition.add(brakeOffsetPosition);
        } else {
          var moveDelta = newPosition.sub(this.getContentPosition());
          var outOfBoundary = this._getHowMuchOutOfBoundary(moveDelta);
          if (!outOfBoundary.fuzzyEquals(cc.v2(0, 0), EPSILON)) {
            newPosition = newPosition.add(outOfBoundary);
            reachedEnd = true;
          }
        }
        reachedEnd && (this._autoScrolling = false);
        var deltaMove = newPosition.sub(this.getContentPosition());
        this._moveContent(this._clampDelta(deltaMove), reachedEnd);
        this._dispatchEvent("scrolling");
        if (!this._autoScrolling) {
          this._isBouncing = false;
          this._scrolling = false;
          this._dispatchEvent("scroll-ended");
        }
      },
      _startInertiaScroll: function _startInertiaScroll(touchMoveVelocity) {
        var inertiaTotalMovement = touchMoveVelocity.mul(MOVEMENT_FACTOR);
        this._startAttenuatingAutoScroll(inertiaTotalMovement, touchMoveVelocity);
      },
      _calculateAttenuatedFactor: function _calculateAttenuatedFactor(distance) {
        if (this.brake <= 0) return 1 - this.brake;
        return (1 - this.brake) * (1 / (1 + 14e-6 * distance + distance * distance * 8e-9));
      },
      _startAttenuatingAutoScroll: function _startAttenuatingAutoScroll(deltaMove, initialVelocity) {
        var time = this._calculateAutoScrollTimeByInitalSpeed(initialVelocity.mag());
        var targetDelta = deltaMove.normalize();
        var contentSize = this.content.getContentSize();
        var scrollviewSize = this._view.getContentSize();
        var totalMoveWidth = contentSize.width - scrollviewSize.width;
        var totalMoveHeight = contentSize.height - scrollviewSize.height;
        var attenuatedFactorX = this._calculateAttenuatedFactor(totalMoveWidth);
        var attenuatedFactorY = this._calculateAttenuatedFactor(totalMoveHeight);
        targetDelta = cc.v2(targetDelta.x * totalMoveWidth * (1 - this.brake) * attenuatedFactorX, targetDelta.y * totalMoveHeight * attenuatedFactorY * (1 - this.brake));
        var originalMoveLength = deltaMove.mag();
        var factor = targetDelta.mag() / originalMoveLength;
        targetDelta = targetDelta.add(deltaMove);
        if (this.brake > 0 && factor > 7) {
          factor = Math.sqrt(factor);
          targetDelta = deltaMove.mul(factor).add(deltaMove);
        }
        if (this.brake > 0 && factor > 3) {
          factor = 3;
          time *= factor;
        }
        0 === this.brake && factor > 1 && (time *= factor);
        this._startAutoScroll(targetDelta, time, true);
      },
      _calculateAutoScrollTimeByInitalSpeed: function _calculateAutoScrollTimeByInitalSpeed(initalSpeed) {
        return Math.sqrt(Math.sqrt(initalSpeed / 5));
      },
      _startAutoScroll: function _startAutoScroll(deltaMove, timeInSecond, attenuated) {
        var adjustedDeltaMove = this._flattenVectorByDirection(deltaMove);
        this._autoScrolling = true;
        this._autoScrollTargetDelta = adjustedDeltaMove;
        this._autoScrollAttenuate = attenuated;
        this._autoScrollStartPosition = this.getContentPosition();
        this._autoScrollTotalTime = timeInSecond;
        this._autoScrollAccumulatedTime = 0;
        this._autoScrollBraking = false;
        this._isScrollEndedWithThresholdEventFired = false;
        this._autoScrollBrakingStartPosition = cc.v2(0, 0);
        var currentOutOfBoundary = this._getHowMuchOutOfBoundary();
        currentOutOfBoundary.fuzzyEquals(cc.v2(0, 0), EPSILON) || (this._autoScrollCurrentlyOutOfBoundary = true);
      },
      _calculateTouchMoveVelocity: function _calculateTouchMoveVelocity() {
        var totalTime = 0;
        totalTime = this._touchMoveTimeDeltas.reduce((function(a, b) {
          return a + b;
        }), totalTime);
        if (totalTime <= 0 || totalTime >= .5) return cc.v2(0, 0);
        var totalMovement = cc.v2(0, 0);
        totalMovement = this._touchMoveDisplacements.reduce((function(a, b) {
          return a.add(b);
        }), totalMovement);
        return cc.v2(totalMovement.x * (1 - this.brake) / totalTime, totalMovement.y * (1 - this.brake) / totalTime);
      },
      _flattenVectorByDirection: function _flattenVectorByDirection(vector) {
        var result = vector;
        result.x = this.horizontal ? result.x : 0;
        result.y = this.vertical ? result.y : 0;
        return result;
      },
      _moveContent: function _moveContent(deltaMove, canStartBounceBack) {
        var adjustedMove = this._flattenVectorByDirection(deltaMove);
        var newPosition = this.getContentPosition().add(adjustedMove);
        this.setContentPosition(newPosition);
        var outOfBoundary = this._getHowMuchOutOfBoundary();
        this._updateScrollBar(outOfBoundary);
        this.elastic && canStartBounceBack && this._startBounceBackIfNeeded();
      },
      _getContentLeftBoundary: function _getContentLeftBoundary() {
        var contentPos = this.getContentPosition();
        return contentPos.x - this.content.getAnchorPoint().x * this.content.getContentSize().width;
      },
      _getContentRightBoundary: function _getContentRightBoundary() {
        var contentSize = this.content.getContentSize();
        return this._getContentLeftBoundary() + contentSize.width;
      },
      _getContentTopBoundary: function _getContentTopBoundary() {
        var contentSize = this.content.getContentSize();
        return this._getContentBottomBoundary() + contentSize.height;
      },
      _getContentBottomBoundary: function _getContentBottomBoundary() {
        var contentPos = this.getContentPosition();
        return contentPos.y - this.content.getAnchorPoint().y * this.content.getContentSize().height;
      },
      _getHowMuchOutOfBoundary: function _getHowMuchOutOfBoundary(addition) {
        addition = addition || cc.v2(0, 0);
        if (addition.fuzzyEquals(cc.v2(0, 0), EPSILON) && !this._outOfBoundaryAmountDirty) return this._outOfBoundaryAmount;
        var outOfBoundaryAmount = cc.v2(0, 0);
        this._getContentLeftBoundary() + addition.x > this._leftBoundary ? outOfBoundaryAmount.x = this._leftBoundary - (this._getContentLeftBoundary() + addition.x) : this._getContentRightBoundary() + addition.x < this._rightBoundary && (outOfBoundaryAmount.x = this._rightBoundary - (this._getContentRightBoundary() + addition.x));
        this._getContentTopBoundary() + addition.y < this._topBoundary ? outOfBoundaryAmount.y = this._topBoundary - (this._getContentTopBoundary() + addition.y) : this._getContentBottomBoundary() + addition.y > this._bottomBoundary && (outOfBoundaryAmount.y = this._bottomBoundary - (this._getContentBottomBoundary() + addition.y));
        if (addition.fuzzyEquals(cc.v2(0, 0), EPSILON)) {
          this._outOfBoundaryAmount = outOfBoundaryAmount;
          this._outOfBoundaryAmountDirty = false;
        }
        outOfBoundaryAmount = this._clampDelta(outOfBoundaryAmount);
        return outOfBoundaryAmount;
      },
      _updateScrollBarState: function _updateScrollBarState() {
        if (!this.content) return;
        var contentSize = this.content.getContentSize();
        var scrollViewSize = this._view.getContentSize();
        this.verticalScrollBar && (contentSize.height < scrollViewSize.height ? this.verticalScrollBar.hide() : this.verticalScrollBar.show());
        this.horizontalScrollBar && (contentSize.width < scrollViewSize.width ? this.horizontalScrollBar.hide() : this.horizontalScrollBar.show());
      },
      _updateScrollBar: function _updateScrollBar(outOfBoundary) {
        this.horizontalScrollBar && this.horizontalScrollBar._onScroll(outOfBoundary);
        this.verticalScrollBar && this.verticalScrollBar._onScroll(outOfBoundary);
      },
      _onScrollBarTouchBegan: function _onScrollBarTouchBegan() {
        this.horizontalScrollBar && this.horizontalScrollBar._onTouchBegan();
        this.verticalScrollBar && this.verticalScrollBar._onTouchBegan();
      },
      _onScrollBarTouchEnded: function _onScrollBarTouchEnded() {
        this.horizontalScrollBar && this.horizontalScrollBar._onTouchEnded();
        this.verticalScrollBar && this.verticalScrollBar._onTouchEnded();
      },
      _dispatchEvent: function _dispatchEvent(event) {
        if ("scroll-ended" === event) this._scrollEventEmitMask = 0; else if ("scroll-to-top" === event || "scroll-to-bottom" === event || "scroll-to-left" === event || "scroll-to-right" === event) {
          var flag = 1 << eventMap[event];
          if (this._scrollEventEmitMask & flag) return;
          this._scrollEventEmitMask |= flag;
        }
        cc.Component.EventHandler.emitEvents(this.scrollEvents, this, eventMap[event]);
        this.node.emit(event, this);
      },
      _adjustContentOutOfBoundary: function _adjustContentOutOfBoundary() {
        this._outOfBoundaryAmountDirty = true;
        if (this._isOutOfBoundary()) {
          var outOfBoundary = this._getHowMuchOutOfBoundary(cc.v2(0, 0));
          var newPosition = this.getContentPosition().add(outOfBoundary);
          if (this.content) {
            this.content.setPosition(newPosition);
            this._updateScrollBar(0);
          }
        }
      },
      start: function start() {
        this._calculateBoundary();
        this.content && cc.director.once(cc.Director.EVENT_BEFORE_DRAW, this._adjustContentOutOfBoundary, this);
      },
      _hideScrollbar: function _hideScrollbar() {
        this.horizontalScrollBar && this.horizontalScrollBar.hide();
        this.verticalScrollBar && this.verticalScrollBar.hide();
      },
      onDisable: function onDisable() {
        true;
        this._unregisterEvent();
        if (this.content) {
          this.content.off(NodeEvent.SIZE_CHANGED, this._calculateBoundary, this);
          this.content.off(NodeEvent.SCALE_CHANGED, this._calculateBoundary, this);
          if (this._view) {
            this._view.off(NodeEvent.POSITION_CHANGED, this._calculateBoundary, this);
            this._view.off(NodeEvent.SCALE_CHANGED, this._calculateBoundary, this);
            this._view.off(NodeEvent.SIZE_CHANGED, this._calculateBoundary, this);
          }
        }
        this._hideScrollbar();
        this.stopAutoScroll();
      },
      onEnable: function onEnable() {
        true;
        this._registerEvent();
        if (this.content) {
          this.content.on(NodeEvent.SIZE_CHANGED, this._calculateBoundary, this);
          this.content.on(NodeEvent.SCALE_CHANGED, this._calculateBoundary, this);
          if (this._view) {
            this._view.on(NodeEvent.POSITION_CHANGED, this._calculateBoundary, this);
            this._view.on(NodeEvent.SCALE_CHANGED, this._calculateBoundary, this);
            this._view.on(NodeEvent.SIZE_CHANGED, this._calculateBoundary, this);
          }
        }
        this._updateScrollBarState();
      },
      update: function update(dt) {
        this._autoScrolling && this._processAutoScrolling(dt);
      }
    });
    cc.ScrollView = module.exports = ScrollView;
  }), {
    "../CCNode": 26,
    "./CCViewGroup": 110
  } ],
  105: [ (function(require, module, exports) {
    "use strict";
    var misc = require("../utils/misc");
    var Component = require("./CCComponent");
    var Direction = cc.Enum({
      Horizontal: 0,
      Vertical: 1
    });
    var Slider = cc.Class({
      name: "cc.Slider",
      extends: Component,
      editor: false,
      ctor: function ctor() {
        this._offset = cc.v2();
        this._touchHandle = false;
        this._dragging = false;
      },
      properties: {
        handle: {
          default: null,
          type: cc.Button,
          tooltip: false,
          notify: function notify() {
            false;
          }
        },
        direction: {
          default: Direction.Horizontal,
          type: Direction,
          tooltip: false
        },
        progress: {
          default: .5,
          type: cc.Float,
          range: [ 0, 1, .1 ],
          slide: true,
          tooltip: false,
          notify: function notify() {
            this._updateHandlePosition();
          }
        },
        slideEvents: {
          default: [],
          type: cc.Component.EventHandler,
          tooltip: false
        }
      },
      statics: {
        Direction: Direction
      },
      __preload: function __preload() {
        this._updateHandlePosition();
      },
      onEnable: function onEnable() {
        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);
        if (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 onDisable() {
        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);
        if (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 _onHandleDragStart(event) {
        this._dragging = true;
        this._touchHandle = true;
        this._offset = this.handle.node.convertToNodeSpaceAR(event.touch.getLocation());
        event.stopPropagation();
      },
      _onTouchBegan: function _onTouchBegan(event) {
        if (!this.handle) return;
        this._dragging = true;
        this._touchHandle || this._handleSliderLogic(event.touch);
        event.stopPropagation();
      },
      _onTouchMoved: function _onTouchMoved(event) {
        if (!this._dragging) return;
        this._handleSliderLogic(event.touch);
        event.stopPropagation();
      },
      _onTouchEnded: function _onTouchEnded(event) {
        this._dragging = false;
        this._touchHandle = false;
        this._offset = cc.v2();
        event.stopPropagation();
      },
      _onTouchCancelled: function _onTouchCancelled(event) {
        this._dragging = false;
        event.stopPropagation();
      },
      _handleSliderLogic: function _handleSliderLogic(touch) {
        this._updateProgress(touch);
        this._emitSlideEvent();
      },
      _emitSlideEvent: function _emitSlideEvent() {
        cc.Component.EventHandler.emitEvents(this.slideEvents, this);
        this.node.emit("slide", this);
      },
      _updateProgress: function _updateProgress(touch) {
        if (!this.handle) return;
        var node = this.node;
        var localTouchPos = node.convertToNodeSpaceAR(touch.getLocation());
        this.direction === Direction.Horizontal ? this.progress = misc.clamp01((localTouchPos.x - this._offset.x + node.anchorX * node.width) / node.width) : this.progress = misc.clamp01((localTouchPos.y - this._offset.y + node.anchorY * node.height) / node.height);
      },
      _updateHandlePosition: function _updateHandlePosition() {
        if (!this.handle) return;
        var handlelocalPos;
        handlelocalPos = this.direction === Direction.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 worldSpacePos = this.node.convertToWorldSpaceAR(handlelocalPos);
        this.handle.node.position = this.handle.node.parent.convertToNodeSpaceAR(worldSpacePos);
      }
    });
    cc.Slider = module.exports = Slider;
  }), {
    "../utils/misc": 209,
    "./CCComponent": 94
  } ],
  106: [ (function(require, module, exports) {
    "use strict";
    var misc = require("../utils/misc");
    var NodeEvent = require("../CCNode").EventType;
    var RenderComponent = require("./CCRenderComponent");
    var BlendFunc = require("../utils/blend-func");
    var SpriteType = cc.Enum({
      SIMPLE: 0,
      SLICED: 1,
      TILED: 2,
      FILLED: 3,
      MESH: 4
    });
    var FillType = cc.Enum({
      HORIZONTAL: 0,
      VERTICAL: 1,
      RADIAL: 2
    });
    var SizeMode = cc.Enum({
      CUSTOM: 0,
      TRIMMED: 1,
      RAW: 2
    });
    var State = cc.Enum({
      NORMAL: 0,
      GRAY: 1
    });
    var Sprite = cc.Class({
      name: "cc.Sprite",
      extends: RenderComponent,
      mixins: [ BlendFunc ],
      editor: false,
      properties: {
        _spriteFrame: {
          default: null,
          type: cc.SpriteFrame
        },
        _type: SpriteType.SIMPLE,
        _sizeMode: SizeMode.TRIMMED,
        _fillType: 0,
        _fillCenter: cc.v2(0, 0),
        _fillStart: 0,
        _fillRange: 0,
        _isTrimmedMode: true,
        _atlas: {
          default: null,
          type: cc.SpriteAtlas,
          tooltip: false,
          editorOnly: true,
          visible: true,
          animatable: false
        },
        spriteFrame: {
          get: function get() {
            return this._spriteFrame;
          },
          set: function set(value, force) {
            var lastSprite = this._spriteFrame;
            false;
            if (lastSprite === value) return;
            this._spriteFrame = value;
            this._applySpriteFrame(lastSprite);
            false;
          },
          type: cc.SpriteFrame
        },
        type: {
          get: function get() {
            return this._type;
          },
          set: function set(value) {
            if (this._type !== value) {
              this._type = value;
              this.setVertsDirty();
              this._resetAssembler();
            }
          },
          type: SpriteType,
          animatable: false,
          tooltip: false
        },
        fillType: {
          get: function get() {
            return this._fillType;
          },
          set: function set(value) {
            if (value !== this._fillType) {
              this._fillType = value;
              this.setVertsDirty();
              this._resetAssembler();
            }
          },
          type: FillType,
          tooltip: false
        },
        fillCenter: {
          get: function get() {
            return this._fillCenter;
          },
          set: function set(value) {
            this._fillCenter.x = value.x;
            this._fillCenter.y = value.y;
            this._type === SpriteType.FILLED && this.setVertsDirty();
          },
          tooltip: false
        },
        fillStart: {
          get: function get() {
            return this._fillStart;
          },
          set: function set(value) {
            this._fillStart = misc.clampf(value, -1, 1);
            this._type === SpriteType.FILLED && this.setVertsDirty();
          },
          tooltip: false
        },
        fillRange: {
          get: function get() {
            return this._fillRange;
          },
          set: function set(value) {
            this._fillRange = misc.clampf(value, -1, 1);
            this._type === SpriteType.FILLED && this.setVertsDirty();
          },
          tooltip: false
        },
        trim: {
          get: function get() {
            return this._isTrimmedMode;
          },
          set: function set(value) {
            if (this._isTrimmedMode !== value) {
              this._isTrimmedMode = value;
              this._type !== SpriteType.SIMPLE && this._type !== SpriteType.MESH || this.setVertsDirty();
            }
          },
          animatable: false,
          tooltip: false
        },
        sizeMode: {
          get: function get() {
            return this._sizeMode;
          },
          set: function set(value) {
            this._sizeMode = value;
            value !== SizeMode.CUSTOM && this._applySpriteSize();
          },
          animatable: false,
          type: SizeMode,
          tooltip: false
        }
      },
      statics: {
        FillType: FillType,
        Type: SpriteType,
        SizeMode: SizeMode,
        State: State
      },
      setVisible: function setVisible(visible) {
        this.enabled = visible;
      },
      setState: function setState() {},
      getState: function getState() {},
      __preload: function __preload() {
        this._super();
        false;
        this._applySpriteFrame();
      },
      onEnable: function onEnable() {
        this._super();
        this._spriteFrame && this._spriteFrame.ensureLoadTexture();
        this.node.on(cc.Node.EventType.SIZE_CHANGED, this.setVertsDirty, this);
        this.node.on(cc.Node.EventType.ANCHOR_CHANGED, this.setVertsDirty, this);
      },
      onDisable: function onDisable() {
        this._super();
        this.node.off(cc.Node.EventType.SIZE_CHANGED, this.setVertsDirty, this);
        this.node.off(cc.Node.EventType.ANCHOR_CHANGED, this.setVertsDirty, this);
      },
      _updateMaterial: function _updateMaterial() {
        var texture = this._spriteFrame && this._spriteFrame.getTexture();
        var material = this.getMaterial(0);
        if (material) {
          void 0 !== material.getDefine("USE_TEXTURE") && material.define("USE_TEXTURE", true);
          material.setProperty("texture", texture);
        }
        BlendFunc.prototype._updateMaterial.call(this);
      },
      _applyAtlas: false,
      _validateRender: function _validateRender() {
        var spriteFrame = this._spriteFrame;
        if (this._materials[0] && spriteFrame && spriteFrame.textureLoaded()) return;
        this.disableRender();
      },
      _applySpriteSize: function _applySpriteSize() {
        if (!this._spriteFrame || !this.isValid) return;
        if (SizeMode.RAW === this._sizeMode) {
          var size = this._spriteFrame._originalSize;
          this.node.setContentSize(size);
        } else if (SizeMode.TRIMMED === this._sizeMode) {
          var rect = this._spriteFrame._rect;
          this.node.setContentSize(rect.width, rect.height);
        }
        this.setVertsDirty();
      },
      _applySpriteFrame: function _applySpriteFrame(oldFrame) {
        var oldTexture = oldFrame && oldFrame.getTexture();
        oldTexture && !oldTexture.loaded && oldFrame.off("load", this._applySpriteSize, this);
        var spriteFrame = this._spriteFrame;
        if (spriteFrame) {
          this._updateMaterial();
          var newTexture = spriteFrame.getTexture();
          if (newTexture && newTexture.loaded) this._applySpriteSize(); else {
            this.disableRender();
            spriteFrame.once("load", this._applySpriteSize, this);
          }
        } else this.disableRender();
        false;
      }
    });
    false;
    cc.Sprite = module.exports = Sprite;
  }), {
    "../CCNode": 26,
    "../utils/blend-func": 203,
    "../utils/misc": 209,
    "./CCRenderComponent": 100
  } ],
  107: [ (function(require, module, exports) {
    "use strict";
    var GraySpriteState = require("../utils/gray-sprite-state");
    var Toggle = cc.Class({
      name: "cc.Toggle",
      extends: require("./CCButton"),
      mixins: [ GraySpriteState ],
      editor: false,
      properties: {
        _N$isChecked: true,
        isChecked: {
          get: function get() {
            return this._N$isChecked;
          },
          set: function set(value) {
            if (value === this._N$isChecked) return;
            var group = this.toggleGroup || this._toggleContainer;
            if (group && group.enabled && this._N$isChecked && !group.allowSwitchOff) return;
            this._N$isChecked = value;
            this._updateCheckMark();
            group && group.enabled && group.updateToggles(this);
            cc.Toggle._triggerEventInScript_isChecked && this._emitToggleEvents();
          },
          tooltip: false
        },
        toggleGroup: {
          default: null,
          tooltip: false,
          type: require("./CCToggleGroup")
        },
        checkMark: {
          default: null,
          type: cc.Sprite,
          tooltip: false
        },
        checkEvents: {
          default: [],
          type: cc.Component.EventHandler
        },
        _resizeToTarget: {
          animatable: false,
          set: function set(value) {
            value && this._resizeNodeToTargetNode();
          }
        }
      },
      statics: {
        _triggerEventInScript_check: false,
        _triggerEventInScript_isChecked: false
      },
      onEnable: function onEnable() {
        this._super();
        true;
        this._registerToggleEvent();
        this.toggleGroup && this.toggleGroup.enabledInHierarchy && this.toggleGroup.addToggle(this);
      },
      onDisable: function onDisable() {
        this._super();
        true;
        this._unregisterToggleEvent();
        this.toggleGroup && this.toggleGroup.enabledInHierarchy && this.toggleGroup.removeToggle(this);
      },
      _hideCheckMark: function _hideCheckMark() {
        this._N$isChecked = false;
        this._updateCheckMark();
      },
      toggle: function toggle(event) {
        this.isChecked = !this.isChecked;
        cc.Toggle._triggerEventInScript_isChecked || !cc.Toggle._triggerEventInScript_check && !event || this._emitToggleEvents();
      },
      check: function check() {
        this.isChecked = true;
        !cc.Toggle._triggerEventInScript_isChecked && cc.Toggle._triggerEventInScript_check && this._emitToggleEvents();
      },
      uncheck: function uncheck() {
        this.isChecked = false;
        !cc.Toggle._triggerEventInScript_isChecked && cc.Toggle._triggerEventInScript_check && this._emitToggleEvents();
      },
      _updateCheckMark: function _updateCheckMark() {
        this.checkMark && (this.checkMark.node.active = !!this.isChecked);
      },
      _updateDisabledState: function _updateDisabledState() {
        this._super();
        if (this.enableAutoGrayEffect && this.checkMark) {
          var useGrayMaterial = !this.interactable;
          this._switchGrayMaterial(useGrayMaterial, this.checkMark);
        }
      },
      _registerToggleEvent: function _registerToggleEvent() {
        this.node.on("click", this.toggle, this);
      },
      _unregisterToggleEvent: function _unregisterToggleEvent() {
        this.node.off("click", this.toggle, this);
      },
      _emitToggleEvents: function _emitToggleEvents() {
        this.node.emit("toggle", this);
        this.checkEvents && cc.Component.EventHandler.emitEvents(this.checkEvents, this);
      }
    });
    cc.Toggle = module.exports = Toggle;
    var js = require("../platform/js");
    js.get(Toggle.prototype, "_toggleContainer", (function() {
      var parent = this.node.parent;
      if (cc.Node.isNode(parent)) return parent.getComponent(cc.ToggleContainer);
      return null;
    }));
  }), {
    "../platform/js": 158,
    "../utils/gray-sprite-state": 206,
    "./CCButton": 92,
    "./CCToggleGroup": 109
  } ],
  108: [ (function(require, module, exports) {
    "use strict";
    var ToggleContainer = cc.Class({
      name: "cc.ToggleContainer",
      extends: cc.Component,
      editor: false,
      properties: {
        allowSwitchOff: {
          tooltip: false,
          default: false
        },
        checkEvents: {
          default: [],
          type: cc.Component.EventHandler
        }
      },
      updateToggles: function updateToggles(toggle) {
        if (!this.enabledInHierarchy) return;
        if (toggle.isChecked) {
          this.toggleItems.forEach((function(item) {
            item !== toggle && item.isChecked && item.enabled && item._hideCheckMark();
          }));
          this.checkEvents && cc.Component.EventHandler.emitEvents(this.checkEvents, toggle);
        }
      },
      _allowOnlyOneToggleChecked: function _allowOnlyOneToggleChecked() {
        var isChecked = false;
        this.toggleItems.forEach((function(item) {
          isChecked ? item._hideCheckMark() : item.isChecked && (isChecked = true);
        }));
        return isChecked;
      },
      _makeAtLeastOneToggleChecked: function _makeAtLeastOneToggleChecked() {
        var isChecked = this._allowOnlyOneToggleChecked();
        if (!isChecked && !this.allowSwitchOff) {
          var toggleItems = this.toggleItems;
          toggleItems.length > 0 && toggleItems[0].check();
        }
      },
      onEnable: function onEnable() {
        this.node.on("child-added", this._allowOnlyOneToggleChecked, this);
        this.node.on("child-removed", this._makeAtLeastOneToggleChecked, this);
      },
      onDisable: function onDisable() {
        this.node.off("child-added", this._allowOnlyOneToggleChecked, this);
        this.node.off("child-removed", this._makeAtLeastOneToggleChecked, this);
      },
      start: function start() {
        this._makeAtLeastOneToggleChecked();
      }
    });
    var js = require("../platform/js");
    js.get(ToggleContainer.prototype, "toggleItems", (function() {
      return this.node._children.map((function(item) {
        return item.getComponent(cc.Toggle);
      })).filter(Boolean);
    }));
    cc.ToggleContainer = module.exports = ToggleContainer;
  }), {
    "../platform/js": 158
  } ],
  109: [ (function(require, module, exports) {
    "use strict";
    var ToggleGroup = cc.Class({
      name: "cc.ToggleGroup",
      extends: cc.Component,
      ctor: function ctor() {
        this._toggleItems = [];
      },
      editor: false,
      properties: {
        allowSwitchOff: {
          tooltip: false,
          default: false
        },
        toggleItems: {
          get: function get() {
            return this._toggleItems;
          }
        }
      },
      updateToggles: function updateToggles(toggle) {
        if (!this.enabledInHierarchy) return;
        this._toggleItems.forEach((function(item) {
          toggle.isChecked && item !== toggle && item.isChecked && item.enabled && item._hideCheckMark();
        }));
      },
      addToggle: function addToggle(toggle) {
        var index = this._toggleItems.indexOf(toggle);
        -1 === index && this._toggleItems.push(toggle);
        this._allowOnlyOneToggleChecked();
      },
      removeToggle: function removeToggle(toggle) {
        var index = this._toggleItems.indexOf(toggle);
        index > -1 && this._toggleItems.splice(index, 1);
        this._makeAtLeastOneToggleChecked();
      },
      _allowOnlyOneToggleChecked: function _allowOnlyOneToggleChecked() {
        var isChecked = false;
        this._toggleItems.forEach((function(item) {
          isChecked && item.enabled && item._hideCheckMark();
          item.isChecked && item.enabled && (isChecked = true);
        }));
        return isChecked;
      },
      _makeAtLeastOneToggleChecked: function _makeAtLeastOneToggleChecked() {
        var isChecked = this._allowOnlyOneToggleChecked();
        isChecked || this.allowSwitchOff || this._toggleItems.length > 0 && (this._toggleItems[0].isChecked = true);
      },
      start: function start() {
        this._makeAtLeastOneToggleChecked();
      }
    });
    var js = require("../platform/js");
    var showed = false;
    js.get(cc, "ToggleGroup", (function() {
      if (!showed) {
        cc.errorID(1405, "cc.ToggleGroup", "cc.ToggleContainer");
        showed = true;
      }
      return ToggleGroup;
    }));
    module.exports = ToggleGroup;
  }), {
    "../platform/js": 158
  } ],
  110: [ (function(require, module, exports) {
    "use strict";
    var ViewGroup = cc.Class({
      name: "cc.ViewGroup",
      extends: require("./CCComponent")
    });
    cc.ViewGroup = module.exports = ViewGroup;
  }), {
    "./CCComponent": 94
  } ],
  111: [ (function(require, module, exports) {
    "use strict";
    var WidgetManager = require("../base-ui/CCWidgetManager");
    var AlignMode = WidgetManager.AlignMode;
    var AlignFlags = WidgetManager._AlignFlags;
    var TOP = AlignFlags.TOP;
    var MID = AlignFlags.MID;
    var BOT = AlignFlags.BOT;
    var LEFT = AlignFlags.LEFT;
    var CENTER = AlignFlags.CENTER;
    var RIGHT = AlignFlags.RIGHT;
    var TOP_BOT = TOP | BOT;
    var LEFT_RIGHT = LEFT | RIGHT;
    var Widget = cc.Class({
      name: "cc.Widget",
      extends: require("./CCComponent"),
      editor: false,
      properties: {
        target: {
          get: function get() {
            return this._target;
          },
          set: function set(value) {
            this._target = value;
            false;
          },
          type: cc.Node,
          tooltip: false
        },
        isAlignTop: {
          get: function get() {
            return (this._alignFlags & TOP) > 0;
          },
          set: function set(value) {
            this._setAlign(TOP, value);
          },
          animatable: false,
          tooltip: false
        },
        isAlignVerticalCenter: {
          get: function get() {
            return (this._alignFlags & MID) > 0;
          },
          set: function set(value) {
            if (value) {
              this.isAlignTop = false;
              this.isAlignBottom = false;
              this._alignFlags |= MID;
            } else this._alignFlags &= ~MID;
          },
          animatable: false,
          tooltip: false
        },
        isAlignBottom: {
          get: function get() {
            return (this._alignFlags & BOT) > 0;
          },
          set: function set(value) {
            this._setAlign(BOT, value);
          },
          animatable: false,
          tooltip: false
        },
        isAlignLeft: {
          get: function get() {
            return (this._alignFlags & LEFT) > 0;
          },
          set: function set(value) {
            this._setAlign(LEFT, value);
          },
          animatable: false,
          tooltip: false
        },
        isAlignHorizontalCenter: {
          get: function get() {
            return (this._alignFlags & CENTER) > 0;
          },
          set: function set(value) {
            if (value) {
              this.isAlignLeft = false;
              this.isAlignRight = false;
              this._alignFlags |= CENTER;
            } else this._alignFlags &= ~CENTER;
          },
          animatable: false,
          tooltip: false
        },
        isAlignRight: {
          get: function get() {
            return (this._alignFlags & RIGHT) > 0;
          },
          set: function set(value) {
            this._setAlign(RIGHT, value);
          },
          animatable: false,
          tooltip: false
        },
        isStretchWidth: {
          get: function get() {
            return (this._alignFlags & LEFT_RIGHT) === LEFT_RIGHT;
          },
          visible: false
        },
        isStretchHeight: {
          get: function get() {
            return (this._alignFlags & TOP_BOT) === TOP_BOT;
          },
          visible: false
        },
        top: {
          get: function get() {
            return this._top;
          },
          set: function set(value) {
            this._top = value;
          },
          tooltip: false
        },
        bottom: {
          get: function get() {
            return this._bottom;
          },
          set: function set(value) {
            this._bottom = value;
          },
          tooltip: false
        },
        left: {
          get: function get() {
            return this._left;
          },
          set: function set(value) {
            this._left = value;
          },
          tooltip: false
        },
        right: {
          get: function get() {
            return this._right;
          },
          set: function set(value) {
            this._right = value;
          },
          tooltip: false
        },
        horizontalCenter: {
          get: function get() {
            return this._horizontalCenter;
          },
          set: function set(value) {
            this._horizontalCenter = value;
          },
          tooltip: false
        },
        verticalCenter: {
          get: function get() {
            return this._verticalCenter;
          },
          set: function set(value) {
            this._verticalCenter = value;
          },
          tooltip: false
        },
        isAbsoluteHorizontalCenter: {
          get: function get() {
            return this._isAbsHorizontalCenter;
          },
          set: function set(value) {
            this._isAbsHorizontalCenter = value;
          },
          animatable: false
        },
        isAbsoluteVerticalCenter: {
          get: function get() {
            return this._isAbsVerticalCenter;
          },
          set: function set(value) {
            this._isAbsVerticalCenter = value;
          },
          animatable: false
        },
        isAbsoluteTop: {
          get: function get() {
            return this._isAbsTop;
          },
          set: function set(value) {
            this._isAbsTop = value;
          },
          animatable: false
        },
        isAbsoluteBottom: {
          get: function get() {
            return this._isAbsBottom;
          },
          set: function set(value) {
            this._isAbsBottom = value;
          },
          animatable: false
        },
        isAbsoluteLeft: {
          get: function get() {
            return this._isAbsLeft;
          },
          set: function set(value) {
            this._isAbsLeft = value;
          },
          animatable: false
        },
        isAbsoluteRight: {
          get: function get() {
            return this._isAbsRight;
          },
          set: function set(value) {
            this._isAbsRight = value;
          },
          animatable: false
        },
        alignMode: {
          default: AlignMode.ON_WINDOW_RESIZE,
          type: AlignMode,
          tooltip: false
        },
        _wasAlignOnce: {
          default: void 0,
          formerlySerializedAs: "isAlignOnce"
        },
        _target: null,
        _alignFlags: 0,
        _left: 0,
        _right: 0,
        _top: 0,
        _bottom: 0,
        _verticalCenter: 0,
        _horizontalCenter: 0,
        _isAbsLeft: true,
        _isAbsRight: true,
        _isAbsTop: true,
        _isAbsBottom: true,
        _isAbsHorizontalCenter: true,
        _isAbsVerticalCenter: true,
        _originalWidth: 0,
        _originalHeight: 0
      },
      statics: {
        AlignMode: AlignMode
      },
      onLoad: function onLoad() {
        if (void 0 !== this._wasAlignOnce) {
          this.alignMode = this._wasAlignOnce ? AlignMode.ONCE : AlignMode.ALWAYS;
          this._wasAlignOnce = void 0;
        }
      },
      onEnable: function onEnable() {
        WidgetManager.add(this);
      },
      onDisable: function onDisable() {
        WidgetManager.remove(this);
      },
      _validateTargetInDEV: false,
      _setAlign: function _setAlign(flag, isAlign) {
        var current = (this._alignFlags & flag) > 0;
        if (isAlign === current) return;
        var isHorizontal = (flag & LEFT_RIGHT) > 0;
        if (isAlign) {
          this._alignFlags |= flag;
          if (isHorizontal) {
            this.isAlignHorizontalCenter = false;
            if (this.isStretchWidth) {
              this._originalWidth = this.node.width;
              false;
            }
          } else {
            this.isAlignVerticalCenter = false;
            if (this.isStretchHeight) {
              this._originalHeight = this.node.height;
              false;
            }
          }
          false;
        } else {
          isHorizontal ? this.isStretchWidth && (this.node.width = this._originalWidth) : this.isStretchHeight && (this.node.height = this._originalHeight);
          this._alignFlags &= ~flag;
        }
      },
      updateAlignment: function updateAlignment() {
        WidgetManager.updateAlignment(this.node);
      }
    });
    Object.defineProperty(Widget.prototype, "isAlignOnce", {
      get: function get() {
        true;
        cc.warn("`widget.isAlignOnce` is deprecated, use `widget.alignMode === cc.Widget.AlignMode.ONCE` instead please.");
        return this.alignMode === AlignMode.ONCE;
      },
      set: function set(value) {
        true;
        cc.warn("`widget.isAlignOnce` is deprecated, use `widget.alignMode = cc.Widget.AlignMode.*` instead please.");
        this.alignMode = value ? AlignMode.ONCE : AlignMode.ALWAYS;
      }
    });
    cc.Widget = module.exports = Widget;
  }), {
    "../base-ui/CCWidgetManager": 86,
    "./CCComponent": 94
  } ],
  112: [ (function(require, module, exports) {
    "use strict";
    var Component = require("./CCComponent");
    var WXSubContextView = cc.Class({
      name: "cc.WXSubContextView",
      extends: Component,
      editor: false,
      properties: {
        _fps: 60,
        fps: {
          get: function get() {
            return this._fps;
          },
          set: function set(value) {
            if (this._fps === value) return;
            this._fps = value;
            this._updateInterval = 1 / value;
            this._updateSubContextFrameRate();
          },
          tooltip: false
        }
      },
      ctor: function ctor() {
        this._sprite = null;
        this._tex = new cc.Texture2D();
        this._context = null;
        this._updatedTime = performance.now();
        this._updateInterval = 0;
      },
      onLoad: function onLoad() {
        if (wx.getOpenDataContext) {
          this._updateInterval = 1e3 / this._fps;
          this._context = wx.getOpenDataContext();
          this.reset();
          this._tex.setPremultiplyAlpha(true);
          this._tex.initWithElement(sharedCanvas);
          this._sprite = this.node.getComponent(cc.Sprite);
          if (!this._sprite) {
            this._sprite = this.node.addComponent(cc.Sprite);
            this._sprite.srcBlendFactor = cc.macro.BlendFactor.ONE;
          }
          this._sprite.spriteFrame = new cc.SpriteFrame(this._tex);
        } else this.enabled = false;
      },
      reset: function reset() {
        if (this._context) {
          this.updateSubContextViewport();
          var _sharedCanvas = this._context.canvas;
          if (_sharedCanvas) {
            _sharedCanvas.width = this.node.width;
            _sharedCanvas.height = this.node.height;
          }
        }
      },
      onEnable: function onEnable() {
        this._runSubContextMainLoop();
        this._registerNodeEvent();
        this._updateSubContextFrameRate();
        this.updateSubContextViewport();
      },
      onDisable: function onDisable() {
        this._unregisterNodeEvent();
        this._stopSubContextMainLoop();
      },
      update: function update(dt) {
        var calledUpdateMannually = void 0 === dt;
        if (calledUpdateMannually) {
          this._context && this._context.postMessage({
            fromEngine: true,
            event: "step"
          });
          this._updateSubContextTexture();
          return;
        }
        var now = performance.now();
        var deltaTime = now - this._updatedTime;
        if (deltaTime >= this._updateInterval) {
          this._updatedTime += this._updateInterval;
          this._updateSubContextTexture();
        }
      },
      _updateSubContextTexture: function _updateSubContextTexture() {
        if (!this._tex || !this._context) return;
        this._tex.initWithElement(this._context.canvas);
        this._sprite._activateMaterial();
      },
      updateSubContextViewport: function updateSubContextViewport() {
        if (this._context) {
          var box = this.node.getBoundingBoxToWorld();
          var sx = cc.view._scaleX;
          var sy = cc.view._scaleY;
          this._context.postMessage({
            fromEngine: true,
            event: "viewport",
            x: box.x * sx + cc.view._viewportRect.x,
            y: box.y * sy + cc.view._viewportRect.y,
            width: box.width * sx,
            height: box.height * sy
          });
        }
      },
      _registerNodeEvent: function _registerNodeEvent() {
        this.node.on("position-changed", this.updateSubContextViewport, this);
        this.node.on("scale-changed", this.updateSubContextViewport, this);
        this.node.on("size-changed", this.updateSubContextViewport, this);
      },
      _unregisterNodeEvent: function _unregisterNodeEvent() {
        this.node.off("position-changed", this.updateSubContextViewport, this);
        this.node.off("scale-changed", this.updateSubContextViewport, this);
        this.node.off("size-changed", this.updateSubContextViewport, this);
      },
      _runSubContextMainLoop: function _runSubContextMainLoop() {
        this._context && this._context.postMessage({
          fromEngine: true,
          event: "mainLoop",
          value: true
        });
      },
      _stopSubContextMainLoop: function _stopSubContextMainLoop() {
        this._context && this._context.postMessage({
          fromEngine: true,
          event: "mainLoop",
          value: false
        });
      },
      _updateSubContextFrameRate: function _updateSubContextFrameRate() {
        this._context && this._context.postMessage({
          fromEngine: true,
          event: "frameRate",
          value: this._fps
        });
      }
    });
    cc.WXSubContextView = module.exports = WXSubContextView;
  }), {
    "./CCComponent": 94
  } ],
  113: [ (function(require, module, exports) {
    "use strict";
    require("./CCComponent");
    require("./CCComponentEventHandler");
    require("./missing-script");
    var WXSubContextView = require("./WXSubContextView");
    var SwanSubContextView = require("./SwanSubContextView");
    WXSubContextView || (WXSubContextView = cc.Class({
      name: "cc.WXSubContextView",
      extends: cc.Component
    }));
    SwanSubContextView || (SwanSubContextView = cc.Class({
      name: "cc.SwanSubContextView",
      extends: cc.Component
    }));
    var components = [ require("./CCSprite"), require("./CCWidget"), require("./CCCanvas"), require("./CCAudioSource"), require("./CCAnimation"), require("./CCButton"), require("./CCLabel"), require("./CCProgressBar"), require("./CCMask"), require("./CCScrollBar"), require("./CCScrollView"), require("./CCPageViewIndicator"), require("./CCPageView"), require("./CCSlider"), require("./CCLayout"), require("./editbox/CCEditBox"), require("./CCLabelOutline"), require("./CCLabelShadow"), require("./CCRichText"), require("./CCToggleContainer"), require("./CCToggleGroup"), require("./CCToggle"), require("./CCBlockInputEvents"), require("./CCMotionStreak"), require("./CCSafeArea"), WXSubContextView, SwanSubContextView ];
    module.exports = components;
  }), {
    "./CCAnimation": 89,
    "./CCAudioSource": 90,
    "./CCBlockInputEvents": 91,
    "./CCButton": 92,
    "./CCCanvas": 93,
    "./CCComponent": 94,
    "./CCComponentEventHandler": 95,
    "./CCLabel": 96,
    "./CCLabelOutline": void 0,
    "./CCLabelShadow": void 0,
    "./CCLayout": 97,
    "./CCMask": 98,
    "./CCMotionStreak": void 0,
    "./CCPageView": void 0,
    "./CCPageViewIndicator": void 0,
    "./CCProgressBar": 99,
    "./CCRichText": 101,
    "./CCSafeArea": 102,
    "./CCScrollBar": 103,
    "./CCScrollView": 104,
    "./CCSlider": 105,
    "./CCSprite": 106,
    "./CCToggle": 107,
    "./CCToggleContainer": 108,
    "./CCToggleGroup": 109,
    "./CCWidget": 111,
    "./SwanSubContextView": void 0,
    "./WXSubContextView": 112,
    "./editbox/CCEditBox": void 0,
    "./missing-script": 114
  } ],
  114: [ (function(require, module, exports) {
    "use strict";
    var js = cc.js;
    var BUILTIN_CLASSID_RE = require("../utils/misc").BUILTIN_CLASSID_RE;
    var MissingClass = cc.Class({
      name: "cc.MissingClass",
      properties: {
        _$erialized: {
          default: null,
          visible: false,
          editorOnly: true
        }
      }
    });
    var MissingScript = cc.Class({
      name: "cc.MissingScript",
      extends: cc.Component,
      editor: {
        inspector: "packages://inspector/inspectors/comps/missing-script.js"
      },
      properties: {
        compiled: {
          default: false,
          serializable: false
        },
        _$erialized: {
          default: null,
          visible: false,
          editorOnly: true
        }
      },
      ctor: false,
      statics: {
        safeFindClass: function safeFindClass(id, data) {
          var cls = js._getClassById(id);
          if (cls) return cls;
          if (id) {
            cc.deserialize.reportMissingClass(id);
            return MissingScript.getMissingWrapper(id, data);
          }
          return null;
        },
        getMissingWrapper: function getMissingWrapper(id, data) {
          return data.node && (/^[0-9a-zA-Z+/]{23}$/.test(id) || BUILTIN_CLASSID_RE.test(id)) ? MissingScript : MissingClass;
        }
      },
      onLoad: function onLoad() {
        cc.warnID(4600, this.node.name);
      }
    });
    cc._MissingScript = module.exports = MissingScript;
  }), {
    "../utils/misc": 209
  } ],
  115: [ (function(require, module, exports) {
    "use strict";
    var js = cc.js;
    require("../event/event");
    var EventMouse = function EventMouse(eventType, bubbles) {
      cc.Event.call(this, cc.Event.MOUSE, bubbles);
      this._eventType = eventType;
      this._button = 0;
      this._x = 0;
      this._y = 0;
      this._prevX = 0;
      this._prevY = 0;
      this._scrollX = 0;
      this._scrollY = 0;
    };
    js.extend(EventMouse, cc.Event);
    var proto = EventMouse.prototype;
    proto.setScrollData = function(scrollX, scrollY) {
      this._scrollX = scrollX;
      this._scrollY = scrollY;
    };
    proto.getScrollX = function() {
      return this._scrollX;
    };
    proto.getScrollY = function() {
      return this._scrollY;
    };
    proto.setLocation = function(x, y) {
      this._x = x;
      this._y = y;
    };
    proto.getLocation = function() {
      return cc.v2(this._x, this._y);
    };
    proto.getLocationInView = function() {
      return cc.v2(this._x, cc.view._designResolutionSize.height - this._y);
    };
    proto._setPrevCursor = function(x, y) {
      this._prevX = x;
      this._prevY = y;
    };
    proto.getPreviousLocation = function() {
      return cc.v2(this._prevX, this._prevY);
    };
    proto.getDelta = function() {
      return cc.v2(this._x - this._prevX, this._y - this._prevY);
    };
    proto.getDeltaX = function() {
      return this._x - this._prevX;
    };
    proto.getDeltaY = function() {
      return this._y - this._prevY;
    };
    proto.setButton = function(button) {
      this._button = button;
    };
    proto.getButton = function() {
      return this._button;
    };
    proto.getLocationX = function() {
      return this._x;
    };
    proto.getLocationY = function() {
      return this._y;
    };
    EventMouse.NONE = 0;
    EventMouse.DOWN = 1;
    EventMouse.UP = 2;
    EventMouse.MOVE = 3;
    EventMouse.SCROLL = 4;
    EventMouse.BUTTON_LEFT = 0;
    EventMouse.BUTTON_RIGHT = 2;
    EventMouse.BUTTON_MIDDLE = 1;
    EventMouse.BUTTON_4 = 3;
    EventMouse.BUTTON_5 = 4;
    EventMouse.BUTTON_6 = 5;
    EventMouse.BUTTON_7 = 6;
    EventMouse.BUTTON_8 = 7;
    var EventTouch = function EventTouch(touchArr, bubbles) {
      cc.Event.call(this, cc.Event.TOUCH, bubbles);
      this._eventCode = 0;
      this._touches = touchArr || [];
      this.touch = null;
      this.currentTouch = null;
    };
    js.extend(EventTouch, cc.Event);
    proto = EventTouch.prototype;
    proto.getEventCode = function() {
      return this._eventCode;
    };
    proto.getTouches = function() {
      return this._touches;
    };
    proto._setEventCode = function(eventCode) {
      this._eventCode = eventCode;
    };
    proto._setTouches = function(touches) {
      this._touches = touches;
    };
    proto.setLocation = function(x, y) {
      this.touch && this.touch.setTouchInfo(this.touch.getID(), x, y);
    };
    proto.getLocation = function() {
      return this.touch ? this.touch.getLocation() : cc.v2();
    };
    proto.getLocationInView = function() {
      return this.touch ? this.touch.getLocationInView() : cc.v2();
    };
    proto.getPreviousLocation = function() {
      return this.touch ? this.touch.getPreviousLocation() : cc.v2();
    };
    proto.getStartLocation = function() {
      return this.touch ? this.touch.getStartLocation() : cc.v2();
    };
    proto.getID = function() {
      return this.touch ? this.touch.getID() : null;
    };
    proto.getDelta = function() {
      return this.touch ? this.touch.getDelta() : cc.v2();
    };
    proto.getDeltaX = function() {
      return this.touch ? this.touch.getDelta().x : 0;
    };
    proto.getDeltaY = function() {
      return this.touch ? this.touch.getDelta().y : 0;
    };
    proto.getLocationX = function() {
      return this.touch ? this.touch.getLocationX() : 0;
    };
    proto.getLocationY = function() {
      return this.touch ? this.touch.getLocationY() : 0;
    };
    EventTouch.MAX_TOUCHES = 5;
    EventTouch.BEGAN = 0;
    EventTouch.MOVED = 1;
    EventTouch.ENDED = 2;
    EventTouch.CANCELED = 3;
    var EventAcceleration = function EventAcceleration(acc, bubbles) {
      cc.Event.call(this, cc.Event.ACCELERATION, bubbles);
      this.acc = acc;
    };
    js.extend(EventAcceleration, cc.Event);
    var EventKeyboard = function EventKeyboard(keyCode, isPressed, bubbles) {
      cc.Event.call(this, cc.Event.KEYBOARD, bubbles);
      this.keyCode = keyCode;
      this.isPressed = isPressed;
    };
    js.extend(EventKeyboard, cc.Event);
    cc.Event.EventMouse = EventMouse;
    cc.Event.EventTouch = EventTouch;
    cc.Event.EventAcceleration = EventAcceleration;
    cc.Event.EventKeyboard = EventKeyboard;
    module.exports = cc.Event;
  }), {
    "../event/event": 122
  } ],
  116: [ (function(require, module, exports) {
    "use strict";
    var js = require("../platform/js");
    cc.EventListener = function(type, listenerID, callback) {
      this._onEvent = callback;
      this._type = type || 0;
      this._listenerID = listenerID || "";
      this._registered = false;
      this._fixedPriority = 0;
      this._node = null;
      this._target = null;
      this._paused = true;
      this._isEnabled = true;
    };
    cc.EventListener.prototype = {
      constructor: cc.EventListener,
      _setPaused: function _setPaused(paused) {
        this._paused = paused;
      },
      _isPaused: function _isPaused() {
        return this._paused;
      },
      _setRegistered: function _setRegistered(registered) {
        this._registered = registered;
      },
      _isRegistered: function _isRegistered() {
        return this._registered;
      },
      _getType: function _getType() {
        return this._type;
      },
      _getListenerID: function _getListenerID() {
        return this._listenerID;
      },
      _setFixedPriority: function _setFixedPriority(fixedPriority) {
        this._fixedPriority = fixedPriority;
      },
      _getFixedPriority: function _getFixedPriority() {
        return this._fixedPriority;
      },
      _setSceneGraphPriority: function _setSceneGraphPriority(node) {
        this._target = node;
        this._node = node;
      },
      _getSceneGraphPriority: function _getSceneGraphPriority() {
        return this._node;
      },
      checkAvailable: function checkAvailable() {
        return null !== this._onEvent;
      },
      clone: function clone() {
        return null;
      },
      setEnabled: function setEnabled(enabled) {
        this._isEnabled = enabled;
      },
      isEnabled: function isEnabled() {
        return this._isEnabled;
      },
      retain: function retain() {},
      release: function release() {}
    };
    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 ListenerID = 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"
    };
    var Custom = function Custom(listenerId, callback) {
      this._onCustomEvent = callback;
      cc.EventListener.call(this, cc.EventListener.CUSTOM, listenerId, this._callback);
    };
    js.extend(Custom, cc.EventListener);
    js.mixin(Custom.prototype, {
      _onCustomEvent: null,
      _callback: function _callback(event) {
        null !== this._onCustomEvent && this._onCustomEvent(event);
      },
      checkAvailable: function checkAvailable() {
        return cc.EventListener.prototype.checkAvailable.call(this) && null !== this._onCustomEvent;
      },
      clone: function clone() {
        return new Custom(this._listenerID, this._onCustomEvent);
      }
    });
    var Mouse = function Mouse() {
      cc.EventListener.call(this, cc.EventListener.MOUSE, ListenerID.MOUSE, this._callback);
    };
    js.extend(Mouse, cc.EventListener);
    js.mixin(Mouse.prototype, {
      onMouseDown: null,
      onMouseUp: null,
      onMouseMove: null,
      onMouseScroll: null,
      _callback: function _callback(event) {
        var eventType = cc.Event.EventMouse;
        switch (event._eventType) {
         case eventType.DOWN:
          this.onMouseDown && this.onMouseDown(event);
          break;

         case eventType.UP:
          this.onMouseUp && this.onMouseUp(event);
          break;

         case eventType.MOVE:
          this.onMouseMove && this.onMouseMove(event);
          break;

         case eventType.SCROLL:
          this.onMouseScroll && this.onMouseScroll(event);
        }
      },
      clone: function clone() {
        var eventListener = new Mouse();
        eventListener.onMouseDown = this.onMouseDown;
        eventListener.onMouseUp = this.onMouseUp;
        eventListener.onMouseMove = this.onMouseMove;
        eventListener.onMouseScroll = this.onMouseScroll;
        return eventListener;
      },
      checkAvailable: function checkAvailable() {
        return true;
      }
    });
    var TouchOneByOne = function TouchOneByOne() {
      cc.EventListener.call(this, cc.EventListener.TOUCH_ONE_BY_ONE, ListenerID.TOUCH_ONE_BY_ONE, null);
      this._claimedTouches = [];
    };
    js.extend(TouchOneByOne, cc.EventListener);
    js.mixin(TouchOneByOne.prototype, {
      constructor: TouchOneByOne,
      _claimedTouches: null,
      swallowTouches: false,
      onTouchBegan: null,
      onTouchMoved: null,
      onTouchEnded: null,
      onTouchCancelled: null,
      setSwallowTouches: function setSwallowTouches(needSwallow) {
        this.swallowTouches = needSwallow;
      },
      isSwallowTouches: function isSwallowTouches() {
        return this.swallowTouches;
      },
      clone: function clone() {
        var eventListener = new TouchOneByOne();
        eventListener.onTouchBegan = this.onTouchBegan;
        eventListener.onTouchMoved = this.onTouchMoved;
        eventListener.onTouchEnded = this.onTouchEnded;
        eventListener.onTouchCancelled = this.onTouchCancelled;
        eventListener.swallowTouches = this.swallowTouches;
        return eventListener;
      },
      checkAvailable: function checkAvailable() {
        if (!this.onTouchBegan) {
          cc.logID(1801);
          return false;
        }
        return true;
      }
    });
    var TouchAllAtOnce = function TouchAllAtOnce() {
      cc.EventListener.call(this, cc.EventListener.TOUCH_ALL_AT_ONCE, ListenerID.TOUCH_ALL_AT_ONCE, null);
    };
    js.extend(TouchAllAtOnce, cc.EventListener);
    js.mixin(TouchAllAtOnce.prototype, {
      constructor: TouchAllAtOnce,
      onTouchesBegan: null,
      onTouchesMoved: null,
      onTouchesEnded: null,
      onTouchesCancelled: null,
      clone: function clone() {
        var eventListener = new TouchAllAtOnce();
        eventListener.onTouchesBegan = this.onTouchesBegan;
        eventListener.onTouchesMoved = this.onTouchesMoved;
        eventListener.onTouchesEnded = this.onTouchesEnded;
        eventListener.onTouchesCancelled = this.onTouchesCancelled;
        return eventListener;
      },
      checkAvailable: function checkAvailable() {
        if (null === this.onTouchesBegan && null === this.onTouchesMoved && null === this.onTouchesEnded && null === this.onTouchesCancelled) {
          cc.logID(1802);
          return false;
        }
        return true;
      }
    });
    var Acceleration = function Acceleration(callback) {
      this._onAccelerationEvent = callback;
      cc.EventListener.call(this, cc.EventListener.ACCELERATION, ListenerID.ACCELERATION, this._callback);
    };
    js.extend(Acceleration, cc.EventListener);
    js.mixin(Acceleration.prototype, {
      constructor: Acceleration,
      _onAccelerationEvent: null,
      _callback: function _callback(event) {
        this._onAccelerationEvent(event.acc, event);
      },
      checkAvailable: function checkAvailable() {
        cc.assertID(this._onAccelerationEvent, 1803);
        return true;
      },
      clone: function clone() {
        return new Acceleration(this._onAccelerationEvent);
      }
    });
    var Keyboard = function Keyboard() {
      cc.EventListener.call(this, cc.EventListener.KEYBOARD, ListenerID.KEYBOARD, this._callback);
    };
    js.extend(Keyboard, cc.EventListener);
    js.mixin(Keyboard.prototype, {
      constructor: Keyboard,
      onKeyPressed: null,
      onKeyReleased: null,
      _callback: function _callback(event) {
        event.isPressed ? this.onKeyPressed && this.onKeyPressed(event.keyCode, event) : this.onKeyReleased && this.onKeyReleased(event.keyCode, event);
      },
      clone: function clone() {
        var eventListener = new Keyboard();
        eventListener.onKeyPressed = this.onKeyPressed;
        eventListener.onKeyReleased = this.onKeyReleased;
        return eventListener;
      },
      checkAvailable: function checkAvailable() {
        if (null === this.onKeyPressed && null === this.onKeyReleased) {
          cc.logID(1800);
          return false;
        }
        return true;
      }
    });
    cc.EventListener.create = function(argObj) {
      cc.assertID(argObj && argObj.event, 1900);
      var listenerType = argObj.event;
      delete argObj.event;
      var listener = null;
      if (listenerType === cc.EventListener.TOUCH_ONE_BY_ONE) listener = new TouchOneByOne(); else if (listenerType === cc.EventListener.TOUCH_ALL_AT_ONCE) listener = new TouchAllAtOnce(); else if (listenerType === cc.EventListener.MOUSE) listener = new Mouse(); else if (listenerType === cc.EventListener.CUSTOM) {
        listener = new Custom(argObj.eventName, argObj.callback);
        delete argObj.eventName;
        delete argObj.callback;
      } else if (listenerType === cc.EventListener.KEYBOARD) listener = new Keyboard(); else if (listenerType === cc.EventListener.ACCELERATION) {
        listener = new Acceleration(argObj.callback);
        delete argObj.callback;
      }
      for (var key in argObj) listener[key] = argObj[key];
      return listener;
    };
    module.exports = cc.EventListener;
  }), {
    "../platform/js": 158
  } ],
  117: [ (function(require, module, exports) {
    "use strict";
    var js = require("../platform/js");
    require("./CCEventListener");
    var ListenerID = cc.EventListener.ListenerID;
    var _EventListenerVector = function _EventListenerVector() {
      this._fixedListeners = [];
      this._sceneGraphListeners = [];
      this.gt0Index = 0;
    };
    _EventListenerVector.prototype = {
      constructor: _EventListenerVector,
      size: function size() {
        return this._fixedListeners.length + this._sceneGraphListeners.length;
      },
      empty: function empty() {
        return 0 === this._fixedListeners.length && 0 === this._sceneGraphListeners.length;
      },
      push: function push(listener) {
        0 === listener._getFixedPriority() ? this._sceneGraphListeners.push(listener) : this._fixedListeners.push(listener);
      },
      clearSceneGraphListeners: function clearSceneGraphListeners() {
        this._sceneGraphListeners.length = 0;
      },
      clearFixedListeners: function clearFixedListeners() {
        this._fixedListeners.length = 0;
      },
      clear: function clear() {
        this._sceneGraphListeners.length = 0;
        this._fixedListeners.length = 0;
      },
      getFixedPriorityListeners: function getFixedPriorityListeners() {
        return this._fixedListeners;
      },
      getSceneGraphPriorityListeners: function getSceneGraphPriorityListeners() {
        return this._sceneGraphListeners;
      }
    };
    var __getListenerID = function __getListenerID(event) {
      var eventType = cc.Event, type = event.type;
      if (type === eventType.ACCELERATION) return ListenerID.ACCELERATION;
      if (type === eventType.KEYBOARD) return ListenerID.KEYBOARD;
      if (type.startsWith(eventType.MOUSE)) return ListenerID.MOUSE;
      type.startsWith(eventType.TOUCH) && cc.logID(2e3);
      return "";
    };
    var eventManager = {
      DIRTY_NONE: 0,
      DIRTY_FIXED_PRIORITY: 1,
      DIRTY_SCENE_GRAPH_PRIORITY: 2,
      DIRTY_ALL: 3,
      _listenersMap: {},
      _priorityDirtyFlagMap: {},
      _nodeListenersMap: {},
      _toAddedListeners: [],
      _toRemovedListeners: [],
      _dirtyListeners: {},
      _inDispatch: 0,
      _isEnabled: false,
      _currentTouch: null,
      _currentTouchListener: null,
      _internalCustomListenerIDs: [],
      _setDirtyForNode: function _setDirtyForNode(node) {
        var selListeners = this._nodeListenersMap[node._id];
        if (void 0 !== selListeners) for (var j = 0, len = selListeners.length; j < len; j++) {
          var selListener = selListeners[j];
          var listenerID = selListener._getListenerID();
          null == this._dirtyListeners[listenerID] && (this._dirtyListeners[listenerID] = true);
        }
        if (node.childrenCount > 0) {
          var children = node._children;
          for (var i = 0, _len = children.length; i < _len; i++) this._setDirtyForNode(children[i]);
        }
      },
      pauseTarget: function pauseTarget(node, recursive) {
        if (!(node instanceof cc._BaseNode)) {
          cc.warnID(3506);
          return;
        }
        var listeners = this._nodeListenersMap[node._id], i, len;
        if (listeners) for (i = 0, len = listeners.length; i < len; i++) listeners[i]._setPaused(true);
        if (true === recursive) {
          var locChildren = node._children;
          for (i = 0, len = locChildren ? locChildren.length : 0; i < len; i++) this.pauseTarget(locChildren[i], true);
        }
      },
      resumeTarget: function resumeTarget(node, recursive) {
        if (!(node instanceof cc._BaseNode)) {
          cc.warnID(3506);
          return;
        }
        var listeners = this._nodeListenersMap[node._id], i, len;
        if (listeners) for (i = 0, len = listeners.length; i < len; i++) listeners[i]._setPaused(false);
        this._setDirtyForNode(node);
        if (true === recursive) {
          var locChildren = node._children;
          for (i = 0, len = locChildren ? locChildren.length : 0; i < len; i++) this.resumeTarget(locChildren[i], true);
        }
      },
      _addListener: function _addListener(listener) {
        0 === this._inDispatch ? this._forceAddEventListener(listener) : this._toAddedListeners.push(listener);
      },
      _forceAddEventListener: function _forceAddEventListener(listener) {
        var listenerID = listener._getListenerID();
        var listeners = this._listenersMap[listenerID];
        if (!listeners) {
          listeners = new _EventListenerVector();
          this._listenersMap[listenerID] = listeners;
        }
        listeners.push(listener);
        if (0 === listener._getFixedPriority()) {
          this._setDirty(listenerID, this.DIRTY_SCENE_GRAPH_PRIORITY);
          var node = listener._getSceneGraphPriority();
          null === node && cc.logID(3507);
          this._associateNodeAndEventListener(node, listener);
          node.activeInHierarchy && this.resumeTarget(node);
        } else this._setDirty(listenerID, this.DIRTY_FIXED_PRIORITY);
      },
      _getListeners: function _getListeners(listenerID) {
        return this._listenersMap[listenerID];
      },
      _updateDirtyFlagForSceneGraph: function _updateDirtyFlagForSceneGraph() {
        var locDirtyListeners = this._dirtyListeners;
        for (var selKey in locDirtyListeners) this._setDirty(selKey, this.DIRTY_SCENE_GRAPH_PRIORITY);
        this._dirtyListeners = {};
      },
      _removeAllListenersInVector: function _removeAllListenersInVector(listenerVector) {
        if (!listenerVector) return;
        var selListener;
        for (var i = listenerVector.length - 1; i >= 0; i--) {
          selListener = listenerVector[i];
          selListener._setRegistered(false);
          if (null != selListener._getSceneGraphPriority()) {
            this._dissociateNodeAndEventListener(selListener._getSceneGraphPriority(), selListener);
            selListener._setSceneGraphPriority(null);
          }
          0 === this._inDispatch && cc.js.array.removeAt(listenerVector, i);
        }
      },
      _removeListenersForListenerID: function _removeListenersForListenerID(listenerID) {
        var listeners = this._listenersMap[listenerID], i;
        if (listeners) {
          var fixedPriorityListeners = listeners.getFixedPriorityListeners();
          var sceneGraphPriorityListeners = listeners.getSceneGraphPriorityListeners();
          this._removeAllListenersInVector(sceneGraphPriorityListeners);
          this._removeAllListenersInVector(fixedPriorityListeners);
          delete this._priorityDirtyFlagMap[listenerID];
          if (!this._inDispatch) {
            listeners.clear();
            delete this._listenersMap[listenerID];
          }
        }
        var locToAddedListeners = this._toAddedListeners, listener;
        for (i = locToAddedListeners.length - 1; i >= 0; i--) {
          listener = locToAddedListeners[i];
          listener && listener._getListenerID() === listenerID && cc.js.array.removeAt(locToAddedListeners, i);
        }
      },
      _sortEventListeners: function _sortEventListeners(listenerID) {
        var dirtyFlag = this.DIRTY_NONE, locFlagMap = this._priorityDirtyFlagMap;
        locFlagMap[listenerID] && (dirtyFlag = locFlagMap[listenerID]);
        if (dirtyFlag !== this.DIRTY_NONE) {
          locFlagMap[listenerID] = this.DIRTY_NONE;
          dirtyFlag & this.DIRTY_FIXED_PRIORITY && this._sortListenersOfFixedPriority(listenerID);
          if (dirtyFlag & this.DIRTY_SCENE_GRAPH_PRIORITY) {
            var rootEntity = cc.director.getScene();
            rootEntity && this._sortListenersOfSceneGraphPriority(listenerID);
          }
        }
      },
      _sortListenersOfSceneGraphPriority: function _sortListenersOfSceneGraphPriority(listenerID) {
        var listeners = this._getListeners(listenerID);
        if (!listeners) return;
        var sceneGraphListener = listeners.getSceneGraphPriorityListeners();
        if (!sceneGraphListener || 0 === sceneGraphListener.length) return;
        listeners.getSceneGraphPriorityListeners().sort(this._sortEventListenersOfSceneGraphPriorityDes);
      },
      _sortEventListenersOfSceneGraphPriorityDes: function _sortEventListenersOfSceneGraphPriorityDes(l1, l2) {
        var node1 = l1._getSceneGraphPriority(), node2 = l2._getSceneGraphPriority();
        if (!(l2 && node2 && node2._activeInHierarchy && null !== node2._parent)) return -1;
        if (!l1 || !node1 || !node1._activeInHierarchy || null === node1._parent) return 1;
        var p1 = node1, p2 = node2, ex = false;
        while (p1._parent._id !== p2._parent._id) {
          p1 = null === p1._parent._parent ? (ex = true) && node2 : p1._parent;
          p2 = null === p2._parent._parent ? (ex = true) && node1 : p2._parent;
        }
        if (p1._id === p2._id) {
          if (p1._id === node2._id) return -1;
          if (p1._id === node1._id) return 1;
        }
        return ex ? p1._localZOrder - p2._localZOrder : p2._localZOrder - p1._localZOrder;
      },
      _sortListenersOfFixedPriority: function _sortListenersOfFixedPriority(listenerID) {
        var listeners = this._listenersMap[listenerID];
        if (!listeners) return;
        var fixedListeners = listeners.getFixedPriorityListeners();
        if (!fixedListeners || 0 === fixedListeners.length) return;
        fixedListeners.sort(this._sortListenersOfFixedPriorityAsc);
        var index = 0;
        for (var len = fixedListeners.length; index < len; ) {
          if (fixedListeners[index]._getFixedPriority() >= 0) break;
          ++index;
        }
        listeners.gt0Index = index;
      },
      _sortListenersOfFixedPriorityAsc: function _sortListenersOfFixedPriorityAsc(l1, l2) {
        return l1._getFixedPriority() - l2._getFixedPriority();
      },
      _onUpdateListeners: function _onUpdateListeners(listeners) {
        var fixedPriorityListeners = listeners.getFixedPriorityListeners();
        var sceneGraphPriorityListeners = listeners.getSceneGraphPriorityListeners();
        var i, selListener, idx, toRemovedListeners = this._toRemovedListeners;
        if (sceneGraphPriorityListeners) for (i = sceneGraphPriorityListeners.length - 1; i >= 0; i--) {
          selListener = sceneGraphPriorityListeners[i];
          if (!selListener._isRegistered()) {
            cc.js.array.removeAt(sceneGraphPriorityListeners, i);
            idx = toRemovedListeners.indexOf(selListener);
            -1 !== idx && toRemovedListeners.splice(idx, 1);
          }
        }
        if (fixedPriorityListeners) for (i = fixedPriorityListeners.length - 1; i >= 0; i--) {
          selListener = fixedPriorityListeners[i];
          if (!selListener._isRegistered()) {
            cc.js.array.removeAt(fixedPriorityListeners, i);
            idx = toRemovedListeners.indexOf(selListener);
            -1 !== idx && toRemovedListeners.splice(idx, 1);
          }
        }
        sceneGraphPriorityListeners && 0 === sceneGraphPriorityListeners.length && listeners.clearSceneGraphListeners();
        fixedPriorityListeners && 0 === fixedPriorityListeners.length && listeners.clearFixedListeners();
      },
      frameUpdateListeners: function frameUpdateListeners() {
        var locListenersMap = this._listenersMap, locPriorityDirtyFlagMap = this._priorityDirtyFlagMap;
        for (var selKey in locListenersMap) if (locListenersMap[selKey].empty()) {
          delete locPriorityDirtyFlagMap[selKey];
          delete locListenersMap[selKey];
        }
        var locToAddedListeners = this._toAddedListeners;
        if (0 !== locToAddedListeners.length) {
          for (var i = 0, len = locToAddedListeners.length; i < len; i++) this._forceAddEventListener(locToAddedListeners[i]);
          locToAddedListeners.length = 0;
        }
        0 !== this._toRemovedListeners.length && this._cleanToRemovedListeners();
      },
      _updateTouchListeners: function _updateTouchListeners(event) {
        var locInDispatch = this._inDispatch;
        cc.assertID(locInDispatch > 0, 3508);
        if (locInDispatch > 1) return;
        var listeners;
        listeners = this._listenersMap[ListenerID.TOUCH_ONE_BY_ONE];
        listeners && this._onUpdateListeners(listeners);
        listeners = this._listenersMap[ListenerID.TOUCH_ALL_AT_ONCE];
        listeners && this._onUpdateListeners(listeners);
        cc.assertID(1 === locInDispatch, 3509);
        var locToAddedListeners = this._toAddedListeners;
        if (0 !== locToAddedListeners.length) {
          for (var i = 0, len = locToAddedListeners.length; i < len; i++) this._forceAddEventListener(locToAddedListeners[i]);
          this._toAddedListeners.length = 0;
        }
        0 !== this._toRemovedListeners.length && this._cleanToRemovedListeners();
      },
      _cleanToRemovedListeners: function _cleanToRemovedListeners() {
        var toRemovedListeners = this._toRemovedListeners;
        for (var i = 0; i < toRemovedListeners.length; i++) {
          var selListener = toRemovedListeners[i];
          var listeners = this._listenersMap[selListener._getListenerID()];
          if (!listeners) continue;
          var idx, fixedPriorityListeners = listeners.getFixedPriorityListeners(), sceneGraphPriorityListeners = listeners.getSceneGraphPriorityListeners();
          if (sceneGraphPriorityListeners) {
            idx = sceneGraphPriorityListeners.indexOf(selListener);
            -1 !== idx && sceneGraphPriorityListeners.splice(idx, 1);
          }
          if (fixedPriorityListeners) {
            idx = fixedPriorityListeners.indexOf(selListener);
            -1 !== idx && fixedPriorityListeners.splice(idx, 1);
          }
        }
        toRemovedListeners.length = 0;
      },
      _onTouchEventCallback: function _onTouchEventCallback(listener, argsObj) {
        if (!listener._isRegistered()) return false;
        var event = argsObj.event, selTouch = event.currentTouch;
        event.currentTarget = listener._node;
        var isClaimed = false, removedIdx;
        var getCode = event.getEventCode(), EventTouch = cc.Event.EventTouch;
        if (getCode === EventTouch.BEGAN) {
          if (!cc.macro.ENABLE_MULTI_TOUCH && eventManager._currentTouch) {
            var node = eventManager._currentTouchListener._node;
            if (node && node.activeInHierarchy) return false;
          }
          if (listener.onTouchBegan) {
            isClaimed = listener.onTouchBegan(selTouch, event);
            if (isClaimed && listener._registered) {
              listener._claimedTouches.push(selTouch);
              eventManager._currentTouchListener = listener;
              eventManager._currentTouch = selTouch;
            }
          }
        } else if (listener._claimedTouches.length > 0 && -1 !== (removedIdx = listener._claimedTouches.indexOf(selTouch))) {
          isClaimed = true;
          if (!cc.macro.ENABLE_MULTI_TOUCH && eventManager._currentTouch && eventManager._currentTouch !== selTouch) return false;
          if (getCode === EventTouch.MOVED && listener.onTouchMoved) listener.onTouchMoved(selTouch, event); else if (getCode === EventTouch.ENDED) {
            listener.onTouchEnded && listener.onTouchEnded(selTouch, event);
            listener._registered && listener._claimedTouches.splice(removedIdx, 1);
            eventManager._clearCurTouch();
          } else if (getCode === EventTouch.CANCELED) {
            listener.onTouchCancelled && listener.onTouchCancelled(selTouch, event);
            listener._registered && listener._claimedTouches.splice(removedIdx, 1);
            eventManager._clearCurTouch();
          }
        }
        if (event.isStopped()) {
          eventManager._updateTouchListeners(event);
          return true;
        }
        if (isClaimed && listener.swallowTouches) {
          argsObj.needsMutableSet && argsObj.touches.splice(selTouch, 1);
          return true;
        }
        return false;
      },
      _dispatchTouchEvent: function _dispatchTouchEvent(event) {
        this._sortEventListeners(ListenerID.TOUCH_ONE_BY_ONE);
        this._sortEventListeners(ListenerID.TOUCH_ALL_AT_ONCE);
        var oneByOneListeners = this._getListeners(ListenerID.TOUCH_ONE_BY_ONE);
        var allAtOnceListeners = this._getListeners(ListenerID.TOUCH_ALL_AT_ONCE);
        if (null === oneByOneListeners && null === allAtOnceListeners) return;
        var originalTouches = event.getTouches(), mutableTouches = cc.js.array.copy(originalTouches);
        var oneByOneArgsObj = {
          event: event,
          needsMutableSet: oneByOneListeners && allAtOnceListeners,
          touches: mutableTouches,
          selTouch: null
        };
        if (oneByOneListeners) for (var i = 0; i < originalTouches.length; i++) {
          event.currentTouch = originalTouches[i];
          event._propagationStopped = event._propagationImmediateStopped = false;
          this._dispatchEventToListeners(oneByOneListeners, this._onTouchEventCallback, oneByOneArgsObj);
        }
        if (allAtOnceListeners && mutableTouches.length > 0) {
          this._dispatchEventToListeners(allAtOnceListeners, this._onTouchesEventCallback, {
            event: event,
            touches: mutableTouches
          });
          if (event.isStopped()) return;
        }
        this._updateTouchListeners(event);
      },
      _onTouchesEventCallback: function _onTouchesEventCallback(listener, callbackParams) {
        if (!listener._registered) return false;
        var EventTouch = cc.Event.EventTouch, event = callbackParams.event, touches = callbackParams.touches, getCode = event.getEventCode();
        event.currentTarget = listener._node;
        getCode === EventTouch.BEGAN && listener.onTouchesBegan ? listener.onTouchesBegan(touches, event) : getCode === EventTouch.MOVED && listener.onTouchesMoved ? listener.onTouchesMoved(touches, event) : getCode === EventTouch.ENDED && listener.onTouchesEnded ? listener.onTouchesEnded(touches, event) : getCode === EventTouch.CANCELED && listener.onTouchesCancelled && listener.onTouchesCancelled(touches, event);
        if (event.isStopped()) {
          eventManager._updateTouchListeners(event);
          return true;
        }
        return false;
      },
      _associateNodeAndEventListener: function _associateNodeAndEventListener(node, listener) {
        var listeners = this._nodeListenersMap[node._id];
        if (!listeners) {
          listeners = [];
          this._nodeListenersMap[node._id] = listeners;
        }
        listeners.push(listener);
      },
      _dissociateNodeAndEventListener: function _dissociateNodeAndEventListener(node, listener) {
        var listeners = this._nodeListenersMap[node._id];
        if (listeners) {
          cc.js.array.remove(listeners, listener);
          0 === listeners.length && delete this._nodeListenersMap[node._id];
        }
      },
      _dispatchEventToListeners: function _dispatchEventToListeners(listeners, onEvent, eventOrArgs) {
        var shouldStopPropagation = false;
        var fixedPriorityListeners = listeners.getFixedPriorityListeners();
        var sceneGraphPriorityListeners = listeners.getSceneGraphPriorityListeners();
        var i = 0, j, selListener;
        if (fixedPriorityListeners && 0 !== fixedPriorityListeners.length) for (;i < listeners.gt0Index; ++i) {
          selListener = fixedPriorityListeners[i];
          if (selListener.isEnabled() && !selListener._isPaused() && selListener._isRegistered() && onEvent(selListener, eventOrArgs)) {
            shouldStopPropagation = true;
            break;
          }
        }
        if (sceneGraphPriorityListeners && !shouldStopPropagation) for (j = 0; j < sceneGraphPriorityListeners.length; j++) {
          selListener = sceneGraphPriorityListeners[j];
          if (selListener.isEnabled() && !selListener._isPaused() && selListener._isRegistered() && onEvent(selListener, eventOrArgs)) {
            shouldStopPropagation = true;
            break;
          }
        }
        if (fixedPriorityListeners && !shouldStopPropagation) for (;i < fixedPriorityListeners.length; ++i) {
          selListener = fixedPriorityListeners[i];
          if (selListener.isEnabled() && !selListener._isPaused() && selListener._isRegistered() && onEvent(selListener, eventOrArgs)) {
            shouldStopPropagation = true;
            break;
          }
        }
      },
      _setDirty: function _setDirty(listenerID, flag) {
        var locDirtyFlagMap = this._priorityDirtyFlagMap;
        null == locDirtyFlagMap[listenerID] ? locDirtyFlagMap[listenerID] = flag : locDirtyFlagMap[listenerID] = flag | locDirtyFlagMap[listenerID];
      },
      _sortNumberAsc: function _sortNumberAsc(a, b) {
        return a - b;
      },
      hasEventListener: function hasEventListener(listenerID) {
        return !!this._getListeners(listenerID);
      },
      addListener: function addListener(listener, nodeOrPriority) {
        cc.assertID(listener && nodeOrPriority, 3503);
        if (!(cc.js.isNumber(nodeOrPriority) || nodeOrPriority instanceof cc._BaseNode)) {
          cc.warnID(3506);
          return;
        }
        if (listener instanceof cc.EventListener) {
          if (listener._isRegistered()) {
            cc.logID(3505);
            return;
          }
        } else {
          cc.assertID(!cc.js.isNumber(nodeOrPriority), 3504);
          listener = cc.EventListener.create(listener);
        }
        if (!listener.checkAvailable()) return;
        if (cc.js.isNumber(nodeOrPriority)) {
          if (0 === nodeOrPriority) {
            cc.logID(3500);
            return;
          }
          listener._setSceneGraphPriority(null);
          listener._setFixedPriority(nodeOrPriority);
          listener._setRegistered(true);
          listener._setPaused(false);
          this._addListener(listener);
        } else {
          listener._setSceneGraphPriority(nodeOrPriority);
          listener._setFixedPriority(0);
          listener._setRegistered(true);
          this._addListener(listener);
        }
        return listener;
      },
      addCustomListener: function addCustomListener(eventName, callback) {
        var listener = new cc.EventListener.create({
          event: cc.EventListener.CUSTOM,
          eventName: eventName,
          callback: callback
        });
        this.addListener(listener, 1);
        return listener;
      },
      removeListener: function removeListener(listener) {
        if (null == listener) return;
        var isFound, locListener = this._listenersMap;
        for (var selKey in locListener) {
          var listeners = locListener[selKey];
          var fixedPriorityListeners = listeners.getFixedPriorityListeners(), sceneGraphPriorityListeners = listeners.getSceneGraphPriorityListeners();
          isFound = this._removeListenerInVector(sceneGraphPriorityListeners, listener);
          if (isFound) this._setDirty(listener._getListenerID(), this.DIRTY_SCENE_GRAPH_PRIORITY); else {
            isFound = this._removeListenerInVector(fixedPriorityListeners, listener);
            isFound && this._setDirty(listener._getListenerID(), this.DIRTY_FIXED_PRIORITY);
          }
          if (listeners.empty()) {
            delete this._priorityDirtyFlagMap[listener._getListenerID()];
            delete locListener[selKey];
          }
          if (isFound) break;
        }
        if (!isFound) {
          var locToAddedListeners = this._toAddedListeners;
          for (var i = locToAddedListeners.length - 1; i >= 0; i--) {
            var selListener = locToAddedListeners[i];
            if (selListener === listener) {
              cc.js.array.removeAt(locToAddedListeners, i);
              selListener._setRegistered(false);
              break;
            }
          }
        }
        this._currentTouchListener === listener && this._clearCurTouch();
      },
      _clearCurTouch: function _clearCurTouch() {
        this._currentTouchListener = null;
        this._currentTouch = null;
      },
      _removeListenerInCallback: function _removeListenerInCallback(listeners, callback) {
        if (null == listeners) return false;
        for (var i = listeners.length - 1; i >= 0; i--) {
          var selListener = listeners[i];
          if (selListener._onCustomEvent === callback || selListener._onEvent === callback) {
            selListener._setRegistered(false);
            if (null != selListener._getSceneGraphPriority()) {
              this._dissociateNodeAndEventListener(selListener._getSceneGraphPriority(), selListener);
              selListener._setSceneGraphPriority(null);
            }
            0 === this._inDispatch ? cc.js.array.removeAt(listeners, i) : this._toRemovedListeners.push(selListener);
            return true;
          }
        }
        return false;
      },
      _removeListenerInVector: function _removeListenerInVector(listeners, listener) {
        if (null == listeners) return false;
        for (var i = listeners.length - 1; i >= 0; i--) {
          var selListener = listeners[i];
          if (selListener === listener) {
            selListener._setRegistered(false);
            if (null != selListener._getSceneGraphPriority()) {
              this._dissociateNodeAndEventListener(selListener._getSceneGraphPriority(), selListener);
              selListener._setSceneGraphPriority(null);
            }
            0 === this._inDispatch ? cc.js.array.removeAt(listeners, i) : this._toRemovedListeners.push(selListener);
            return true;
          }
        }
        return false;
      },
      removeListeners: function removeListeners(listenerType, recursive) {
        var i, _t = this;
        if (!(cc.js.isNumber(listenerType) || listenerType instanceof cc._BaseNode)) {
          cc.warnID(3506);
          return;
        }
        if (void 0 !== listenerType._id) {
          var listeners = _t._nodeListenersMap[listenerType._id], i;
          if (listeners) {
            var listenersCopy = cc.js.array.copy(listeners);
            for (i = 0; i < listenersCopy.length; i++) _t.removeListener(listenersCopy[i]);
            delete _t._nodeListenersMap[listenerType._id];
          }
          var locToAddedListeners = _t._toAddedListeners;
          for (i = 0; i < locToAddedListeners.length; ) {
            var listener = locToAddedListeners[i];
            if (listener._getSceneGraphPriority() === listenerType) {
              listener._setSceneGraphPriority(null);
              listener._setRegistered(false);
              locToAddedListeners.splice(i, 1);
            } else ++i;
          }
          if (true === recursive) {
            var locChildren = listenerType.children, len;
            for (i = 0, len = locChildren.length; i < len; i++) _t.removeListeners(locChildren[i], true);
          }
        } else listenerType === cc.EventListener.TOUCH_ONE_BY_ONE ? _t._removeListenersForListenerID(ListenerID.TOUCH_ONE_BY_ONE) : listenerType === cc.EventListener.TOUCH_ALL_AT_ONCE ? _t._removeListenersForListenerID(ListenerID.TOUCH_ALL_AT_ONCE) : listenerType === cc.EventListener.MOUSE ? _t._removeListenersForListenerID(ListenerID.MOUSE) : listenerType === cc.EventListener.ACCELERATION ? _t._removeListenersForListenerID(ListenerID.ACCELERATION) : listenerType === cc.EventListener.KEYBOARD ? _t._removeListenersForListenerID(ListenerID.KEYBOARD) : cc.logID(3501);
      },
      removeCustomListeners: function removeCustomListeners(customEventName) {
        this._removeListenersForListenerID(customEventName);
      },
      removeAllListeners: function removeAllListeners() {
        var locListeners = this._listenersMap, locInternalCustomEventIDs = this._internalCustomListenerIDs;
        for (var selKey in locListeners) -1 === locInternalCustomEventIDs.indexOf(selKey) && this._removeListenersForListenerID(selKey);
      },
      setPriority: function setPriority(listener, fixedPriority) {
        if (null == listener) return;
        var locListeners = this._listenersMap;
        for (var selKey in locListeners) {
          var selListeners = locListeners[selKey];
          var fixedPriorityListeners = selListeners.getFixedPriorityListeners();
          if (fixedPriorityListeners) {
            var found = fixedPriorityListeners.indexOf(listener);
            if (-1 !== found) {
              null != listener._getSceneGraphPriority() && cc.logID(3502);
              if (listener._getFixedPriority() !== fixedPriority) {
                listener._setFixedPriority(fixedPriority);
                this._setDirty(listener._getListenerID(), this.DIRTY_FIXED_PRIORITY);
              }
              return;
            }
          }
        }
      },
      setEnabled: function setEnabled(enabled) {
        this._isEnabled = enabled;
      },
      isEnabled: function isEnabled() {
        return this._isEnabled;
      },
      dispatchEvent: function dispatchEvent(event) {
        if (!this._isEnabled) return;
        this._updateDirtyFlagForSceneGraph();
        this._inDispatch++;
        if (!event || !event.getType) {
          cc.errorID(3511);
          return;
        }
        if (event.getType().startsWith(cc.Event.TOUCH)) {
          this._dispatchTouchEvent(event);
          this._inDispatch--;
          return;
        }
        var listenerID = __getListenerID(event);
        this._sortEventListeners(listenerID);
        var selListeners = this._listenersMap[listenerID];
        if (null != selListeners) {
          this._dispatchEventToListeners(selListeners, this._onListenerCallback, event);
          this._onUpdateListeners(selListeners);
        }
        this._inDispatch--;
      },
      _onListenerCallback: function _onListenerCallback(listener, event) {
        event.currentTarget = listener._target;
        listener._onEvent(event);
        return event.isStopped();
      },
      dispatchCustomEvent: function dispatchCustomEvent(eventName, optionalUserData) {
        var ev = new cc.Event.EventCustom(eventName);
        ev.setUserData(optionalUserData);
        this.dispatchEvent(ev);
      }
    };
    js.get(cc, "eventManager", (function() {
      cc.errorID(1405, "cc.eventManager", "cc.EventTarget or cc.systemEvent");
      return eventManager;
    }));
    module.exports = cc.internal.eventManager = eventManager;
  }), {
    "../platform/js": 158,
    "./CCEventListener": 116
  } ],
  118: [ (function(require, module, exports) {
    "use strict";
    cc.Touch = function(x, y, id) {
      this._lastModified = 0;
      this.setTouchInfo(id, x, y);
    };
    cc.Touch.prototype = {
      constructor: cc.Touch,
      getLocation: function getLocation() {
        return cc.v2(this._point.x, this._point.y);
      },
      getLocationX: function getLocationX() {
        return this._point.x;
      },
      getLocationY: function getLocationY() {
        return this._point.y;
      },
      getPreviousLocation: function getPreviousLocation() {
        return cc.v2(this._prevPoint.x, this._prevPoint.y);
      },
      getStartLocation: function getStartLocation() {
        return cc.v2(this._startPoint.x, this._startPoint.y);
      },
      getDelta: function getDelta() {
        return this._point.sub(this._prevPoint);
      },
      getLocationInView: function getLocationInView() {
        return cc.v2(this._point.x, cc.view._designResolutionSize.height - this._point.y);
      },
      getPreviousLocationInView: function getPreviousLocationInView() {
        return cc.v2(this._prevPoint.x, cc.view._designResolutionSize.height - this._prevPoint.y);
      },
      getStartLocationInView: function getStartLocationInView() {
        return cc.v2(this._startPoint.x, cc.view._designResolutionSize.height - this._startPoint.y);
      },
      getID: function getID() {
        return this._id;
      },
      setTouchInfo: function setTouchInfo(id, x, y) {
        this._prevPoint = this._point;
        this._point = cc.v2(x || 0, y || 0);
        this._id = id;
        if (!this._startPointCaptured) {
          this._startPoint = cc.v2(this._point);
          cc.view._convertPointWithScale(this._startPoint);
          this._startPointCaptured = true;
        }
      },
      _setPoint: function _setPoint(x, y) {
        if (void 0 === y) {
          this._point.x = x.x;
          this._point.y = x.y;
        } else {
          this._point.x = x;
          this._point.y = y;
        }
      },
      _setPrevPoint: function _setPrevPoint(x, y) {
        this._prevPoint = void 0 === y ? cc.v2(x.x, x.y) : cc.v2(x || 0, y || 0);
      }
    };
  }), {} ],
  119: [ (function(require, module, exports) {
    "use strict";
    require("./CCEvent");
    require("./CCTouch");
    require("./CCEventListener");
    var eventManager = require("./CCEventManager");
    module.exports = eventManager;
    false;
  }), {
    "./CCEvent": 115,
    "./CCEventListener": 116,
    "./CCEventManager": 117,
    "./CCTouch": 118
  } ],
  120: [ (function(require, module, exports) {
    "use strict";
    var js = cc.js;
    var CallbacksInvoker = require("../platform/callbacks-invoker");
    function EventListeners() {
      CallbacksInvoker.call(this);
    }
    js.extend(EventListeners, CallbacksInvoker);
    EventListeners.prototype.emit = function(event, captureListeners) {
      var key = event.type;
      var list = this._callbackTable[key];
      if (list) {
        var rootInvoker = !list.isInvoking;
        list.isInvoking = true;
        var infos = list.callbackInfos;
        for (var i = 0, len = infos.length; i < len; ++i) {
          var info = infos[i];
          if (info && info.callback) {
            info.callback.call(info.target, event, captureListeners);
            if (event._propagationImmediateStopped) break;
          }
        }
        if (rootInvoker) {
          list.isInvoking = false;
          list.containCanceled && list.purgeCanceled();
        }
      }
    };
    module.exports = EventListeners;
    false;
  }), {
    "../platform/callbacks-invoker": 151
  } ],
  121: [ (function(require, module, exports) {
    "use strict";
    var js = require("../platform/js");
    var CallbacksInvoker = require("../platform/callbacks-invoker");
    var fastRemove = js.array.fastRemove;
    function EventTarget() {
      CallbacksInvoker.call(this);
    }
    js.extend(EventTarget, CallbacksInvoker);
    var proto = EventTarget.prototype;
    proto.__on = proto.on;
    proto.on = function(type, callback, target, once) {
      if (!callback) {
        cc.errorID(6800);
        return;
      }
      if (!this.hasEventListener(type, callback, target)) {
        this.__on(type, callback, target, once);
        target && target.__eventTargets && target.__eventTargets.push(this);
      }
      return callback;
    };
    proto.__off = proto.off;
    proto.off = function(type, callback, target) {
      if (callback) {
        this.__off(type, callback, target);
        target && target.__eventTargets && fastRemove(target.__eventTargets, this);
      } else {
        var list = this._callbackTable[type];
        if (!list) return;
        var infos = list.callbackInfos;
        for (var i = 0; i < infos.length; ++i) {
          var _target = infos[i] && infos[i].target;
          _target && _target.__eventTargets && fastRemove(_target.__eventTargets, this);
        }
        this.removeAll(type);
      }
    };
    proto.targetOff = function(target) {
      this.removeAll(target);
      target && target.__eventTargets && fastRemove(target.__eventTargets, this);
    };
    proto.once = function(type, callback, target) {
      this.on(type, callback, target, true);
    };
    proto.dispatchEvent = function(event) {
      this.emit(event.type, event);
    };
    cc.EventTarget = module.exports = EventTarget;
  }), {
    "../platform/callbacks-invoker": 151,
    "../platform/js": 158
  } ],
  122: [ (function(require, module, exports) {
    "use strict";
    var js = require("../platform/js");
    cc.Event = function(type, bubbles) {
      this.type = type;
      this.bubbles = !!bubbles;
      this.target = null;
      this.currentTarget = null;
      this.eventPhase = 0;
      this._propagationStopped = false;
      this._propagationImmediateStopped = false;
    };
    cc.Event.prototype = {
      constructor: cc.Event,
      unuse: function unuse() {
        this.type = cc.Event.NO_TYPE;
        this.target = null;
        this.currentTarget = null;
        this.eventPhase = cc.Event.NONE;
        this._propagationStopped = false;
        this._propagationImmediateStopped = false;
      },
      reuse: function reuse(type, bubbles) {
        this.type = type;
        this.bubbles = bubbles || false;
      },
      stopPropagation: function stopPropagation() {
        this._propagationStopped = true;
      },
      stopPropagationImmediate: function stopPropagationImmediate() {
        this._propagationImmediateStopped = true;
      },
      isStopped: function isStopped() {
        return this._propagationStopped || this._propagationImmediateStopped;
      },
      getCurrentTarget: function getCurrentTarget() {
        return this.currentTarget;
      },
      getType: function getType() {
        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 EventCustom = function EventCustom(type, bubbles) {
      cc.Event.call(this, type, bubbles);
      this.detail = null;
    };
    js.extend(EventCustom, cc.Event);
    EventCustom.prototype.reset = EventCustom;
    EventCustom.prototype.setUserData = function(data) {
      this.detail = data;
    };
    EventCustom.prototype.getUserData = function() {
      return this.detail;
    };
    EventCustom.prototype.getEventName = cc.Event.prototype.getType;
    var MAX_POOL_SIZE = 10;
    var _eventPool = new js.Pool(MAX_POOL_SIZE);
    EventCustom.put = function(event) {
      _eventPool.put(event);
    };
    EventCustom.get = function(type, bubbles) {
      var event = _eventPool._get();
      event ? event.reset(type, bubbles) : event = new EventCustom(type, bubbles);
      return event;
    };
    cc.Event.EventCustom = EventCustom;
    module.exports = cc.Event;
  }), {
    "../platform/js": 158
  } ],
  123: [ (function(require, module, exports) {
    "use strict";
    require("./event");
    require("./event-listeners");
    require("./event-target");
    require("./system-event");
  }), {
    "./event": 122,
    "./event-listeners": 120,
    "./event-target": 121,
    "./system-event": 124
  } ],
  124: [ (function(require, module, exports) {
    "use strict";
    var EventTarget = require("../event/event-target");
    var eventManager = require("../event-manager");
    var inputManger = require("../platform/CCInputManager");
    var EventType = cc.Enum({
      KEY_DOWN: "keydown",
      KEY_UP: "keyup",
      DEVICEMOTION: "devicemotion"
    });
    var keyboardListener = null;
    var accelerationListener = null;
    var SystemEvent = cc.Class({
      name: "SystemEvent",
      extends: EventTarget,
      statics: {
        EventType: EventType
      },
      setAccelerometerEnabled: function setAccelerometerEnabled(isEnable) {
        false;
        isEnable && window.DeviceMotionEvent && "function" === typeof DeviceMotionEvent.requestPermission ? DeviceMotionEvent.requestPermission().then((function(response) {
          console.log("Device Motion Event request permission: " + response);
          inputManger.setAccelerometerEnabled("granted" === response);
        })) : inputManger.setAccelerometerEnabled(isEnable);
      },
      setAccelerometerInterval: function setAccelerometerInterval(interval) {
        false;
        inputManger.setAccelerometerInterval(interval);
      },
      on: function on(type, callback, target, once) {
        false;
        this._super(type, callback, target, once);
        if (type === EventType.KEY_DOWN || type === EventType.KEY_UP) {
          keyboardListener || (keyboardListener = cc.EventListener.create({
            event: cc.EventListener.KEYBOARD,
            onKeyPressed: function onKeyPressed(keyCode, event) {
              event.type = EventType.KEY_DOWN;
              cc.systemEvent.dispatchEvent(event);
            },
            onKeyReleased: function onKeyReleased(keyCode, event) {
              event.type = EventType.KEY_UP;
              cc.systemEvent.dispatchEvent(event);
            }
          }));
          eventManager.hasEventListener(cc.EventListener.ListenerID.KEYBOARD) || eventManager.addListener(keyboardListener, 1);
        }
        if (type === EventType.DEVICEMOTION) {
          accelerationListener || (accelerationListener = cc.EventListener.create({
            event: cc.EventListener.ACCELERATION,
            callback: function callback(acc, event) {
              event.type = EventType.DEVICEMOTION;
              cc.systemEvent.dispatchEvent(event);
            }
          }));
          eventManager.hasEventListener(cc.EventListener.ListenerID.ACCELERATION) || eventManager.addListener(accelerationListener, 1);
        }
      },
      off: function off(type, callback, target) {
        false;
        this._super(type, callback, target);
        if (keyboardListener && (type === EventType.KEY_DOWN || type === EventType.KEY_UP)) {
          var hasKeyDownEventListener = this.hasEventListener(EventType.KEY_DOWN);
          var hasKeyUpEventListener = this.hasEventListener(EventType.KEY_UP);
          hasKeyDownEventListener || hasKeyUpEventListener || eventManager.removeListener(keyboardListener);
        }
        accelerationListener && type === EventType.DEVICEMOTION && eventManager.removeListener(accelerationListener);
      }
    });
    cc.SystemEvent = module.exports = SystemEvent;
    cc.systemEvent = new cc.SystemEvent();
  }), {
    "../event-manager": 119,
    "../event/event-target": 121,
    "../platform/CCInputManager": 142
  } ],
  125: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _vec = _interopRequireDefault(require("../value-types/vec3"));
    var _mat = _interopRequireDefault(require("../value-types/mat3"));
    var _enums = _interopRequireDefault(require("./enums"));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    var _v3_tmp = new _vec["default"]();
    var _v3_tmp2 = new _vec["default"]();
    var _m3_tmp = new _mat["default"]();
    var transform_extent_m4 = function transform_extent_m4(out, extent, m4) {
      var _m3_tmpm = _m3_tmp.m, m4m = m4.m;
      _m3_tmpm[0] = Math.abs(m4m[0]);
      _m3_tmpm[1] = Math.abs(m4m[1]);
      _m3_tmpm[2] = Math.abs(m4m[2]);
      _m3_tmpm[3] = Math.abs(m4m[4]);
      _m3_tmpm[4] = Math.abs(m4m[5]);
      _m3_tmpm[5] = Math.abs(m4m[6]);
      _m3_tmpm[6] = Math.abs(m4m[8]);
      _m3_tmpm[7] = Math.abs(m4m[9]);
      _m3_tmpm[8] = Math.abs(m4m[10]);
      _vec["default"].transformMat3(out, extent, _m3_tmp);
    };
    var aabb = (function() {
      aabb.create = function create(px, py, pz, w, h, l) {
        return new aabb(px, py, pz, w, h, l);
      };
      aabb.clone = function clone(a) {
        return new aabb(a.center.x, a.center.y, a.center.z, a.halfExtents.x, a.halfExtents.y, a.halfExtents.z);
      };
      aabb.copy = function copy(out, a) {
        _vec["default"].copy(out.center, a.center);
        _vec["default"].copy(out.halfExtents, a.halfExtents);
        return out;
      };
      aabb.fromPoints = function fromPoints(out, minPos, maxPos) {
        _vec["default"].scale(out.center, _vec["default"].add(_v3_tmp, minPos, maxPos), .5);
        _vec["default"].scale(out.halfExtents, _vec["default"].sub(_v3_tmp2, maxPos, minPos), .5);
        return out;
      };
      aabb.set = function set(out, px, py, pz, w, h, l) {
        _vec["default"].set(out.center, px, py, pz);
        _vec["default"].set(out.halfExtents, w, h, l);
        return out;
      };
      function aabb(px, py, pz, w, h, l) {
        this.center = void 0;
        this.halfExtents = void 0;
        this._type = void 0;
        this._type = _enums["default"].SHAPE_AABB;
        this.center = new _vec["default"](px, py, pz);
        this.halfExtents = new _vec["default"](w, h, l);
      }
      var _proto = aabb.prototype;
      _proto.getBoundary = function getBoundary(minPos, maxPos) {
        _vec["default"].sub(minPos, this.center, this.halfExtents);
        _vec["default"].add(maxPos, this.center, this.halfExtents);
      };
      _proto.transform = function transform(m, pos, rot, scale, out) {
        out || (out = this);
        _vec["default"].transformMat4(out.center, this.center, m);
        transform_extent_m4(out.halfExtents, this.halfExtents, m);
      };
      return aabb;
    })();
    exports["default"] = aabb;
    module.exports = exports["default"];
  }), {
    "../value-types/mat3": 225,
    "../value-types/vec3": 234,
    "./enums": 126
  } ],
  126: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _default = {
      SHAPE_RAY: 1,
      SHAPE_LINE: 2,
      SHAPE_SPHERE: 4,
      SHAPE_AABB: 8,
      SHAPE_OBB: 16,
      SHAPE_PLANE: 32,
      SHAPE_TRIANGLE: 64,
      SHAPE_FRUSTUM: 128,
      SHAPE_FRUSTUM_ACCURATE: 256
    };
    exports["default"] = _default;
    module.exports = exports["default"];
  }), {} ],
  127: [ (function(require, module, exports) {
    "use strict";
    var RenderComponent = require("../components/CCRenderComponent");
    var Material = require("../assets/material/CCMaterial");
    var Types = require("./types");
    var LineCap = Types.LineCap;
    var LineJoin = Types.LineJoin;
    var Graphics = cc.Class({
      name: "cc.Graphics",
      extends: RenderComponent,
      editor: false,
      ctor: function ctor() {
        this._impl = new Graphics._Impl(this);
      },
      properties: {
        _lineWidth: 2,
        _strokeColor: cc.Color.BLACK,
        _lineJoin: LineJoin.MITER,
        _lineCap: LineCap.BUTT,
        _fillColor: cc.Color.WHITE,
        _miterLimit: 10,
        lineWidth: {
          get: function get() {
            return this._lineWidth;
          },
          set: function set(value) {
            this._lineWidth = value;
            this._impl.lineWidth = value;
          }
        },
        lineJoin: {
          get: function get() {
            return this._lineJoin;
          },
          set: function set(value) {
            this._lineJoin = value;
            this._impl.lineJoin = value;
          },
          type: LineJoin
        },
        lineCap: {
          get: function get() {
            return this._lineCap;
          },
          set: function set(value) {
            this._lineCap = value;
            this._impl.lineCap = value;
          },
          type: LineCap
        },
        strokeColor: {
          get: function get() {
            return this._strokeColor;
          },
          set: function set(value) {
            this._impl.strokeColor = this._strokeColor = cc.color(value);
          }
        },
        fillColor: {
          get: function get() {
            return this._fillColor;
          },
          set: function set(value) {
            this._impl.fillColor = this._fillColor = cc.color(value);
          }
        },
        miterLimit: {
          get: function get() {
            return this._miterLimit;
          },
          set: function set(value) {
            this._miterLimit = value;
            this._impl.miterLimit = value;
          }
        }
      },
      statics: {
        LineJoin: LineJoin,
        LineCap: LineCap
      },
      onRestore: function onRestore() {
        this._impl || (this._impl = new Graphics._Impl(this));
      },
      onDestroy: function onDestroy() {
        this.clear(true);
        this._super();
        this._impl = null;
      },
      _getDefaultMaterial: function _getDefaultMaterial() {
        return Material.getBuiltinMaterial("2d-graphics");
      },
      _updateMaterial: function _updateMaterial() {
        var material = this._materials[0];
        if (!material) return;
        void 0 !== material.getDefine("CC_USE_MODEL") && material.define("CC_USE_MODEL", true);
        void 0 !== material.getDefine("CC_SUPPORT_standard_derivatives") && cc.sys.glExtension("OES_standard_derivatives") && material.define("CC_SUPPORT_standard_derivatives", true);
      },
      moveTo: function moveTo(x, y) {
        if (true, x instanceof cc.Vec2) {
          cc.warn("[moveTo] : Can not pass Vec2 as [x, y] value, please check it.");
          return;
        }
        this._impl.moveTo(x, y);
      },
      lineTo: function lineTo(x, y) {
        if (true, x instanceof cc.Vec2) {
          cc.warn("[moveTo] : Can not pass Vec2 as [x, y] value, please check it.");
          return;
        }
        this._impl.lineTo(x, y);
      },
      bezierCurveTo: function bezierCurveTo(c1x, c1y, c2x, c2y, x, y) {
        this._impl.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);
      },
      quadraticCurveTo: function quadraticCurveTo(cx, cy, x, y) {
        this._impl.quadraticCurveTo(cx, cy, x, y);
      },
      arc: function arc(cx, cy, r, startAngle, endAngle, counterclockwise) {
        this._impl.arc(cx, cy, r, startAngle, endAngle, counterclockwise);
      },
      ellipse: function ellipse(cx, cy, rx, ry) {
        this._impl.ellipse(cx, cy, rx, ry);
      },
      circle: function circle(cx, cy, r) {
        this._impl.circle(cx, cy, r);
      },
      rect: function rect(x, y, w, h) {
        this._impl.rect(x, y, w, h);
      },
      roundRect: function roundRect(x, y, w, h, r) {
        this._impl.roundRect(x, y, w, h, r);
      },
      fillRect: function fillRect(x, y, w, h) {
        this.rect(x, y, w, h);
        this.fill();
      },
      clear: function clear(clean) {
        this._impl.clear(clean);
        this._assembler && this._assembler.clear(clean);
      },
      close: function close() {
        this._impl.close();
      },
      stroke: function stroke() {
        this._assembler || this._resetAssembler();
        this._assembler.stroke(this);
      },
      fill: function fill() {
        this._assembler || this._resetAssembler();
        this._assembler.fill(this);
      }
    });
    cc.Graphics = module.exports = Graphics;
    cc.Graphics.Types = Types;
    cc.Graphics.Helper = require("./helper");
  }), {
    "../assets/material/CCMaterial": 77,
    "../components/CCRenderComponent": 100,
    "./helper": 128,
    "./types": 130
  } ],
  128: [ (function(require, module, exports) {
    "use strict";
    var PointFlags = require("./types").PointFlags;
    var PI = Math.PI;
    var min = Math.min;
    var max = Math.max;
    var cos = Math.cos;
    var sin = Math.sin;
    var abs = Math.abs;
    var sign = Math.sign;
    var KAPPA90 = .5522847493;
    function arc(ctx, cx, cy, r, startAngle, endAngle, counterclockwise) {
      counterclockwise = counterclockwise || false;
      var a = 0, da = 0, hda = 0, kappa = 0;
      var dx = 0, dy = 0, x = 0, y = 0, tanx = 0, tany = 0;
      var px = 0, py = 0, ptanx = 0, ptany = 0;
      var i, ndivs;
      da = endAngle - startAngle;
      if (counterclockwise) if (abs(da) >= 2 * PI) da = 2 * PI; else while (da < 0) da += 2 * PI; else if (abs(da) >= 2 * PI) da = 2 * -PI; else while (da > 0) da -= 2 * PI;
      ndivs = 0 | max(1, min(abs(da) / (.5 * PI) + .5, 5));
      hda = da / ndivs / 2;
      kappa = abs(4 / 3 * (1 - cos(hda)) / sin(hda));
      counterclockwise || (kappa = -kappa);
      for (i = 0; i <= ndivs; i++) {
        a = startAngle + da * (i / ndivs);
        dx = cos(a);
        dy = sin(a);
        x = cx + dx * r;
        y = cy + dy * r;
        tanx = -dy * r * kappa;
        tany = dx * r * kappa;
        0 === i ? ctx.moveTo(x, y) : ctx.bezierCurveTo(px + ptanx, py + ptany, x - tanx, y - tany, x, y);
        px = x;
        py = y;
        ptanx = tanx;
        ptany = tany;
      }
    }
    function ellipse(ctx, cx, cy, rx, ry) {
      ctx.moveTo(cx - rx, cy);
      ctx.bezierCurveTo(cx - rx, cy + ry * KAPPA90, cx - rx * KAPPA90, cy + ry, cx, cy + ry);
      ctx.bezierCurveTo(cx + rx * KAPPA90, cy + ry, cx + rx, cy + ry * KAPPA90, cx + rx, cy);
      ctx.bezierCurveTo(cx + rx, cy - ry * KAPPA90, cx + rx * KAPPA90, cy - ry, cx, cy - ry);
      ctx.bezierCurveTo(cx - rx * KAPPA90, cy - ry, cx - rx, cy - ry * KAPPA90, cx - rx, cy);
      ctx.close();
    }
    function roundRect(ctx, x, y, w, h, r) {
      if (r < .1) {
        ctx.rect(x, y, w, h);
        return;
      }
      var rx = min(r, .5 * abs(w)) * sign(w), ry = min(r, .5 * abs(h)) * sign(h);
      ctx.moveTo(x, y + ry);
      ctx.lineTo(x, y + h - ry);
      ctx.bezierCurveTo(x, y + h - ry * (1 - KAPPA90), x + rx * (1 - KAPPA90), y + h, x + rx, y + h);
      ctx.lineTo(x + w - rx, y + h);
      ctx.bezierCurveTo(x + w - rx * (1 - KAPPA90), y + h, x + w, y + h - ry * (1 - KAPPA90), x + w, y + h - ry);
      ctx.lineTo(x + w, y + ry);
      ctx.bezierCurveTo(x + w, y + ry * (1 - KAPPA90), x + w - rx * (1 - KAPPA90), y, x + w - rx, y);
      ctx.lineTo(x + rx, y);
      ctx.bezierCurveTo(x + rx * (1 - KAPPA90), y, x, y + ry * (1 - KAPPA90), x, y + ry);
      ctx.close();
    }
    function tesselateBezier(ctx, x1, y1, x2, y2, x3, y3, x4, y4, level, type) {
      var x12, y12, x23, y23, x34, y34, x123, y123, x234, y234, x1234, y1234;
      var dx, dy, d2, d3;
      if (level > 10) return;
      x12 = .5 * (x1 + x2);
      y12 = .5 * (y1 + y2);
      x23 = .5 * (x2 + x3);
      y23 = .5 * (y2 + y3);
      x34 = .5 * (x3 + x4);
      y34 = .5 * (y3 + y4);
      x123 = .5 * (x12 + x23);
      y123 = .5 * (y12 + y23);
      dx = x4 - x1;
      dy = y4 - y1;
      d2 = abs((x2 - x4) * dy - (y2 - y4) * dx);
      d3 = abs((x3 - x4) * dy - (y3 - y4) * dx);
      if ((d2 + d3) * (d2 + d3) < ctx._tessTol * (dx * dx + dy * dy)) {
        ctx._addPoint(x4, y4, 0 === type ? type | PointFlags.PT_BEVEL : type);
        return;
      }
      x234 = .5 * (x23 + x34);
      y234 = .5 * (y23 + y34);
      x1234 = .5 * (x123 + x234);
      y1234 = .5 * (y123 + y234);
      tesselateBezier(ctx, x1, y1, x12, y12, x123, y123, x1234, y1234, level + 1, 0);
      tesselateBezier(ctx, x1234, y1234, x234, y234, x34, y34, x4, y4, level + 1, type);
    }
    module.exports = {
      arc: arc,
      ellipse: ellipse,
      roundRect: roundRect,
      tesselateBezier: tesselateBezier
    };
  }), {
    "./types": 130
  } ],
  129: [ (function(require, module, exports) {
    "use strict";
    require("./graphics");
  }), {
    "./graphics": 127
  } ],
  130: [ (function(require, module, exports) {
    "use strict";
    var LineCap = cc.Enum({
      BUTT: 0,
      ROUND: 1,
      SQUARE: 2
    });
    var LineJoin = cc.Enum({
      BEVEL: 0,
      ROUND: 1,
      MITER: 2
    });
    var PointFlags = cc.Enum({
      PT_CORNER: 1,
      PT_LEFT: 2,
      PT_BEVEL: 4,
      PT_INNERBEVEL: 8
    });
    module.exports = {
      LineCap: LineCap,
      LineJoin: LineJoin,
      PointFlags: PointFlags
    };
  }), {} ],
  131: [ (function(require, module, exports) {
    "use strict";
    require("./platform");
    require("./assets");
    true;
    require("./CCNode");
    require("./CCPrivateNode");
    require("./CCScene");
    require("./components");
    require("./graphics");
    require("./collider");
    require("./collider/CCIntersection");
    require("./physics");
    require("./camera/CCCamera");
    require("./geom-utils");
    require("./mesh");
    require("./3d");
    require("./base-ui/CCWidgetManager");
  }), {
    "./3d": void 0,
    "./CCNode": 26,
    "./CCPrivateNode": 27,
    "./CCScene": 28,
    "./assets": 75,
    "./base-ui/CCWidgetManager": 86,
    "./camera/CCCamera": 87,
    "./collider": void 0,
    "./collider/CCIntersection": void 0,
    "./components": 113,
    "./geom-utils": void 0,
    "./graphics": 129,
    "./mesh": 134,
    "./physics": void 0,
    "./platform": 155
  } ],
  132: [ (function(require, module, exports) {
    "use strict";
    var _inputAssembler = _interopRequireDefault(require("../../renderer/core/input-assembler"));
    var _gfx = _interopRequireDefault(require("../../renderer/gfx"));
    var _meshData = require("./mesh-data");
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    var renderer = require("../renderer");
    var EventTarget = require("../event/event-target");
    function applyColor(data, offset, value) {
      data[offset] = value._val;
    }
    function applyVec2(data, offset, value) {
      data[offset] = value.x;
      data[offset + 1] = value.y;
    }
    function applyVec3(data, offset, value) {
      data[offset] = value.x;
      data[offset + 1] = value.y;
      data[offset + 2] = value.z;
    }
    var _compType2fn = {
      5120: "getInt8",
      5121: "getUint8",
      5122: "getInt16",
      5123: "getUint16",
      5124: "getInt32",
      5125: "getUint32",
      5126: "getFloat32"
    };
    var _compType2write = {
      5120: "setInt8",
      5121: "setUint8",
      5122: "setInt16",
      5123: "setUint16",
      5124: "setInt32",
      5125: "setUint32",
      5126: "setFloat32"
    };
    var littleEndian = (function() {
      var buffer = new ArrayBuffer(2);
      new DataView(buffer).setInt16(0, 256, true);
      return 256 === new Int16Array(buffer)[0];
    })();
    var Mesh = cc.Class({
      name: "cc.Mesh",
      extends: cc.Asset,
      mixins: [ EventTarget ],
      properties: {
        _nativeAsset: {
          override: true,
          get: function get() {
            return this._buffer;
          },
          set: function set(bin) {
            this._buffer = ArrayBuffer.isView(bin) ? bin.buffer : bin;
            this.initWithBuffer();
          }
        },
        _vertexBundles: {
          default: null,
          type: _meshData.VertexBundle
        },
        _primitives: {
          default: null,
          Primitive: _meshData.Primitive
        },
        _minPos: cc.v3(),
        _maxPos: cc.v3(),
        subMeshes: {
          get: function get() {
            return this._subMeshes;
          },
          set: function set(v) {
            this._subMeshes = v;
          }
        },
        subDatas: {
          get: function get() {
            return this._subDatas;
          }
        }
      },
      ctor: function ctor() {
        this._subMeshes = [];
        this._subDatas = [];
        this.loaded = false;
      },
      initWithBuffer: function initWithBuffer() {
        this._subMeshes.length = 0;
        var primitives = this._primitives;
        for (var i = 0; i < primitives.length; i++) {
          var primitive = primitives[i];
          var ibrange = primitive.data;
          var ibData = new Uint8Array(this._buffer, ibrange.offset, ibrange.length);
          var vertexBundle = this._vertexBundles[primitive.vertexBundleIndices[0]];
          var vbRange = vertexBundle.data;
          var gfxVFmt = new _gfx["default"].VertexFormat(vertexBundle.formats);
          var vbData = new Uint8Array(this._buffer, vbRange.offset, vbRange.length);
          var canBatch = this._canVertexFormatBatch(gfxVFmt);
          var meshData = new _meshData.MeshData();
          meshData.vData = vbData;
          meshData.iData = ibData;
          meshData.vfm = gfxVFmt;
          meshData.offset = vbRange.offset;
          meshData.canBatch = canBatch;
          this._subDatas.push(meshData);
          false;
          var vbBuffer = new _gfx["default"].VertexBuffer(renderer.device, gfxVFmt, _gfx["default"].USAGE_STATIC, vbData);
          var ibBuffer = new _gfx["default"].IndexBuffer(renderer.device, primitive.indexUnit, _gfx["default"].USAGE_STATIC, ibData);
          this._subMeshes.push(new _inputAssembler["default"](vbBuffer, ibBuffer));
        }
        this.loaded = true;
        this.emit("load");
      },
      _canVertexFormatBatch: function _canVertexFormatBatch(format) {
        var aPosition = format._attr2el[_gfx["default"].ATTR_POSITION];
        var canBatch = !aPosition || aPosition.type === _gfx["default"].ATTR_TYPE_FLOAT32 && format._bytes % 4 === 0;
        return canBatch;
      },
      init: function init(vertexFormat, vertexCount, dynamic, index) {
        void 0 === dynamic && (dynamic = false);
        void 0 === index && (index = 0);
        var data = new Uint8Array(vertexFormat._bytes * vertexCount);
        var meshData = new _meshData.MeshData();
        meshData.vData = data;
        meshData.vfm = vertexFormat;
        meshData.vDirty = true;
        meshData.canBatch = this._canVertexFormatBatch(vertexFormat);
        true;
        var vb = new _gfx["default"].VertexBuffer(renderer.device, vertexFormat, dynamic ? _gfx["default"].USAGE_DYNAMIC : _gfx["default"].USAGE_STATIC, data);
        meshData.vb = vb;
        this._subMeshes[index] = new _inputAssembler["default"](meshData.vb);
        var oldSubData = this._subDatas[index];
        if (oldSubData) {
          oldSubData.vb && oldSubData.vb.destroy();
          oldSubData.ib && oldSubData.ib.destroy();
        }
        this._subDatas[index] = meshData;
        this.loaded = true;
        this.emit("load");
        this.emit("init-format");
      },
      setVertices: function setVertices(name, values, index) {
        index = index || 0;
        var subData = this._subDatas[index];
        var el = subData.vfm.element(name);
        if (!el) return cc.warn("Cannot find " + name + " attribute in vertex defines.");
        var isFlatMode = "number" === typeof values[0];
        var elNum = el.num;
        var verticesCount = isFlatMode ? values.length / elNum | 0 : values.length;
        subData.vData.byteLength < verticesCount * el.stride && subData.setVData(new Uint8Array(verticesCount * subData.vfm._bytes));
        var data;
        var bytes = 4;
        if (name === _gfx["default"].ATTR_COLOR) if (isFlatMode) {
          data = subData.getVData();
          bytes = 1;
        } else data = subData.getVData(Uint32Array); else data = subData.getVData(Float32Array);
        var stride = el.stride / bytes;
        var offset = el.offset / bytes;
        if (isFlatMode) for (var i = 0, l = values.length / elNum; i < l; i++) {
          var sOffset = i * elNum;
          var dOffset = i * stride + offset;
          for (var j = 0; j < elNum; j++) data[dOffset + j] = values[sOffset + j];
        } else {
          var applyFunc;
          applyFunc = name === _gfx["default"].ATTR_COLOR ? applyColor : 2 === elNum ? applyVec2 : applyVec3;
          for (var _i = 0, _l = values.length; _i < _l; _i++) {
            var v = values[_i];
            var vOffset = _i * stride + offset;
            applyFunc(data, vOffset, v);
          }
        }
        subData.vDirty = true;
      },
      setIndices: function setIndices(indices, index, dynamic) {
        index = index || 0;
        var iData = indices;
        if (indices instanceof Uint16Array) iData = new Uint8Array(indices.buffer, indices.byteOffset, indices.byteLength); else if (Array.isArray(indices)) {
          iData = new Uint16Array(indices);
          iData = new Uint8Array(iData.buffer, iData.byteOffset, iData.byteLength);
        }
        var usage = dynamic ? _gfx["default"].USAGE_DYNAMIC : _gfx["default"].USAGE_STATIC;
        var subData = this._subDatas[index];
        if (subData.ib) {
          subData.iData = iData;
          subData.iDirty = true;
        } else {
          subData.iData = iData;
          true;
          var buffer = new _gfx["default"].IndexBuffer(renderer.device, _gfx["default"].INDEX_FMT_UINT16, usage, iData, iData.byteLength / _gfx["default"].IndexBuffer.BYTES_PER_INDEX[_gfx["default"].INDEX_FMT_UINT16]);
          subData.ib = buffer;
          this._subMeshes[index]._indexBuffer = subData.ib;
        }
      },
      setPrimitiveType: function setPrimitiveType(type, index) {
        index = index || 0;
        var subMesh = this._subMeshes[index];
        if (!subMesh) {
          cc.warn("Do not have sub mesh at index " + index);
          return;
        }
        this._subMeshes[index]._primitiveType = type;
      },
      clear: function clear() {
        this._subMeshes.length = 0;
        var subDatas = this._subDatas;
        for (var i = 0, len = subDatas.length; i < len; i++) {
          var vb = subDatas[i].vb;
          vb && vb.destroy();
          var ib = subDatas[i].ib;
          ib && ib.destroy();
        }
        subDatas.length = 0;
      },
      setBoundingBox: function setBoundingBox(min, max) {
        this._minPos = min;
        this._maxPos = max;
      },
      destroy: function destroy() {
        this.clear();
      },
      _uploadData: function _uploadData() {
        var subDatas = this._subDatas;
        for (var i = 0, len = subDatas.length; i < len; i++) {
          var subData = subDatas[i];
          if (subData.vDirty) {
            var buffer = subData.vb, data = subData.vData;
            buffer.update(0, data);
            subData.vDirty = false;
          }
          if (subData.iDirty) {
            var _buffer = subData.ib, _data = subData.iData;
            _buffer.update(0, _data);
            subData.iDirty = false;
          }
        }
      },
      _getAttrMeshData: function _getAttrMeshData(subDataIndex, name) {
        var subData = this._subDatas[subDataIndex];
        if (!subData) return [];
        var format = subData.vfm;
        var fmt = format.element(name);
        if (!fmt) return [];
        subData.attrDatas || (subData.attrDatas = {});
        var attrDatas = subData.attrDatas;
        var data = attrDatas[name];
        if (data) return data;
        data = attrDatas[name] = [];
        var vbData = subData.vData;
        var dv = new DataView(vbData.buffer, vbData.byteOffset, vbData.byteLength);
        var stride = fmt.stride;
        var eleOffset = fmt.offset;
        var eleNum = fmt.num;
        var eleByte = fmt.bytes / eleNum;
        var fn = _compType2fn[fmt.type];
        var vertexCount = vbData.byteLength / format._bytes;
        for (var i = 0; i < vertexCount; i++) {
          var offset = i * stride + eleOffset;
          for (var j = 0; j < eleNum; j++) {
            var v = dv[fn](offset + j * eleByte, littleEndian);
            data.push(v);
          }
        }
        return data;
      },
      copyAttribute: function copyAttribute(primitiveIndex, attributeName, buffer, stride, offset) {
        var written = false;
        var subData = this._subDatas[primitiveIndex];
        if (!subData) return written;
        var format = subData.vfm;
        var fmt = format.element(attributeName);
        if (!fmt) return written;
        var writter = _compType2write[fmt.type];
        if (!writter) return written;
        var data = this._getAttrMeshData(primitiveIndex, attributeName);
        var vertexCount = subData.vData.byteLength / format._bytes;
        var eleByte = fmt.bytes / fmt.num;
        if (data.length > 0) {
          var outputView = new DataView(buffer, offset);
          var outputStride = stride;
          var num = fmt.num;
          for (var i = 0; i < vertexCount; ++i) {
            var index = i * num;
            for (var j = 0; j < num; ++j) {
              var inputOffset = index + j;
              var outputOffset = outputStride * i + eleByte * j;
              outputView[writter](outputOffset, data[inputOffset], littleEndian);
            }
          }
          written = true;
        }
        return written;
      },
      copyIndices: function copyIndices(primitiveIndex, outputArray) {
        var subData = this._subDatas[primitiveIndex];
        if (!subData) return false;
        var iData = subData.iData;
        var indexCount = iData.length / 2;
        var dv = new DataView(iData.buffer, iData.byteOffset, iData.byteLength);
        var fn = _compType2fn[_gfx["default"].INDEX_FMT_UINT8];
        for (var i = 0; i < indexCount; ++i) outputArray[i] = dv[fn](2 * i);
        return true;
      }
    });
    cc.Mesh = module.exports = Mesh;
  }), {
    "../../renderer/core/input-assembler": 241,
    "../../renderer/gfx": 251,
    "../event/event-target": 121,
    "../renderer": 168,
    "./mesh-data": 135
  } ],
  133: [ (function(require, module, exports) {
    "use strict";
    var _gfx = _interopRequireDefault(require("../../renderer/gfx"));
    var _inputAssembler = _interopRequireDefault(require("../../renderer/core/input-assembler"));
    var _aabb = _interopRequireDefault(require("../geom-utils/aabb"));
    var _vec = _interopRequireDefault(require("../value-types/vec3"));
    var _mat = _interopRequireDefault(require("../value-types/mat4"));
    var _materialVariant = _interopRequireDefault(require("../assets/material/material-variant"));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    var RenderComponent = require("../components/CCRenderComponent");
    var Mesh = require("./CCMesh");
    var RenderFlow = require("../renderer/render-flow");
    var Renderer = require("../renderer");
    var Material = require("../assets/material/CCMaterial");
    var ShadowCastingMode = cc.Enum({
      OFF: 0,
      ON: 1
    });
    var MeshRenderer = cc.Class({
      name: "cc.MeshRenderer",
      extends: RenderComponent,
      editor: false,
      properties: {
        _mesh: {
          default: null,
          type: Mesh
        },
        _receiveShadows: false,
        _shadowCastingMode: ShadowCastingMode.OFF,
        _enableAutoBatch: false,
        mesh: {
          get: function get() {
            return this._mesh;
          },
          set: function set(v) {
            if (this._mesh === v) return;
            this._setMesh(v);
            if (!v) {
              this.disableRender();
              return;
            }
            this.markForRender(true);
            this.node._renderFlag |= RenderFlow.FLAG_TRANSFORM;
          },
          type: Mesh,
          animatable: false
        },
        textures: {
          default: [],
          type: cc.Texture2D,
          visible: false
        },
        receiveShadows: {
          get: function get() {
            return this._receiveShadows;
          },
          set: function set(val) {
            this._receiveShadows = val;
            this._updateReceiveShadow();
          },
          animatable: false
        },
        shadowCastingMode: {
          get: function get() {
            return this._shadowCastingMode;
          },
          set: function set(val) {
            this._shadowCastingMode = val;
            this._updateCastShadow();
          },
          type: ShadowCastingMode,
          animatable: false
        },
        enableAutoBatch: {
          get: function get() {
            return this._enableAutoBatch;
          },
          set: function set(val) {
            this._enableAutoBatch = val;
          }
        }
      },
      statics: {
        ShadowCastingMode: ShadowCastingMode
      },
      ctor: function ctor() {
        this._boundingBox = cc.geomUtils && new _aabb["default"]();
        true;
        this._debugDatas = {
          wireFrame: [],
          normal: []
        };
      },
      onEnable: function onEnable() {
        var _this = this;
        this._super();
        if (this._mesh && !this._mesh.loaded) {
          this.disableRender();
          this._mesh.once("load", (function() {
            if (!_this.isValid) return;
            _this._setMesh(_this._mesh);
            _this.markForRender(true);
          }));
          cc.assetManager.postLoadNative(this._mesh);
        } else this._setMesh(this._mesh);
        this._updateRenderNode();
        this._updateMaterial();
      },
      onDestroy: function onDestroy() {
        this._setMesh(null);
        cc.pool.assembler.put(this._assembler);
      },
      _updateRenderNode: function _updateRenderNode() {
        this._assembler.setRenderNode(this.node);
      },
      _setMesh: function _setMesh(mesh) {
        cc.geomUtils && mesh && _aabb["default"].fromPoints(this._boundingBox, mesh._minPos, mesh._maxPos);
        this._mesh && this._mesh.off("init-format", this._updateMeshAttribute, this);
        mesh && mesh.on("init-format", this._updateMeshAttribute, this);
        this._mesh = mesh;
        this._assembler && (this._assembler._worldDatas = {});
        this._updateMeshAttribute();
      },
      _getDefaultMaterial: function _getDefaultMaterial() {
        return Material.getBuiltinMaterial("unlit");
      },
      _validateRender: function _validateRender() {
        var mesh = this._mesh;
        if (mesh && mesh._subDatas.length > 0) return;
        this.disableRender();
      },
      _updateMaterial: function _updateMaterial() {
        var textures = this.textures;
        if (textures && textures.length > 0) {
          var defaultMaterial = this._getDefaultMaterial();
          for (var i = 0; i < textures.length; i++) {
            var material = this._materials[i];
            if (material && material._uuid !== defaultMaterial._uuid) continue;
            if (!material) {
              material = _materialVariant["default"].create(defaultMaterial, this);
              this.setMaterial(i, material);
            }
            material.setProperty("diffuseTexture", textures[i]);
          }
        }
        this._updateReceiveShadow();
        this._updateCastShadow();
        this._updateMeshAttribute();
      },
      _updateReceiveShadow: function _updateReceiveShadow() {
        var materials = this.getMaterials();
        for (var i = 0; i < materials.length; i++) materials[i].define("CC_USE_SHADOW_MAP", this._receiveShadows, void 0, true);
      },
      _updateCastShadow: function _updateCastShadow() {
        var materials = this.getMaterials();
        for (var i = 0; i < materials.length; i++) materials[i].define("CC_CASTING_SHADOW", this._shadowCastingMode === ShadowCastingMode.ON, void 0, true);
      },
      _updateMeshAttribute: function _updateMeshAttribute() {
        var subDatas = this._mesh && this._mesh.subDatas;
        if (!subDatas) return;
        var materials = this.getMaterials();
        for (var i = 0; i < materials.length; i++) {
          if (!subDatas[i]) break;
          var vfm = subDatas[i].vfm;
          var material = materials[i];
          material.define("CC_USE_ATTRIBUTE_COLOR", !!vfm.element(_gfx["default"].ATTR_COLOR), void 0, true);
          material.define("CC_USE_ATTRIBUTE_UV0", !!vfm.element(_gfx["default"].ATTR_UV0), void 0, true);
          material.define("CC_USE_ATTRIBUTE_NORMAL", !!vfm.element(_gfx["default"].ATTR_NORMAL), void 0, true);
          material.define("CC_USE_ATTRIBUTE_TANGENT", !!vfm.element(_gfx["default"].ATTR_TANGENT), void 0, true);
        }
        true;
        for (var name in this._debugDatas) this._debugDatas[name].length = 0;
        false;
      },
      _checkBacth: function _checkBacth() {}
    });
    true;
    var BLACK_COLOR = cc.Color.BLACK;
    var RED_COLOR = cc.Color.RED;
    var v3_tmp = [ cc.v3(), cc.v3() ];
    var mat4_tmp = cc.mat4();
    var createDebugDataFns = {
      normal: function normal(comp, ia, subData, subIndex) {
        var oldVfm = subData.vfm;
        var normalEle = oldVfm.element(_gfx["default"].ATTR_NORMAL);
        var posEle = oldVfm.element(_gfx["default"].ATTR_POSITION);
        var jointEle = oldVfm.element(_gfx["default"].ATTR_JOINTS);
        var weightEle = oldVfm.element(_gfx["default"].ATTR_WEIGHTS);
        if (!normalEle || !posEle) return;
        var indices = [];
        var vbData = [];
        var lineLength = 100;
        _vec["default"].set(v3_tmp[0], 5, 0, 0);
        _mat["default"].invert(mat4_tmp, comp.node._worldMatrix);
        _vec["default"].transformMat4Normal(v3_tmp[0], v3_tmp[0], mat4_tmp);
        lineLength = v3_tmp[0].mag();
        var mesh = comp.mesh;
        var posData = mesh._getAttrMeshData(subIndex, _gfx["default"].ATTR_POSITION);
        var normalData = mesh._getAttrMeshData(subIndex, _gfx["default"].ATTR_NORMAL);
        var jointData = mesh._getAttrMeshData(subIndex, _gfx["default"].ATTR_JOINTS);
        var weightData = mesh._getAttrMeshData(subIndex, _gfx["default"].ATTR_WEIGHTS);
        var vertexCount = posData.length / posEle.num;
        for (var i = 0; i < vertexCount; i++) {
          var normalIndex = i * normalEle.num;
          var posIndex = i * posEle.num;
          _vec["default"].set(v3_tmp[0], normalData[normalIndex], normalData[normalIndex + 1], normalData[normalIndex + 2]);
          _vec["default"].set(v3_tmp[1], posData[posIndex], posData[posIndex + 1], posData[posIndex + 2]);
          _vec["default"].scaleAndAdd(v3_tmp[0], v3_tmp[1], v3_tmp[0], lineLength);
          for (var lineIndex = 0; lineIndex < 2; lineIndex++) {
            vbData.push(v3_tmp[lineIndex].x, v3_tmp[lineIndex].y, v3_tmp[lineIndex].z);
            if (jointEle) {
              var jointIndex = i * jointEle.num;
              for (var j = 0; j < jointEle.num; j++) vbData.push(jointData[jointIndex + j]);
            }
            if (weightEle) {
              var weightIndex = i * weightEle.num;
              for (var _j = 0; _j < weightEle.num; _j++) vbData.push(weightData[weightIndex + _j]);
            }
          }
          indices.push(2 * i, 2 * i + 1);
        }
        var formatOpts = [ {
          name: _gfx["default"].ATTR_POSITION,
          type: _gfx["default"].ATTR_TYPE_FLOAT32,
          num: 3
        } ];
        jointEle && formatOpts.push({
          name: _gfx["default"].ATTR_JOINTS,
          type: _gfx["default"].ATTR_TYPE_FLOAT32,
          num: jointEle.num
        });
        weightEle && formatOpts.push({
          name: _gfx["default"].ATTR_WEIGHTS,
          type: _gfx["default"].ATTR_TYPE_FLOAT32,
          num: weightEle.num
        });
        var gfxVFmt = new _gfx["default"].VertexFormat(formatOpts);
        var vb = new _gfx["default"].VertexBuffer(Renderer.device, gfxVFmt, _gfx["default"].USAGE_STATIC, new Float32Array(vbData));
        var ibData = new Uint16Array(indices);
        var ib = new _gfx["default"].IndexBuffer(Renderer.device, _gfx["default"].INDEX_FMT_UINT16, _gfx["default"].USAGE_STATIC, ibData, ibData.length);
        var m = _materialVariant["default"].createWithBuiltin("unlit");
        m.setProperty("diffuseColor", RED_COLOR);
        return {
          material: m,
          ia: new _inputAssembler["default"](vb, ib, _gfx["default"].PT_LINES)
        };
      },
      wireFrame: function wireFrame(comp, ia, subData) {
        var oldIbData = subData.getIData(Uint16Array);
        var m = _materialVariant["default"].createWithBuiltin("unlit");
        m.setProperty("diffuseColor", BLACK_COLOR);
        var indices = [];
        for (var i = 0; i < oldIbData.length; i += 3) {
          var a = oldIbData[i + 0];
          var b = oldIbData[i + 1];
          var c = oldIbData[i + 2];
          indices.push(a, b, b, c, c, a);
        }
        var ibData = new Uint16Array(indices);
        var ib = new _gfx["default"].IndexBuffer(Renderer.device, _gfx["default"].INDEX_FMT_UINT16, _gfx["default"].USAGE_STATIC, ibData, ibData.length);
        return {
          material: m,
          ia: new _inputAssembler["default"](ia._vertexBuffer, ib, _gfx["default"].PT_LINES)
        };
      }
    };
    var _proto = MeshRenderer.prototype;
    _proto._updateDebugDatas = function() {
      var debugDatas = this._debugDatas;
      var subMeshes = this._mesh.subMeshes;
      var subDatas = this._mesh._subDatas;
      for (var name in debugDatas) {
        var debugData = debugDatas[name];
        if (debugData.length === subMeshes.length) continue;
        if (!cc.macro["SHOW_MESH_" + name.toUpperCase()]) continue;
        debugData.length = subMeshes.length;
        for (var i = 0; i < subMeshes.length; i++) debugData[i] = createDebugDataFns[name](this, subMeshes[i], subDatas[i], i);
      }
    };
    cc.MeshRenderer = module.exports = MeshRenderer;
  }), {
    "../../renderer/core/input-assembler": 241,
    "../../renderer/gfx": 251,
    "../assets/material/CCMaterial": 77,
    "../assets/material/material-variant": 84,
    "../components/CCRenderComponent": 100,
    "../geom-utils/aabb": 125,
    "../renderer": 168,
    "../renderer/render-flow": 169,
    "../value-types/mat4": 226,
    "../value-types/vec3": 234,
    "./CCMesh": 132
  } ],
  134: [ (function(require, module, exports) {
    "use strict";
    require("./CCMesh");
    true;
    require("./CCMeshRenderer");
    require("./mesh-renderer");
  }), {
    "./CCMesh": 132,
    "./CCMeshRenderer": 133,
    "./mesh-renderer": 136
  } ],
  135: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports.MeshData = MeshData;
    exports.Primitive = exports.VertexBundle = exports.VertexFormat = exports.BufferRange = void 0;
    var _gfx = _interopRequireDefault(require("../../renderer/gfx"));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    var BufferRange = cc.Class({
      name: "cc.BufferRange",
      properties: {
        offset: 0,
        length: 0
      }
    });
    exports.BufferRange = BufferRange;
    var VertexFormat = cc.Class({
      name: "cc.mesh.VertexFormat",
      properties: {
        name: "",
        type: -1,
        num: -1,
        normalize: false
      }
    });
    exports.VertexFormat = VertexFormat;
    var VertexBundle = cc.Class({
      name: "cc.mesh.VertexBundle",
      properties: {
        data: {
          default: null,
          type: BufferRange
        },
        formats: {
          default: [],
          type: VertexFormat
        },
        verticesCount: 0
      }
    });
    exports.VertexBundle = VertexBundle;
    var Primitive = cc.Class({
      name: "cc.mesh.Primitive",
      properties: {
        vertexBundleIndices: {
          default: [],
          type: cc.Float
        },
        data: {
          default: null,
          type: BufferRange
        },
        indexUnit: _gfx["default"].INDEX_FMT_UINT16,
        topology: _gfx["default"].PT_TRIANGLES
      }
    });
    exports.Primitive = Primitive;
    function MeshData() {
      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 = false;
      this.iDirty = false;
      this.enable = true;
    }
    MeshData.prototype.setVData = function(data) {
      this.vData = data;
      this.float32VData = null;
      this.uint32VData = null;
    };
    MeshData.prototype.getVData = function(format) {
      if (format === Float32Array) {
        this.float32VData || (this.float32VData = new Float32Array(this.vData.buffer, this.vData.byteOffset, this.vData.byteLength / 4));
        return this.float32VData;
      }
      if (format === Uint32Array) {
        this.uint32VData || (this.uint32VData = new Uint32Array(this.vData.buffer, this.vData.byteOffset, this.vData.byteLength / 4));
        return this.uint32VData;
      }
      return this.vData;
    };
    MeshData.prototype.getIData = function(format) {
      if (format === Uint16Array) {
        this.uint16IData || (this.uint16IData = new Uint16Array(this.iData.buffer, this.iData.byteOffset, this.iData.byteLength / 2));
        return this.uint16IData;
      }
      return this.iData;
    };
  }), {
    "../../renderer/gfx": 251
  } ],
  136: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _assembler = _interopRequireDefault(require("../renderer/assembler"));
    var _gfx = _interopRequireDefault(require("../../renderer/gfx"));
    var _vec = _interopRequireDefault(require("../value-types/vec3"));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    function _inheritsLoose(subClass, superClass) {
      subClass.prototype = Object.create(superClass.prototype);
      subClass.prototype.constructor = subClass;
      subClass.__proto__ = superClass;
    }
    var MeshRenderer = require("./CCMeshRenderer");
    var _tmp_vec3 = new _vec["default"]();
    var MeshRendererAssembler = (function(_Assembler) {
      _inheritsLoose(MeshRendererAssembler, _Assembler);
      function MeshRendererAssembler() {
        return _Assembler.apply(this, arguments) || this;
      }
      var _proto = MeshRendererAssembler.prototype;
      _proto.init = function init(renderComp) {
        _Assembler.prototype.init.call(this, renderComp);
        this._worldDatas = {};
        this._renderNode = null;
      };
      _proto.setRenderNode = function setRenderNode(node) {
        this._renderNode = node;
      };
      _proto.fillBuffers = function fillBuffers(comp, renderer) {
        if (!comp.mesh) return;
        comp.mesh._uploadData();
        var isCullingMaskSame = renderer.cullingMask === comp.node._cullingMask;
        var enableAutoBatch = comp.enableAutoBatch;
        var materials = comp._materials;
        var submeshes = comp.mesh._subMeshes;
        var subDatas = comp.mesh.subDatas;
        for (var i = 0; i < submeshes.length; i++) {
          var ia = submeshes[i];
          var meshData = subDatas[i];
          var material = materials[i] || materials[0];
          if (!enableAutoBatch || !meshData.canBatch || ia._primitiveType !== _gfx["default"].PT_TRIANGLES) {
            renderer._flush();
            renderer.material = material;
            renderer.cullingMask = comp.node._cullingMask;
            renderer.node = this._renderNode;
            renderer._flushIA(ia);
            continue;
          }
          isCullingMaskSame && material.getHash() === renderer.material.getHash() || renderer._flush();
          renderer.material = material;
          renderer.cullingMask = comp.node._cullingMask;
          renderer.node = renderer._dummyNode;
          this._fillBuffer(comp, meshData, renderer, i);
        }
        if ((true, cc.macro.SHOW_MESH_WIREFRAME || cc.macro.SHOW_MESH_NORMAL) && !(comp.node._cullingMask & 1 << cc.Node.BuiltinGroupIndex.DEBUG)) {
          renderer._flush();
          renderer.node = this._renderNode;
          comp._updateDebugDatas();
          cc.macro.SHOW_MESH_WIREFRAME && this._drawDebugDatas(comp, renderer, "wireFrame");
          cc.macro.SHOW_MESH_NORMAL && this._drawDebugDatas(comp, renderer, "normal");
        }
      };
      _proto._fillBuffer = function _fillBuffer(comp, meshData, renderer, dataIndex) {
        var vData = meshData.getVData(Float32Array);
        var vtxFormat = meshData.vfm;
        var vertexCount = vData.byteLength / vtxFormat._bytes | 0;
        var indices = meshData.getIData(Uint16Array);
        var indicesCount = indices.length;
        var buffer = renderer.getBuffer("mesh", vtxFormat);
        var offsetInfo = buffer.request(vertexCount, indicesCount);
        var indiceOffset = offsetInfo.indiceOffset, vertexOffset = offsetInfo.byteOffset >> 2, vertexId = offsetInfo.vertexOffset, vbuf = buffer._vData, ibuf = buffer._iData;
        !renderer.worldMatDirty && this._worldDatas[dataIndex] || this._updateWorldVertices(dataIndex, vertexCount, vData, vtxFormat, comp.node._worldMatrix);
        vbuf.set(this._worldDatas[dataIndex], vertexOffset);
        for (var i = 0; i < indicesCount; i++) ibuf[indiceOffset + i] = vertexId + indices[i];
      };
      _proto._updateWorldVertices = function _updateWorldVertices(dataIndex, vertexCount, local, vtxFormat, wolrdMatrix) {
        var world = this._worldDatas[dataIndex];
        if (!world) {
          world = this._worldDatas[dataIndex] = new Float32Array(local.length);
          world.set(local);
        }
        var floatCount = vtxFormat._bytes / 4;
        var elements = vtxFormat._elements;
        for (var i = 0, n = elements.length; i < n; i++) {
          var element = elements[i];
          var attrOffset = element.offset / 4;
          if (element.name === _gfx["default"].ATTR_POSITION || element.name === _gfx["default"].ATTR_NORMAL) {
            var transformMat4 = element.name === _gfx["default"].ATTR_NORMAL ? _vec["default"].transformMat4Normal : _vec["default"].transformMat4;
            for (var j = 0; j < vertexCount; j++) {
              var offset = j * floatCount + attrOffset;
              _tmp_vec3.x = local[offset];
              _tmp_vec3.y = local[offset + 1];
              _tmp_vec3.z = local[offset + 2];
              transformMat4(_tmp_vec3, _tmp_vec3, wolrdMatrix);
              world[offset] = _tmp_vec3.x;
              world[offset + 1] = _tmp_vec3.y;
              world[offset + 2] = _tmp_vec3.z;
            }
          }
        }
      };
      _proto._drawDebugDatas = function _drawDebugDatas(comp, renderer, name) {
        var debugDatas = comp._debugDatas[name];
        if (!debugDatas) return;
        for (var i = 0; i < debugDatas.length; i++) {
          var debugData = debugDatas[i];
          if (!debugData) continue;
          var material = debugData.material;
          renderer.material = material;
          renderer._flushIA(debugData.ia);
        }
      };
      return MeshRendererAssembler;
    })(_assembler["default"]);
    exports["default"] = MeshRendererAssembler;
    _assembler["default"].register(MeshRenderer, MeshRendererAssembler);
    module.exports = exports["default"];
  }), {
    "../../renderer/gfx": 251,
    "../renderer/assembler": 165,
    "../value-types/vec3": 234,
    "./CCMeshRenderer": 133
  } ],
  137: [ (function(require, module, exports) {
    "use strict";
    var CompScheduler = require("./component-scheduler");
    var Flags = require("./platform/CCObject").Flags;
    var js = require("./platform/js");
    var callerFunctor = false;
    var MAX_POOL_SIZE = 4;
    var IsPreloadStarted = Flags.IsPreloadStarted;
    var IsOnLoadStarted = Flags.IsOnLoadStarted;
    var IsOnLoadCalled = Flags.IsOnLoadCalled;
    var Deactivating = Flags.Deactivating;
    var callPreloadInTryCatch = false;
    var callOnLoadInTryCatch = false;
    var callOnDestroyInTryCatch = false;
    var callOnFocusInTryCatch = false;
    var callOnLostFocusInTryCatch = false;
    var UnsortedInvoker = cc.Class({
      extends: CompScheduler.LifeCycleInvoker,
      add: function add(comp) {
        this._zero.array.push(comp);
      },
      remove: function remove(comp) {
        this._zero.fastRemove(comp);
      },
      cancelInactive: function cancelInactive(flagToClear) {
        CompScheduler.LifeCycleInvoker.stableRemoveInactive(this._zero, flagToClear);
      },
      invoke: function invoke() {
        this._invoke(this._zero);
        this._zero.array.length = 0;
      }
    });
    var invokePreload = CompScheduler.createInvokeImpl((function(c) {
      c.__preload();
    }), false, void 0, (function(iterator) {
      var array = iterator.array;
      for (iterator.i = 0; iterator.i < array.length; ++iterator.i) array[iterator.i].__preload();
    }));
    var invokeOnLoad = CompScheduler.createInvokeImpl((function(c) {
      c.onLoad();
      c._objFlags |= IsOnLoadCalled;
    }), false, IsOnLoadCalled, (function(iterator) {
      var array = iterator.array;
      for (iterator.i = 0; iterator.i < array.length; ++iterator.i) {
        var comp = array[iterator.i];
        comp.onLoad();
        comp._objFlags |= IsOnLoadCalled;
      }
    }));
    var activateTasksPool = new js.Pool(MAX_POOL_SIZE);
    activateTasksPool.get = function getActivateTask() {
      var task = this._get() || {
        preload: new UnsortedInvoker(invokePreload),
        onLoad: new CompScheduler.OneOffInvoker(invokeOnLoad),
        onEnable: new CompScheduler.OneOffInvoker(CompScheduler.invokeOnEnable)
      };
      task.preload._zero.i = -1;
      var invoker = task.onLoad;
      invoker._zero.i = -1;
      invoker._neg.i = -1;
      invoker._pos.i = -1;
      invoker = task.onEnable;
      invoker._zero.i = -1;
      invoker._neg.i = -1;
      invoker._pos.i = -1;
      return task;
    };
    function _componentCorrupted(node, comp, index) {
      false;
      comp ? node._removeComponent(comp) : js.array.removeAt(node._components, index);
    }
    function _onLoadInEditor(comp) {
      if (comp.onLoad && !cc.engine._isPlaying) {
        var focused = Editor.Selection.curActivate("node") === comp.node.uuid;
        focused ? comp.onFocusInEditor && callOnFocusInTryCatch(comp) : comp.onLostFocusInEditor && callOnLostFocusInTryCatch(comp);
      }
      true;
      _Scene.AssetsWatcher.start(comp);
    }
    function ctor() {
      this._activatingStack = [];
    }
    var NodeActivator = cc.Class({
      ctor: ctor,
      reset: ctor,
      _activateNodeRecursively: function _activateNodeRecursively(node, preloadInvoker, onLoadInvoker, onEnableInvoker) {
        if (node._objFlags & Deactivating) {
          cc.errorID(3816, node.name);
          return;
        }
        node._activeInHierarchy = true;
        var originCount = node._components.length;
        for (var i = 0; i < originCount; ++i) {
          var component = node._components[i];
          if (component instanceof cc.Component) this.activateComp(component, preloadInvoker, onLoadInvoker, onEnableInvoker); else {
            _componentCorrupted(node, component, i);
            --i;
            --originCount;
          }
        }
        node._childArrivalOrder = node._children.length;
        for (var _i = 0, len = node._children.length; _i < len; ++_i) {
          var child = node._children[_i];
          child._localZOrder = 4294901760 & child._localZOrder | _i + 1;
          child._active && this._activateNodeRecursively(child, preloadInvoker, onLoadInvoker, onEnableInvoker);
        }
        node._onPostActivated(true);
      },
      _deactivateNodeRecursively: function _deactivateNodeRecursively(node) {
        false;
        node._objFlags |= Deactivating;
        node._activeInHierarchy = false;
        var originCount = node._components.length;
        for (var c = 0; c < originCount; ++c) {
          var component = node._components[c];
          if (component._enabled) {
            cc.director._compScheduler.disableComp(component);
            if (node._activeInHierarchy) {
              node._objFlags &= ~Deactivating;
              return;
            }
          }
        }
        for (var i = 0, len = node._children.length; i < len; ++i) {
          var child = node._children[i];
          if (child._activeInHierarchy) {
            this._deactivateNodeRecursively(child);
            if (node._activeInHierarchy) {
              node._objFlags &= ~Deactivating;
              return;
            }
          }
        }
        node._onPostActivated(false);
        node._objFlags &= ~Deactivating;
      },
      activateNode: function activateNode(node, active) {
        if (active) {
          var task = activateTasksPool.get();
          this._activatingStack.push(task);
          this._activateNodeRecursively(node, task.preload, task.onLoad, task.onEnable);
          task.preload.invoke();
          task.onLoad.invoke();
          task.onEnable.invoke();
          this._activatingStack.pop();
          activateTasksPool.put(task);
        } else {
          this._deactivateNodeRecursively(node);
          var stack = this._activatingStack;
          for (var i = 0; i < stack.length; i++) {
            var lastTask = stack[i];
            lastTask.preload.cancelInactive(IsPreloadStarted);
            lastTask.onLoad.cancelInactive(IsOnLoadStarted);
            lastTask.onEnable.cancelInactive();
          }
        }
        node.emit("active-in-hierarchy-changed", node);
      },
      activateComp: function(comp, preloadInvoker, onLoadInvoker, onEnableInvoker) {
        if (!cc.isValid(comp, true)) return;
        if (!(comp._objFlags & IsPreloadStarted)) {
          comp._objFlags |= IsPreloadStarted;
          comp.__preload && (preloadInvoker ? preloadInvoker.add(comp) : comp.__preload());
        }
        if (!(comp._objFlags & IsOnLoadStarted)) {
          comp._objFlags |= IsOnLoadStarted;
          if (comp.onLoad) if (onLoadInvoker) onLoadInvoker.add(comp); else {
            comp.onLoad();
            comp._objFlags |= IsOnLoadCalled;
          } else comp._objFlags |= IsOnLoadCalled;
        }
        if (comp._enabled) {
          var deactivatedOnLoading = !comp.node._activeInHierarchy;
          if (deactivatedOnLoading) return;
          cc.director._compScheduler.enableComp(comp, onEnableInvoker);
        }
      },
      destroyComp: function(comp) {
        cc.director._compScheduler.disableComp(comp);
        comp.onDestroy && comp._objFlags & IsOnLoadCalled && comp.onDestroy();
      },
      resetComp: false
    });
    module.exports = NodeActivator;
  }), {
    "./component-scheduler": 88,
    "./platform/CCObject": 144,
    "./platform/js": 158,
    "./utils/misc": 209
  } ],
  138: [ (function(require, module, exports) {
    "use strict";
    var js = require("./js");
    var Enum = require("./CCEnum");
    var utils = require("./utils");
    var _isPlainEmptyObj_DEV = utils.isPlainEmptyObj_DEV;
    var _cloneable_DEV = utils.cloneable_DEV;
    var Attr = require("./attribute");
    var DELIMETER = Attr.DELIMETER;
    var preprocess = require("./preprocess-class");
    require("./requiring-frame");
    var BUILTIN_ENTRIES = [ "name", "extends", "mixins", "ctor", "__ctor__", "properties", "statics", "editor", "__ES6__" ];
    var INVALID_STATICS_DEV = false;
    function pushUnique(array, item) {
      array.indexOf(item) < 0 && array.push(item);
    }
    var deferredInitializer = {
      datas: null,
      push: function push(data) {
        if (this.datas) this.datas.push(data); else {
          this.datas = [ data ];
          var self = this;
          setTimeout((function() {
            self.init();
          }), 0);
        }
      },
      init: function init() {
        var datas = this.datas;
        if (datas) {
          for (var i = 0; i < datas.length; ++i) {
            var data = datas[i];
            var cls = data.cls;
            var properties = data.props;
            "function" === typeof properties && (properties = properties());
            var name = js.getClassName(cls);
            properties ? declareProperties(cls, name, properties, cls.$super, data.mixins) : cc.errorID(3633, name);
          }
          this.datas = null;
        }
      }
    };
    function appendProp(cls, name) {
      false;
      pushUnique(cls.__props__, name);
    }
    function defineProp(cls, className, propName, val, es6) {
      var defaultValue = val["default"];
      false;
      Attr.setClassAttr(cls, propName, "default", defaultValue);
      appendProp(cls, propName);
      parseAttributes(cls, val, className, propName, false);
      var i;
      false, false;
    }
    function defineGetSet(cls, name, propName, val, es6) {
      var getter = val.get;
      var setter = val.set;
      var proto = cls.prototype;
      var d = Object.getOwnPropertyDescriptor(proto, propName);
      var setterUndefined = !d;
      if (getter) {
        false;
        parseAttributes(cls, val, name, propName, true);
        false, false;
        Attr.setClassAttr(cls, propName, "serializable", false);
        false;
        es6 || js.get(proto, propName, getter, setterUndefined, setterUndefined);
        false, false;
      }
      if (setter) {
        if (!es6) {
          false;
          js.set(proto, propName, setter, setterUndefined, setterUndefined);
        }
        false, false;
      }
    }
    function getDefault(defaultVal) {
      if ("function" === typeof defaultVal) {
        false;
        return defaultVal();
      }
      return defaultVal;
    }
    function mixinWithInherited(dest, src, filter) {
      for (var prop in src) dest.hasOwnProperty(prop) || filter && !filter(prop) || Object.defineProperty(dest, prop, js.getPropertyDescriptor(src, prop));
    }
    function doDefine(className, baseClass, mixins, options) {
      var shouldAddProtoCtor;
      var __ctor__ = options.__ctor__;
      var ctor = options.ctor;
      var __es6__ = options.__ES6__;
      var ctorToUse;
      false;
      var ctors;
      var fireClass;
      if (__es6__) {
        ctors = [ ctor ];
        fireClass = ctor;
      } else {
        ctors = __ctor__ ? [ __ctor__ ] : _getAllCtors(baseClass, mixins, options);
        fireClass = _createCtor(ctors, baseClass, className, options);
        js.value(fireClass, "extend", (function(options) {
          options["extends"] = this;
          return CCClass(options);
        }), true);
      }
      js.value(fireClass, "__ctors__", ctors.length > 0 ? ctors : null, true);
      var prototype = fireClass.prototype;
      if (baseClass) {
        if (!__es6__) {
          js.extend(fireClass, baseClass);
          prototype = fireClass.prototype;
        }
        fireClass.$super = baseClass;
        false;
      }
      if (mixins) {
        for (var m = mixins.length - 1; m >= 0; m--) {
          var mixin = mixins[m];
          mixinWithInherited(prototype, mixin.prototype);
          mixinWithInherited(fireClass, mixin, (function(prop) {
            return mixin.hasOwnProperty(prop) && true;
          }));
          CCClass._isCCClass(mixin) && mixinWithInherited(Attr.getClassAttrs(fireClass), Attr.getClassAttrs(mixin));
        }
        prototype.constructor = fireClass;
      }
      __es6__ || (prototype.__initProps__ = compileProps);
      js.setClassName(className, fireClass);
      return fireClass;
    }
    function define(className, baseClass, mixins, options) {
      var Component = cc.Component;
      var frame = cc._RF.peek();
      if (frame && js.isChildClassOf(baseClass, Component)) {
        if (js.isChildClassOf(frame.cls, Component)) {
          cc.errorID(3615);
          return null;
        }
        false;
        className = className || frame.script;
      }
      var cls = doDefine(className, baseClass, mixins, options);
      if (frame) if (js.isChildClassOf(baseClass, Component)) {
        var uuid = frame.uuid;
        if (uuid) {
          js._setClassId(uuid, cls);
          false;
        }
        frame.cls = cls;
      } else js.isChildClassOf(frame.cls, Component) || (frame.cls = cls);
      return cls;
    }
    function normalizeClassName_DEV(className) {
      var DefaultName = "CCClass";
      if (className) {
        className = className.replace(/^[^$A-Za-z_]/, "_").replace(/[^0-9A-Za-z_$]/g, "_");
        try {
          Function("function " + className + "(){}")();
          return className;
        } catch (e) {}
      }
      return DefaultName;
    }
    function getNewValueTypeCodeJit(value) {
      var clsName = js.getClassName(value);
      var type = value.constructor;
      var res = "new " + clsName + "(";
      for (var i = 0; i < type.__props__.length; i++) {
        var prop = type.__props__[i];
        var propVal = value[prop];
        false;
        res += propVal;
        i < type.__props__.length - 1 && (res += ",");
      }
      return res + ")";
    }
    function escapeForJS(s) {
      return JSON.stringify(s).replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029");
    }
    function getInitPropsJit(attrs, propList) {
      var F = [];
      var func = "";
      for (var i = 0; i < propList.length; i++) {
        var prop = propList[i];
        var attrKey = prop + DELIMETER + "default";
        if (attrKey in attrs) {
          var statement;
          statement = IDENTIFIER_RE.test(prop) ? "this." + prop + "=" : "this[" + escapeForJS(prop) + "]=";
          var expression;
          var def = attrs[attrKey];
          if ("object" === typeof def && def) expression = def instanceof cc.ValueType ? getNewValueTypeCodeJit(def) : Array.isArray(def) ? "[]" : "{}"; else if ("function" === typeof def) {
            var index = F.length;
            F.push(def);
            expression = "F[" + index + "]()";
            false;
          } else expression = "string" === typeof def ? escapeForJS(def) : def;
          statement = statement + expression + ";\n";
          func += statement;
        }
      }
      var initProps;
      initProps = 0 === F.length ? Function(func) : Function("F", "return (function(){\n" + func + "})")(F);
      return initProps;
    }
    function getInitProps(attrs, propList) {
      var props = null;
      var simpleEnd = 0;
      var valueTypeEnd = 0;
      (function() {
        var simples = null;
        var valueTypes = null;
        var advanceds = null;
        for (var i = 0; i < propList.length; ++i) {
          var prop = propList[i];
          var attrKey = prop + DELIMETER + "default";
          if (attrKey in attrs) {
            var def = attrs[attrKey];
            if ("object" === typeof def && def || "function" === typeof def) if (def instanceof cc.ValueType) {
              valueTypes || (valueTypes = []);
              valueTypes.push(prop, def);
            } else {
              advanceds || (advanceds = []);
              advanceds.push(prop, def);
            } else {
              simples || (simples = []);
              simples.push(prop, def);
            }
          }
        }
        simpleEnd = simples ? simples.length : 0;
        valueTypeEnd = simpleEnd + (valueTypes ? valueTypes.length : 0);
        var totalLength = valueTypeEnd + (advanceds ? advanceds.length : 0);
        props = new Array(totalLength);
        for (var _i = 0; _i < simpleEnd; ++_i) props[_i] = simples[_i];
        for (var _i2 = simpleEnd; _i2 < valueTypeEnd; ++_i2) props[_i2] = valueTypes[_i2 - simpleEnd];
        for (var _i3 = valueTypeEnd; _i3 < totalLength; ++_i3) props[_i3] = advanceds[_i3 - valueTypeEnd];
      })();
      return function() {
        var i = 0;
        for (;i < simpleEnd; i += 2) this[props[i]] = props[i + 1];
        for (;i < valueTypeEnd; i += 2) this[props[i]] = props[i + 1].clone();
        for (;i < props.length; i += 2) {
          var def = props[i + 1];
          if (Array.isArray(def)) this[props[i]] = []; else {
            var value;
            if ("object" === typeof def) value = {}; else {
              false;
              value = def();
            }
            this[props[i]] = value;
          }
        }
      };
    }
    var IDENTIFIER_RE = /^[A-Za-z_$][0-9A-Za-z_$]*$/;
    function compileProps(actualClass) {
      var attrs = Attr.getClassAttrs(actualClass);
      var propList = actualClass.__props__;
      if (null === propList) {
        deferredInitializer.init();
        propList = actualClass.__props__;
      }
      var initProps = getInitProps(attrs, propList);
      actualClass.prototype.__initProps__ = initProps;
      initProps.call(this);
    }
    var _createCtor = function(ctors, baseClass, className, options) {
      var superCallBounded = baseClass && boundSuperCalls(baseClass, options, className);
      var ctorLen = ctors.length;
      var _Class5;
      _Class5 = ctorLen > 0 ? superCallBounded ? 2 === ctorLen ? function Class() {
        this._super = null;
        this.__initProps__(_Class5);
        ctors[0].apply(this, arguments);
        ctors[1].apply(this, arguments);
      } : function _Class() {
        this._super = null;
        this.__initProps__(_Class5);
        for (var i = 0; i < ctors.length; ++i) ctors[i].apply(this, arguments);
      } : 3 === ctorLen ? function _Class2() {
        this.__initProps__(_Class5);
        ctors[0].apply(this, arguments);
        ctors[1].apply(this, arguments);
        ctors[2].apply(this, arguments);
      } : function _Class3() {
        this.__initProps__(_Class5);
        var ctors = _Class5.__ctors__;
        for (var i = 0; i < ctors.length; ++i) ctors[i].apply(this, arguments);
      } : function _Class4() {
        superCallBounded && (this._super = null);
        this.__initProps__(_Class5);
      };
      return _Class5;
    };
    function _validateCtor_DEV(ctor, baseClass, className, options) {
      var originCtor;
      false;
      !(ctor.length > 0) || className && className.startsWith("cc.") || cc.warnID(3617, className);
      return ctor;
    }
    function _getAllCtors(baseClass, mixins, options) {
      function getCtors(cls) {
        return CCClass._isCCClass(cls) ? cls.__ctors__ || [] : [ cls ];
      }
      var ctors = [];
      var baseOrMixins = [ baseClass ].concat(mixins);
      for (var b = 0; b < baseOrMixins.length; b++) {
        var baseOrMixin = baseOrMixins[b];
        if (baseOrMixin) {
          var baseCtors = getCtors(baseOrMixin);
          for (var c = 0; c < baseCtors.length; c++) pushUnique(ctors, baseCtors[c]);
        }
      }
      var ctor = options.ctor;
      ctor && ctors.push(ctor);
      return ctors;
    }
    var SuperCallReg = /xyz/.test((function() {
      xyz;
    })) ? /\b\._super\b/ : /.*/;
    var SuperCallRegStrict = /xyz/.test((function() {
      xyz;
    })) ? /this\._super\s*\(/ : /(NONE){99}/;
    function boundSuperCalls(baseClass, options, className) {
      var hasSuperCall = false;
      for (var funcName in options) {
        if (BUILTIN_ENTRIES.indexOf(funcName) >= 0) continue;
        var func = options[funcName];
        if ("function" !== typeof func) continue;
        var pd = js.getPropertyDescriptor(baseClass.prototype, funcName);
        if (pd) {
          var superFunc = pd.value;
          if ("function" === typeof superFunc) {
            if (SuperCallReg.test(func)) {
              hasSuperCall = true;
              options[funcName] = (function(superFunc, func) {
                return function() {
                  var tmp = this._super;
                  this._super = superFunc;
                  var ret = func.apply(this, arguments);
                  this._super = tmp;
                  return ret;
                };
              })(superFunc, func);
            }
            continue;
          }
        }
        false;
      }
      return hasSuperCall;
    }
    function declareProperties(cls, className, properties, baseClass, mixins, es6) {
      cls.__props__ = [];
      baseClass && baseClass.__props__ && (cls.__props__ = baseClass.__props__.slice());
      if (mixins) for (var m = 0; m < mixins.length; ++m) {
        var mixin = mixins[m];
        mixin.__props__ && (cls.__props__ = cls.__props__.concat(mixin.__props__.filter((function(x) {
          return cls.__props__.indexOf(x) < 0;
        }))));
      }
      if (properties) {
        preprocess.preprocessAttrs(properties, className, cls, es6);
        for (var propName in properties) {
          var val = properties[propName];
          "default" in val ? defineProp(cls, className, propName, val, es6) : defineGetSet(cls, className, propName, val, es6);
        }
      }
      var attrs = Attr.getClassAttrs(cls);
      cls.__values__ = cls.__props__.filter((function(prop) {
        return false !== attrs[prop + DELIMETER + "serializable"];
      }));
    }
    function CCClass(options) {
      options = options || {};
      var name = options.name;
      var base = options["extends"];
      var mixins = options.mixins;
      var cls = define(name, base, mixins, options);
      name || (name = cc.js.getClassName(cls));
      cls._sealed = true;
      base && (base._sealed = false);
      var properties = options.properties;
      if ("function" === typeof properties || base && null === base.__props__ || mixins && mixins.some((function(x) {
        return null === x.__props__;
      }))) {
        false;
        deferredInitializer.push({
          cls: cls,
          props: properties,
          mixins: mixins
        });
        cls.__props__ = cls.__values__ = null;
      } else declareProperties(cls, name, properties, base, options.mixins, options.__ES6__);
      var statics = options.statics;
      if (statics) {
        var staticPropName;
        false;
        for (staticPropName in statics) cls[staticPropName] = statics[staticPropName];
      }
      for (var funcName in options) {
        if (BUILTIN_ENTRIES.indexOf(funcName) >= 0) continue;
        var func = options[funcName];
        if (!preprocess.validateMethodWithProps(func, funcName, name, cls, base)) continue;
        js.value(cls.prototype, funcName, func, true, true);
      }
      var editor = options.editor;
      editor && !!js.isChildClassOf(base, cc.Component) && cc.Component._registerEditorProps(cls, editor);
      return cls;
    }
    CCClass._isCCClass = function(constructor) {
      return constructor && constructor.hasOwnProperty("__ctors__");
    };
    CCClass._fastDefine = function(className, constructor, serializableFields) {
      js.setClassName(className, constructor);
      var props = constructor.__props__ = constructor.__values__ = Object.keys(serializableFields);
      var attrs = Attr.getClassAttrs(constructor);
      for (var i = 0; i < props.length; i++) {
        var key = props[i];
        attrs[key + DELIMETER + "visible"] = false;
        attrs[key + DELIMETER + "default"] = serializableFields[key];
      }
    };
    CCClass.Attr = Attr;
    CCClass.attr = Attr.attr;
    CCClass.getInheritanceChain = function(klass) {
      var chain = [];
      for (;;) {
        klass = js.getSuper(klass);
        if (!klass) break;
        klass !== Object && chain.push(klass);
      }
      return chain;
    };
    var PrimitiveTypes = {
      Integer: "Number",
      Float: "Number",
      Boolean: "Boolean",
      String: "String"
    };
    var onAfterProps_ET = [];
    function parseAttributes(cls, attributes, className, propName, usedInGetter) {
      var ERR_Type = "";
      var attrs = null;
      var propNamePrefix = "";
      function initAttrs() {
        propNamePrefix = propName + DELIMETER;
        return attrs = Attr.getClassAttrs(cls);
      }
      false, false;
      var type = attributes.type;
      if (type) {
        var primitiveType = PrimitiveTypes[type];
        if (primitiveType) {
          (attrs || initAttrs())[propNamePrefix + "type"] = type;
          (false, false) && !attributes._short && onAfterProps_ET.push(Attr.getTypeChecker_ET(primitiveType, "cc." + type));
        } else if ("Object" === type) false; else if (type === Attr.ScriptUuid) {
          (attrs || initAttrs())[propNamePrefix + "type"] = "Script";
          attrs[propNamePrefix + "ctor"] = cc.ScriptAsset;
        } else if ("object" === typeof type) if (Enum.isEnum(type)) {
          (attrs || initAttrs())[propNamePrefix + "type"] = "Enum";
          attrs[propNamePrefix + "enumList"] = Enum.getList(type);
        } else false; else if ("function" === typeof type) {
          (attrs || initAttrs())[propNamePrefix + "type"] = "Object";
          attrs[propNamePrefix + "ctor"] = type;
          (false, false) && !attributes._short && onAfterProps_ET.push(Attr.getObjTypeChecker_ET(type));
        } else false;
      }
      function parseSimpleAttr(attrName, expectType) {
        if (attrName in attributes) {
          var val = attributes[attrName];
          typeof val === expectType && ((attrs || initAttrs())[propNamePrefix + attrName] = val);
        }
      }
      if (attributes.editorOnly) {
        false;
        (attrs || initAttrs())[propNamePrefix + "editorOnly"] = true;
      }
      false;
      if (false === attributes.serializable) {
        false;
        (attrs || initAttrs())[propNamePrefix + "serializable"] = false;
      }
      parseSimpleAttr("formerlySerializedAs", "string");
      false;
      var visible;
      var startsWithUS;
      false;
      var range = attributes.range;
      if (range) if (Array.isArray(range)) if (range.length >= 2) {
        (attrs || initAttrs())[propNamePrefix + "min"] = range[0];
        attrs[propNamePrefix + "max"] = range[1];
        range.length > 2 && (attrs[propNamePrefix + "step"] = range[2]);
      } else false; else false;
      parseSimpleAttr("min", "number");
      parseSimpleAttr("max", "number");
      parseSimpleAttr("step", "number");
    }
    cc.Class = CCClass;
    module.exports = {
      isArray: function isArray(defaultVal) {
        defaultVal = getDefault(defaultVal);
        return Array.isArray(defaultVal);
      },
      fastDefine: CCClass._fastDefine,
      getNewValueTypeCode: false,
      IDENTIFIER_RE: IDENTIFIER_RE,
      escapeForJS: escapeForJS,
      getDefault: getDefault
    };
    false;
  }), {
    "./CCEnum": 140,
    "./attribute": 150,
    "./js": 158,
    "./preprocess-class": 159,
    "./requiring-frame": 160,
    "./utils": 161
  } ],
  139: [ (function(require, module, exports) {
    "use strict";
    require("./CCClass");
    var Preprocess = require("./preprocess-class");
    var js = require("./js");
    var isPlainEmptyObj_DEV = false;
    var CACHE_KEY = "__ccclassCache__";
    function fNOP(ctor) {
      return ctor;
    }
    function getSubDict(obj, key) {
      return obj[key] || (obj[key] = {});
    }
    function checkCtorArgument(decorate) {
      return function(target) {
        if ("function" === typeof target) return decorate(target);
        return function(ctor) {
          return decorate(ctor, target);
        };
      };
    }
    function _checkNormalArgument(validator_DEV, decorate, decoratorName) {
      return function(target) {
        false;
        return function(ctor) {
          return decorate(ctor, target);
        };
      };
    }
    var checkCompArgument = _checkNormalArgument.bind(null, false);
    function _argumentChecker(type) {
      return _checkNormalArgument.bind(null, false);
    }
    var checkStringArgument = _argumentChecker("string");
    var checkNumberArgument = _argumentChecker("number");
    function getClassCache(ctor, decoratorName) {
      false;
      return getSubDict(ctor, CACHE_KEY);
    }
    function getDefaultFromInitializer(initializer) {
      var value;
      try {
        value = initializer();
      } catch (e) {
        return initializer;
      }
      return "object" !== typeof value || null === value ? value : initializer;
    }
    function extractActualDefaultValues(ctor) {
      var dummyObj;
      try {
        dummyObj = new ctor();
      } catch (e) {
        false;
        return {};
      }
      return dummyObj;
    }
    function genProperty(ctor, properties, propName, options, desc, cache) {
      var fullOptions;
      var isGetset = desc && (desc.get || desc.set);
      options && (fullOptions = Preprocess.getFullFormOfProperty(options, isGetset));
      var existsProperty = properties[propName];
      var prop = js.mixin(existsProperty || {}, fullOptions || options || {});
      if (isGetset) {
        var errorProps;
        false;
        desc.get && (prop.get = desc.get);
        desc.set && (prop.set = desc.set);
      } else {
        false;
        var defaultValue = void 0;
        var isDefaultValueSpecified = false;
        if (desc) {
          if (desc.initializer) {
            defaultValue = getDefaultFromInitializer(desc.initializer);
            isDefaultValueSpecified = true;
          }
        } else {
          var actualDefaultValues = cache["default"] || (cache["default"] = extractActualDefaultValues(ctor));
          if (actualDefaultValues.hasOwnProperty(propName)) {
            defaultValue = actualDefaultValues[propName];
            isDefaultValueSpecified = true;
          }
        }
        false, false;
        prop["default"] = defaultValue;
      }
      properties[propName] = prop;
    }
    var ccclass = checkCtorArgument((function(ctor, name) {
      var base = js.getSuper(ctor);
      base === Object && (base = null);
      var proto = {
        name: name,
        extends: base,
        ctor: ctor,
        __ES6__: true
      };
      var cache = ctor[CACHE_KEY];
      if (cache) {
        var decoratedProto = cache.proto;
        decoratedProto && js.mixin(proto, decoratedProto);
        ctor[CACHE_KEY] = void 0;
      }
      var res = cc.Class(proto);
      var propNames;
      var i;
      var prop;
      var desc;
      var func;
      false;
      return res;
    }));
    function property(ctorProtoOrOptions, propName, desc) {
      var options = null;
      function normalized(ctorProto, propName, desc) {
        var cache = getClassCache(ctorProto.constructor);
        if (cache) {
          var ccclassProto = getSubDict(cache, "proto");
          var properties = getSubDict(ccclassProto, "properties");
          genProperty(ctorProto.constructor, properties, propName, options, desc, cache);
        }
      }
      if ("undefined" === typeof propName) {
        options = ctorProtoOrOptions;
        return normalized;
      }
      normalized(ctorProtoOrOptions, propName, desc);
    }
    function createEditorDecorator(argCheckFunc, editorPropName, staticValue) {
      return argCheckFunc((function(ctor, decoratedValue) {
        var cache = getClassCache(ctor, editorPropName);
        if (cache) {
          var value = void 0 !== staticValue ? staticValue : decoratedValue;
          var proto = getSubDict(cache, "proto");
          getSubDict(proto, "editor")[editorPropName] = value;
        }
      }), editorPropName);
    }
    function createDummyDecorator(argCheckFunc) {
      return argCheckFunc(fNOP);
    }
    var executeInEditMode = createDummyDecorator(checkCtorArgument, "executeInEditMode", true);
    var requireComponent = createEditorDecorator(checkCompArgument, "requireComponent");
    var menu = createDummyDecorator(checkStringArgument, "menu");
    var executionOrder = createEditorDecorator(checkNumberArgument, "executionOrder");
    var disallowMultiple = createDummyDecorator(checkCtorArgument, "disallowMultiple");
    var playOnFocus = createDummyDecorator(checkCtorArgument, "playOnFocus", true);
    var inspector = createDummyDecorator(checkStringArgument, "inspector");
    var icon = createDummyDecorator(checkStringArgument, "icon");
    var help = createDummyDecorator(checkStringArgument, "help");
    function mixins() {
      var mixins = [];
      for (var i = 0; i < arguments.length; i++) mixins[i] = arguments[i];
      return function(ctor) {
        var cache = getClassCache(ctor, "mixins");
        cache && (getSubDict(cache, "proto").mixins = mixins);
      };
    }
    cc._decorator = module.exports = {
      ccclass: ccclass,
      property: property,
      executeInEditMode: executeInEditMode,
      requireComponent: requireComponent,
      menu: menu,
      executionOrder: executionOrder,
      disallowMultiple: disallowMultiple,
      playOnFocus: playOnFocus,
      inspector: inspector,
      icon: icon,
      help: help,
      mixins: mixins
    };
  }), {
    "./CCClass": 138,
    "./js": 158,
    "./preprocess-class": 159,
    "./utils": 161
  } ],
  140: [ (function(require, module, exports) {
    "use strict";
    var js = require("./js");
    function Enum(obj) {
      if ("__enums__" in obj) return obj;
      js.value(obj, "__enums__", null, true);
      var lastIndex = -1;
      var keys = Object.keys(obj);
      for (var i = 0; i < keys.length; i++) {
        var key = keys[i];
        var val = obj[key];
        if (-1 === val) {
          val = ++lastIndex;
          obj[key] = val;
        } else if ("number" === typeof val) lastIndex = val; else if ("string" === typeof val && Number.isInteger(parseFloat(key))) continue;
        var reverseKey = "" + val;
        if (key !== reverseKey) {
          if ((false, false) && reverseKey in obj && obj[reverseKey] !== key) {
            cc.errorID(7100, reverseKey);
            continue;
          }
          js.value(obj, reverseKey, key);
        }
      }
      return obj;
    }
    Enum.isEnum = function(enumType) {
      return enumType && enumType.hasOwnProperty("__enums__");
    };
    Enum.getList = function(enumDef) {
      if (enumDef.__enums__) return enumDef.__enums__;
      var enums = enumDef.__enums__ = [];
      for (var name in enumDef) {
        var value = enumDef[name];
        Number.isInteger(value) && enums.push({
          name: name,
          value: value
        });
      }
      enums.sort((function(a, b) {
        return a.value - b.value;
      }));
      return enums;
    };
    var _TestEnum;
    false;
    module.exports = cc.Enum = Enum;
  }), {
    "./js": 158
  } ],
  141: [ (function(require, module, exports) {
    "use strict";
    var eventManager = require("../event-manager");
    var inputManager = require("./CCInputManager");
    var PORTRAIT = 0;
    var LANDSCAPE_LEFT = -90;
    var PORTRAIT_UPSIDE_DOWN = 180;
    var LANDSCAPE_RIGHT = 90;
    var _didAccelerateFun;
    cc.Acceleration = function(x, y, z, timestamp) {
      this.x = x || 0;
      this.y = y || 0;
      this.z = z || 0;
      this.timestamp = timestamp || 0;
    };
    inputManager.setAccelerometerEnabled = function(isEnable) {
      var _t = this;
      if (_t._accelEnabled === isEnable) return;
      _t._accelEnabled = isEnable;
      var scheduler = cc.director.getScheduler();
      scheduler.enableForTarget(_t);
      if (_t._accelEnabled) {
        _t._registerAccelerometerEvent();
        _t._accelCurTime = 0;
        scheduler.scheduleUpdate(_t);
      } else {
        _t._unregisterAccelerometerEvent();
        _t._accelCurTime = 0;
        scheduler.unscheduleUpdate(_t);
      }
      false, false;
    };
    inputManager.setAccelerometerInterval = function(interval) {
      if (this._accelInterval !== interval) {
        this._accelInterval = interval;
        false, false;
      }
    };
    inputManager._registerKeyboardEvent = function() {
      cc.game.canvas.addEventListener("keydown", (function(e) {
        eventManager.dispatchEvent(new cc.Event.EventKeyboard(e.keyCode, true));
        e.stopPropagation();
        e.preventDefault();
      }), false);
      cc.game.canvas.addEventListener("keyup", (function(e) {
        eventManager.dispatchEvent(new cc.Event.EventKeyboard(e.keyCode, false));
        e.stopPropagation();
        e.preventDefault();
      }), false);
    };
    inputManager._registerAccelerometerEvent = function() {
      var w = window, _t = this;
      _t._acceleration = new cc.Acceleration();
      _t._accelDeviceEvent = w.DeviceMotionEvent || w.DeviceOrientationEvent;
      cc.sys.browserType === cc.sys.BROWSER_TYPE_MOBILE_QQ && (_t._accelDeviceEvent = window.DeviceOrientationEvent);
      var _deviceEventType = _t._accelDeviceEvent === w.DeviceMotionEvent ? "devicemotion" : "deviceorientation";
      var ua = navigator.userAgent;
      (/Android/.test(ua) || /Adr/.test(ua) && cc.sys.browserType === cc.BROWSER_TYPE_UC) && (_t._minus = -1);
      _didAccelerateFun = _t.didAccelerate.bind(_t);
      w.addEventListener(_deviceEventType, _didAccelerateFun, false);
    };
    inputManager._unregisterAccelerometerEvent = function() {
      var w = window, _t = this;
      var _deviceEventType = _t._accelDeviceEvent === w.DeviceMotionEvent ? "devicemotion" : "deviceorientation";
      _didAccelerateFun && w.removeEventListener(_deviceEventType, _didAccelerateFun, false);
    };
    inputManager.didAccelerate = function(eventData) {
      var _t = this, w = window;
      if (!_t._accelEnabled) return;
      var mAcceleration = _t._acceleration;
      var x, y, z;
      if (_t._accelDeviceEvent === window.DeviceMotionEvent) {
        var eventAcceleration = eventData["accelerationIncludingGravity"];
        x = _t._accelMinus * eventAcceleration.x * .1;
        y = _t._accelMinus * eventAcceleration.y * .1;
        z = .1 * eventAcceleration.z;
      } else {
        x = eventData["gamma"] / 90 * .981;
        y = -eventData["beta"] / 90 * .981;
        z = eventData["alpha"] / 90 * .981;
      }
      if (cc.view._isRotated) {
        var tmp = x;
        x = -y;
        y = tmp;
      }
      mAcceleration.x = x;
      mAcceleration.y = y;
      mAcceleration.z = z;
      mAcceleration.timestamp = eventData.timeStamp || Date.now();
      var tmpX = mAcceleration.x;
      if (w.orientation === LANDSCAPE_RIGHT) {
        mAcceleration.x = -mAcceleration.y;
        mAcceleration.y = tmpX;
      } else if (w.orientation === LANDSCAPE_LEFT) {
        mAcceleration.x = mAcceleration.y;
        mAcceleration.y = -tmpX;
      } else if (w.orientation === PORTRAIT_UPSIDE_DOWN) {
        mAcceleration.x = -mAcceleration.x;
        mAcceleration.y = -mAcceleration.y;
      }
      if (cc.sys.os === cc.sys.OS_ANDROID && cc.sys.browserType !== cc.sys.BROWSER_TYPE_MOBILE_QQ) {
        mAcceleration.x = -mAcceleration.x;
        mAcceleration.y = -mAcceleration.y;
      }
    };
  }), {
    "../event-manager": 119,
    "./CCInputManager": 142
  } ],
  142: [ (function(require, module, exports) {
    "use strict";
    var macro = require("./CCMacro");
    var sys = require("./CCSys");
    var eventManager = require("../event-manager");
    var TOUCH_TIMEOUT = macro.TOUCH_TIMEOUT;
    var _vec2 = cc.v2();
    var inputManager = {
      _mousePressed: false,
      _isRegisterEvent: false,
      _preTouchPoint: cc.v2(0, 0),
      _prevMousePoint: cc.v2(0, 0),
      _preTouchPool: [],
      _preTouchPoolPointer: 0,
      _touches: [],
      _touchesIntegerDict: {},
      _indexBitsUsed: 0,
      _maxTouches: 8,
      _accelEnabled: false,
      _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 _getUnUsedIndex() {
        var temp = this._indexBitsUsed;
        var now = cc.sys.now();
        for (var i = 0; i < this._maxTouches; i++) {
          if (!(1 & temp)) {
            this._indexBitsUsed |= 1 << i;
            return i;
          }
          var touch = this._touches[i];
          if (now - touch._lastModified > TOUCH_TIMEOUT) {
            this._removeUsedIndexBit(i);
            delete this._touchesIntegerDict[touch.getID()];
            return i;
          }
          temp >>= 1;
        }
        return -1;
      },
      _removeUsedIndexBit: function _removeUsedIndexBit(index) {
        if (index < 0 || index >= this._maxTouches) return;
        var temp = 1 << index;
        temp = ~temp;
        this._indexBitsUsed &= temp;
      },
      _glView: null,
      _updateCanvasBoundingRect: function _updateCanvasBoundingRect() {
        var element = cc.game.canvas;
        var canvasBoundingRect = this._canvasBoundingRect;
        var docElem = document.documentElement;
        var leftOffset = window.pageXOffset - docElem.clientLeft;
        var topOffset = window.pageYOffset - docElem.clientTop;
        if (element.getBoundingClientRect) {
          var box = element.getBoundingClientRect();
          canvasBoundingRect.left = box.left + leftOffset;
          canvasBoundingRect.top = box.top + topOffset;
          canvasBoundingRect.width = box.width;
          canvasBoundingRect.height = box.height;
        } else if (element instanceof HTMLCanvasElement) {
          canvasBoundingRect.left = leftOffset;
          canvasBoundingRect.top = topOffset;
          canvasBoundingRect.width = element.width;
          canvasBoundingRect.height = element.height;
        } else {
          canvasBoundingRect.left = leftOffset;
          canvasBoundingRect.top = topOffset;
          canvasBoundingRect.width = parseInt(element.style.width);
          canvasBoundingRect.height = parseInt(element.style.height);
        }
      },
      handleTouchesBegin: function handleTouchesBegin(touches) {
        var selTouch, index, curTouch, touchID, handleTouches = [], locTouchIntDict = this._touchesIntegerDict, now = sys.now();
        for (var i = 0, len = touches.length; i < len; i++) {
          selTouch = touches[i];
          touchID = selTouch.getID();
          index = locTouchIntDict[touchID];
          if (null == index) {
            var unusedIndex = this._getUnUsedIndex();
            if (-1 === unusedIndex) {
              cc.logID(2300, unusedIndex);
              continue;
            }
            curTouch = this._touches[unusedIndex] = new cc.Touch(selTouch._point.x, selTouch._point.y, selTouch.getID());
            curTouch._lastModified = now;
            curTouch._setPrevPoint(selTouch._prevPoint);
            locTouchIntDict[touchID] = unusedIndex;
            handleTouches.push(curTouch);
          }
        }
        if (handleTouches.length > 0) {
          this._glView._convertTouchesWithScale(handleTouches);
          var touchEvent = new cc.Event.EventTouch(handleTouches);
          touchEvent._eventCode = cc.Event.EventTouch.BEGAN;
          eventManager.dispatchEvent(touchEvent);
        }
      },
      handleTouchesMove: function handleTouchesMove(touches) {
        var selTouch, index, touchID, handleTouches = [], locTouches = this._touches, now = sys.now();
        for (var i = 0, len = touches.length; i < len; i++) {
          selTouch = touches[i];
          touchID = selTouch.getID();
          index = this._touchesIntegerDict[touchID];
          if (null == index) continue;
          if (locTouches[index]) {
            locTouches[index]._setPoint(selTouch._point);
            locTouches[index]._setPrevPoint(selTouch._prevPoint);
            locTouches[index]._lastModified = now;
            handleTouches.push(locTouches[index]);
          }
        }
        if (handleTouches.length > 0) {
          this._glView._convertTouchesWithScale(handleTouches);
          var touchEvent = new cc.Event.EventTouch(handleTouches);
          touchEvent._eventCode = cc.Event.EventTouch.MOVED;
          eventManager.dispatchEvent(touchEvent);
        }
      },
      handleTouchesEnd: function handleTouchesEnd(touches) {
        var handleTouches = this.getSetOfTouchesEndOrCancel(touches);
        if (handleTouches.length > 0) {
          this._glView._convertTouchesWithScale(handleTouches);
          var touchEvent = new cc.Event.EventTouch(handleTouches);
          touchEvent._eventCode = cc.Event.EventTouch.ENDED;
          eventManager.dispatchEvent(touchEvent);
        }
        this._preTouchPool.length = 0;
      },
      handleTouchesCancel: function handleTouchesCancel(touches) {
        var handleTouches = this.getSetOfTouchesEndOrCancel(touches);
        if (handleTouches.length > 0) {
          this._glView._convertTouchesWithScale(handleTouches);
          var touchEvent = new cc.Event.EventTouch(handleTouches);
          touchEvent._eventCode = cc.Event.EventTouch.CANCELED;
          eventManager.dispatchEvent(touchEvent);
        }
        this._preTouchPool.length = 0;
      },
      getSetOfTouchesEndOrCancel: function getSetOfTouchesEndOrCancel(touches) {
        var selTouch, index, touchID, handleTouches = [], locTouches = this._touches, locTouchesIntDict = this._touchesIntegerDict;
        for (var i = 0, len = touches.length; i < len; i++) {
          selTouch = touches[i];
          touchID = selTouch.getID();
          index = locTouchesIntDict[touchID];
          if (null == index) continue;
          if (locTouches[index]) {
            locTouches[index]._setPoint(selTouch._point);
            locTouches[index]._setPrevPoint(selTouch._prevPoint);
            handleTouches.push(locTouches[index]);
            this._removeUsedIndexBit(index);
            delete locTouchesIntDict[touchID];
          }
        }
        return handleTouches;
      },
      getPreTouch: function getPreTouch(touch) {
        var preTouch = null;
        var locPreTouchPool = this._preTouchPool;
        var id = touch.getID();
        for (var i = locPreTouchPool.length - 1; i >= 0; i--) if (locPreTouchPool[i].getID() === id) {
          preTouch = locPreTouchPool[i];
          break;
        }
        preTouch || (preTouch = touch);
        return preTouch;
      },
      setPreTouch: function setPreTouch(touch) {
        var find = false;
        var locPreTouchPool = this._preTouchPool;
        var id = touch.getID();
        for (var i = locPreTouchPool.length - 1; i >= 0; i--) if (locPreTouchPool[i].getID() === id) {
          locPreTouchPool[i] = touch;
          find = true;
          break;
        }
        if (!find) if (locPreTouchPool.length <= 50) locPreTouchPool.push(touch); else {
          locPreTouchPool[this._preTouchPoolPointer] = touch;
          this._preTouchPoolPointer = (this._preTouchPoolPointer + 1) % 50;
        }
      },
      getTouchByXY: function getTouchByXY(tx, ty, pos) {
        var locPreTouch = this._preTouchPoint;
        var location = this._glView.convertToLocationInView(tx, ty, pos);
        var touch = new cc.Touch(location.x, location.y, 0);
        touch._setPrevPoint(locPreTouch.x, locPreTouch.y);
        locPreTouch.x = location.x;
        locPreTouch.y = location.y;
        return touch;
      },
      getMouseEvent: function getMouseEvent(location, pos, eventType) {
        var locPreMouse = this._prevMousePoint;
        var mouseEvent = new cc.Event.EventMouse(eventType);
        mouseEvent._setPrevCursor(locPreMouse.x, locPreMouse.y);
        locPreMouse.x = location.x;
        locPreMouse.y = location.y;
        this._glView._convertMouseToLocationInView(locPreMouse, pos);
        mouseEvent.setLocation(locPreMouse.x, locPreMouse.y);
        return mouseEvent;
      },
      getPointByEvent: function getPointByEvent(event, pos) {
        cc.sys.browserType !== cc.sys.BROWSER_TYPE_QQ && cc.sys.browserType !== cc.sys.BROWSER_TYPE_UC && cc.sys.browserType !== cc.sys.BROWSER_TYPE_SAFARI || this._updateCanvasBoundingRect();
        if (null != event.pageX) return {
          x: event.pageX,
          y: event.pageY
        };
        pos.left -= document.body.scrollLeft;
        pos.top -= document.body.scrollTop;
        return {
          x: event.clientX,
          y: event.clientY
        };
      },
      getTouchesByEvent: function getTouchesByEvent(event, pos) {
        var touchArr = [], locView = this._glView;
        var touch_event, touch, preLocation;
        var locPreTouch = this._preTouchPoint;
        var length = event.changedTouches.length;
        for (var i = 0; i < length; i++) {
          touch_event = event.changedTouches[i];
          if (touch_event) {
            var location = void 0;
            location = sys.BROWSER_TYPE_FIREFOX === sys.browserType ? locView.convertToLocationInView(touch_event.pageX, touch_event.pageY, pos, _vec2) : locView.convertToLocationInView(touch_event.clientX, touch_event.clientY, pos, _vec2);
            if (null != touch_event.identifier) {
              touch = new cc.Touch(location.x, location.y, touch_event.identifier);
              preLocation = this.getPreTouch(touch).getLocation();
              touch._setPrevPoint(preLocation.x, preLocation.y);
              this.setPreTouch(touch);
            } else {
              touch = new cc.Touch(location.x, location.y);
              touch._setPrevPoint(locPreTouch.x, locPreTouch.y);
            }
            locPreTouch.x = location.x;
            locPreTouch.y = location.y;
            touchArr.push(touch);
          }
        }
        return touchArr;
      },
      registerSystemEvent: function registerSystemEvent(element) {
        if (this._isRegisterEvent) return;
        this._glView = cc.view;
        var selfPointer = this;
        var canvasBoundingRect = this._canvasBoundingRect;
        window.addEventListener("resize", this._updateCanvasBoundingRect.bind(this));
        var prohibition = sys.isMobile;
        var supportMouse = "mouse" in sys.capabilities;
        var supportTouches = "touches" in sys.capabilities;
        if (supportMouse) {
          if (!prohibition) {
            window.addEventListener("mousedown", (function() {
              selfPointer._mousePressed = true;
            }), false);
            window.addEventListener("mouseup", (function(event) {
              if (!selfPointer._mousePressed) return;
              selfPointer._mousePressed = false;
              var location = selfPointer.getPointByEvent(event, canvasBoundingRect);
              if (!cc.rect(canvasBoundingRect.left, canvasBoundingRect.top, canvasBoundingRect.width, canvasBoundingRect.height).contains(location)) {
                selfPointer.handleTouchesEnd([ selfPointer.getTouchByXY(location.x, location.y, canvasBoundingRect) ]);
                var mouseEvent = selfPointer.getMouseEvent(location, canvasBoundingRect, cc.Event.EventMouse.UP);
                mouseEvent.setButton(event.button);
                eventManager.dispatchEvent(mouseEvent);
              }
            }), false);
          }
          var EventMouse = cc.Event.EventMouse;
          var _mouseEventsOnElement = [ !prohibition && [ "mousedown", EventMouse.DOWN, function(event, mouseEvent, location, canvasBoundingRect) {
            selfPointer._mousePressed = true;
            selfPointer.handleTouchesBegin([ selfPointer.getTouchByXY(location.x, location.y, canvasBoundingRect) ]);
            element.focus();
          } ], !prohibition && [ "mouseup", EventMouse.UP, function(event, mouseEvent, location, canvasBoundingRect) {
            selfPointer._mousePressed = false;
            selfPointer.handleTouchesEnd([ selfPointer.getTouchByXY(location.x, location.y, canvasBoundingRect) ]);
          } ], !prohibition && [ "mousemove", EventMouse.MOVE, function(event, mouseEvent, location, canvasBoundingRect) {
            selfPointer.handleTouchesMove([ selfPointer.getTouchByXY(location.x, location.y, canvasBoundingRect) ]);
            selfPointer._mousePressed || mouseEvent.setButton(null);
          } ], [ "mousewheel", EventMouse.SCROLL, function(event, mouseEvent) {
            mouseEvent.setScrollData(0, event.wheelDelta);
          } ], [ "DOMMouseScroll", EventMouse.SCROLL, function(event, mouseEvent) {
            mouseEvent.setScrollData(0, -120 * event.detail);
          } ] ];
          for (var i = 0; i < _mouseEventsOnElement.length; ++i) {
            var entry = _mouseEventsOnElement[i];
            entry && (function() {
              var name = entry[0];
              var type = entry[1];
              var handler = entry[2];
              element.addEventListener(name, (function(event) {
                var location = selfPointer.getPointByEvent(event, canvasBoundingRect);
                var mouseEvent = selfPointer.getMouseEvent(location, canvasBoundingRect, type);
                mouseEvent.setButton(event.button);
                handler(event, mouseEvent, location, canvasBoundingRect);
                eventManager.dispatchEvent(mouseEvent);
                event.stopPropagation();
                event.preventDefault();
              }), false);
            })();
          }
        }
        if (window.navigator.msPointerEnabled) {
          var _pointerEventsMap = {
            MSPointerDown: selfPointer.handleTouchesBegin,
            MSPointerMove: selfPointer.handleTouchesMove,
            MSPointerUp: selfPointer.handleTouchesEnd,
            MSPointerCancel: selfPointer.handleTouchesCancel
          };
          var _loop = function _loop(eventName) {
            var touchEvent = _pointerEventsMap[eventName];
            element.addEventListener(eventName, (function(event) {
              var documentElement = document.documentElement;
              canvasBoundingRect.adjustedLeft = canvasBoundingRect.left - documentElement.scrollLeft;
              canvasBoundingRect.adjustedTop = canvasBoundingRect.top - documentElement.scrollTop;
              touchEvent.call(selfPointer, [ selfPointer.getTouchByXY(event.clientX, event.clientY, canvasBoundingRect) ]);
              event.stopPropagation();
            }), false);
          };
          for (var eventName in _pointerEventsMap) _loop(eventName);
        }
        if (supportTouches) {
          var _touchEventsMap = {
            touchstart: function touchstart(touchesToHandle) {
              selfPointer.handleTouchesBegin(touchesToHandle);
              element.focus();
            },
            touchmove: function touchmove(touchesToHandle) {
              selfPointer.handleTouchesMove(touchesToHandle);
            },
            touchend: function touchend(touchesToHandle) {
              selfPointer.handleTouchesEnd(touchesToHandle);
            },
            touchcancel: function touchcancel(touchesToHandle) {
              selfPointer.handleTouchesCancel(touchesToHandle);
            }
          };
          var registerTouchEvent = function registerTouchEvent(eventName) {
            var handler = _touchEventsMap[eventName];
            element.addEventListener(eventName, (function(event) {
              if (!event.changedTouches) return;
              var body = document.body;
              canvasBoundingRect.adjustedLeft = canvasBoundingRect.left - (body.scrollLeft || window.scrollX || 0);
              canvasBoundingRect.adjustedTop = canvasBoundingRect.top - (body.scrollTop || window.scrollY || 0);
              handler(selfPointer.getTouchesByEvent(event, canvasBoundingRect));
              event.stopPropagation();
              event.preventDefault();
            }), false);
          };
          for (var _eventName in _touchEventsMap) registerTouchEvent(_eventName);
        }
        this._registerKeyboardEvent();
        this._isRegisterEvent = true;
      },
      _registerKeyboardEvent: function _registerKeyboardEvent() {},
      _registerAccelerometerEvent: function _registerAccelerometerEvent() {},
      update: function update(dt) {
        if (this._accelCurTime > this._accelInterval) {
          this._accelCurTime -= this._accelInterval;
          eventManager.dispatchEvent(new cc.Event.EventAcceleration(this._acceleration));
        }
        this._accelCurTime += dt;
      }
    };
    module.exports = cc.internal.inputManager = inputManager;
  }), {
    "../event-manager": 119,
    "./CCMacro": 143,
    "./CCSys": 147
  } ],
  143: [ (function(require, module, exports) {
    "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: true,
      DIRECTOR_STATS_POSITION: cc.v2(0, 0),
      ENABLE_STACKABLE_ACTIONS: true,
      TOUCH_TIMEOUT: 5e3,
      BATCH_VERTEX_COUNT: 2e4,
      ENABLE_TILEDMAP_CULLING: true,
      ENABLE_TRANSPARENT_CANVAS: false,
      ENABLE_WEBGL_ANTIALIAS: false,
      ENABLE_CULLING: false,
      CLEANUP_IMAGE_CACHE: false,
      SHOW_MESH_WIREFRAME: false,
      SHOW_MESH_NORMAL: false,
      ENABLE_MULTI_TOUCH: true,
      ALLOW_IMAGE_BITMAP: true
    };
    Object.defineProperty(cc.macro, "ROTATE_ACTION_CCW", {
      set: function set(value) {
        cc.RotateTo && cc.RotateBy && (cc.RotateTo._reverse = cc.RotateBy._reverse = value);
      }
    });
    var SUPPORT_TEXTURE_FORMATS = [ ".pkm", ".pvr", ".webp", ".jpg", ".jpeg", ".bmp", ".png" ];
    cc.macro.SUPPORT_TEXTURE_FORMATS = SUPPORT_TEXTURE_FORMATS;
    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
    });
    module.exports = cc.macro;
  }), {} ],
  144: [ (function(require, module, exports) {
    "use strict";
    var js = require("./js");
    var CCClass = require("./CCClass");
    var Destroyed = 1;
    var RealDestroyed = 2;
    var ToDestroy = 4;
    var DontSave = 8;
    var EditorOnly = 16;
    var Dirty = 32;
    var DontDestroy = 64;
    var Destroying = 128;
    var Deactivating = 256;
    var LockedInEditor = 512;
    var HideInHierarchy = 1024;
    var IsOnEnableCalled = 2048;
    var IsEditorOnEnableCalled = 4096;
    var IsPreloadStarted = 8192;
    var IsOnLoadCalled = 16384;
    var IsOnLoadStarted = 32768;
    var IsStartCalled = 65536;
    var IsRotationLocked = 1 << 17;
    var IsScaleLocked = 1 << 18;
    var IsAnchorLocked = 1 << 19;
    var IsSizeLocked = 1 << 20;
    var IsPositionLocked = 1 << 21;
    var PersistentMask = ~(ToDestroy | Dirty | Destroying | DontDestroy | Deactivating | IsPreloadStarted | IsOnLoadStarted | IsOnLoadCalled | IsStartCalled | IsOnEnableCalled | IsEditorOnEnableCalled | IsRotationLocked | IsScaleLocked | IsAnchorLocked | IsSizeLocked | IsPositionLocked);
    function CCObject() {
      this._name = "";
      this._objFlags = 0;
    }
    CCClass.fastDefine("cc.Object", CCObject, {
      _name: "",
      _objFlags: 0
    });
    js.value(CCObject, "Flags", {
      Destroyed: Destroyed,
      DontSave: DontSave,
      EditorOnly: EditorOnly,
      Dirty: Dirty,
      DontDestroy: DontDestroy,
      PersistentMask: PersistentMask,
      Destroying: Destroying,
      Deactivating: Deactivating,
      LockedInEditor: LockedInEditor,
      HideInHierarchy: HideInHierarchy,
      IsPreloadStarted: IsPreloadStarted,
      IsOnLoadStarted: IsOnLoadStarted,
      IsOnLoadCalled: IsOnLoadCalled,
      IsOnEnableCalled: IsOnEnableCalled,
      IsStartCalled: IsStartCalled,
      IsEditorOnEnableCalled: IsEditorOnEnableCalled,
      IsPositionLocked: IsPositionLocked,
      IsRotationLocked: IsRotationLocked,
      IsScaleLocked: IsScaleLocked,
      IsAnchorLocked: IsAnchorLocked,
      IsSizeLocked: IsSizeLocked
    });
    var objectsToDestroy = [];
    function deferredDestroy() {
      var deleteCount = objectsToDestroy.length;
      for (var i = 0; i < deleteCount; ++i) {
        var obj = objectsToDestroy[i];
        obj._objFlags & Destroyed || obj._destroyImmediate();
      }
      deleteCount === objectsToDestroy.length ? objectsToDestroy.length = 0 : objectsToDestroy.splice(0, deleteCount);
      false;
    }
    js.value(CCObject, "_deferredDestroy", deferredDestroy);
    false;
    var prototype = CCObject.prototype;
    js.getset(prototype, "name", (function() {
      return this._name;
    }), (function(value) {
      this._name = value;
    }), true);
    js.get(prototype, "isValid", (function() {
      return !(this._objFlags & Destroyed);
    }), true);
    false, false;
    var deferredDestroyTimer = null;
    prototype.destroy = function() {
      if (this._objFlags & Destroyed) {
        cc.warnID(5e3);
        return false;
      }
      if (this._objFlags & ToDestroy) return false;
      this._objFlags |= ToDestroy;
      objectsToDestroy.push(this);
      false;
      return true;
    };
    false, false;
    function compileDestruct(obj, ctor) {
      var shouldSkipId = obj instanceof cc._BaseNode || obj instanceof cc.Component;
      var idToSkip = shouldSkipId ? "_id" : null;
      var key, propsToReset = {};
      for (key in obj) if (obj.hasOwnProperty(key)) {
        if (key === idToSkip) continue;
        switch (typeof obj[key]) {
         case "string":
          propsToReset[key] = "";
          break;

         case "object":
         case "function":
          propsToReset[key] = null;
        }
      }
      if (cc.Class._isCCClass(ctor)) {
        var attrs = cc.Class.Attr.getClassAttrs(ctor);
        var propList = ctor.__props__;
        for (var i = 0; i < propList.length; i++) {
          key = propList[i];
          var attrKey = key + cc.Class.Attr.DELIMETER + "default";
          if (attrKey in attrs) {
            if (shouldSkipId && "_id" === key) continue;
            switch (typeof attrs[attrKey]) {
             case "string":
              propsToReset[key] = "";
              break;

             case "object":
             case "function":
              propsToReset[key] = null;
              break;

             case "undefined":
              propsToReset[key] = void 0;
            }
          }
        }
      }
      var func;
      var statement;
      var val;
      false;
      return function(o) {
        for (var key in propsToReset) o[key] = propsToReset[key];
      };
    }
    prototype._destruct = function() {
      var ctor = this.constructor;
      var destruct = ctor.__destruct__;
      if (!destruct) {
        destruct = compileDestruct(this, ctor);
        js.value(ctor, "__destruct__", destruct, true);
      }
      destruct(this);
    };
    prototype._onPreDestroy = null;
    prototype._destroyImmediate = function() {
      if (this._objFlags & Destroyed) {
        cc.errorID(5e3);
        return;
      }
      this._onPreDestroy && this._onPreDestroy();
      true;
      this._destruct();
      this._objFlags |= Destroyed;
    };
    false;
    prototype._deserialize = null;
    cc.isValid = function(value, strictMode) {
      return "object" === typeof value ? !!value && !(value._objFlags & (strictMode ? Destroyed | ToDestroy : Destroyed)) : "undefined" !== typeof value;
    };
    false, false;
    cc.Object = module.exports = CCObject;
  }), {
    "./CCClass": 138,
    "./js": 158
  } ],
  145: [ (function(require, module, exports) {
    "use strict";
    var js = require("../platform/js");
    cc.SAXParser = function() {
      if (true, window.DOMParser) {
        this._isSupportDOMParser = true;
        this._parser = new DOMParser();
      } else {
        this._isSupportDOMParser = false;
        this._parser = null;
      }
    };
    cc.SAXParser.prototype = {
      constructor: cc.SAXParser,
      parse: function parse(xmlTxt) {
        return this._parseXML(xmlTxt);
      },
      _parseXML: function _parseXML(textxml) {
        var xmlDoc;
        if (this._isSupportDOMParser) xmlDoc = this._parser.parseFromString(textxml, "text/xml"); else {
          xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
          xmlDoc.async = "false";
          xmlDoc.loadXML(textxml);
        }
        return xmlDoc;
      }
    };
    cc.PlistParser = function() {
      cc.SAXParser.call(this);
    };
    js.extend(cc.PlistParser, cc.SAXParser);
    js.mixin(cc.PlistParser.prototype, {
      parse: function parse(xmlTxt) {
        var xmlDoc = this._parseXML(xmlTxt);
        var plist = xmlDoc.documentElement;
        if ("plist" !== plist.tagName) {
          cc.warnID(5100);
          return {};
        }
        var node = null;
        for (var i = 0, len = plist.childNodes.length; i < len; i++) {
          node = plist.childNodes[i];
          if (1 === node.nodeType) break;
        }
        xmlDoc = null;
        return this._parseNode(node);
      },
      _parseNode: function _parseNode(node) {
        var data = null, tagName = node.tagName;
        if ("dict" === tagName) data = this._parseDict(node); else if ("array" === tagName) data = this._parseArray(node); else if ("string" === tagName) if (1 === node.childNodes.length) data = node.firstChild.nodeValue; else {
          data = "";
          for (var i = 0; i < node.childNodes.length; i++) data += node.childNodes[i].nodeValue;
        } else "false" === tagName ? data = false : "true" === tagName ? data = true : "real" === tagName ? data = parseFloat(node.firstChild.nodeValue) : "integer" === tagName && (data = parseInt(node.firstChild.nodeValue, 10));
        return data;
      },
      _parseArray: function _parseArray(node) {
        var data = [];
        for (var i = 0, len = node.childNodes.length; i < len; i++) {
          var child = node.childNodes[i];
          if (1 !== child.nodeType) continue;
          data.push(this._parseNode(child));
        }
        return data;
      },
      _parseDict: function _parseDict(node) {
        var data = {};
        var key = null;
        for (var i = 0, len = node.childNodes.length; i < len; i++) {
          var child = node.childNodes[i];
          if (1 !== child.nodeType) continue;
          "key" === child.tagName ? key = child.firstChild.nodeValue : data[key] = this._parseNode(child);
        }
        return data;
      }
    });
    cc.saxParser = new cc.SAXParser();
    cc.plistParser = new cc.PlistParser();
    module.exports = {
      saxParser: cc.saxParser,
      plistParser: cc.plistParser
    };
  }), {
    "../platform/js": 158
  } ],
  146: [ (function(require, module, exports) {
    "use strict";
    cc.screen = {
      _supportsFullScreen: false,
      _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 init() {
        this._fn = {};
        var i, l, val, map = this._fnMap, valL;
        for (i = 0, l = map.length; i < l; i++) {
          val = map[i];
          if (val && "undefined" !== typeof document[val[1]]) {
            for (i = 0, valL = val.length; i < valL; i++) this._fn[map[0][i]] = val[i];
            break;
          }
        }
        this._supportsFullScreen = void 0 !== this._fn.requestFullscreen;
        this._touchEvent = "ontouchend" in window ? "touchend" : "mousedown";
      },
      fullScreen: function fullScreen() {
        return !!this._supportsFullScreen && !!(document[this._fn.fullscreenElement] || document[this._fn.webkitFullscreenElement] || document[this._fn.mozFullScreenElement]);
      },
      requestFullScreen: function requestFullScreen(element, onFullScreenChange, onFullScreenError) {
        if (element && "video" === element.tagName.toLowerCase()) {
          if (cc.sys.os === cc.sys.OS_IOS && cc.sys.isBrowser && element.readyState > 0) {
            element.webkitEnterFullscreen && element.webkitEnterFullscreen();
            return;
          }
          element.setAttribute("x5-video-player-fullscreen", "true");
        }
        if (!this._supportsFullScreen) return;
        element = element || document.documentElement;
        if (onFullScreenChange) {
          var eventName = this._fn.fullscreenchange;
          this._onfullscreenchange && document.removeEventListener(eventName, this._onfullscreenchange);
          this._onfullscreenchange = onFullScreenChange;
          document.addEventListener(eventName, onFullScreenChange, false);
        }
        if (onFullScreenError) {
          var _eventName = this._fn.fullscreenerror;
          this._onfullscreenerror && document.removeEventListener(_eventName, this._onfullscreenerror);
          this._onfullscreenerror = onFullScreenError;
          document.addEventListener(_eventName, onFullScreenError, {
            once: true
          });
        }
        var requestPromise = element[this._fn.requestFullscreen]();
        "undefined" === typeof document[this._fn.fullscreenerror] && window.Promise && requestPromise instanceof Promise && requestPromise["catch"]((function(err) {}));
      },
      exitFullScreen: function exitFullScreen(element) {
        if (element && "video" === element.tagName.toLowerCase()) {
          if (cc.sys.os === cc.sys.OS_IOS && cc.sys.isBrowser) {
            element.webkitExitFullscreen && element.webkitExitFullscreen();
            return;
          }
          element.setAttribute("x5-video-player-fullscreen", "false");
        }
        return !this._supportsFullScreen || document[this._fn.exitFullscreen]();
      },
      autoFullScreen: function autoFullScreen(element, onFullScreenChange) {
        element = element || document.body;
        this._ensureFullScreen(element, onFullScreenChange);
        this.requestFullScreen(element, onFullScreenChange);
      },
      disableAutoFullScreen: function disableAutoFullScreen(element) {
        var touchTarget = cc.game.canvas || element;
        var touchEventName = this._touchEvent;
        if (this._preOnTouch) {
          touchTarget.removeEventListener(touchEventName, this._preOnTouch);
          this._preOnTouch = null;
        }
      },
      _ensureFullScreen: function _ensureFullScreen(element, onFullScreenChange) {
        var self = this;
        var touchTarget = cc.game.canvas || element;
        var fullScreenErrorEventName = this._fn.fullscreenerror;
        if ("undefined" === typeof document[fullScreenErrorEventName]) return;
        var touchEventName = this._touchEvent;
        function onFullScreenError() {
          self._preOnFullScreenError = null;
          function onTouch() {
            self._preOnTouch = null;
            self.requestFullScreen(element, onFullScreenChange);
          }
          self._preOnTouch && touchTarget.removeEventListener(touchEventName, self._preOnTouch);
          self._preOnTouch = onTouch;
          touchTarget.addEventListener(touchEventName, self._preOnTouch, {
            once: true
          });
        }
        this._preOnFullScreenError && element.removeEventListener(fullScreenErrorEventName, this._preOnFullScreenError);
        this._preOnFullScreenError = onFullScreenError;
        element.addEventListener(fullScreenErrorEventName, onFullScreenError, {
          once: true
        });
      }
    };
    cc.screen.init();
  }), {} ],
  147: [ (function(require, module, exports) {
    "use strict";
    var settingPlatform;
    true;
    settingPlatform = window._CCSettings ? _CCSettings.platform : void 0;
    var isVivoGame = "qgame" === settingPlatform;
    var isOppoGame = "quickgame" === settingPlatform;
    var isHuaweiGame = "huawei" === settingPlatform;
    var isJKWGame = "jkw-game" === settingPlatform;
    var isQttGame = "qtt-game" === settingPlatform;
    var _global = "undefined" === typeof window ? global : window;
    function initSys() {
      cc.sys = {};
      var sys = cc.sys;
      sys.LANGUAGE_ENGLISH = "en";
      sys.LANGUAGE_CHINESE = "zh";
      sys.LANGUAGE_FRENCH = "fr";
      sys.LANGUAGE_ITALIAN = "it";
      sys.LANGUAGE_GERMAN = "de";
      sys.LANGUAGE_SPANISH = "es";
      sys.LANGUAGE_DUTCH = "du";
      sys.LANGUAGE_RUSSIAN = "ru";
      sys.LANGUAGE_KOREAN = "ko";
      sys.LANGUAGE_JAPANESE = "ja";
      sys.LANGUAGE_HUNGARIAN = "hu";
      sys.LANGUAGE_PORTUGUESE = "pt";
      sys.LANGUAGE_ARABIC = "ar";
      sys.LANGUAGE_NORWEGIAN = "no";
      sys.LANGUAGE_POLISH = "pl";
      sys.LANGUAGE_TURKISH = "tr";
      sys.LANGUAGE_UKRAINIAN = "uk";
      sys.LANGUAGE_ROMANIAN = "ro";
      sys.LANGUAGE_BULGARIAN = "bg";
      sys.LANGUAGE_UNKNOWN = "unknown";
      sys.OS_IOS = "iOS";
      sys.OS_ANDROID = "Android";
      sys.OS_WINDOWS = "Windows";
      sys.OS_MARMALADE = "Marmalade";
      sys.OS_LINUX = "Linux";
      sys.OS_BADA = "Bada";
      sys.OS_BLACKBERRY = "Blackberry";
      sys.OS_OSX = "OS X";
      sys.OS_WP8 = "WP8";
      sys.OS_WINRT = "WINRT";
      sys.OS_UNKNOWN = "Unknown";
      sys.UNKNOWN = -1;
      sys.WIN32 = 0;
      sys.LINUX = 1;
      sys.MACOS = 2;
      sys.ANDROID = 3;
      sys.IPHONE = 4;
      sys.IPAD = 5;
      sys.BLACKBERRY = 6;
      sys.NACL = 7;
      sys.EMSCRIPTEN = 8;
      sys.TIZEN = 9;
      sys.WINRT = 10;
      sys.WP8 = 11;
      sys.MOBILE_BROWSER = 100;
      sys.DESKTOP_BROWSER = 101;
      sys.EDITOR_PAGE = 102;
      sys.EDITOR_CORE = 103;
      sys.WECHAT_GAME = 104;
      sys.QQ_PLAY = 105;
      sys.FB_PLAYABLE_ADS = 106;
      sys.BAIDU_GAME = 107;
      sys.VIVO_GAME = 108;
      sys.OPPO_GAME = 109;
      sys.HUAWEI_GAME = 110;
      sys.XIAOMI_GAME = 111;
      sys.JKW_GAME = 112;
      sys.ALIPAY_GAME = 113;
      sys.WECHAT_GAME_SUB = 114;
      sys.BAIDU_GAME_SUB = 115;
      sys.QTT_GAME = 116;
      sys.BROWSER_TYPE_WECHAT = "wechat";
      sys.BROWSER_TYPE_WECHAT_GAME = "wechatgame";
      sys.BROWSER_TYPE_WECHAT_GAME_SUB = "wechatgamesub";
      sys.BROWSER_TYPE_BAIDU_GAME = "baidugame";
      sys.BROWSER_TYPE_BAIDU_GAME_SUB = "baidugamesub";
      sys.BROWSER_TYPE_XIAOMI_GAME = "xiaomigame";
      sys.BROWSER_TYPE_ALIPAY_GAME = "alipaygame";
      sys.BROWSER_TYPE_QQ_PLAY = "qqplay";
      sys.BROWSER_TYPE_ANDROID = "androidbrowser";
      sys.BROWSER_TYPE_IE = "ie";
      sys.BROWSER_TYPE_EDGE = "edge";
      sys.BROWSER_TYPE_QQ = "qqbrowser";
      sys.BROWSER_TYPE_MOBILE_QQ = "mqqbrowser";
      sys.BROWSER_TYPE_UC = "ucbrowser";
      sys.BROWSER_TYPE_UCBS = "ucbs";
      sys.BROWSER_TYPE_360 = "360browser";
      sys.BROWSER_TYPE_BAIDU_APP = "baiduboxapp";
      sys.BROWSER_TYPE_BAIDU = "baidubrowser";
      sys.BROWSER_TYPE_MAXTHON = "maxthon";
      sys.BROWSER_TYPE_OPERA = "opera";
      sys.BROWSER_TYPE_OUPENG = "oupeng";
      sys.BROWSER_TYPE_MIUI = "miuibrowser";
      sys.BROWSER_TYPE_FIREFOX = "firefox";
      sys.BROWSER_TYPE_SAFARI = "safari";
      sys.BROWSER_TYPE_CHROME = "chrome";
      sys.BROWSER_TYPE_LIEBAO = "liebao";
      sys.BROWSER_TYPE_QZONE = "qzone";
      sys.BROWSER_TYPE_SOUGOU = "sogou";
      sys.BROWSER_TYPE_UNKNOWN = "unknown";
      sys.isNative = (false, false);
      sys.isBrowser = "object" === typeof window && "object" === typeof document && true;
      sys.glExtension = function(name) {
        return !!cc.renderer.device.ext(name);
      };
      sys.getMaxJointMatrixSize = function() {
        if (!sys._maxJointMatrixSize) {
          var JOINT_MATRICES_SIZE = 50;
          var LEFT_UNIFORM_SIZE = 10;
          var gl = cc.game._renderContext;
          var maxUniforms = Math.floor(gl.getParameter(gl.MAX_VERTEX_UNIFORM_VECTORS) / 4) - LEFT_UNIFORM_SIZE;
          sys._maxJointMatrixSize = maxUniforms < JOINT_MATRICES_SIZE ? 0 : JOINT_MATRICES_SIZE;
        }
        return sys._maxJointMatrixSize;
      };
      sys.getSafeAreaRect = function() {
        var visibleSize = cc.view.getVisibleSize();
        return cc.rect(0, 0, visibleSize.width, visibleSize.height);
      };
      if (_global.__globalAdapter && _global.__globalAdapter.adaptSys) _global.__globalAdapter.adaptSys(sys); else {
        false;
        var platform;
        var languageCode;
        var w;
        var h;
        var ratio;
        var capabilities;
        false, false;
        var win = window, nav = win.navigator, doc = document, docEle = doc.documentElement;
        var ua = nav.userAgent.toLowerCase();
        false;
        sys.isMobile = /mobile|android|iphone|ipad/.test(ua);
        "undefined" !== typeof FbPlayableAd ? sys.platform = sys.FB_PLAYABLE_ADS : sys.platform = sys.isMobile ? sys.MOBILE_BROWSER : sys.DESKTOP_BROWSER;
        var currLanguage = nav.language;
        currLanguage = currLanguage || nav.browserLanguage;
        sys.languageCode = currLanguage.toLowerCase();
        currLanguage = currLanguage ? currLanguage.split("-")[0] : sys.LANGUAGE_ENGLISH;
        sys.language = currLanguage;
        var isAndroid = false, iOS = false, osVersion = "", osMainVersion = 0;
        var uaResult = /android\s*(\d+(?:\.\d+)*)/i.exec(ua) || /android\s*(\d+(?:\.\d+)*)/i.exec(nav.platform);
        if (uaResult) {
          isAndroid = true;
          osVersion = uaResult[1] || "";
          osMainVersion = parseInt(osVersion) || 0;
        }
        uaResult = /(iPad|iPhone|iPod).*OS ((\d+_?){2,3})/i.exec(ua);
        if (uaResult) {
          iOS = true;
          osVersion = uaResult[2] || "";
          osMainVersion = parseInt(osVersion) || 0;
        } else if (/(iPhone|iPad|iPod)/.exec(nav.platform) || "MacIntel" === nav.platform && nav.maxTouchPoints && nav.maxTouchPoints > 1) {
          iOS = true;
          osVersion = "";
          osMainVersion = 0;
        }
        var osName = sys.OS_UNKNOWN;
        -1 !== nav.appVersion.indexOf("Win") ? osName = sys.OS_WINDOWS : iOS ? osName = sys.OS_IOS : -1 !== nav.appVersion.indexOf("Mac") ? osName = sys.OS_OSX : -1 !== nav.appVersion.indexOf("X11") && -1 === nav.appVersion.indexOf("Linux") ? osName = sys.OS_UNIX : isAndroid ? osName = sys.OS_ANDROID : -1 === nav.appVersion.indexOf("Linux") && -1 === ua.indexOf("ubuntu") || (osName = sys.OS_LINUX);
        sys.os = osName;
        sys.osVersion = osVersion;
        sys.osMainVersion = osMainVersion;
        sys.browserType = sys.BROWSER_TYPE_UNKNOWN;
        (function() {
          var typeReg1 = /mqqbrowser|micromessenger|qqbrowser|sogou|qzone|liebao|maxthon|ucbs|360 aphone|360browser|baiduboxapp|baidubrowser|maxthon|mxbrowser|miuibrowser/i;
          var typeReg2 = /qq|ucbrowser|ubrowser|edge/i;
          var typeReg3 = /chrome|safari|firefox|trident|opera|opr\/|oupeng/i;
          var browserTypes = typeReg1.exec(ua) || typeReg2.exec(ua) || typeReg3.exec(ua);
          var browserType = browserTypes ? browserTypes[0].toLowerCase() : sys.BROWSER_TYPE_UNKNOWN;
          "safari" === browserType && isAndroid ? browserType = sys.BROWSER_TYPE_ANDROID : "qq" === browserType && ua.match(/android.*applewebkit/i) && (browserType = sys.BROWSER_TYPE_ANDROID);
          var typeMap = {
            micromessenger: sys.BROWSER_TYPE_WECHAT,
            trident: sys.BROWSER_TYPE_IE,
            edge: sys.BROWSER_TYPE_EDGE,
            "360 aphone": sys.BROWSER_TYPE_360,
            mxbrowser: sys.BROWSER_TYPE_MAXTHON,
            "opr/": sys.BROWSER_TYPE_OPERA,
            ubrowser: sys.BROWSER_TYPE_UC
          };
          sys.browserType = typeMap[browserType] || browserType;
        })();
        sys.browserVersion = "";
        (function() {
          var versionReg1 = /(mqqbrowser|micromessenger|qqbrowser|sogou|qzone|liebao|maxthon|uc|ucbs|360 aphone|360|baiduboxapp|baidu|maxthon|mxbrowser|miui(?:.hybrid)?)(mobile)?(browser)?\/?([\d.]+)/i;
          var versionReg2 = /(qq|chrome|safari|firefox|trident|opera|opr\/|oupeng)(mobile)?(browser)?\/?([\d.]+)/i;
          var tmp = ua.match(versionReg1);
          tmp || (tmp = ua.match(versionReg2));
          sys.browserVersion = tmp ? tmp[4] : "";
        })();
        var w = window.innerWidth || document.documentElement.clientWidth;
        var h = window.innerHeight || document.documentElement.clientHeight;
        var ratio = window.devicePixelRatio || 1;
        sys.windowPixelResolution = {
          width: ratio * w,
          height: ratio * h
        };
        sys._checkWebGLRenderMode = function() {
          if (cc.game.renderType !== cc.game.RENDER_TYPE_WEBGL) throw new Error("This feature supports WebGL render mode only.");
        };
        var _tmpCanvas1 = document.createElement("canvas");
        var create3DContext = function create3DContext(canvas, opt_attribs, opt_contextType) {
          if (!opt_contextType) return create3DContext(canvas, opt_attribs, "webgl") || create3DContext(canvas, opt_attribs, "experimental-webgl") || create3DContext(canvas, opt_attribs, "webkit-3d") || create3DContext(canvas, opt_attribs, "moz-webgl") || null;
          try {
            return canvas.getContext(opt_contextType, opt_attribs);
          } catch (e) {
            return null;
          }
        };
        try {
          var localStorage = sys.localStorage = win.localStorage;
          localStorage.setItem("storage", "");
          localStorage.removeItem("storage");
          localStorage = null;
        } catch (e) {
          var warn = function warn() {
            cc.warnID(5200);
          };
          sys.localStorage = {
            getItem: warn,
            setItem: warn,
            removeItem: warn,
            clear: warn
          };
        }
        var _supportWebp = _tmpCanvas1.toDataURL("image/webp").startsWith("data:image/webp");
        var _supportCanvas = !!_tmpCanvas1.getContext("2d");
        var _supportWebGL = false;
        false;
        win.WebGLRenderingContext && (_supportWebGL = true);
        var capabilities = sys.capabilities = {
          canvas: _supportCanvas,
          opengl: _supportWebGL,
          webp: _supportWebp,
          imageBitmap: false
        };
        if ("undefined" !== typeof createImageBitmap && "undefined" !== typeof Blob) {
          _tmpCanvas1.width = _tmpCanvas1.height = 2;
          createImageBitmap(_tmpCanvas1, {}).then((function(imageBitmap) {
            capabilities.imageBitmap = true;
            imageBitmap.close && imageBitmap.close();
          }))["catch"]((function(err) {}));
        }
        (void 0 !== docEle["ontouchstart"] || void 0 !== doc["ontouchstart"] || nav.msPointerEnabled) && (capabilities["touches"] = true);
        void 0 !== docEle["onmouseup"] && (capabilities["mouse"] = true);
        void 0 !== docEle["onkeyup"] && (capabilities["keyboard"] = true);
        (win.DeviceMotionEvent || win.DeviceOrientationEvent) && (capabilities["accelerometer"] = true);
        var __audioSupport;
        (function() {
          var DEBUG = false;
          var version = sys.browserVersion;
          var supportWebAudio = !!(window.AudioContext || window.webkitAudioContext || window.mozAudioContext);
          __audioSupport = {
            ONLY_ONE: false,
            WEB_AUDIO: supportWebAudio,
            DELAY_CREATE_CTX: false
          };
          sys.os === sys.OS_IOS && (__audioSupport.USE_LOADER_EVENT = "loadedmetadata");
          if (sys.browserType === sys.BROWSER_TYPE_FIREFOX) {
            __audioSupport.DELAY_CREATE_CTX = true;
            __audioSupport.USE_LOADER_EVENT = "canplay";
          }
          sys.os === sys.OS_ANDROID && sys.browserType === sys.BROWSER_TYPE_UC && (__audioSupport.ONE_SOURCE = true);
          DEBUG && setTimeout((function() {
            cc.log("browse type: " + sys.browserType);
            cc.log("browse version: " + version);
            cc.log("MULTI_CHANNEL: " + __audioSupport.MULTI_CHANNEL);
            cc.log("WEB_AUDIO: " + __audioSupport.WEB_AUDIO);
            cc.log("AUTOPLAY: " + __audioSupport.AUTOPLAY);
          }), 0);
        })();
        try {
          if (__audioSupport.WEB_AUDIO) {
            __audioSupport.context = new (window.AudioContext || window.webkitAudioContext || window.mozAudioContext)();
            __audioSupport.DELAY_CREATE_CTX && setTimeout((function() {
              __audioSupport.context = new (window.AudioContext || window.webkitAudioContext || window.mozAudioContext)();
            }), 0);
          }
        } catch (error) {
          __audioSupport.WEB_AUDIO = false;
          cc.logID(5201);
        }
        var formatSupport = [];
        (function() {
          var audio = document.createElement("audio");
          if (audio.canPlayType) {
            var ogg = audio.canPlayType('audio/ogg; codecs="vorbis"');
            ogg && formatSupport.push(".ogg");
            var mp3 = audio.canPlayType("audio/mpeg");
            mp3 && formatSupport.push(".mp3");
            var wav = audio.canPlayType('audio/wav; codecs="1"');
            wav && formatSupport.push(".wav");
            var mp4 = audio.canPlayType("audio/mp4");
            mp4 && formatSupport.push(".mp4");
            var m4a = audio.canPlayType("audio/x-m4a");
            m4a && formatSupport.push(".m4a");
          }
        })();
        __audioSupport.format = formatSupport;
        sys.__audioSupport = __audioSupport;
      }
      sys.NetworkType = {
        NONE: 0,
        LAN: 1,
        WWAN: 2
      };
      sys.getNetworkType = function() {
        return sys.NetworkType.LAN;
      };
      sys.getBatteryLevel = function() {
        return 1;
      };
      sys.garbageCollect = function() {};
      sys.restartVM = function() {};
      sys.isObjectValid = function(obj) {
        if (obj) return true;
        return false;
      };
      sys.dump = function() {
        var self = this;
        var str = "";
        str += "isMobile : " + self.isMobile + "\r\n";
        str += "language : " + self.language + "\r\n";
        str += "browserType : " + self.browserType + "\r\n";
        str += "browserVersion : " + self.browserVersion + "\r\n";
        str += "capabilities : " + JSON.stringify(self.capabilities) + "\r\n";
        str += "os : " + self.os + "\r\n";
        str += "osVersion : " + self.osVersion + "\r\n";
        str += "platform : " + self.platform + "\r\n";
        str += "Using " + (cc.game.renderType === cc.game.RENDER_TYPE_WEBGL ? "WEBGL" : "CANVAS") + " renderer.\r\n";
        cc.log(str);
      };
      sys.openURL = function(url) {
        false, false;
        window.open(url);
      };
      sys.now = function() {
        return Date.now ? Date.now() : +new Date();
      };
      return sys;
    }
    var sys = cc && cc.sys ? cc.sys : initSys();
    module.exports = sys;
  }), {} ],
  148: [ (function(require, module, exports) {
    "use strict";
    var EventTarget = require("../event/event-target");
    var js = require("../platform/js");
    var renderer = require("../renderer");
    require("../platform/CCClass");
    var __BrowserGetter = {
      init: function init() {
        this.html = document.getElementsByTagName("html")[0];
      },
      availWidth: function availWidth(frame) {
        return frame && frame !== this.html ? frame.clientWidth : window.innerWidth;
      },
      availHeight: function availHeight(frame) {
        return frame && frame !== this.html ? frame.clientHeight : window.innerHeight;
      },
      meta: {
        width: "device-width"
      },
      adaptationType: cc.sys.browserType
    };
    cc.sys.os === cc.sys.OS_IOS && (__BrowserGetter.adaptationType = cc.sys.BROWSER_TYPE_SAFARI);
    switch (__BrowserGetter.adaptationType) {
     case cc.sys.BROWSER_TYPE_SAFARI:
     case cc.sys.BROWSER_TYPE_SOUGOU:
     case cc.sys.BROWSER_TYPE_UC:
      __BrowserGetter.meta["minimal-ui"] = "true";
      __BrowserGetter.availWidth = function(frame) {
        return frame.clientWidth;
      };
      __BrowserGetter.availHeight = function(frame) {
        return frame.clientHeight;
      };
    }
    var _scissorRect = null;
    var View = function View() {
      EventTarget.call(this);
      var _t = this, _strategyer = cc.ContainerStrategy, _strategy = cc.ContentStrategy;
      __BrowserGetter.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 = false;
      _t._devicePixelRatio = 1;
      false;
      _t._maxPixelRatio = 2;
      _t._retinaEnabled = false;
      _t._resizeCallback = null;
      _t._resizing = false;
      _t._resizeWithBrowserSize = false;
      _t._orientationChanging = true;
      _t._isRotated = false;
      _t._orientation = cc.macro.ORIENTATION_AUTO;
      _t._isAdjustViewport = true;
      _t._antiAliasEnabled = false;
      _t._resolutionPolicy = null;
      _t._rpExactFit = new cc.ResolutionPolicy(_strategyer.EQUAL_TO_FRAME, _strategy.EXACT_FIT);
      _t._rpShowAll = new cc.ResolutionPolicy(_strategyer.EQUAL_TO_FRAME, _strategy.SHOW_ALL);
      _t._rpNoBorder = new cc.ResolutionPolicy(_strategyer.EQUAL_TO_FRAME, _strategy.NO_BORDER);
      _t._rpFixedHeight = new cc.ResolutionPolicy(_strategyer.EQUAL_TO_FRAME, _strategy.FIXED_HEIGHT);
      _t._rpFixedWidth = new cc.ResolutionPolicy(_strategyer.EQUAL_TO_FRAME, _strategy.FIXED_WIDTH);
      cc.game.once(cc.game.EVENT_ENGINE_INITED, this.init, this);
    };
    cc.js.extend(View, EventTarget);
    cc.js.mixin(View.prototype, {
      init: function init() {
        this._initFrameSize();
        var w = cc.game.canvas.width, h = cc.game.canvas.height;
        this._designResolutionSize.width = w;
        this._designResolutionSize.height = h;
        this._originalDesignResolutionSize.width = w;
        this._originalDesignResolutionSize.height = h;
        this._viewportRect.width = w;
        this._viewportRect.height = h;
        this._visibleRect.width = w;
        this._visibleRect.height = h;
        cc.winSize.width = this._visibleRect.width;
        cc.winSize.height = this._visibleRect.height;
        cc.visibleRect && cc.visibleRect.init(this._visibleRect);
      },
      _resizeEvent: function _resizeEvent(forceOrEvent) {
        var view;
        view = this.setDesignResolutionSize ? this : cc.view;
        var sys = cc.sys;
        if (sys.browserType === sys.BROWSER_TYPE_UC && sys.os === sys.OS_IOS) {
          setTimeout((function() {
            view._resizeEvent(forceOrEvent);
          }), 0);
          return;
        }
        var prevFrameW = view._frameSize.width, prevFrameH = view._frameSize.height, prevRotated = view._isRotated;
        if (cc.sys.isMobile) {
          var containerStyle = cc.game.container.style, margin = containerStyle.margin;
          containerStyle.margin = "0";
          containerStyle.display = "none";
          view._initFrameSize();
          containerStyle.margin = margin;
          containerStyle.display = "block";
        } else view._initFrameSize();
        if (true !== forceOrEvent && view._isRotated === prevRotated && view._frameSize.width === prevFrameW && view._frameSize.height === prevFrameH) return;
        var width = view._originalDesignResolutionSize.width;
        var height = view._originalDesignResolutionSize.height;
        view._resizing = true;
        width > 0 && view.setDesignResolutionSize(width, height, view._resolutionPolicy);
        view._resizing = false;
        view.emit("canvas-resize");
        view._resizeCallback && view._resizeCallback.call();
      },
      _orientationChange: function _orientationChange() {
        cc.view._orientationChanging = true;
        cc.view._resizeEvent();
        cc.sys.browserType === cc.sys.BROWSER_TYPE_SAFARI && cc.sys.isMobile && setTimeout((function() {
          window.innerHeight > window.innerWidth && window.scrollTo(0, 1);
        }), 500);
      },
      _resize: function _resize() {
        cc.view._resizeEvent(false);
      },
      resizeWithBrowserSize: function resizeWithBrowserSize(enabled) {
        if (enabled) {
          if (!this._resizeWithBrowserSize) {
            this._resizeWithBrowserSize = true;
            window.addEventListener("resize", this._resize);
            window.addEventListener("orientationchange", this._orientationChange);
          }
        } else if (this._resizeWithBrowserSize) {
          this._resizeWithBrowserSize = false;
          window.removeEventListener("resize", this._resize);
          window.removeEventListener("orientationchange", this._orientationChange);
        }
      },
      setResizeCallback: function setResizeCallback(callback) {
        false;
        "function" !== typeof callback && null != callback || (this._resizeCallback = callback);
      },
      setOrientation: function setOrientation(orientation) {
        orientation &= cc.macro.ORIENTATION_AUTO;
        if (orientation && this._orientation !== orientation) {
          this._orientation = orientation;
          var designWidth = this._originalDesignResolutionSize.width;
          var designHeight = this._originalDesignResolutionSize.height;
          this.setDesignResolutionSize(designWidth, designHeight, this._resolutionPolicy);
        }
      },
      _initFrameSize: function _initFrameSize() {
        var locFrameSize = this._frameSize;
        var w = __BrowserGetter.availWidth(cc.game.frame);
        var h = __BrowserGetter.availHeight(cc.game.frame);
        var isLandscape = w >= h;
        if ((false, !cc.sys.isMobile) || isLandscape && this._orientation & cc.macro.ORIENTATION_LANDSCAPE || !isLandscape && this._orientation & cc.macro.ORIENTATION_PORTRAIT) {
          locFrameSize.width = w;
          locFrameSize.height = h;
          cc.game.container.style["-webkit-transform"] = "rotate(0deg)";
          cc.game.container.style.transform = "rotate(0deg)";
          this._isRotated = false;
        } else {
          locFrameSize.width = h;
          locFrameSize.height = w;
          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 = true;
        }
        this._orientationChanging && setTimeout((function() {
          cc.view._orientationChanging = false;
        }), 1e3);
      },
      _setViewportMeta: function _setViewportMeta(metas, overwrite) {
        var vp = document.getElementById("cocosMetaElement");
        vp && overwrite && document.head.removeChild(vp);
        var elems = document.getElementsByName("viewport"), currentVP = elems ? elems[0] : null, content, key, pattern;
        content = currentVP ? currentVP.content : "";
        vp = vp || document.createElement("meta");
        vp.id = "cocosMetaElement";
        vp.name = "viewport";
        vp.content = "";
        for (key in metas) if (-1 == content.indexOf(key)) content += "," + key + "=" + metas[key]; else if (overwrite) {
          pattern = new RegExp(key + "s*=s*[^,]+");
          content.replace(pattern, key + "=" + metas[key]);
        }
        /^,/.test(content) && (content = content.substr(1));
        vp.content = content;
        currentVP && (currentVP.content = content);
        document.head.appendChild(vp);
      },
      _adjustViewportMeta: function _adjustViewportMeta() {
        if (this._isAdjustViewport && true) {
          this._setViewportMeta(__BrowserGetter.meta, false);
          this._isAdjustViewport = false;
        }
      },
      adjustViewportMeta: function adjustViewportMeta(enabled) {
        this._isAdjustViewport = enabled;
      },
      enableRetina: function enableRetina(enabled) {
        false;
        this._retinaEnabled = !!enabled;
      },
      isRetinaEnabled: function isRetinaEnabled() {
        false;
        return this._retinaEnabled;
      },
      enableAntiAlias: function enableAntiAlias(enabled) {
        cc.warnID(9200);
        if (this._antiAliasEnabled === enabled) return;
        this._antiAliasEnabled = enabled;
        if (cc.game.renderType === cc.game.RENDER_TYPE_WEBGL) {
          var cache = cc.assetManager.assets;
          cache.forEach((function(asset) {
            if (asset instanceof cc.Texture2D) {
              var Filter = cc.Texture2D.Filter;
              enabled ? asset.setFilters(Filter.LINEAR, Filter.LINEAR) : asset.setFilters(Filter.NEAREST, Filter.NEAREST);
            }
          }));
        } else if (cc.game.renderType === cc.game.RENDER_TYPE_CANVAS) {
          var ctx = cc.game.canvas.getContext("2d");
          ctx.imageSmoothingEnabled = enabled;
          ctx.mozImageSmoothingEnabled = enabled;
        }
      },
      isAntiAliasEnabled: function isAntiAliasEnabled() {
        return this._antiAliasEnabled;
      },
      enableAutoFullScreen: function enableAutoFullScreen(enabled) {
        if (enabled && enabled !== this._autoFullScreen && cc.sys.isMobile) {
          this._autoFullScreen = true;
          cc.screen.autoFullScreen(cc.game.frame);
        } else {
          this._autoFullScreen = false;
          cc.screen.disableAutoFullScreen(cc.game.frame);
        }
      },
      isAutoFullScreenEnabled: function isAutoFullScreenEnabled() {
        return this._autoFullScreen;
      },
      setCanvasSize: function setCanvasSize(width, height) {
        var canvas = cc.game.canvas;
        var container = cc.game.container;
        canvas.width = width * this._devicePixelRatio;
        canvas.height = height * this._devicePixelRatio;
        canvas.style.width = width + "px";
        canvas.style.height = height + "px";
        container.style.width = width + "px";
        container.style.height = height + "px";
        this._resizeEvent();
      },
      getCanvasSize: function getCanvasSize() {
        return cc.size(cc.game.canvas.width, cc.game.canvas.height);
      },
      getFrameSize: function getFrameSize() {
        return cc.size(this._frameSize.width, this._frameSize.height);
      },
      setFrameSize: function setFrameSize(width, height) {
        this._frameSize.width = width;
        this._frameSize.height = height;
        cc.game.frame.style.width = width + "px";
        cc.game.frame.style.height = height + "px";
        this._resizeEvent(true);
      },
      getVisibleSize: function getVisibleSize() {
        return cc.size(this._visibleRect.width, this._visibleRect.height);
      },
      getVisibleSizeInPixel: function getVisibleSizeInPixel() {
        return cc.size(this._visibleRect.width * this._scaleX, this._visibleRect.height * this._scaleY);
      },
      getVisibleOrigin: function getVisibleOrigin() {
        return cc.v2(this._visibleRect.x, this._visibleRect.y);
      },
      getVisibleOriginInPixel: function getVisibleOriginInPixel() {
        return cc.v2(this._visibleRect.x * this._scaleX, this._visibleRect.y * this._scaleY);
      },
      getResolutionPolicy: function getResolutionPolicy() {
        return this._resolutionPolicy;
      },
      setResolutionPolicy: function setResolutionPolicy(resolutionPolicy) {
        var _t = this;
        if (resolutionPolicy instanceof cc.ResolutionPolicy) _t._resolutionPolicy = resolutionPolicy; else {
          var _locPolicy = cc.ResolutionPolicy;
          resolutionPolicy === _locPolicy.EXACT_FIT && (_t._resolutionPolicy = _t._rpExactFit);
          resolutionPolicy === _locPolicy.SHOW_ALL && (_t._resolutionPolicy = _t._rpShowAll);
          resolutionPolicy === _locPolicy.NO_BORDER && (_t._resolutionPolicy = _t._rpNoBorder);
          resolutionPolicy === _locPolicy.FIXED_HEIGHT && (_t._resolutionPolicy = _t._rpFixedHeight);
          resolutionPolicy === _locPolicy.FIXED_WIDTH && (_t._resolutionPolicy = _t._rpFixedWidth);
        }
      },
      setDesignResolutionSize: function setDesignResolutionSize(width, height, resolutionPolicy) {
        if (!(width > 0 || height > 0)) {
          cc.errorID(2200);
          return;
        }
        this.setResolutionPolicy(resolutionPolicy);
        var policy = this._resolutionPolicy;
        policy && policy.preApply(this);
        cc.sys.isMobile && this._adjustViewportMeta();
        this._orientationChanging = true;
        this._resizing || this._initFrameSize();
        if (!policy) {
          cc.logID(2201);
          return;
        }
        this._originalDesignResolutionSize.width = this._designResolutionSize.width = width;
        this._originalDesignResolutionSize.height = this._designResolutionSize.height = height;
        var result = policy.apply(this, this._designResolutionSize);
        if (result.scale && 2 === result.scale.length) {
          this._scaleX = result.scale[0];
          this._scaleY = result.scale[1];
        }
        if (result.viewport) {
          var vp = this._viewportRect, vb = this._visibleRect, rv = result.viewport;
          vp.x = rv.x;
          vp.y = rv.y;
          vp.width = rv.width;
          vp.height = rv.height;
          vb.x = 0;
          vb.y = 0;
          vb.width = rv.width / this._scaleX;
          vb.height = rv.height / this._scaleY;
        }
        policy.postApply(this);
        cc.winSize.width = this._visibleRect.width;
        cc.winSize.height = this._visibleRect.height;
        cc.visibleRect && cc.visibleRect.init(this._visibleRect);
        renderer.updateCameraViewport();
        cc.internal.inputManager._updateCanvasBoundingRect();
        this.emit("design-resolution-changed");
      },
      getDesignResolutionSize: function getDesignResolutionSize() {
        return cc.size(this._designResolutionSize.width, this._designResolutionSize.height);
      },
      setRealPixelResolution: function setRealPixelResolution(width, height, resolutionPolicy) {
        true, true;
        this._setViewportMeta({
          width: width
        }, true);
        document.documentElement.style.width = width + "px";
        document.body.style.width = width + "px";
        document.body.style.left = "0px";
        document.body.style.top = "0px";
        this.setDesignResolutionSize(width, height, resolutionPolicy);
      },
      setViewportInPoints: function setViewportInPoints(x, y, w, h) {
        var locScaleX = this._scaleX, locScaleY = this._scaleY;
        cc.game._renderContext.viewport(x * locScaleX + this._viewportRect.x, y * locScaleY + this._viewportRect.y, w * locScaleX, h * locScaleY);
      },
      setScissorInPoints: function setScissorInPoints(x, y, w, h) {
        var scaleX = this._scaleX, scaleY = this._scaleY;
        var sx = Math.ceil(x * scaleX + this._viewportRect.x);
        var sy = Math.ceil(y * scaleY + this._viewportRect.y);
        var sw = Math.ceil(w * scaleX);
        var sh = Math.ceil(h * scaleY);
        var gl = cc.game._renderContext;
        if (!_scissorRect) {
          var boxArr = gl.getParameter(gl.SCISSOR_BOX);
          _scissorRect = cc.rect(boxArr[0], boxArr[1], boxArr[2], boxArr[3]);
        }
        if (_scissorRect.x !== sx || _scissorRect.y !== sy || _scissorRect.width !== sw || _scissorRect.height !== sh) {
          _scissorRect.x = sx;
          _scissorRect.y = sy;
          _scissorRect.width = sw;
          _scissorRect.height = sh;
          gl.scissor(sx, sy, sw, sh);
        }
      },
      isScissorEnabled: function isScissorEnabled() {
        return cc.game._renderContext.isEnabled(gl.SCISSOR_TEST);
      },
      getScissorRect: function getScissorRect() {
        if (!_scissorRect) {
          var boxArr = gl.getParameter(gl.SCISSOR_BOX);
          _scissorRect = cc.rect(boxArr[0], boxArr[1], boxArr[2], boxArr[3]);
        }
        var scaleXFactor = 1 / this._scaleX;
        var scaleYFactor = 1 / this._scaleY;
        return cc.rect((_scissorRect.x - this._viewportRect.x) * scaleXFactor, (_scissorRect.y - this._viewportRect.y) * scaleYFactor, _scissorRect.width * scaleXFactor, _scissorRect.height * scaleYFactor);
      },
      getViewportRect: function getViewportRect() {
        return this._viewportRect;
      },
      getScaleX: function getScaleX() {
        return this._scaleX;
      },
      getScaleY: function getScaleY() {
        return this._scaleY;
      },
      getDevicePixelRatio: function getDevicePixelRatio() {
        return this._devicePixelRatio;
      },
      convertToLocationInView: function convertToLocationInView(tx, ty, relatedPos, out) {
        var result = out || cc.v2();
        var posLeft = relatedPos.adjustedLeft ? relatedPos.adjustedLeft : relatedPos.left;
        var posTop = relatedPos.adjustedTop ? relatedPos.adjustedTop : relatedPos.top;
        var x = this._devicePixelRatio * (tx - posLeft);
        var y = this._devicePixelRatio * (posTop + relatedPos.height - ty);
        if (this._isRotated) {
          result.x = cc.game.canvas.width - y;
          result.y = x;
        } else {
          result.x = x;
          result.y = y;
        }
        return result;
      },
      _convertMouseToLocationInView: function _convertMouseToLocationInView(in_out_point, relatedPos) {
        var viewport = this._viewportRect, _t = this;
        in_out_point.x = (_t._devicePixelRatio * (in_out_point.x - relatedPos.left) - viewport.x) / _t._scaleX;
        in_out_point.y = (_t._devicePixelRatio * (relatedPos.top + relatedPos.height - in_out_point.y) - viewport.y) / _t._scaleY;
      },
      _convertPointWithScale: function _convertPointWithScale(point) {
        var viewport = this._viewportRect;
        point.x = (point.x - viewport.x) / this._scaleX;
        point.y = (point.y - viewport.y) / this._scaleY;
      },
      _convertTouchesWithScale: function _convertTouchesWithScale(touches) {
        var viewport = this._viewportRect, scaleX = this._scaleX, scaleY = this._scaleY, selTouch, selPoint, selPrePoint;
        for (var i = 0; i < touches.length; i++) {
          selTouch = touches[i];
          selPoint = selTouch._point;
          selPrePoint = selTouch._prevPoint;
          selPoint.x = (selPoint.x - viewport.x) / scaleX;
          selPoint.y = (selPoint.y - viewport.y) / scaleY;
          selPrePoint.x = (selPrePoint.x - viewport.x) / scaleX;
          selPrePoint.y = (selPrePoint.y - viewport.y) / scaleY;
        }
      }
    });
    cc.ContainerStrategy = cc.Class({
      name: "ContainerStrategy",
      preApply: function preApply(view) {},
      apply: function apply(view, designedResolution) {},
      postApply: function postApply(view) {},
      _setupContainer: function _setupContainer(view, w, h) {
        var locCanvas = cc.game.canvas;
        this._setupStyle(view, w, h);
        var devicePixelRatio = view._devicePixelRatio = 1;
        false;
        view.isRetinaEnabled() && (devicePixelRatio = view._devicePixelRatio = Math.min(view._maxPixelRatio, window.devicePixelRatio || 1));
        locCanvas.width = w * devicePixelRatio;
        locCanvas.height = h * devicePixelRatio;
      },
      _setupStyle: function _setupStyle(view, w, h) {
        var locCanvas = cc.game.canvas;
        var locContainer = cc.game.container;
        if (cc.sys.os === cc.sys.OS_ANDROID) {
          document.body.style.width = (view._isRotated ? h : w) + "px";
          document.body.style.height = (view._isRotated ? w : h) + "px";
        }
        locContainer.style.width = locCanvas.style.width = w + "px";
        locContainer.style.height = locCanvas.style.height = h + "px";
      },
      _fixContainer: function _fixContainer() {
        document.body.insertBefore(cc.game.container, document.body.firstChild);
        var bs = document.body.style;
        bs.width = window.innerWidth + "px";
        bs.height = window.innerHeight + "px";
        bs.overflow = "hidden";
        var contStyle = cc.game.container.style;
        contStyle.position = "fixed";
        contStyle.left = contStyle.top = "0px";
        document.body.scrollTop = 0;
      }
    });
    cc.ContentStrategy = cc.Class({
      name: "ContentStrategy",
      ctor: function ctor() {
        this._result = {
          scale: [ 1, 1 ],
          viewport: null
        };
      },
      _buildResult: function _buildResult(containerW, containerH, contentW, contentH, scaleX, scaleY) {
        Math.abs(containerW - contentW) < 2 && (contentW = containerW);
        Math.abs(containerH - contentH) < 2 && (contentH = containerH);
        var viewport = cc.rect((containerW - contentW) / 2, (containerH - contentH) / 2, contentW, contentH);
        cc.game.renderType === cc.game.RENDER_TYPE_CANVAS;
        this._result.scale = [ scaleX, scaleY ];
        this._result.viewport = viewport;
        return this._result;
      },
      preApply: function preApply(view) {},
      apply: function apply(view, designedResolution) {
        return {
          scale: [ 1, 1 ]
        };
      },
      postApply: function postApply(view) {}
    });
    (function() {
      var EqualToFrame = cc.Class({
        name: "EqualToFrame",
        extends: cc.ContainerStrategy,
        apply: function apply(view) {
          var frameH = view._frameSize.height, containerStyle = cc.game.container.style;
          this._setupContainer(view, view._frameSize.width, view._frameSize.height);
          view._isRotated ? containerStyle.margin = "0 0 0 " + frameH + "px" : containerStyle.margin = "0px";
          containerStyle.padding = "0px";
        }
      });
      var ProportionalToFrame = cc.Class({
        name: "ProportionalToFrame",
        extends: cc.ContainerStrategy,
        apply: function apply(view, designedResolution) {
          var frameW = view._frameSize.width, frameH = view._frameSize.height, containerStyle = cc.game.container.style, designW = designedResolution.width, designH = designedResolution.height, scaleX = frameW / designW, scaleY = frameH / designH, containerW, containerH;
          scaleX < scaleY ? (containerW = frameW, containerH = designH * scaleX) : (containerW = designW * scaleY, 
          containerH = frameH);
          var offx = Math.round((frameW - containerW) / 2);
          var offy = Math.round((frameH - containerH) / 2);
          containerW = frameW - 2 * offx;
          containerH = frameH - 2 * offy;
          this._setupContainer(view, containerW, containerH);
          true;
          view._isRotated ? containerStyle.margin = "0 0 0 " + frameH + "px" : containerStyle.margin = "0px";
          containerStyle.paddingLeft = offx + "px";
          containerStyle.paddingRight = offx + "px";
          containerStyle.paddingTop = offy + "px";
          containerStyle.paddingBottom = offy + "px";
        }
      });
      var EqualToWindow = cc.Class({
        name: "EqualToWindow",
        extends: EqualToFrame,
        preApply: function preApply(view) {
          this._super(view);
          cc.game.frame = document.documentElement;
        },
        apply: function apply(view) {
          this._super(view);
          this._fixContainer();
        }
      });
      var ProportionalToWindow = cc.Class({
        name: "ProportionalToWindow",
        extends: ProportionalToFrame,
        preApply: function preApply(view) {
          this._super(view);
          cc.game.frame = document.documentElement;
        },
        apply: function apply(view, designedResolution) {
          this._super(view, designedResolution);
          this._fixContainer();
        }
      });
      var OriginalContainer = cc.Class({
        name: "OriginalContainer",
        extends: cc.ContainerStrategy,
        apply: function apply(view) {
          this._setupContainer(view, cc.game.canvas.width, cc.game.canvas.height);
        }
      });
      var _global = "undefined" === typeof window ? global : window;
      var globalAdapter = _global.__globalAdapter;
      if (globalAdapter) {
        globalAdapter.adaptContainerStrategy && globalAdapter.adaptContainerStrategy(cc.ContainerStrategy.prototype);
        globalAdapter.adaptView && globalAdapter.adaptView(View.prototype);
      }
      cc.ContainerStrategy.EQUAL_TO_FRAME = new EqualToFrame();
      cc.ContainerStrategy.PROPORTION_TO_FRAME = new ProportionalToFrame();
      cc.ContainerStrategy.ORIGINAL_CONTAINER = new OriginalContainer();
      var ExactFit = cc.Class({
        name: "ExactFit",
        extends: cc.ContentStrategy,
        apply: function apply(view, designedResolution) {
          var containerW = cc.game.canvas.width, containerH = cc.game.canvas.height, scaleX = containerW / designedResolution.width, scaleY = containerH / designedResolution.height;
          return this._buildResult(containerW, containerH, containerW, containerH, scaleX, scaleY);
        }
      });
      var ShowAll = cc.Class({
        name: "ShowAll",
        extends: cc.ContentStrategy,
        apply: function apply(view, designedResolution) {
          var containerW = cc.game.canvas.width, containerH = cc.game.canvas.height, designW = designedResolution.width, designH = designedResolution.height, scaleX = containerW / designW, scaleY = containerH / designH, scale = 0, contentW, contentH;
          scaleX < scaleY ? (scale = scaleX, contentW = containerW, contentH = designH * scale) : (scale = scaleY, 
          contentW = designW * scale, contentH = containerH);
          return this._buildResult(containerW, containerH, contentW, contentH, scale, scale);
        }
      });
      var NoBorder = cc.Class({
        name: "NoBorder",
        extends: cc.ContentStrategy,
        apply: function apply(view, designedResolution) {
          var containerW = cc.game.canvas.width, containerH = cc.game.canvas.height, designW = designedResolution.width, designH = designedResolution.height, scaleX = containerW / designW, scaleY = containerH / designH, scale, contentW, contentH;
          scaleX < scaleY ? (scale = scaleY, contentW = designW * scale, contentH = containerH) : (scale = scaleX, 
          contentW = containerW, contentH = designH * scale);
          return this._buildResult(containerW, containerH, contentW, contentH, scale, scale);
        }
      });
      var FixedHeight = cc.Class({
        name: "FixedHeight",
        extends: cc.ContentStrategy,
        apply: function apply(view, designedResolution) {
          var containerW = cc.game.canvas.width, containerH = cc.game.canvas.height, designH = designedResolution.height, scale = containerH / designH, contentW = containerW, contentH = containerH;
          return this._buildResult(containerW, containerH, contentW, contentH, scale, scale);
        }
      });
      var FixedWidth = cc.Class({
        name: "FixedWidth",
        extends: cc.ContentStrategy,
        apply: function apply(view, designedResolution) {
          var containerW = cc.game.canvas.width, containerH = cc.game.canvas.height, designW = designedResolution.width, scale = containerW / designW, contentW = containerW, contentH = containerH;
          return this._buildResult(containerW, containerH, contentW, contentH, scale, scale);
        }
      });
      cc.ContentStrategy.EXACT_FIT = new ExactFit();
      cc.ContentStrategy.SHOW_ALL = new ShowAll();
      cc.ContentStrategy.NO_BORDER = new NoBorder();
      cc.ContentStrategy.FIXED_HEIGHT = new FixedHeight();
      cc.ContentStrategy.FIXED_WIDTH = new FixedWidth();
    })();
    cc.ResolutionPolicy = cc.Class({
      name: "cc.ResolutionPolicy",
      ctor: function ctor(containerStg, contentStg) {
        this._containerStrategy = null;
        this._contentStrategy = null;
        this.setContainerStrategy(containerStg);
        this.setContentStrategy(contentStg);
      },
      preApply: function preApply(view) {
        this._containerStrategy.preApply(view);
        this._contentStrategy.preApply(view);
      },
      apply: function apply(view, designedResolution) {
        this._containerStrategy.apply(view, designedResolution);
        return this._contentStrategy.apply(view, designedResolution);
      },
      postApply: function postApply(view) {
        this._containerStrategy.postApply(view);
        this._contentStrategy.postApply(view);
      },
      setContainerStrategy: function setContainerStrategy(containerStg) {
        containerStg instanceof cc.ContainerStrategy && (this._containerStrategy = containerStg);
      },
      setContentStrategy: function setContentStrategy(contentStg) {
        contentStg instanceof cc.ContentStrategy && (this._contentStrategy = contentStg);
      }
    });
    js.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 View();
    cc.winSize = cc.size();
    module.exports = cc.view;
  }), {
    "../event/event-target": 121,
    "../platform/CCClass": 138,
    "../platform/js": 158,
    "../renderer": 168
  } ],
  149: [ (function(require, module, exports) {
    "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 init(visibleRect) {
        var w = this.width = visibleRect.width;
        var h = this.height = visibleRect.height;
        var l = visibleRect.x, b = visibleRect.y, t = b + h, r = l + w;
        this.topLeft.x = l;
        this.topLeft.y = t;
        this.topRight.x = r;
        this.topRight.y = t;
        this.top.x = l + w / 2;
        this.top.y = t;
        this.bottomLeft.x = l;
        this.bottomLeft.y = b;
        this.bottomRight.x = r;
        this.bottomRight.y = b;
        this.bottom.x = l + w / 2;
        this.bottom.y = b;
        this.center.x = l + w / 2;
        this.center.y = b + h / 2;
        this.left.x = l;
        this.left.y = b + h / 2;
        this.right.x = r;
        this.right.y = b + h / 2;
      }
    };
  }), {} ],
  150: [ (function(require, module, exports) {
    "use strict";
    var js = require("./js");
    var isPlainEmptyObj = require("./utils").isPlainEmptyObj_DEV;
    var DELIMETER = "$_$";
    function createAttrsSingle(owner, superAttrs) {
      var attrs = superAttrs ? Object.create(superAttrs) : {};
      js.value(owner, "__attrs__", attrs);
      return attrs;
    }
    function createAttrs(subclass) {
      if ("function" !== typeof subclass) {
        var instance = subclass;
        return createAttrsSingle(instance, getClassAttrs(instance.constructor));
      }
      var superClass;
      var chains = cc.Class.getInheritanceChain(subclass);
      for (var i = chains.length - 1; i >= 0; i--) {
        var cls = chains[i];
        var attrs = cls.hasOwnProperty("__attrs__") && cls.__attrs__;
        if (!attrs) {
          superClass = chains[i + 1];
          createAttrsSingle(cls, superClass && superClass.__attrs__);
        }
      }
      superClass = chains[0];
      createAttrsSingle(subclass, superClass && superClass.__attrs__);
      return subclass.__attrs__;
    }
    function attr(ctor, propName, newAttrs) {
      var attrs = getClassAttrs(ctor);
      var _key;
      true;
      var prefix = propName + DELIMETER;
      var ret = {};
      for (var key in attrs) key.startsWith(prefix) && (ret[key.slice(prefix.length)] = attrs[key]);
      return ret;
    }
    function getClassAttrs(ctor) {
      return ctor.hasOwnProperty("__attrs__") && ctor.__attrs__ || createAttrs(ctor);
    }
    function setClassAttr(ctor, propName, key, value) {
      getClassAttrs(ctor)[propName + DELIMETER + key] = value;
    }
    function PrimitiveType(name, def) {
      this.name = name;
      this["default"] = def;
    }
    PrimitiveType.prototype.toString = function() {
      return this.name;
    };
    cc.Integer = new PrimitiveType("Integer", 0);
    cc.Float = new PrimitiveType("Float", 0);
    false;
    cc.Boolean = new PrimitiveType("Boolean", false);
    cc.String = new PrimitiveType("String", "");
    function getTypeChecker(type, attrName) {
      return function(constructor, mainPropName) {
        var propInfo = '"' + js.getClassName(constructor) + "." + mainPropName + '"';
        var mainPropAttrs = attr(constructor, mainPropName);
        var mainPropAttrsType = mainPropAttrs.type;
        mainPropAttrsType === cc.Integer || mainPropAttrsType === cc.Float ? mainPropAttrsType = "Number" : mainPropAttrsType !== cc.String && mainPropAttrsType !== cc.Boolean || (mainPropAttrsType = "" + mainPropAttrsType);
        if (mainPropAttrsType !== type) {
          cc.warnID(3604, propInfo);
          return;
        }
        if (!mainPropAttrs.hasOwnProperty("default")) return;
        var defaultVal = mainPropAttrs["default"];
        if ("undefined" === typeof defaultVal) return;
        var isContainer = Array.isArray(defaultVal) || isPlainEmptyObj(defaultVal);
        if (isContainer) return;
        var defaultType = typeof defaultVal;
        var type_lowerCase = type.toLowerCase();
        if (defaultType === type_lowerCase) if ("object" === type_lowerCase) {
          if (!defaultVal || defaultVal instanceof mainPropAttrs.ctor) return;
          cc.warnID(3605, propInfo, js.getClassName(mainPropAttrs.ctor));
        } else "Number" !== type && cc.warnID(3606, attrName, propInfo, type); else {
          if ("function" === defaultType) return;
          type === cc.String && null == defaultVal ? cc.warnID(3607, propInfo) : cc.warnID(3611, attrName, propInfo, defaultType);
        }
        delete mainPropAttrs.type;
      };
    }
    function getObjTypeChecker(typeCtor) {
      return function(classCtor, mainPropName) {
        getTypeChecker("Object", "type")(classCtor, mainPropName);
        var defaultDef = getClassAttrs(classCtor)[mainPropName + DELIMETER + "default"];
        var defaultVal = require("./CCClass").getDefault(defaultDef);
        if (!Array.isArray(defaultVal) && js.isChildClassOf(typeCtor, cc.ValueType)) {
          var typename = js.getClassName(typeCtor);
          var info = cc.js.formatStr('No need to specify the "type" of "%s.%s" because %s is a child class of ValueType.', js.getClassName(classCtor), mainPropName, typename);
          defaultDef ? cc.log(info) : cc.warnID(3612, info, typename, js.getClassName(classCtor), mainPropName, typename);
        }
      };
    }
    module.exports = {
      PrimitiveType: PrimitiveType,
      attr: attr,
      getClassAttrs: getClassAttrs,
      setClassAttr: setClassAttr,
      DELIMETER: DELIMETER,
      getTypeChecker_ET: (false, false) && getTypeChecker,
      getObjTypeChecker_ET: (false, false) && getObjTypeChecker,
      ScriptUuid: {}
    };
  }), {
    "./CCClass": 138,
    "./js": 158,
    "./utils": 161
  } ],
  151: [ (function(require, module, exports) {
    "use strict";
    var js = require("./js");
    var fastRemoveAt = js.array.fastRemoveAt;
    function empty() {}
    function CallbackInfo() {
      this.callback = empty;
      this.target = void 0;
      this.once = false;
    }
    CallbackInfo.prototype.set = function(callback, target, once) {
      this.callback = callback;
      this.target = target;
      this.once = !!once;
    };
    var callbackInfoPool = new js.Pool(function(info) {
      info.callback = empty;
      info.target = void 0;
      info.once = false;
      return true;
    }, 32);
    callbackInfoPool.get = function() {
      return this._get() || new CallbackInfo();
    };
    function CallbackList() {
      this.callbackInfos = [];
      this.isInvoking = false;
      this.containCanceled = false;
    }
    var proto = CallbackList.prototype;
    proto.removeByCallback = function(cb) {
      for (var i = 0; i < this.callbackInfos.length; ++i) {
        var info = this.callbackInfos[i];
        if (info && info.callback === cb) {
          callbackInfoPool.put(info);
          fastRemoveAt(this.callbackInfos, i);
          --i;
        }
      }
    };
    proto.removeByTarget = function(target) {
      for (var i = 0; i < this.callbackInfos.length; ++i) {
        var info = this.callbackInfos[i];
        if (info && info.target === target) {
          callbackInfoPool.put(info);
          fastRemoveAt(this.callbackInfos, i);
          --i;
        }
      }
    };
    proto.cancel = function(index) {
      var info = this.callbackInfos[index];
      if (info) {
        callbackInfoPool.put(info);
        this.callbackInfos[index] = null;
      }
      this.containCanceled = true;
    };
    proto.cancelAll = function() {
      for (var i = 0; i < this.callbackInfos.length; i++) {
        var info = this.callbackInfos[i];
        if (info) {
          callbackInfoPool.put(info);
          this.callbackInfos[i] = null;
        }
      }
      this.containCanceled = true;
    };
    proto.purgeCanceled = function() {
      for (var i = this.callbackInfos.length - 1; i >= 0; --i) {
        var info = this.callbackInfos[i];
        info || fastRemoveAt(this.callbackInfos, i);
      }
      this.containCanceled = false;
    };
    proto.clear = function() {
      this.cancelAll();
      this.callbackInfos.length = 0;
      this.isInvoking = false;
      this.containCanceled = false;
    };
    var MAX_SIZE = 16;
    var callbackListPool = new js.Pool(function(info) {
      info.callbackInfos = [];
      info.isInvoking = false;
      info.containCanceled = false;
      return true;
    }, MAX_SIZE);
    callbackListPool.get = function() {
      return this._get() || new CallbackList();
    };
    function CallbacksInvoker() {
      this._callbackTable = js.createMap(true);
    }
    proto = CallbacksInvoker.prototype;
    proto.on = function(key, callback, target, once) {
      var list = this._callbackTable[key];
      list || (list = this._callbackTable[key] = callbackListPool.get());
      var info = callbackInfoPool.get();
      info.set(callback, target, once);
      list.callbackInfos.push(info);
    };
    proto.hasEventListener = function(key, callback, target) {
      var list = this._callbackTable[key];
      if (!list) return false;
      var infos = list.callbackInfos;
      if (!callback) {
        if (list.isInvoking) {
          for (var i = 0; i < infos.length; ++i) if (infos[i]) return true;
          return false;
        }
        return infos.length > 0;
      }
      for (var _i = 0; _i < infos.length; ++_i) {
        var info = infos[_i];
        if (info && info.callback === callback && info.target === target) return true;
      }
      return false;
    };
    proto.removeAll = function(keyOrTarget) {
      if ("string" === typeof keyOrTarget) {
        var list = this._callbackTable[keyOrTarget];
        if (list) if (list.isInvoking) list.cancelAll(); else {
          list.clear();
          callbackListPool.put(list);
          delete this._callbackTable[keyOrTarget];
        }
      } else if (keyOrTarget) for (var key in this._callbackTable) {
        var _list = this._callbackTable[key];
        if (_list.isInvoking) {
          var infos = _list.callbackInfos;
          for (var i = 0; i < infos.length; ++i) {
            var info = infos[i];
            info && info.target === keyOrTarget && _list.cancel(i);
          }
        } else _list.removeByTarget(keyOrTarget);
      }
    };
    proto.off = function(key, callback, target) {
      var list = this._callbackTable[key];
      if (list) {
        var infos = list.callbackInfos;
        for (var i = 0; i < infos.length; ++i) {
          var info = infos[i];
          if (info && info.callback === callback && info.target === target) {
            if (list.isInvoking) list.cancel(i); else {
              fastRemoveAt(infos, i);
              callbackInfoPool.put(info);
            }
            break;
          }
        }
      }
    };
    proto.emit = function(key, arg1, arg2, arg3, arg4, arg5) {
      var list = this._callbackTable[key];
      if (list) {
        var rootInvoker = !list.isInvoking;
        list.isInvoking = true;
        var infos = list.callbackInfos;
        for (var i = 0, len = infos.length; i < len; ++i) {
          var info = infos[i];
          if (info) {
            var target = info.target;
            var callback = info.callback;
            info.once && this.off(key, callback, target);
            target ? callback.call(target, arg1, arg2, arg3, arg4, arg5) : callback(arg1, arg2, arg3, arg4, arg5);
          }
        }
        if (rootInvoker) {
          list.isInvoking = false;
          list.containCanceled && list.purgeCanceled();
        }
      }
    };
    false;
    module.exports = CallbacksInvoker;
  }), {
    "./js": 158
  } ],
  152: [ (function(require, module, exports) {
    "use strict";
    function deepFlatten(strList, array) {
      for (var i = 0; i < array.length; i++) {
        var item = array[i];
        Array.isArray(item) ? deepFlatten(strList, item) : strList.push(item);
      }
    }
    function flattenCodeArray(array) {
      var separator = "";
      var strList = [];
      deepFlatten(strList, array);
      return strList.join(separator);
    }
    module.exports = {
      flattenCodeArray: flattenCodeArray
    };
  }), {} ],
  153: [ (function(require, module, exports) {
    "use strict";
    var js = require("./js");
    var Attr = require("./attribute");
    var CCClass = require("./CCClass");
    var misc = require("../utils/misc");
    var Details = function Details() {
      this.uuidList = [];
      this.uuidObjList = [];
      this.uuidPropList = [];
    };
    Details.prototype.reset = function() {
      this.uuidList.length = 0;
      this.uuidObjList.length = 0;
      this.uuidPropList.length = 0;
    };
    false, false;
    Details.prototype.push = function(obj, propName, uuid) {
      this.uuidList.push(uuid);
      this.uuidObjList.push(obj);
      this.uuidPropList.push(propName);
    };
    Details.pool = new js.Pool(function(obj) {
      obj.reset();
    }, 10);
    Details.pool.get = function() {
      return this._get() || new Details();
    };
    var _Deserializer = (function() {
      function _Deserializer(result, classFinder, customEnv, ignoreEditorOnly) {
        this.result = result;
        this.customEnv = customEnv;
        this.deserializedList = [];
        this.deserializedData = null;
        this._classFinder = classFinder;
        false;
        this._idList = [];
        this._idObjList = [];
        this._idPropList = [];
      }
      function _dereference(self) {
        var deserializedList = self.deserializedList;
        var idPropList = self._idPropList;
        var idList = self._idList;
        var idObjList = self._idObjList;
        var onDereferenced = self._classFinder && self._classFinder.onDereferenced;
        var i, propName, id;
        false;
        for (i = 0; i < idList.length; i++) {
          propName = idPropList[i];
          id = idList[i];
          idObjList[i][propName] = deserializedList[id];
        }
      }
      var prototype = _Deserializer.prototype;
      prototype.deserialize = function(jsonObj) {
        if (Array.isArray(jsonObj)) {
          var jsonArray = jsonObj;
          var refCount = jsonArray.length;
          this.deserializedList.length = refCount;
          for (var i = 0; i < refCount; i++) if (jsonArray[i]) {
            false, false;
            this.deserializedList[i] = this._deserializeObject(jsonArray[i]);
          }
          this.deserializedData = refCount > 0 ? this.deserializedList[0] : [];
        } else {
          this.deserializedList.length = 1;
          false, false;
          this.deserializedData = jsonObj ? this._deserializeObject(jsonObj) : null;
          this.deserializedList[0] = this.deserializedData;
        }
        _dereference(this);
        return this.deserializedData;
      };
      prototype._deserializeObject = function(serialized, owner, propName) {
        var prop;
        var obj = null;
        var klass = null;
        var type = serialized.__type__;
        if ("TypedArray" === type) {
          var array = serialized.array;
          obj = new window[serialized.ctor](array.length);
          for (var i = 0; i < array.length; ++i) obj[i] = array[i];
          return obj;
        }
        if (type) {
          klass = this._classFinder(type, serialized, owner, propName);
          if (!klass) {
            var notReported = this._classFinder === js._getClassById;
            notReported && cc.deserialize.reportMissingClass(type);
            return null;
          }
          obj = new klass();
          if (obj._deserialize) {
            obj._deserialize(serialized.content, this);
            return obj;
          }
          cc.Class._isCCClass(klass) ? _deserializeFireClass(this, obj, serialized, klass) : this._deserializeTypedObject(obj, serialized, klass);
        } else if (Array.isArray(serialized)) {
          obj = new Array(serialized.length);
          for (var _i = 0; _i < serialized.length; _i++) {
            prop = serialized[_i];
            "object" === typeof prop && prop ? this._deserializeObjField(obj, prop, "" + _i) : obj[_i] = prop;
          }
        } else {
          obj = {};
          this._deserializePrimitiveObject(obj, serialized);
        }
        return obj;
      };
      prototype._deserializeObjField = function(obj, jsonObj, propName) {
        var id = jsonObj.__id__;
        if (void 0 === id) {
          var uuid = jsonObj.__uuid__;
          if (uuid) this.result.push(obj, propName, uuid); else {
            false, false;
            obj[propName] = this._deserializeObject(jsonObj);
          }
        } else {
          var dObj = this.deserializedList[id];
          if (dObj) obj[propName] = dObj; else {
            this._idList.push(id);
            this._idObjList.push(obj);
            this._idPropList.push(propName);
          }
        }
      };
      prototype._deserializePrimitiveObject = function(instance, serialized) {
        for (var propName in serialized) if (serialized.hasOwnProperty(propName)) {
          var prop = serialized[propName];
          "object" !== typeof prop ? "__type__" !== propName && (instance[propName] = prop) : prop ? this._deserializeObjField(instance, prop, propName) : instance[propName] = null;
        }
      };
      prototype._deserializeTypedObject = function(instance, serialized, klass) {
        if (klass === cc.Vec2) {
          instance.x = serialized.x || 0;
          instance.y = serialized.y || 0;
          return;
        }
        if (klass === cc.Vec3) {
          instance.x = serialized.x || 0;
          instance.y = serialized.y || 0;
          instance.z = serialized.z || 0;
          return;
        }
        if (klass === cc.Color) {
          instance.r = serialized.r || 0;
          instance.g = serialized.g || 0;
          instance.b = serialized.b || 0;
          var a = serialized.a;
          instance.a = void 0 === a ? 255 : a;
          return;
        }
        if (klass === cc.Size) {
          instance.width = serialized.width || 0;
          instance.height = serialized.height || 0;
          return;
        }
        var DEFAULT = Attr.DELIMETER + "default";
        var attrs = Attr.getClassAttrs(klass);
        var fastDefinedProps = klass.__props__ || Object.keys(instance);
        for (var i = 0; i < fastDefinedProps.length; i++) {
          var propName = fastDefinedProps[i];
          var value = serialized[propName];
          void 0 !== value && serialized.hasOwnProperty(propName) || (value = CCClass.getDefault(attrs[propName + DEFAULT]));
          "object" !== typeof value ? instance[propName] = value : value ? this._deserializeObjField(instance, value, propName) : instance[propName] = null;
        }
      };
      function compileObjectTypeJit(sources, defaultValue, accessorToSet, propNameLiteralToSet, assumeHavePropIfIsValue) {
        if (defaultValue instanceof cc.ValueType) {
          assumeHavePropIfIsValue || sources.push("if(prop){");
          var ctorCode = js.getClassName(defaultValue);
          sources.push("s._deserializeTypedObject(o" + accessorToSet + ",prop," + ctorCode + ");");
          assumeHavePropIfIsValue || sources.push("}else o" + accessorToSet + "=null;");
        } else {
          sources.push("if(prop){");
          sources.push("s._deserializeObjField(o,prop," + propNameLiteralToSet + ");");
          sources.push("}else o" + accessorToSet + "=null;");
        }
      }
      var compileDeserialize = function(self, klass) {
        var fastMode = misc.BUILTIN_CLASSID_RE.test(js._getClassId(klass));
        var shouldCopyId = cc.js.isChildClassOf(klass, cc._BaseNode) || cc.js.isChildClassOf(klass, cc.Component);
        var shouldCopyRawData;
        var simpleProps = [];
        var simplePropsToRead = simpleProps;
        var advancedProps = [];
        var advancedPropsToRead = advancedProps;
        var advancedPropsValueType = [];
        (function() {
          var props = klass.__values__;
          shouldCopyRawData = "_$erialized" === props[props.length - 1];
          var attrs = Attr.getClassAttrs(klass);
          var TYPE = Attr.DELIMETER + "type";
          var DEFAULT = Attr.DELIMETER + "default";
          var FORMERLY_SERIALIZED_AS = Attr.DELIMETER + "formerlySerializedAs";
          for (var p = 0; p < props.length; p++) {
            var propName = props[p];
            var propNameToRead = propName;
            attrs[propName + FORMERLY_SERIALIZED_AS] && (propNameToRead = attrs[propName + FORMERLY_SERIALIZED_AS]);
            var defaultValue = CCClass.getDefault(attrs[propName + DEFAULT]);
            var isPrimitiveType = false;
            if (fastMode) {
              var userType = attrs[propName + TYPE];
              if (void 0 === defaultValue && userType) isPrimitiveType = userType instanceof Attr.PrimitiveType; else {
                var defaultType = typeof defaultValue;
                isPrimitiveType = "string" === defaultType || "number" === defaultType || "boolean" === defaultType;
              }
            }
            if (fastMode && isPrimitiveType) {
              propNameToRead !== propName && simplePropsToRead === simpleProps && (simplePropsToRead = simpleProps.slice());
              simpleProps.push(propName);
              simplePropsToRead !== simpleProps && simplePropsToRead.push(propNameToRead);
            } else {
              propNameToRead !== propName && advancedPropsToRead === advancedProps && (advancedPropsToRead = advancedProps.slice());
              advancedProps.push(propName);
              advancedPropsToRead !== advancedProps && advancedPropsToRead.push(propNameToRead);
              advancedPropsValueType.push(defaultValue instanceof cc.ValueType && defaultValue.constructor);
            }
          }
        })();
        return function(s, o, d, k) {
          for (var i = 0; i < simpleProps.length; ++i) {
            var _prop = d[simplePropsToRead[i]];
            void 0 !== _prop && (o[simpleProps[i]] = _prop);
          }
          for (var _i2 = 0; _i2 < advancedProps.length; ++_i2) {
            var propName = advancedProps[_i2];
            var prop = d[advancedPropsToRead[_i2]];
            if (void 0 === prop) continue;
            if (fastMode || "object" === typeof prop) {
              var valueTypeCtor = advancedPropsValueType[_i2];
              valueTypeCtor ? fastMode || prop ? s._deserializeTypedObject(o[propName], prop, valueTypeCtor) : o[propName] = null : prop ? s._deserializeObjField(o, prop, propName) : o[propName] = null;
            } else o[propName] = prop;
          }
          shouldCopyId && d._id && (o._id = d._id);
          if (shouldCopyRawData) {
            o._$erialized = JSON.parse(JSON.stringify(d));
            s._deserializePrimitiveObject(o._$erialized, d);
          }
        };
      };
      function unlinkUnusedPrefab(self, serialized, obj) {
        var uuid = serialized["asset"] && serialized["asset"].__uuid__;
        if (uuid) {
          var last = self.result.uuidList.length - 1;
          if (self.result.uuidList[last] === uuid && self.result.uuidObjList[last] === obj && "asset" === self.result.uuidPropList[last]) {
            self.result.uuidList.pop();
            self.result.uuidObjList.pop();
            self.result.uuidPropList.pop();
          } else {
            var debugEnvOnlyInfo = "Failed to skip prefab asset while deserializing PrefabInfo";
            cc.warn(debugEnvOnlyInfo);
          }
        }
      }
      function _deserializeFireClass(self, obj, serialized, klass) {
        var deserialize;
        if (klass.hasOwnProperty("__deserialize__")) deserialize = klass.__deserialize__; else {
          deserialize = compileDeserialize(self, klass);
          js.value(klass, "__deserialize__", deserialize, true);
        }
        deserialize(self, obj, serialized, klass);
        false, false;
      }
      _Deserializer.pool = new js.Pool(function(obj) {
        obj.result = null;
        obj.customEnv = null;
        obj.deserializedList.length = 0;
        obj.deserializedData = null;
        obj._classFinder = null;
        obj._idList.length = 0;
        obj._idObjList.length = 0;
        obj._idPropList.length = 0;
      }, 1);
      _Deserializer.pool.get = function(result, classFinder, customEnv, ignoreEditorOnly) {
        var cache = this._get();
        if (cache) {
          cache.result = result;
          cache.customEnv = customEnv;
          cache._classFinder = classFinder;
          false;
          return cache;
        }
        return new _Deserializer(result, classFinder, customEnv, ignoreEditorOnly);
      };
      return _Deserializer;
    })();
    cc.deserialize = function(data, details, options) {
      options = options || {};
      var classFinder = options.classFinder || js._getClassById;
      var createAssetRefs = options.createAssetRefs || cc.sys.platform === cc.sys.EDITOR_CORE;
      var customEnv = options.customEnv;
      var ignoreEditorOnly = options.ignoreEditorOnly;
      false;
      "string" === typeof data && (data = JSON.parse(data));
      var tempDetails = !details;
      details = details || Details.pool.get();
      var deserializer = _Deserializer.pool.get(details, classFinder, customEnv, ignoreEditorOnly);
      cc.game._isCloning = true;
      var res = deserializer.deserialize(data);
      cc.game._isCloning = false;
      _Deserializer.pool.put(deserializer);
      createAssetRefs && details.assignAssetsBy(Editor.serialize.asAsset);
      tempDetails && Details.pool.put(details);
      return res;
    };
    cc.deserialize.Details = Details;
    cc.deserialize.reportMissingClass = function(id) {
      false;
      cc.warnID(5302, id);
    };
  }), {
    "../utils/misc": 209,
    "./CCClass": 138,
    "./attribute": 150,
    "./js": 158
  } ],
  154: [ (function(require, module, exports) {
    "use strict";
    var NonUuidMark = ".";
    function IdGenerater(category) {
      this.id = 0 | 998 * Math.random();
      this.prefix = category ? category + NonUuidMark : "";
    }
    IdGenerater.prototype.getNewId = function() {
      return this.prefix + ++this.id;
    };
    IdGenerater.global = new IdGenerater("global");
    module.exports = IdGenerater;
  }), {} ],
  155: [ (function(require, module, exports) {
    "use strict";
    require("./js");
    require("./CCClass");
    require("./CCClassDecorator");
    require("./CCEnum");
    require("./CCObject");
    require("./callbacks-invoker");
    require("./deserialize");
    require("./instantiate");
    require("./instantiate-jit");
    require("./requiring-frame");
    require("./CCSys");
    require("./CCMacro");
    true;
    require("./CCVisibleRect");
  }), {
    "./CCClass": 138,
    "./CCClassDecorator": 139,
    "./CCEnum": 140,
    "./CCMacro": 143,
    "./CCObject": 144,
    "./CCSys": 147,
    "./CCVisibleRect": 149,
    "./callbacks-invoker": 151,
    "./deserialize": 153,
    "./instantiate": 157,
    "./instantiate-jit": 156,
    "./js": 158,
    "./requiring-frame": 160
  } ],
  156: [ (function(require, module, exports) {
    "use strict";
    var CCObject = require("./CCObject");
    var Destroyed = CCObject.Flags.Destroyed;
    var PersistentMask = CCObject.Flags.PersistentMask;
    var Attr = require("./attribute");
    var js = require("./js");
    var CCClass = require("./CCClass");
    var Compiler = require("./compiler");
    var DEFAULT = Attr.DELIMETER + "default";
    var IDENTIFIER_RE = CCClass.IDENTIFIER_RE;
    var escapeForJS = CCClass.escapeForJS;
    var VAR = "var ";
    var LOCAL_OBJ = "o";
    var LOCAL_TEMP_OBJ = "t";
    var LOCAL_ARRAY = "a";
    var LINE_INDEX_OF_NEW_OBJ = 0;
    var DEFAULT_MODULE_CACHE = {
      "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": false,
      "cc.PrefabInfo": false
    };
    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 (e) {}
    function getTypedArrayName(constructor) {
      if (constructor === Float32Array) return "Float32Array";
      if (constructor === Float64Array) return "Float64Array";
      if (constructor === Int8Array) return "Int8Array";
      if (constructor === Int16Array) return "Int16Array";
      if (constructor === Int32Array) return "Int32Array";
      if (constructor === Uint8Array) return "Uint8Array";
      if (constructor === Uint16Array) return "Uint16Array";
      if (constructor === Uint32Array) return "Uint32Array";
      throw new Error("Unknown TypedArray could not be instantiated: " + constructor);
    }
    function Declaration(varName, expression) {
      this.varName = varName;
      this.expression = expression;
    }
    Declaration.prototype.toString = function() {
      return VAR + this.varName + "=" + this.expression + ";";
    };
    function mergeDeclaration(statement, expression) {
      return expression instanceof Declaration ? new Declaration(expression.varName, statement + expression.expression) : statement + expression;
    }
    function writeAssignment(codeArray, statement, expression) {
      if (Array.isArray(expression)) {
        expression[0] = mergeDeclaration(statement, expression[0]);
        codeArray.push(expression);
      } else codeArray.push(mergeDeclaration(statement, expression) + ";");
    }
    function Assignments(targetExpression) {
      this._exps = [];
      this._targetExp = targetExpression;
    }
    Assignments.prototype.append = function(key, expression) {
      this._exps.push([ key, expression ]);
    };
    Assignments.prototype.writeCode = function(codeArray) {
      var targetVar;
      if (this._exps.length > 1) {
        codeArray.push(LOCAL_TEMP_OBJ + "=" + this._targetExp + ";");
        targetVar = LOCAL_TEMP_OBJ;
      } else {
        if (1 !== this._exps.length) return;
        targetVar = this._targetExp;
      }
      for (var i = 0; i < this._exps.length; i++) {
        var pair = this._exps[i];
        writeAssignment(codeArray, targetVar + getPropAccessor(pair[0]) + "=", pair[1]);
      }
    };
    Assignments.pool = new js.Pool(function(obj) {
      obj._exps.length = 0;
      obj._targetExp = null;
    }, 1);
    Assignments.pool.get = function(targetExpression) {
      var cache = this._get() || new Assignments();
      cache._targetExp = targetExpression;
      return cache;
    };
    function equalsToDefault(def, value) {
      if ("function" === typeof def) try {
        def = def();
      } catch (e) {
        return false;
      }
      if (def === value) return true;
      if (def && value) {
        if (def instanceof cc.ValueType && def.equals(value)) return true;
        if (Array.isArray(def) && Array.isArray(value) || def.constructor === Object && value.constructor === Object) try {
          return Array.isArray(def) && Array.isArray(value) && 0 === def.length && 0 === value.length;
        } catch (e) {}
      }
      return false;
    }
    function getPropAccessor(key) {
      return IDENTIFIER_RE.test(key) ? "." + key : "[" + escapeForJS(key) + "]";
    }
    function Parser(obj, parent) {
      this.parent = parent;
      this.objsToClear_iN$t = [];
      this.codeArray = [];
      this.objs = [];
      this.funcs = [];
      this.funcModuleCache = js.createMap();
      js.mixin(this.funcModuleCache, DEFAULT_MODULE_CACHE);
      this.globalVariables = [];
      this.globalVariableId = 0;
      this.localVariableId = 0;
      this.codeArray.push(VAR + LOCAL_OBJ + "," + LOCAL_TEMP_OBJ + ";", "if(R){", LOCAL_OBJ + "=R;", "}else{", LOCAL_OBJ + "=R=new " + this.getFuncModule(obj.constructor, true) + "();", "}");
      js.value(obj, "_iN$t", {
        globalVar: "R"
      }, true);
      this.objsToClear_iN$t.push(obj);
      this.enumerateObject(this.codeArray, obj);
      var globalVariablesDeclaration;
      this.globalVariables.length > 0 && (globalVariablesDeclaration = VAR + this.globalVariables.join(",") + ";");
      var code = Compiler.flattenCodeArray([ "return (function(R){", globalVariablesDeclaration || [], this.codeArray, "return o;", "})" ]);
      this.result = Function("O", "F", code)(this.objs, this.funcs);
      for (var i = 0, len = this.objsToClear_iN$t.length; i < len; ++i) this.objsToClear_iN$t[i]._iN$t = null;
      this.objsToClear_iN$t.length = 0;
    }
    var proto = Parser.prototype;
    proto.getFuncModule = function(func, usedInNew) {
      var clsName = js.getClassName(func);
      if (clsName) {
        var cache = this.funcModuleCache[clsName];
        if (cache) return cache;
        if (void 0 === cache) {
          var clsNameIsModule = -1 !== clsName.indexOf(".");
          if (clsNameIsModule) try {
            clsNameIsModule = func === Function("return " + clsName)();
            if (clsNameIsModule) {
              this.funcModuleCache[clsName] = clsName;
              return clsName;
            }
          } catch (e) {}
        }
      }
      var index = this.funcs.indexOf(func);
      if (index < 0) {
        index = this.funcs.length;
        this.funcs.push(func);
      }
      var res = "F[" + index + "]";
      usedInNew && (res = "(" + res + ")");
      this.funcModuleCache[clsName] = res;
      return res;
    };
    proto.getObjRef = function(obj) {
      var index = this.objs.indexOf(obj);
      if (index < 0) {
        index = this.objs.length;
        this.objs.push(obj);
      }
      return "O[" + index + "]";
    };
    proto.setValueType = function(codeArray, defaultValue, srcValue, targetExpression) {
      var assignments = Assignments.pool.get(targetExpression);
      var fastDefinedProps = defaultValue.constructor.__props__;
      fastDefinedProps || (fastDefinedProps = Object.keys(defaultValue));
      for (var i = 0; i < fastDefinedProps.length; i++) {
        var propName = fastDefinedProps[i];
        var prop = srcValue[propName];
        if (defaultValue[propName] === prop) continue;
        var expression = this.enumerateField(srcValue, propName, prop);
        assignments.append(propName, expression);
      }
      assignments.writeCode(codeArray);
      Assignments.pool.put(assignments);
    };
    proto.enumerateCCClass = function(codeArray, obj, klass) {
      var props = klass.__values__;
      var attrs = Attr.getClassAttrs(klass);
      for (var p = 0; p < props.length; p++) {
        var key = props[p];
        var val = obj[key];
        var defaultValue = attrs[key + DEFAULT];
        if (equalsToDefault(defaultValue, val)) continue;
        if ("object" === typeof val && val instanceof cc.ValueType) {
          defaultValue = CCClass.getDefault(defaultValue);
          if (defaultValue && defaultValue.constructor === val.constructor) {
            var targetExpression = LOCAL_OBJ + getPropAccessor(key);
            this.setValueType(codeArray, defaultValue, val, targetExpression);
            continue;
          }
        }
        this.setObjProp(codeArray, obj, key, val);
      }
    };
    proto.instantiateArray = function(value) {
      if (0 === value.length) return "[]";
      var arrayVar = LOCAL_ARRAY + ++this.localVariableId;
      var declaration = new Declaration(arrayVar, "new Array(" + value.length + ")");
      var codeArray = [ declaration ];
      js.value(value, "_iN$t", {
        globalVar: "",
        source: codeArray
      }, true);
      this.objsToClear_iN$t.push(value);
      for (var i = 0; i < value.length; ++i) {
        var statement = arrayVar + "[" + i + "]=";
        var expression = this.enumerateField(value, i, value[i]);
        writeAssignment(codeArray, statement, expression);
      }
      return codeArray;
    };
    proto.instantiateTypedArray = function(value) {
      var type = value.constructor.name || getTypedArrayName(value.constructor);
      if (0 === value.length) return "new " + type;
      var arrayVar = LOCAL_ARRAY + ++this.localVariableId;
      var declaration = new Declaration(arrayVar, "new " + type + "(" + value.length + ")");
      var codeArray = [ declaration ];
      value._iN$t = {
        globalVar: "",
        source: codeArray
      };
      this.objsToClear_iN$t.push(value);
      for (var i = 0; i < value.length; ++i) if (0 !== value[i]) {
        var statement = arrayVar + "[" + i + "]=";
        writeAssignment(codeArray, statement, value[i]);
      }
      return codeArray;
    };
    proto.enumerateField = function(obj, key, value) {
      if ("object" === typeof value && value) {
        var _iN$t = value._iN$t;
        if (_iN$t) {
          var globalVar = _iN$t.globalVar;
          if (!globalVar) {
            globalVar = _iN$t.globalVar = "v" + ++this.globalVariableId;
            this.globalVariables.push(globalVar);
            var line = _iN$t.source[LINE_INDEX_OF_NEW_OBJ];
            _iN$t.source[LINE_INDEX_OF_NEW_OBJ] = mergeDeclaration(globalVar + "=", line);
          }
          return globalVar;
        }
        return ArrayBuffer.isView(value) ? this.instantiateTypedArray(value) : Array.isArray(value) ? this.instantiateArray(value) : this.instantiateObj(value);
      }
      if ("function" === typeof value) return this.getFuncModule(value);
      if ("string" === typeof value) return escapeForJS(value);
      "_objFlags" === key && obj instanceof CCObject && (value &= PersistentMask);
      return value;
    };
    proto.setObjProp = function(codeArray, obj, key, value) {
      var statement = LOCAL_OBJ + getPropAccessor(key) + "=";
      var expression = this.enumerateField(obj, key, value);
      writeAssignment(codeArray, statement, expression);
    };
    proto.enumerateObject = function(codeArray, obj) {
      var klass = obj.constructor;
      if (cc.Class._isCCClass(klass)) this.enumerateCCClass(codeArray, obj, klass); else for (var key in obj) {
        if (!obj.hasOwnProperty(key) || 95 === key.charCodeAt(0) && 95 === key.charCodeAt(1) && "__type__" !== key) continue;
        var value = obj[key];
        if ("object" === typeof value && value && value === obj._iN$t) continue;
        this.setObjProp(codeArray, obj, key, value);
      }
    };
    proto.instantiateObj = function(obj) {
      if (obj instanceof cc.ValueType) return CCClass.getNewValueTypeCode(obj);
      if (obj instanceof cc.Asset) return this.getObjRef(obj);
      if (obj._objFlags & Destroyed) return null;
      var createCode;
      var ctor = obj.constructor;
      if (cc.Class._isCCClass(ctor)) {
        if (this.parent) if (this.parent instanceof cc.Component) {
          if (obj instanceof cc._BaseNode || obj instanceof cc.Component) return this.getObjRef(obj);
        } else if (this.parent instanceof cc._BaseNode) if (obj instanceof cc._BaseNode) {
          if (!obj.isChildOf(this.parent)) return this.getObjRef(obj);
        } else if (obj instanceof cc.Component && !obj.node.isChildOf(this.parent)) return this.getObjRef(obj);
        createCode = new Declaration(LOCAL_OBJ, "new " + this.getFuncModule(ctor, true) + "()");
      } else if (ctor === Object) createCode = new Declaration(LOCAL_OBJ, "{}"); else {
        if (ctor) return this.getObjRef(obj);
        createCode = new Declaration(LOCAL_OBJ, "Object.create(null)");
      }
      var codeArray = [ createCode ];
      js.value(obj, "_iN$t", {
        globalVar: "",
        source: codeArray
      }, true);
      this.objsToClear_iN$t.push(obj);
      this.enumerateObject(codeArray, obj);
      return [ "(function(){", codeArray, "return o;})();" ];
    };
    function compile(node) {
      var root = node instanceof cc._BaseNode && node;
      var parser = new Parser(node, root);
      return parser.result;
    }
    module.exports = {
      compile: compile,
      equalsToDefault: equalsToDefault
    };
    false;
  }), {
    "./CCClass": 138,
    "./CCObject": 144,
    "./attribute": 150,
    "./compiler": 152,
    "./js": 158
  } ],
  157: [ (function(require, module, exports) {
    "use strict";
    var CCObject = require("./CCObject");
    var CCValueType = require("../value-types/value-type");
    var Destroyed = CCObject.Flags.Destroyed;
    var PersistentMask = CCObject.Flags.PersistentMask;
    var _isDomNode = require("./utils").isDomNode;
    var js = require("./js");
    function instantiate(original, internal_force) {
      if (!internal_force) {
        if ("object" !== typeof original || Array.isArray(original)) {
          false;
          return null;
        }
        if (!original) {
          false;
          return null;
        }
        if (!cc.isValid(original)) {
          false;
          return null;
        }
        false;
      }
      var clone;
      if (original instanceof CCObject) {
        if (original._instantiate) {
          cc.game._isCloning = true;
          clone = original._instantiate();
          cc.game._isCloning = false;
          return clone;
        }
        if (original instanceof cc.Asset) {
          false;
          return null;
        }
      }
      cc.game._isCloning = true;
      clone = doInstantiate(original);
      cc.game._isCloning = false;
      return clone;
    }
    var objsToClearTmpVar = [];
    function doInstantiate(obj, parent) {
      if (Array.isArray(obj)) {
        false;
        return null;
      }
      if (_isDomNode && _isDomNode(obj)) {
        false;
        return null;
      }
      var clone;
      if (obj._iN$t) clone = obj._iN$t; else if (obj.constructor) {
        var klass = obj.constructor;
        clone = new klass();
      } else clone = Object.create(null);
      enumerateObject(obj, clone, parent);
      for (var i = 0, len = objsToClearTmpVar.length; i < len; ++i) objsToClearTmpVar[i]._iN$t = null;
      objsToClearTmpVar.length = 0;
      return clone;
    }
    function enumerateCCClass(klass, obj, clone, parent) {
      var props = klass.__values__;
      for (var p = 0; p < props.length; p++) {
        var key = props[p];
        var value = obj[key];
        if ("object" === typeof value && value) {
          var initValue = clone[key];
          initValue instanceof CCValueType && initValue.constructor === value.constructor ? initValue.set(value) : clone[key] = value._iN$t || instantiateObj(value, parent);
        } else clone[key] = value;
      }
    }
    function enumerateObject(obj, clone, parent) {
      js.value(obj, "_iN$t", clone, true);
      objsToClearTmpVar.push(obj);
      var klass = obj.constructor;
      if (cc.Class._isCCClass(klass)) enumerateCCClass(klass, obj, clone, parent); else for (var key in obj) {
        if (!obj.hasOwnProperty(key) || 95 === key.charCodeAt(0) && 95 === key.charCodeAt(1) && "__type__" !== key) continue;
        var value = obj[key];
        if ("object" === typeof value && value) {
          if (value === clone) continue;
          clone[key] = value._iN$t || instantiateObj(value, parent);
        } else clone[key] = value;
      }
      obj instanceof CCObject && (clone._objFlags &= PersistentMask);
    }
    function instantiateObj(obj, parent) {
      if (obj instanceof CCValueType) return obj.clone();
      if (obj instanceof cc.Asset) return obj;
      var clone;
      if (ArrayBuffer.isView(obj)) {
        var len = obj.length;
        clone = new obj.constructor(len);
        obj._iN$t = clone;
        objsToClearTmpVar.push(obj);
        for (var i = 0; i < len; ++i) clone[i] = obj[i];
        return clone;
      }
      if (Array.isArray(obj)) {
        var _len = obj.length;
        clone = new Array(_len);
        js.value(obj, "_iN$t", clone, true);
        objsToClearTmpVar.push(obj);
        for (var _i = 0; _i < _len; ++_i) {
          var value = obj[_i];
          clone[_i] = "object" === typeof value && value ? value._iN$t || instantiateObj(value, parent) : value;
        }
        return clone;
      }
      if (obj._objFlags & Destroyed) return null;
      var ctor = obj.constructor;
      if (cc.Class._isCCClass(ctor)) {
        if (parent) if (parent instanceof cc.Component) {
          if (obj instanceof cc._BaseNode || obj instanceof cc.Component) return obj;
        } else if (parent instanceof cc._BaseNode) if (obj instanceof cc._BaseNode) {
          if (!obj.isChildOf(parent)) return obj;
        } else if (obj instanceof cc.Component && !obj.node.isChildOf(parent)) return obj;
        clone = new ctor();
      } else if (ctor === Object) clone = {}; else {
        if (ctor) return obj;
        clone = Object.create(null);
      }
      enumerateObject(obj, clone, parent);
      return clone;
    }
    instantiate._clone = doInstantiate;
    cc.instantiate = instantiate;
    module.exports = instantiate;
  }), {
    "../value-types/value-type": 232,
    "./CCObject": 144,
    "./js": 158,
    "./utils": 161
  } ],
  158: [ (function(require, module, exports) {
    "use strict";
    var tempCIDGenerater = new (require("./id-generater"))("TmpCId.");
    function _getPropertyDescriptor(obj, name) {
      while (obj) {
        var pd = Object.getOwnPropertyDescriptor(obj, name);
        if (pd) return pd;
        obj = Object.getPrototypeOf(obj);
      }
      return null;
    }
    function _copyprop(name, source, target) {
      var pd = _getPropertyDescriptor(source, name);
      Object.defineProperty(target, name, pd);
    }
    var js = {
      isNumber: function isNumber(obj) {
        return "number" === typeof obj || obj instanceof Number;
      },
      isString: function isString(obj) {
        return "string" === typeof obj || obj instanceof String;
      },
      addon: function addon(obj) {
        obj = obj || {};
        for (var i = 1, length = arguments.length; i < length; i++) {
          var source = arguments[i];
          if (source) {
            if ("object" !== typeof source) {
              cc.errorID(5402, source);
              continue;
            }
            for (var name in source) name in obj || _copyprop(name, source, obj);
          }
        }
        return obj;
      },
      mixin: function mixin(obj) {
        obj = obj || {};
        for (var i = 1, length = arguments.length; i < length; i++) {
          var source = arguments[i];
          if (source) {
            if ("object" !== typeof source) {
              cc.errorID(5403, source);
              continue;
            }
            for (var name in source) _copyprop(name, source, obj);
          }
        }
        return obj;
      },
      extend: function extend(cls, base) {
        false;
        for (var p in base) base.hasOwnProperty(p) && (cls[p] = base[p]);
        cls.prototype = Object.create(base.prototype, {
          constructor: {
            value: cls,
            writable: true,
            configurable: true
          }
        });
        return cls;
      },
      getSuper: function getSuper(ctor) {
        var proto = ctor.prototype;
        var dunderProto = proto && Object.getPrototypeOf(proto);
        return dunderProto && dunderProto.constructor;
      },
      isChildClassOf: function isChildClassOf(subclass, superclass) {
        if (subclass && superclass) {
          if ("function" !== typeof subclass) return false;
          if ("function" !== typeof superclass) {
            false;
            return false;
          }
          if (subclass === superclass) return true;
          for (;;) {
            subclass = js.getSuper(subclass);
            if (!subclass) return false;
            if (subclass === superclass) return true;
          }
        }
        return false;
      },
      clear: function clear(obj) {
        var keys = Object.keys(obj);
        for (var i = 0; i < keys.length; i++) delete obj[keys[i]];
      },
      isEmptyObject: function isEmptyObject(obj) {
        for (var key in obj) return false;
        return true;
      },
      getPropertyDescriptor: _getPropertyDescriptor
    };
    var tmpValueDesc = {
      value: void 0,
      enumerable: false,
      writable: false,
      configurable: true
    };
    js.value = function(obj, prop, value, writable, enumerable) {
      tmpValueDesc.value = value;
      tmpValueDesc.writable = writable;
      tmpValueDesc.enumerable = enumerable;
      Object.defineProperty(obj, prop, tmpValueDesc);
      tmpValueDesc.value = void 0;
    };
    var tmpGetSetDesc = {
      get: null,
      set: null,
      enumerable: false
    };
    js.getset = function(obj, prop, getter, setter, enumerable, configurable) {
      if ("function" !== typeof setter) {
        enumerable = setter;
        setter = void 0;
      }
      tmpGetSetDesc.get = getter;
      tmpGetSetDesc.set = setter;
      tmpGetSetDesc.enumerable = enumerable;
      tmpGetSetDesc.configurable = configurable;
      Object.defineProperty(obj, prop, tmpGetSetDesc);
      tmpGetSetDesc.get = null;
      tmpGetSetDesc.set = null;
    };
    var tmpGetDesc = {
      get: null,
      enumerable: false,
      configurable: false
    };
    js.get = function(obj, prop, getter, enumerable, configurable) {
      tmpGetDesc.get = getter;
      tmpGetDesc.enumerable = enumerable;
      tmpGetDesc.configurable = configurable;
      Object.defineProperty(obj, prop, tmpGetDesc);
      tmpGetDesc.get = null;
    };
    var tmpSetDesc = {
      set: null,
      enumerable: false,
      configurable: false
    };
    js.set = function(obj, prop, setter, enumerable, configurable) {
      tmpSetDesc.set = setter;
      tmpSetDesc.enumerable = enumerable;
      tmpSetDesc.configurable = configurable;
      Object.defineProperty(obj, prop, tmpSetDesc);
      tmpSetDesc.set = null;
    };
    js.getClassName = function(objOrCtor) {
      if ("function" === typeof objOrCtor) {
        var prototype = objOrCtor.prototype;
        if (prototype && prototype.hasOwnProperty("__classname__") && prototype.__classname__) return prototype.__classname__;
        var retval = "";
        objOrCtor.name && (retval = objOrCtor.name);
        if (objOrCtor.toString) {
          var arr, str = objOrCtor.toString();
          arr = "[" === str.charAt(0) ? str.match(/\[\w+\s*(\w+)\]/) : str.match(/function\s*(\w+)/);
          arr && 2 === arr.length && (retval = arr[1]);
        }
        return "Object" !== retval ? retval : "";
      }
      if (objOrCtor && objOrCtor.constructor) return js.getClassName(objOrCtor.constructor);
      return "";
    };
    function isTempClassId(id) {
      return "string" !== typeof id || id.startsWith(tempCIDGenerater.prefix);
    }
    (function() {
      var _idToClass = {};
      var _nameToClass = {};
      function setup(key, publicName, table) {
        js.getset(js, publicName, (function() {
          return Object.assign({}, table);
        }), (function(value) {
          js.clear(table);
          Object.assign(table, value);
        }));
        return function(id, constructor) {
          constructor.prototype.hasOwnProperty(key) && delete table[constructor.prototype[key]];
          js.value(constructor.prototype, key, id);
          if (id) {
            var registered = table[id];
            if (registered && registered !== constructor) {
              var error = "A Class already exists with the same " + key + ' : "' + id + '".';
              false;
              cc.error(error);
            } else table[id] = constructor;
          }
        };
      }
      js._setClassId = setup("__cid__", "_registeredClassIds", _idToClass);
      var doSetClassName = setup("__classname__", "_registeredClassNames", _nameToClass);
      js.setClassName = function(className, constructor) {
        doSetClassName(className, constructor);
        if (!constructor.prototype.hasOwnProperty("__cid__")) {
          var id = className || tempCIDGenerater.getNewId();
          id && js._setClassId(id, constructor);
        }
      };
      js.unregisterClass = function() {
        for (var i = 0; i < arguments.length; i++) {
          var p = arguments[i].prototype;
          var classId = p.__cid__;
          classId && delete _idToClass[classId];
          var classname = p.__classname__;
          classname && delete _nameToClass[classname];
        }
      };
      js._getClassById = function(classId) {
        return _idToClass[classId];
      };
      js.getClassByName = function(classname) {
        return _nameToClass[classname];
      };
      js._getClassId = function(obj, allowTempId) {
        allowTempId = "undefined" === typeof allowTempId || allowTempId;
        var res;
        if ("function" === typeof obj && obj.prototype.hasOwnProperty("__cid__")) {
          res = obj.prototype.__cid__;
          if (!allowTempId && (false, false) && isTempClassId(res)) return "";
          return res;
        }
        if (obj && obj.constructor) {
          var prototype = obj.constructor.prototype;
          if (prototype && prototype.hasOwnProperty("__cid__")) {
            res = obj.__cid__;
            if (!allowTempId && (false, false) && isTempClassId(res)) return "";
            return res;
          }
        }
        return "";
      };
    })();
    js.obsolete = function(obj, obsoleted, newExpr, writable) {
      var extractPropName = /([^.]+)$/;
      var oldProp = extractPropName.exec(obsoleted)[0];
      var newProp = extractPropName.exec(newExpr)[0];
      function get() {
        false;
        return this[newProp];
      }
      writable ? js.getset(obj, oldProp, get, (function(value) {
        false;
        this[newProp] = value;
      })) : js.get(obj, oldProp, get);
    };
    js.obsoletes = function(obj, objName, props, writable) {
      for (var obsoleted in props) {
        var newName = props[obsoleted];
        js.obsolete(obj, objName + "." + obsoleted, newName, writable);
      }
    };
    var REGEXP_NUM_OR_STR = /(%d)|(%s)/;
    var REGEXP_STR = /%s/;
    js.formatStr = function() {
      var argLen = arguments.length;
      if (0 === argLen) return "";
      var msg = arguments[0];
      if (1 === argLen) return "" + msg;
      var hasSubstitution = "string" === typeof msg && REGEXP_NUM_OR_STR.test(msg);
      if (hasSubstitution) for (var i = 1; i < argLen; ++i) {
        var arg = arguments[i];
        var regExpToTest = "number" === typeof arg ? REGEXP_NUM_OR_STR : REGEXP_STR;
        regExpToTest.test(msg) ? msg = msg.replace(regExpToTest, arg) : msg += " " + arg;
      } else for (var _i = 1; _i < argLen; ++_i) msg += " " + arguments[_i];
      return msg;
    };
    js.shiftArguments = function() {
      var len = arguments.length - 1;
      var args = new Array(len);
      for (var i = 0; i < len; ++i) args[i] = arguments[i + 1];
      return args;
    };
    js.createMap = function(forceDictMode) {
      var map = Object.create(null);
      if (forceDictMode) {
        var INVALID_IDENTIFIER_1 = ".";
        var INVALID_IDENTIFIER_2 = "/";
        map[INVALID_IDENTIFIER_1] = true;
        map[INVALID_IDENTIFIER_2] = true;
        delete map[INVALID_IDENTIFIER_1];
        delete map[INVALID_IDENTIFIER_2];
      }
      return map;
    };
    function removeAt(array, index) {
      array.splice(index, 1);
    }
    function fastRemoveAt(array, index) {
      var length = array.length;
      if (index < 0 || index >= length) return;
      array[index] = array[length - 1];
      array.length = length - 1;
    }
    function remove(array, value) {
      var index = array.indexOf(value);
      if (index >= 0) {
        removeAt(array, index);
        return true;
      }
      return false;
    }
    function fastRemove(array, value) {
      var index = array.indexOf(value);
      if (index >= 0) {
        array[index] = array[array.length - 1];
        --array.length;
      }
    }
    function verifyType(array, type) {
      if (array && array.length > 0) for (var i = 0; i < array.length; i++) if (!(array[i] instanceof type)) {
        cc.logID(1300);
        return false;
      }
      return true;
    }
    function removeArray(array, minusArr) {
      for (var i = 0, l = minusArr.length; i < l; i++) remove(array, minusArr[i]);
    }
    function appendObjectsAt(array, addObjs, index) {
      array.splice.apply(array, [ index, 0 ].concat(addObjs));
      return array;
    }
    function contains(array, value) {
      return array.indexOf(value) >= 0;
    }
    function copy(array) {
      var i, len = array.length, arr_clone = new Array(len);
      for (i = 0; i < len; i += 1) arr_clone[i] = array[i];
      return arr_clone;
    }
    js.array = {
      remove: remove,
      fastRemove: fastRemove,
      removeAt: removeAt,
      fastRemoveAt: fastRemoveAt,
      contains: contains,
      verifyType: verifyType,
      removeArray: removeArray,
      appendObjectsAt: appendObjectsAt,
      copy: copy,
      MutableForwardIterator: require("../utils/mutable-forward-iterator")
    };
    function Pool(cleanupFunc, size) {
      if (void 0 === size) {
        size = cleanupFunc;
        cleanupFunc = null;
      }
      this.get = null;
      this.count = 0;
      this._pool = new Array(size);
      this._cleanup = cleanupFunc;
    }
    Pool.prototype._get = function() {
      if (this.count > 0) {
        --this.count;
        var cache = this._pool[this.count];
        this._pool[this.count] = null;
        return cache;
      }
      return null;
    };
    Pool.prototype.put = function(obj) {
      var pool = this._pool;
      if (this.count < pool.length) {
        if (this._cleanup && false === this._cleanup(obj)) return;
        pool[this.count] = obj;
        ++this.count;
      }
    };
    Pool.prototype.resize = function(length) {
      if (length >= 0) {
        this._pool.length = length;
        this.count > length && (this.count = length);
      }
    };
    js.Pool = Pool;
    cc.js = js;
    module.exports = js;
  }), {
    "../utils/mutable-forward-iterator": 210,
    "./id-generater": 154
  } ],
  159: [ (function(require, module, exports) {
    "use strict";
    var js = require("./js");
    var Attrs = require("./attribute");
    var SerializableAttrs = {
      default: {},
      serializable: {},
      editorOnly: {},
      formerlySerializedAs: {}
    };
    var TYPO_TO_CORRECT_DEV = false;
    function parseNotify(val, propName, notify, properties) {
      if (val.get || val.set) {
        false;
        return;
      }
      if (val.hasOwnProperty("default")) {
        var newKey = "_N$" + propName;
        val.get = function() {
          return this[newKey];
        };
        val.set = function(value) {
          var oldValue = this[newKey];
          this[newKey] = value;
          notify.call(this, oldValue);
        };
        false;
        var newValue = {};
        properties[newKey] = newValue;
        for (var attr in SerializableAttrs) {
          var v = SerializableAttrs[attr];
          if (val.hasOwnProperty(attr)) {
            newValue[attr] = val[attr];
            v.canUsedInGet || delete val[attr];
          }
        }
      } else false;
    }
    function parseType(val, type, className, propName) {
      var STATIC_CHECK = (false, false);
      if (Array.isArray(type)) {
        if (STATIC_CHECK && "default" in val) {
          var isArray = require("./CCClass").isArray;
          isArray(val["default"]) || cc.warnID(5507, className, propName);
        }
        if (!(type.length > 0)) return cc.errorID(5508, className, propName);
        val.type = type = type[0];
      }
      if ("function" === typeof type) {
        if (type === String) {
          val.type = cc.String;
          STATIC_CHECK && cc.warnID(3608, '"' + className + "." + propName + '"');
        } else if (type === Boolean) {
          val.type = cc.Boolean;
          STATIC_CHECK && cc.warnID(3609, '"' + className + "." + propName + '"');
        } else if (type === Number) {
          val.type = cc.Float;
          STATIC_CHECK && cc.warnID(3610, '"' + className + "." + propName + '"');
        }
      } else if (STATIC_CHECK) switch (type) {
       case "Number":
        cc.warnID(5510, className, propName);
        break;

       case "String":
        cc.warn('The type of "' + className + "." + propName + '" must be cc.String, not "String".');
        break;

       case "Boolean":
        cc.warn('The type of "' + className + "." + propName + '" must be cc.Boolean, not "Boolean".');
        break;

       case "Float":
        cc.warn('The type of "' + className + "." + propName + '" must be cc.Float, not "Float".');
        break;

       case "Integer":
        cc.warn('The type of "' + className + "." + propName + '" must be cc.Integer, not "Integer".');
        break;

       case null:
        cc.warnID(5511, className, propName);
      }
      false;
    }
    function getBaseClassWherePropertyDefined_DEV(propName, cls) {
      var res;
      false;
    }
    function _wrapOptions(isES6Getset, _default, type) {
      var res = isES6Getset ? {
        _short: true
      } : {
        _short: true,
        default: _default
      };
      type && (res.type = type);
      return res;
    }
    exports.getFullFormOfProperty = function(options, isES6Getset) {
      var isLiteral = options && options.constructor === Object;
      if (isLiteral) return null;
      return Array.isArray(options) && options.length > 0 ? _wrapOptions(isES6Getset, [], options) : "function" === typeof options ? _wrapOptions(isES6Getset, js.isChildClassOf(options, cc.ValueType) ? new options() : null, options) : options instanceof Attrs.PrimitiveType ? _wrapOptions(isES6Getset, options["default"]) : _wrapOptions(isES6Getset, options);
    };
    exports.preprocessAttrs = function(properties, className, cls, es6) {
      for (var propName in properties) {
        var val = properties[propName];
        var fullForm = exports.getFullFormOfProperty(val, false);
        fullForm && (val = properties[propName] = fullForm);
        if (val) {
          var maybeTypeScript;
          false;
          var baseClass;
          false;
          var notify = val.notify;
          if (notify) {
            false;
            parseNotify(val, propName, notify, properties);
          }
          "type" in val && parseType(val, val.type, className, propName);
        }
      }
    };
    var CALL_SUPER_DESTROY_REG_DEV;
    false;
    exports.validateMethodWithProps = function(func, funcName, className, cls, base) {
      false;
      if ("function" !== typeof func && null !== func) {
        var overrided;
        var baseFuc;
        var subFuc;
        var correct;
        false;
        return false;
      }
      false;
      return true;
    };
  }), {
    "./CCClass": 138,
    "./attribute": 150,
    "./js": 158
  } ],
  160: [ (function(require, module, exports) {
    "use strict";
    var requiringFrames = [];
    cc._RF = {
      push: function push(module, uuid, script) {
        if (void 0 === script) {
          script = uuid;
          uuid = "";
        }
        requiringFrames.push({
          uuid: uuid,
          script: script,
          module: module,
          exports: module.exports,
          beh: null
        });
      },
      pop: function pop() {
        var frameInfo = requiringFrames.pop();
        var module = frameInfo.module;
        var exports = module.exports;
        if (exports === frameInfo.exports) {
          for (var anyKey in exports) return;
          module.exports = exports = frameInfo.cls;
        }
      },
      peek: function peek() {
        return requiringFrames[requiringFrames.length - 1];
      }
    };
    false;
  }), {} ],
  161: [ (function(require, module, exports) {
    "use strict";
    var js = require("./js");
    module.exports = {
      contains: function contains(refNode, otherNode) {
        if ("function" == typeof refNode.contains) return refNode.contains(otherNode);
        if ("function" == typeof refNode.compareDocumentPosition) return !!(16 & refNode.compareDocumentPosition(otherNode));
        var node = otherNode.parentNode;
        if (node) do {
          if (node === refNode) return true;
          node = node.parentNode;
        } while (null !== node);
        return false;
      },
      isDomNode: "object" === typeof window && ("function" === typeof Node ? function(obj) {
        return obj instanceof Node;
      } : function(obj) {
        return obj && "object" === typeof obj && "number" === typeof obj.nodeType && "string" === typeof obj.nodeName;
      }),
      callInNextTick: function(callback, p1, p2) {
        callback && setTimeout((function() {
          callback(p1, p2);
        }), 0);
      }
    };
    false;
    false;
  }), {
    "./js": 158
  } ],
  162: [ (function(require, module, exports) {
    "use strict";
    require("./platform/js");
    require("./value-types");
    require("./utils");
    require("./platform/CCInputManager");
    require("./platform/CCInputExtension");
    require("./event");
    require("./platform/CCSys");
    require("./platform/CCMacro");
    require("./asset-manager");
    require("./CCDirector");
    require("./renderer");
    true;
    require("./platform/CCView");
    require("./platform/CCScreen");
    require("./CCScheduler");
    require("./event-manager");
  }), {
    "./CCDirector": 24,
    "./CCScheduler": 29,
    "./asset-manager": 47,
    "./event": 123,
    "./event-manager": 119,
    "./platform/CCInputExtension": 141,
    "./platform/CCInputManager": 142,
    "./platform/CCMacro": 143,
    "./platform/CCScreen": 146,
    "./platform/CCSys": 147,
    "./platform/CCView": 148,
    "./platform/js": 158,
    "./renderer": 168,
    "./utils": 208,
    "./value-types": 224
  } ],
  163: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _assembler = _interopRequireDefault(require("./assembler"));
    var _manager = _interopRequireDefault(require("./utils/dynamic-atlas/manager"));
    var _renderData = _interopRequireDefault(require("./webgl/render-data"));
    var _valueTypes = require("../value-types");
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    function _defineProperties(target, props) {
      for (var i = 0; i < props.length; i++) {
        var descriptor = props[i];
        descriptor.enumerable = descriptor.enumerable || false;
        descriptor.configurable = true;
        "value" in descriptor && (descriptor.writable = true);
        Object.defineProperty(target, descriptor.key, descriptor);
      }
    }
    function _createClass(Constructor, protoProps, staticProps) {
      protoProps && _defineProperties(Constructor.prototype, protoProps);
      staticProps && _defineProperties(Constructor, staticProps);
      return Constructor;
    }
    function _assertThisInitialized(self) {
      if (void 0 === self) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
      return self;
    }
    function _inheritsLoose(subClass, superClass) {
      subClass.prototype = Object.create(superClass.prototype);
      subClass.prototype.constructor = subClass;
      subClass.__proto__ = superClass;
    }
    var Assembler2D = (function(_Assembler) {
      _inheritsLoose(Assembler2D, _Assembler);
      function Assembler2D() {
        var _this;
        _this = _Assembler.call(this) || this;
        _this._renderData = new _renderData["default"]();
        _this._renderData.init(_assertThisInitialized(_this));
        _this.initData();
        _this.initLocal();
        return _this;
      }
      var _proto = Assembler2D.prototype;
      _proto.initData = function initData() {
        var data = this._renderData;
        data.createQuadData(0, this.verticesFloats, this.indicesCount);
      };
      _proto.initLocal = function initLocal() {
        this._local = [];
        this._local.length = 4;
      };
      _proto.updateColor = function updateColor(comp, color) {
        var uintVerts = this._renderData.uintVDatas[0];
        if (!uintVerts) return;
        color = null != color ? color : comp.node.color._val;
        var floatsPerVert = this.floatsPerVert;
        var colorOffset = this.colorOffset;
        for (var i = colorOffset, l = uintVerts.length; i < l; i += floatsPerVert) uintVerts[i] = color;
      };
      _proto.getBuffer = function getBuffer() {
        return cc.renderer._handle._meshBuffer;
      };
      _proto.updateWorldVerts = function updateWorldVerts(comp) {
        var local = this._local;
        var verts = this._renderData.vDatas[0];
        var matrix = comp.node._worldMatrix;
        var matrixm = matrix.m, a = matrixm[0], b = matrixm[1], c = matrixm[4], d = matrixm[5], tx = matrixm[12], ty = matrixm[13];
        var vl = local[0], vr = local[2], vb = local[1], vt = local[3];
        var justTranslate = 1 === a && 0 === b && 0 === c && 1 === d;
        if (justTranslate) {
          verts[0] = vl + tx;
          verts[1] = vb + ty;
          verts[5] = vr + tx;
          verts[6] = vb + ty;
          verts[10] = vl + tx;
          verts[11] = vt + ty;
          verts[15] = vr + tx;
          verts[16] = vt + ty;
        } else {
          var al = a * vl, ar = a * vr, bl = b * vl, br = b * vr, cb = c * vb, ct = c * vt, db = d * vb, dt = d * vt;
          verts[0] = al + cb + tx;
          verts[1] = bl + db + ty;
          verts[5] = ar + cb + tx;
          verts[6] = br + db + ty;
          verts[10] = al + ct + tx;
          verts[11] = bl + dt + ty;
          verts[15] = ar + ct + tx;
          verts[16] = br + dt + ty;
        }
      };
      _proto.fillBuffers = function fillBuffers(comp, renderer) {
        renderer.worldMatDirty && this.updateWorldVerts(comp);
        var renderData = this._renderData;
        var vData = renderData.vDatas[0];
        var iData = renderData.iDatas[0];
        var buffer = this.getBuffer(renderer);
        var offsetInfo = buffer.request(this.verticesCount, this.indicesCount);
        var vertexOffset = offsetInfo.byteOffset >> 2, vbuf = buffer._vData;
        vData.length + vertexOffset > vbuf.length ? vbuf.set(vData.subarray(0, vbuf.length - vertexOffset), vertexOffset) : vbuf.set(vData, vertexOffset);
        var ibuf = buffer._iData, indiceOffset = offsetInfo.indiceOffset, vertexId = offsetInfo.vertexOffset;
        for (var i = 0, l = iData.length; i < l; i++) ibuf[indiceOffset++] = vertexId + iData[i];
      };
      _proto.packToDynamicAtlas = function packToDynamicAtlas(comp, frame) {
        false;
        if (!frame._original && _manager["default"] && frame._texture.packable) {
          var packedFrame = _manager["default"].insertSpriteFrame(frame);
          packedFrame && frame._setDynamicAtlasFrame(packedFrame);
        }
        var material = comp._materials[0];
        if (!material) return;
        if (material.getProperty("texture") !== frame._texture) {
          comp._vertsDirty = true;
          comp._updateMaterial();
        }
      };
      _createClass(Assembler2D, [ {
        key: "verticesFloats",
        get: function get() {
          return this.verticesCount * this.floatsPerVert;
        }
      } ]);
      return Assembler2D;
    })(_assembler["default"]);
    exports["default"] = Assembler2D;
    cc.js.addon(Assembler2D.prototype, {
      floatsPerVert: 5,
      verticesCount: 4,
      indicesCount: 6,
      uvOffset: 2,
      colorOffset: 4
    });
    cc.Assembler2D = Assembler2D;
    module.exports = exports["default"];
  }), {
    "../value-types": 224,
    "./assembler": 165,
    "./utils/dynamic-atlas/manager": void 0,
    "./webgl/render-data": 196
  } ],
  164: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _pool3 = _interopRequireDefault(require("../utils/pool"));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    function _inheritsLoose(subClass, superClass) {
      subClass.prototype = Object.create(superClass.prototype);
      subClass.prototype.constructor = subClass;
      subClass.__proto__ = superClass;
    }
    var _assemblerId = 0;
    function getAssemblerId(assemblerCtor) {
      Object.getOwnPropertyDescriptor(assemblerCtor, "__assemblerId__") || (assemblerCtor.__assemblerId__ = ++_assemblerId);
      return assemblerCtor.__assemblerId__;
    }
    var AssemblerPool = (function(_Pool) {
      _inheritsLoose(AssemblerPool, _Pool);
      function AssemblerPool() {
        var _this;
        for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) args[_key] = arguments[_key];
        _this = _Pool.call.apply(_Pool, [ this ].concat(args)) || this;
        _this._pool = {};
        return _this;
      }
      var _proto = AssemblerPool.prototype;
      _proto.put = function put(assembler) {
        if (!assembler) return;
        if (!this.enabled) {
          false;
          return;
        }
        var id = getAssemblerId(assembler.constructor);
        var pool = this._pool;
        pool[id] || (pool[id] = []);
        if (this.count > this.maxSize) return;
        this._clean(assembler);
        pool[id].push(assembler);
        this.count++;
      };
      _proto.get = function get(assemblerCtor) {
        var assembler;
        if (this.enabled) {
          var _pool = this._pool;
          var id = getAssemblerId(assemblerCtor);
          assembler = _pool[id] && _pool[id].pop();
        }
        assembler ? this.count-- : assembler = new assemblerCtor();
        return assembler;
      };
      _proto.clear = function clear() {
        var _pool2;
        var name;
        var assemblers;
        var i;
        false;
        this._pool = {};
        this.count = 0;
      };
      _proto._clean = function _clean(assembler) {
        false;
        assembler._renderComp = null;
      };
      return AssemblerPool;
    })(_pool3["default"]);
    var pool = new AssemblerPool();
    _pool3["default"].register("assembler", pool);
    var _default = pool;
    exports["default"] = _default;
    module.exports = exports["default"];
  }), {
    "../utils/pool": 211
  } ],
  165: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _vertexFormat = require("./webgl/vertex-format");
    var _assemblerPool = _interopRequireDefault(require("./assembler-pool"));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    var Assembler = (function() {
      function Assembler() {
        this._extendNative && this._extendNative();
      }
      var _proto = Assembler.prototype;
      _proto.init = function init(renderComp) {
        this._renderComp = renderComp;
      };
      _proto.updateRenderData = function updateRenderData(comp) {};
      _proto.fillBuffers = function fillBuffers(comp, renderer) {};
      _proto.getVfmt = function getVfmt() {
        return _vertexFormat.vfmtPosUvColor;
      };
      return Assembler;
    })();
    exports["default"] = Assembler;
    Assembler.register = function(renderCompCtor, assembler) {
      renderCompCtor.__assembler__ = assembler;
    };
    Assembler.init = function(renderComp) {
      var renderCompCtor = renderComp.constructor;
      var assemblerCtor = renderCompCtor.__assembler__;
      while (!assemblerCtor) {
        renderCompCtor = renderCompCtor.$super;
        if (!renderCompCtor) {
          cc.warn("Can not find assembler for render component : [" + cc.js.getClassName(renderComp) + "]");
          return;
        }
        assemblerCtor = renderCompCtor.__assembler__;
      }
      assemblerCtor.getConstructor && (assemblerCtor = assemblerCtor.getConstructor(renderComp));
      if (!renderComp._assembler || renderComp._assembler.constructor !== assemblerCtor) {
        var assembler = _assemblerPool["default"].get(assemblerCtor);
        assembler.init(renderComp);
        renderComp._assembler = assembler;
      }
    };
    cc.Assembler = Assembler;
    module.exports = exports["default"];
  }), {
    "./assembler-pool": 164,
    "./webgl/vertex-format": 198
  } ],
  166: [ (function(require, module, exports) {
    "use strict";
    var Device = function Device(canvasEL) {
      var ctx;
      try {
        ctx = canvasEL.getContext("2d");
      } catch (err) {
        console.error(err);
        return;
      }
      this._canvas = canvasEL;
      this._ctx = ctx;
      this._caps = {};
      this._stats = {
        drawcalls: 0
      };
      this._vx = this._vy = this._vw = this._vh = 0;
      this._sx = this._sy = this._sw = this._sh = 0;
    };
    Device.prototype._restoreTexture = function _restoreTexture(unit) {};
    Device.prototype.setViewport = function setViewport(x, y, w, h) {
      if (this._vx !== x || this._vy !== y || this._vw !== w || this._vh !== h) {
        this._vx = x;
        this._vy = y;
        this._vw = w;
        this._vh = h;
      }
    };
    Device.prototype.setScissor = function setScissor(x, y, w, h) {
      if (this._sx !== x || this._sy !== y || this._sw !== w || this._sh !== h) {
        this._sx = x;
        this._sy = y;
        this._sw = w;
        this._sh = h;
      }
    };
    Device.prototype.clear = function clear(color) {
      var ctx = this._ctx;
      ctx.clearRect(this._vx, this._vy, this._vw, this._vh);
      if (color && (0 !== color[0] || 0 !== color[1] || 0 !== color[2])) {
        ctx.fillStyle = "rgb(" + color[0] + "," + color[1] + "," + color[2] + ")";
        ctx.globalAlpha = color[3];
        ctx.fillRect(this._vx, this._vy, this._vw, this._vh);
      }
    };
    Device.prototype.resetDrawCalls = function() {
      this._stats.drawcalls = 0;
    };
    Device.prototype.getDrawCalls = function() {
      return this._stats.drawcalls;
    };
    module.exports = Device;
  }), {} ],
  167: [ (function(require, module, exports) {
    "use strict";
    var Texture2D = function Texture2D(device, options) {
      this._device = device;
      this._width = 4;
      this._height = 4;
      this._image = null;
      if (options) {
        void 0 !== options.width && (this._width = options.width);
        void 0 !== options.height && (this._height = options.height);
        this.updateImage(options);
      }
    };
    Texture2D.prototype.update = function update(options) {
      this.updateImage(options);
    };
    Texture2D.prototype.updateImage = function updateImage(options) {
      if (options.images && options.images[0]) {
        var image = options.images[0];
        image && image !== this._image && (this._image = image);
      }
    };
    Texture2D.prototype.destroy = function destroy() {
      this._image = null;
    };
    module.exports = Texture2D;
  }), {} ],
  168: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _gfx = _interopRequireDefault(require("../../renderer/gfx"));
    var _inputAssembler = _interopRequireDefault(require("../../renderer/core/input-assembler"));
    var _pass = _interopRequireDefault(require("../../renderer/core/pass"));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    function _initBuiltins(device) {
      var defaultTexture = new _gfx["default"].Texture2D(device, {
        images: [],
        width: 128,
        height: 128,
        wrapS: _gfx["default"].WRAP_REPEAT,
        wrapT: _gfx["default"].WRAP_REPEAT,
        format: _gfx["default"].TEXTURE_FMT_RGB8,
        mipmap: false
      });
      return {
        defaultTexture: defaultTexture,
        programTemplates: [],
        programChunks: {}
      };
    }
    var _default = cc.renderer = {
      Texture2D: null,
      InputAssembler: _inputAssembler["default"],
      Pass: _pass["default"],
      renderEngine: null,
      canvas: null,
      device: null,
      scene: null,
      drawCalls: 0,
      _handle: null,
      _cameraNode: null,
      _camera: null,
      _forward: null,
      _flow: null,
      initWebGL: function initWebGL(canvas, opts) {
        require("./webgl/assemblers");
        var ModelBatcher = require("./webgl/model-batcher");
        this.Texture2D = _gfx["default"].Texture2D;
        this.canvas = canvas;
        this._flow = cc.RenderFlow;
        var builtins;
        var nativeFlow;
        false;
        var Scene = require("../../renderer/scene/scene");
        var ForwardRenderer = require("../../renderer/renderers/forward-renderer");
        this.device = new _gfx["default"].Device(canvas, opts);
        this.scene = new Scene();
        var _builtins = _initBuiltins(this.device);
        this._forward = new ForwardRenderer(this.device, _builtins);
        this._handle = new ModelBatcher(this.device, this.scene);
        this._flow.init(this._handle, this._forward);
      },
      initCanvas: function initCanvas(canvas) {
        var canvasRenderer = require("./canvas");
        var Texture2D = require("./canvas/Texture2D");
        var Device = require("./canvas/Device");
        this.Device = Device;
        this.Texture2D = Texture2D;
        this.canvas = canvas;
        this.device = new Device(canvas);
        this._camera = {
          a: 1,
          b: 0,
          c: 0,
          d: 1,
          tx: 0,
          ty: 0
        };
        this._handle = new canvasRenderer.RenderComponentHandle(this.device, this._camera);
        this._forward = new canvasRenderer.ForwardRenderer();
        this._flow = cc.RenderFlow;
        this._flow.init(this._handle, this._forward);
      },
      updateCameraViewport: function updateCameraViewport() {
        if (true, cc.director) {
          var ecScene = cc.director.getScene();
          ecScene && ecScene.setScale(1, 1, 1);
        }
        if (cc.game.renderType === cc.game.RENDER_TYPE_CANVAS) {
          var vp = cc.view.getViewportRect();
          this.device.setViewport(vp.x, vp.y, vp.width, vp.height);
          this._camera.a = cc.view.getScaleX();
          this._camera.d = cc.view.getScaleY();
          this._camera.tx = vp.x;
          this._camera.ty = vp.y + vp.height;
        }
      },
      render: function render(ecScene, dt) {
        this.device.resetDrawCalls();
        if (ecScene) {
          this._flow.render(ecScene, dt);
          this.drawCalls = this.device.getDrawCalls();
        }
      },
      clear: function clear() {
        this._handle.reset();
        this._forward.clear();
      }
    };
    exports["default"] = _default;
    module.exports = exports["default"];
  }), {
    "../../renderer/core/input-assembler": 241,
    "../../renderer/core/pass": 242,
    "../../renderer/gfx": 251,
    "../../renderer/renderers/forward-renderer": 270,
    "../../renderer/scene/scene": 273,
    "./canvas": void 0,
    "./canvas/Device": 166,
    "./canvas/Texture2D": 167,
    "./webgl/assemblers": 178,
    "./webgl/model-batcher": 194
  } ],
  169: [ (function(require, module, exports) {
    "use strict";
    var FlagOfset = 0;
    var DONOTHING = 1 << FlagOfset++;
    var BREAK_FLOW = 1 << FlagOfset++;
    var LOCAL_TRANSFORM = 1 << FlagOfset++;
    var WORLD_TRANSFORM = 1 << FlagOfset++;
    var TRANSFORM = LOCAL_TRANSFORM | WORLD_TRANSFORM;
    var UPDATE_RENDER_DATA = 1 << FlagOfset++;
    var OPACITY = 1 << FlagOfset++;
    var COLOR = 1 << FlagOfset++;
    var OPACITY_COLOR = OPACITY | COLOR;
    var RENDER = 1 << FlagOfset++;
    var CHILDREN = 1 << FlagOfset++;
    var POST_RENDER = 1 << FlagOfset++;
    var FINAL = 1 << FlagOfset++;
    var _batcher, _forward;
    var _cullingMask = 0;
    function RenderFlow() {
      this._func = init;
      this._next = null;
    }
    var _proto = RenderFlow.prototype;
    _proto._doNothing = function() {};
    _proto._localTransform = function(node) {
      node._updateLocalMatrix();
      node._renderFlag &= ~LOCAL_TRANSFORM;
      this._next._func(node);
    };
    _proto._worldTransform = function(node) {
      _batcher.worldMatDirty++;
      var t = node._matrix;
      var trs = node._trs;
      var tm = t.m;
      tm[12] = trs[0];
      tm[13] = trs[1];
      tm[14] = trs[2];
      node._mulMat(node._worldMatrix, node._parent._worldMatrix, t);
      node._renderFlag &= ~WORLD_TRANSFORM;
      this._next._func(node);
      _batcher.worldMatDirty--;
    };
    _proto._opacity = function(node) {
      _batcher.parentOpacityDirty++;
      this._next._func(node);
      node._renderFlag &= ~OPACITY;
      _batcher.parentOpacityDirty--;
    };
    _proto._color = function(node) {
      var comp = node._renderComponent;
      comp && comp._updateColor();
      node._renderFlag &= ~COLOR;
      this._next._func(node);
    };
    _proto._updateRenderData = function(node) {
      var comp = node._renderComponent;
      comp._assembler.updateRenderData(comp);
      node._renderFlag &= ~UPDATE_RENDER_DATA;
      this._next._func(node);
    };
    _proto._render = function(node) {
      var comp = node._renderComponent;
      comp._checkBacth(_batcher, node._cullingMask);
      comp._assembler.fillBuffers(comp, _batcher);
      this._next._func(node);
    };
    _proto._children = function(node) {
      var cullingMask = _cullingMask;
      var batcher = _batcher;
      var parentOpacity = batcher.parentOpacity;
      var opacity = batcher.parentOpacity *= node._opacity / 255;
      var worldTransformFlag = batcher.worldMatDirty ? WORLD_TRANSFORM : 0;
      var worldOpacityFlag = batcher.parentOpacityDirty ? OPACITY_COLOR : 0;
      var worldDirtyFlag = worldTransformFlag | worldOpacityFlag;
      var children = node._children;
      for (var i = 0, l = children.length; i < l; i++) {
        var c = children[i];
        c._renderFlag |= worldDirtyFlag;
        if (!c._activeInHierarchy || 0 === c._opacity) continue;
        _cullingMask = c._cullingMask = 0 === c.groupIndex ? cullingMask : 1 << c.groupIndex;
        var colorVal = c._color._val;
        c._color._fastSetA(c._opacity * opacity);
        flows[c._renderFlag]._func(c);
        c._color._val = colorVal;
      }
      batcher.parentOpacity = parentOpacity;
      this._next._func(node);
    };
    _proto._postRender = function(node) {
      var comp = node._renderComponent;
      comp._checkBacth(_batcher, node._cullingMask);
      comp._assembler.postFillBuffers(comp, _batcher);
      this._next._func(node);
    };
    var EMPTY_FLOW = new RenderFlow();
    EMPTY_FLOW._func = EMPTY_FLOW._doNothing;
    EMPTY_FLOW._next = EMPTY_FLOW;
    var flows = {};
    function createFlow(flag, next) {
      var flow = new RenderFlow();
      flow._next = next || EMPTY_FLOW;
      switch (flag) {
       case DONOTHING:
       case BREAK_FLOW:
        flow._func = flow._doNothing;
        break;

       case LOCAL_TRANSFORM:
        flow._func = flow._localTransform;
        break;

       case WORLD_TRANSFORM:
        flow._func = flow._worldTransform;
        break;

       case OPACITY:
        flow._func = flow._opacity;
        break;

       case COLOR:
        flow._func = flow._color;
        break;

       case UPDATE_RENDER_DATA:
        flow._func = flow._updateRenderData;
        break;

       case RENDER:
        flow._func = flow._render;
        break;

       case CHILDREN:
        flow._func = flow._children;
        break;

       case POST_RENDER:
        flow._func = flow._postRender;
      }
      return flow;
    }
    function getFlow(flag) {
      var flow = null;
      var tFlag = FINAL;
      while (tFlag > 0) {
        tFlag & flag && (flow = createFlow(tFlag, flow));
        tFlag >>= 1;
      }
      return flow;
    }
    function init(node) {
      var flag = node._renderFlag;
      var r = flows[flag] = getFlow(flag);
      r._func(node);
    }
    RenderFlow.flows = flows;
    RenderFlow.createFlow = createFlow;
    var _validateList = [];
    RenderFlow.registerValidate = function(renderComp) {
      if (renderComp._inValidateList) return;
      _validateList.push(renderComp);
      renderComp._inValidateList = true;
    };
    RenderFlow.validateRenderers = function() {
      for (var i = 0, l = _validateList.length; i < l; i++) {
        var renderComp = _validateList[i];
        if (!renderComp.isValid) continue;
        renderComp.enabledInHierarchy ? renderComp._validateRender() : renderComp.disableRender();
        renderComp._inValidateList = false;
      }
      _validateList.length = 0;
    };
    RenderFlow.visitRootNode = function(rootNode) {
      RenderFlow.validateRenderers();
      var preCullingMask = _cullingMask;
      _cullingMask = rootNode._cullingMask;
      if (rootNode._renderFlag & WORLD_TRANSFORM) {
        _batcher.worldMatDirty++;
        rootNode._calculWorldMatrix();
        rootNode._renderFlag &= ~WORLD_TRANSFORM;
        flows[rootNode._renderFlag]._func(rootNode);
        _batcher.worldMatDirty--;
      } else flows[rootNode._renderFlag]._func(rootNode);
      _cullingMask = preCullingMask;
    };
    RenderFlow.render = function(rootNode, dt) {
      _batcher.reset();
      _batcher.walking = true;
      RenderFlow.visitRootNode(rootNode);
      _batcher.terminate();
      _batcher.walking = false;
      _forward.render(_batcher._renderScene, dt);
    };
    RenderFlow.renderCamera = function(camera, rootNode) {
      _batcher.reset();
      _batcher.walking = true;
      RenderFlow.visitRootNode(rootNode);
      _batcher.terminate();
      _batcher.walking = false;
      _forward.renderCamera(camera, _batcher._renderScene);
    };
    RenderFlow.init = function(batcher, forwardRenderer) {
      _batcher = batcher;
      _forward = forwardRenderer;
      flows[0] = EMPTY_FLOW;
      for (var i = 1; i < FINAL; i++) flows[i] = new RenderFlow();
    };
    RenderFlow.getBachther = function() {
      return _batcher;
    };
    RenderFlow.FLAG_DONOTHING = DONOTHING;
    RenderFlow.FLAG_BREAK_FLOW = BREAK_FLOW;
    RenderFlow.FLAG_LOCAL_TRANSFORM = LOCAL_TRANSFORM;
    RenderFlow.FLAG_WORLD_TRANSFORM = WORLD_TRANSFORM;
    RenderFlow.FLAG_TRANSFORM = TRANSFORM;
    RenderFlow.FLAG_OPACITY = OPACITY;
    RenderFlow.FLAG_COLOR = COLOR;
    RenderFlow.FLAG_OPACITY_COLOR = OPACITY_COLOR;
    RenderFlow.FLAG_UPDATE_RENDER_DATA = UPDATE_RENDER_DATA;
    RenderFlow.FLAG_RENDER = RENDER;
    RenderFlow.FLAG_CHILDREN = CHILDREN;
    RenderFlow.FLAG_POST_RENDER = POST_RENDER;
    RenderFlow.FLAG_FINAL = FINAL;
    module.exports = cc.RenderFlow = RenderFlow;
  }), {} ],
  170: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _assembler2d = _interopRequireDefault(require("../../assembler-2d"));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    function _inheritsLoose(subClass, superClass) {
      subClass.prototype = Object.create(superClass.prototype);
      subClass.prototype.constructor = subClass;
      subClass.__proto__ = superClass;
    }
    var textUtils = require("../../../utils/text-utils");
    var macro = require("../../../platform/CCMacro");
    var Label = require("../../../components/CCLabel");
    var Overflow = Label.Overflow;
    var shareLabelInfo = require("../utils").shareLabelInfo;
    var LetterInfo = function LetterInfo() {
      this["char"] = "";
      this.valid = true;
      this.x = 0;
      this.y = 0;
      this.line = 0;
      this.hash = "";
    };
    var _tmpRect = cc.rect();
    var _comp = null;
    var _horizontalKernings = [];
    var _lettersInfo = [];
    var _linesWidth = [];
    var _linesOffsetX = [];
    var _fntConfig = null;
    var _numberOfLines = 0;
    var _textDesiredHeight = 0;
    var _letterOffsetY = 0;
    var _tailoredTopY = 0;
    var _tailoredBottomY = 0;
    var _bmfontScale = 1;
    var _lineBreakWithoutSpaces = false;
    var _spriteFrame = null;
    var _lineSpacing = 0;
    var _contentSize = cc.size();
    var _string = "";
    var _fontSize = 0;
    var _originFontSize = 0;
    var _hAlign = 0;
    var _vAlign = 0;
    var _spacingX = 0;
    var _lineHeight = 0;
    var _overflow = 0;
    var _isWrapText = false;
    var _labelWidth = 0;
    var _labelHeight = 0;
    var _maxLineWidth = 0;
    var BmfontAssembler = (function(_Assembler2D) {
      _inheritsLoose(BmfontAssembler, _Assembler2D);
      function BmfontAssembler() {
        return _Assembler2D.apply(this, arguments) || this;
      }
      var _proto = BmfontAssembler.prototype;
      _proto.updateRenderData = function updateRenderData(comp) {
        if (!comp._vertsDirty) return;
        if (_comp === comp) return;
        _comp = comp;
        this._reserveQuads(comp, comp.string.toString().length);
        this._updateFontFamily(comp);
        this._updateProperties(comp);
        this._updateLabelInfo(comp);
        this._updateContent();
        this.updateWorldVerts(comp);
        _comp._actualFontSize = _fontSize;
        _comp.node.setContentSize(_contentSize);
        _comp._vertsDirty = false;
        _comp = null;
        this._resetProperties();
      };
      _proto._updateFontScale = function _updateFontScale() {
        _bmfontScale = _fontSize / _originFontSize;
      };
      _proto._updateFontFamily = function _updateFontFamily(comp) {
        var fontAsset = comp.font;
        _spriteFrame = fontAsset.spriteFrame;
        _fntConfig = fontAsset._fntConfig;
        shareLabelInfo.fontAtlas = fontAsset._fontDefDictionary;
        this.packToDynamicAtlas(comp, _spriteFrame);
      };
      _proto._updateLabelInfo = function _updateLabelInfo() {
        shareLabelInfo.hash = "";
        shareLabelInfo.margin = 0;
      };
      _proto._updateProperties = function _updateProperties(comp) {
        _string = comp.string.toString();
        _fontSize = comp.fontSize;
        _originFontSize = _fntConfig ? _fntConfig.fontSize : comp.fontSize;
        _hAlign = comp.horizontalAlign;
        _vAlign = comp.verticalAlign;
        _spacingX = comp.spacingX;
        _overflow = comp.overflow;
        _lineHeight = comp._lineHeight;
        _contentSize.width = comp.node.width;
        _contentSize.height = comp.node.height;
        if (_overflow === Overflow.NONE) {
          _isWrapText = false;
          _contentSize.width += 2 * shareLabelInfo.margin;
          _contentSize.height += 2 * shareLabelInfo.margin;
        } else if (_overflow === Overflow.RESIZE_HEIGHT) {
          _isWrapText = true;
          _contentSize.height += 2 * shareLabelInfo.margin;
        } else _isWrapText = comp.enableWrapText;
        shareLabelInfo.lineHeight = _lineHeight;
        shareLabelInfo.fontSize = _fontSize;
        this._setupBMFontOverflowMetrics();
      };
      _proto._resetProperties = function _resetProperties() {
        _fntConfig = null;
        _spriteFrame = null;
        shareLabelInfo.hash = "";
        shareLabelInfo.margin = 0;
      };
      _proto._updateContent = function _updateContent() {
        this._updateFontScale();
        this._computeHorizontalKerningForText();
        this._alignText();
      };
      _proto._computeHorizontalKerningForText = function _computeHorizontalKerningForText() {
        var string = _string;
        var stringLen = string.length;
        var horizontalKernings = _horizontalKernings;
        var kerningDict;
        _fntConfig && (kerningDict = _fntConfig.kerningDict);
        if (kerningDict && !cc.js.isEmptyObject(kerningDict)) {
          var prev = -1;
          for (var i = 0; i < stringLen; ++i) {
            var key = string.charCodeAt(i);
            var kerningAmount = kerningDict[prev << 16 | 65535 & key] || 0;
            horizontalKernings[i] = i < stringLen - 1 ? kerningAmount : 0;
            prev = key;
          }
        } else horizontalKernings.length = 0;
      };
      _proto._multilineTextWrap = function _multilineTextWrap(nextTokenFunc) {
        var textLen = _string.length;
        var lineIndex = 0;
        var nextTokenX = 0;
        var nextTokenY = 0;
        var longestLine = 0;
        var letterRight = 0;
        var highestY = 0;
        var lowestY = 0;
        var letterDef = null;
        var letterPosition = cc.v2(0, 0);
        for (var index = 0; index < textLen; ) {
          var character = _string.charAt(index);
          if ("\n" === character) {
            _linesWidth.push(letterRight);
            letterRight = 0;
            lineIndex++;
            nextTokenX = 0;
            nextTokenY -= _lineHeight * this._getFontScale() + _lineSpacing;
            this._recordPlaceholderInfo(index, character);
            index++;
            continue;
          }
          var tokenLen = nextTokenFunc(_string, index, textLen);
          var tokenHighestY = highestY;
          var tokenLowestY = lowestY;
          var tokenRight = letterRight;
          var nextLetterX = nextTokenX;
          var newLine = false;
          for (var tmp = 0; tmp < tokenLen; ++tmp) {
            var letterIndex = index + tmp;
            character = _string.charAt(letterIndex);
            if ("\r" === character) {
              this._recordPlaceholderInfo(letterIndex, character);
              continue;
            }
            letterDef = shareLabelInfo.fontAtlas.getLetterDefinitionForChar(character, shareLabelInfo);
            if (!letterDef) {
              this._recordPlaceholderInfo(letterIndex, character);
              var atlasName = "";
              _fntConfig && (atlasName = _fntConfig.atlasName);
              console.log("Can't find letter definition in texture atlas " + atlasName + " for letter:" + character);
              continue;
            }
            var letterX = nextLetterX + letterDef.offsetX * _bmfontScale - shareLabelInfo.margin;
            if (_isWrapText && _maxLineWidth > 0 && nextTokenX > 0 && letterX + letterDef.w * _bmfontScale > _maxLineWidth && !textUtils.isUnicodeSpace(character)) {
              _linesWidth.push(letterRight);
              letterRight = 0;
              lineIndex++;
              nextTokenX = 0;
              nextTokenY -= _lineHeight * this._getFontScale() + _lineSpacing;
              newLine = true;
              break;
            }
            letterPosition.x = letterX;
            letterPosition.y = nextTokenY - letterDef.offsetY * _bmfontScale + shareLabelInfo.margin;
            this._recordLetterInfo(letterPosition, character, letterIndex, lineIndex);
            letterIndex + 1 < _horizontalKernings.length && letterIndex < textLen - 1 && (nextLetterX += _horizontalKernings[letterIndex + 1]);
            nextLetterX += letterDef.xAdvance * _bmfontScale + _spacingX - 2 * shareLabelInfo.margin;
            tokenRight = letterPosition.x + letterDef.w * _bmfontScale - shareLabelInfo.margin;
            tokenHighestY < letterPosition.y && (tokenHighestY = letterPosition.y);
            tokenLowestY > letterPosition.y - letterDef.h * _bmfontScale && (tokenLowestY = letterPosition.y - letterDef.h * _bmfontScale);
          }
          if (newLine) continue;
          nextTokenX = nextLetterX;
          letterRight = tokenRight;
          highestY < tokenHighestY && (highestY = tokenHighestY);
          lowestY > tokenLowestY && (lowestY = tokenLowestY);
          longestLine < letterRight && (longestLine = letterRight);
          index += tokenLen;
        }
        _linesWidth.push(letterRight);
        _numberOfLines = lineIndex + 1;
        _textDesiredHeight = _numberOfLines * _lineHeight * this._getFontScale();
        _numberOfLines > 1 && (_textDesiredHeight += (_numberOfLines - 1) * _lineSpacing);
        _contentSize.width = _labelWidth;
        _contentSize.height = _labelHeight;
        _labelWidth <= 0 && (_contentSize.width = parseFloat(longestLine.toFixed(2)) + 2 * shareLabelInfo.margin);
        _labelHeight <= 0 && (_contentSize.height = parseFloat(_textDesiredHeight.toFixed(2)) + 2 * shareLabelInfo.margin);
        _tailoredTopY = _contentSize.height;
        _tailoredBottomY = 0;
        if (_overflow !== Overflow.CLAMP) {
          highestY > 0 && (_tailoredTopY = _contentSize.height + highestY);
          lowestY < -_textDesiredHeight && (_tailoredBottomY = _textDesiredHeight + lowestY);
        }
        return true;
      };
      _proto._getFirstCharLen = function _getFirstCharLen() {
        return 1;
      };
      _proto._getFontScale = function _getFontScale() {
        return _overflow === Overflow.SHRINK ? _bmfontScale : 1;
      };
      _proto._getFirstWordLen = function _getFirstWordLen(text, startIndex, textLen) {
        var character = text.charAt(startIndex);
        if (textUtils.isUnicodeCJK(character) || "\n" === character || textUtils.isUnicodeSpace(character)) return 1;
        var len = 1;
        var letterDef = shareLabelInfo.fontAtlas.getLetterDefinitionForChar(character, shareLabelInfo);
        if (!letterDef) return len;
        var nextLetterX = letterDef.xAdvance * _bmfontScale + _spacingX;
        var letterX;
        for (var index = startIndex + 1; index < textLen; ++index) {
          character = text.charAt(index);
          letterDef = shareLabelInfo.fontAtlas.getLetterDefinitionForChar(character, shareLabelInfo);
          if (!letterDef) break;
          letterX = nextLetterX + letterDef.offsetX * _bmfontScale;
          if (letterX + letterDef.w * _bmfontScale > _maxLineWidth && !textUtils.isUnicodeSpace(character) && _maxLineWidth > 0) return len;
          nextLetterX += letterDef.xAdvance * _bmfontScale + _spacingX;
          if ("\n" === character || textUtils.isUnicodeSpace(character) || textUtils.isUnicodeCJK(character)) break;
          len++;
        }
        return len;
      };
      _proto._multilineTextWrapByWord = function _multilineTextWrapByWord() {
        return this._multilineTextWrap(this._getFirstWordLen);
      };
      _proto._multilineTextWrapByChar = function _multilineTextWrapByChar() {
        return this._multilineTextWrap(this._getFirstCharLen);
      };
      _proto._recordPlaceholderInfo = function _recordPlaceholderInfo(letterIndex, _char) {
        if (letterIndex >= _lettersInfo.length) {
          var tmpInfo = new LetterInfo();
          _lettersInfo.push(tmpInfo);
        }
        _lettersInfo[letterIndex]["char"] = _char;
        _lettersInfo[letterIndex].hash = _char.charCodeAt(0) + shareLabelInfo.hash;
        _lettersInfo[letterIndex].valid = false;
      };
      _proto._recordLetterInfo = function _recordLetterInfo(letterPosition, character, letterIndex, lineIndex) {
        if (letterIndex >= _lettersInfo.length) {
          var tmpInfo = new LetterInfo();
          _lettersInfo.push(tmpInfo);
        }
        var _char2 = character.charCodeAt(0);
        var key = _char2 + shareLabelInfo.hash;
        _lettersInfo[letterIndex].line = lineIndex;
        _lettersInfo[letterIndex]["char"] = character;
        _lettersInfo[letterIndex].hash = key;
        _lettersInfo[letterIndex].valid = shareLabelInfo.fontAtlas.getLetter(key).valid;
        _lettersInfo[letterIndex].x = letterPosition.x;
        _lettersInfo[letterIndex].y = letterPosition.y;
      };
      _proto._alignText = function _alignText() {
        _textDesiredHeight = 0;
        _linesWidth.length = 0;
        _lineBreakWithoutSpaces ? this._multilineTextWrapByChar() : this._multilineTextWrapByWord();
        this._computeAlignmentOffset();
        _overflow === Overflow.SHRINK && _fontSize > 0 && this._isVerticalClamp() && this._shrinkLabelToContentSize(this._isVerticalClamp);
        this._updateQuads() || _overflow === Overflow.SHRINK && this._shrinkLabelToContentSize(this._isHorizontalClamp);
      };
      _proto._scaleFontSizeDown = function _scaleFontSizeDown(fontSize) {
        var shouldUpdateContent = true;
        if (!fontSize) {
          fontSize = .1;
          shouldUpdateContent = false;
        }
        _fontSize = fontSize;
        shouldUpdateContent && this._updateContent();
      };
      _proto._shrinkLabelToContentSize = function _shrinkLabelToContentSize(lambda) {
        var fontSize = _fontSize;
        var left = 0, right = 0 | fontSize, mid = 0;
        while (left < right) {
          mid = left + right + 1 >> 1;
          var newFontSize = mid;
          if (newFontSize <= 0) break;
          _bmfontScale = newFontSize / _originFontSize;
          _lineBreakWithoutSpaces ? this._multilineTextWrapByChar() : this._multilineTextWrapByWord();
          this._computeAlignmentOffset();
          lambda() ? right = mid - 1 : left = mid;
        }
        var actualFontSize = left;
        actualFontSize >= 0 && this._scaleFontSizeDown(actualFontSize);
      };
      _proto._isVerticalClamp = function _isVerticalClamp() {
        return _textDesiredHeight > _contentSize.height;
      };
      _proto._isHorizontalClamp = function _isHorizontalClamp() {
        var letterClamp = false;
        for (var ctr = 0, l = _string.length; ctr < l; ++ctr) {
          var letterInfo = _lettersInfo[ctr];
          if (letterInfo.valid) {
            var letterDef = shareLabelInfo.fontAtlas.getLetter(letterInfo.hash);
            var px = letterInfo.x + letterDef.w * _bmfontScale;
            var lineIndex = letterInfo.line;
            if (_labelWidth > 0) if (_isWrapText) {
              var wordWidth = _linesWidth[lineIndex];
              if (wordWidth > _contentSize.width && (px > _contentSize.width || px < 0)) {
                letterClamp = true;
                break;
              }
            } else if (px > _contentSize.width) {
              letterClamp = true;
              break;
            }
          }
        }
        return letterClamp;
      };
      _proto._isHorizontalClamped = function _isHorizontalClamped(px, lineIndex) {
        var wordWidth = _linesWidth[lineIndex];
        var letterOverClamp = px > _contentSize.width || px < 0;
        return _isWrapText ? wordWidth > _contentSize.width && letterOverClamp : letterOverClamp;
      };
      _proto._updateQuads = function _updateQuads() {
        var texture = _spriteFrame ? _spriteFrame._texture : shareLabelInfo.fontAtlas.getTexture();
        var node = _comp.node;
        this.verticesCount = this.indicesCount = 0;
        this._renderData && (this._renderData.dataLength = 0);
        var contentSize = _contentSize, appx = node._anchorPoint.x * contentSize.width, appy = node._anchorPoint.y * contentSize.height;
        var ret = true;
        for (var ctr = 0, l = _string.length; ctr < l; ++ctr) {
          var letterInfo = _lettersInfo[ctr];
          if (!letterInfo.valid) continue;
          var letterDef = shareLabelInfo.fontAtlas.getLetter(letterInfo.hash);
          _tmpRect.height = letterDef.h;
          _tmpRect.width = letterDef.w;
          _tmpRect.x = letterDef.u;
          _tmpRect.y = letterDef.v;
          var py = letterInfo.y + _letterOffsetY;
          if (_labelHeight > 0) {
            if (py > _tailoredTopY) {
              var clipTop = py - _tailoredTopY;
              _tmpRect.y += clipTop;
              _tmpRect.height -= clipTop;
              py -= clipTop;
            }
            py - letterDef.h * _bmfontScale < _tailoredBottomY && _overflow === Overflow.CLAMP && (_tmpRect.height = py < _tailoredBottomY ? 0 : (py - _tailoredBottomY) / _bmfontScale);
          }
          var lineIndex = letterInfo.line;
          var px = letterInfo.x + letterDef.w / 2 * _bmfontScale + _linesOffsetX[lineIndex];
          if (_labelWidth > 0 && this._isHorizontalClamped(px, lineIndex)) if (_overflow === Overflow.CLAMP) _tmpRect.width = 0; else if (_overflow === Overflow.SHRINK) {
            if (_contentSize.width > letterDef.w) {
              ret = false;
              break;
            }
            _tmpRect.width = 0;
          }
          if (_tmpRect.height > 0 && _tmpRect.width > 0) {
            var isRotated = this._determineRect(_tmpRect);
            var letterPositionX = letterInfo.x + _linesOffsetX[letterInfo.line];
            this.appendQuad(_comp, texture, _tmpRect, isRotated, letterPositionX - appx, py - appy, _bmfontScale);
          }
        }
        this._quadsUpdated(_comp);
        return ret;
      };
      _proto._determineRect = function _determineRect(tempRect) {
        var isRotated = _spriteFrame.isRotated();
        var originalSize = _spriteFrame._originalSize;
        var rect = _spriteFrame._rect;
        var offset = _spriteFrame._offset;
        var trimmedLeft = offset.x + (originalSize.width - rect.width) / 2;
        var trimmedTop = offset.y - (originalSize.height - rect.height) / 2;
        if (isRotated) {
          var originalX = tempRect.x;
          tempRect.x = rect.x + rect.height - tempRect.y - tempRect.height - trimmedTop;
          tempRect.y = originalX + rect.y - trimmedLeft;
          tempRect.y < 0 && (tempRect.height = tempRect.height + trimmedTop);
        } else {
          tempRect.x += rect.x - trimmedLeft;
          tempRect.y += rect.y + trimmedTop;
        }
        return isRotated;
      };
      _proto._computeAlignmentOffset = function _computeAlignmentOffset() {
        _linesOffsetX.length = 0;
        switch (_hAlign) {
         case macro.TextAlignment.LEFT:
          for (var i = 0; i < _numberOfLines; ++i) _linesOffsetX.push(0);
          break;

         case macro.TextAlignment.CENTER:
          for (var _i = 0, l = _linesWidth.length; _i < l; _i++) _linesOffsetX.push((_contentSize.width - _linesWidth[_i]) / 2);
          break;

         case macro.TextAlignment.RIGHT:
          for (var _i2 = 0, _l = _linesWidth.length; _i2 < _l; _i2++) _linesOffsetX.push(_contentSize.width - _linesWidth[_i2]);
        }
        _letterOffsetY = _contentSize.height;
        if (_vAlign !== macro.VerticalTextAlignment.TOP) {
          var blank = _contentSize.height - _textDesiredHeight + _lineHeight * this._getFontScale() - _originFontSize * _bmfontScale;
          _vAlign === macro.VerticalTextAlignment.BOTTOM ? _letterOffsetY -= blank : _letterOffsetY -= blank / 2;
        }
      };
      _proto._setupBMFontOverflowMetrics = function _setupBMFontOverflowMetrics() {
        var newWidth = _contentSize.width, newHeight = _contentSize.height;
        _overflow === Overflow.RESIZE_HEIGHT && (newHeight = 0);
        if (_overflow === Overflow.NONE) {
          newWidth = 0;
          newHeight = 0;
        }
        _labelWidth = newWidth;
        _labelHeight = newHeight;
        _maxLineWidth = newWidth;
      };
      _proto.updateWorldVerts = function updateWorldVerts() {};
      _proto.appendQuad = function appendQuad(comp, texture, rect, rotated, x, y, scale) {};
      _proto._quadsUpdated = function _quadsUpdated(comp) {};
      _proto._reserveQuads = function _reserveQuads() {};
      return BmfontAssembler;
    })(_assembler2d["default"]);
    exports["default"] = BmfontAssembler;
    module.exports = exports["default"];
  }), {
    "../../../components/CCLabel": 96,
    "../../../platform/CCMacro": 143,
    "../../../utils/text-utils": 216,
    "../../assembler-2d": 163,
    "../utils": 174
  } ],
  171: [ (function(require, module, exports) {
    "use strict";
    function LabelFrame() {
      this._rect = null;
      this.uv = [];
      this._texture = null;
      this._original = null;
    }
    LabelFrame.prototype = {
      constructor: LabelFrame,
      getRect: function getRect() {
        return cc.rect(this._rect);
      },
      setRect: function setRect(rect) {
        this._rect = rect;
        this._texture && this._calculateUV();
      },
      _setDynamicAtlasFrame: function _setDynamicAtlasFrame(frame) {
        if (!frame) return;
        this._original = {
          _texture: this._texture,
          _x: this._rect.x,
          _y: this._rect.y
        };
        this._texture = frame.texture;
        this._rect.x = frame.x;
        this._rect.y = frame.y;
        this._calculateUV();
      },
      _resetDynamicAtlasFrame: function _resetDynamicAtlasFrame() {
        if (!this._original) return;
        this._rect.x = this._original._x;
        this._rect.y = this._original._y;
        this._texture = this._original._texture;
        this._original = null;
        this._calculateUV();
      },
      _refreshTexture: function _refreshTexture(texture) {
        this._texture = texture;
        this._rect = cc.rect(0, 0, texture.width, texture.height);
        this._calculateUV();
      },
      _calculateUV: function _calculateUV() {
        var rect = this._rect, texture = this._texture, uv = this.uv, texw = texture.width, texh = texture.height;
        var l = 0 === texw ? 0 : rect.x / texw;
        var r = 0 === texw ? 0 : (rect.x + rect.width) / texw;
        var b = 0 === texh ? 0 : (rect.y + rect.height) / texh;
        var t = 0 === texh ? 0 : rect.y / texh;
        uv[0] = l;
        uv[1] = b;
        uv[2] = r;
        uv[3] = b;
        uv[4] = l;
        uv[5] = t;
        uv[6] = r;
        uv[7] = t;
      }
    };
    module.exports = LabelFrame;
  }), {} ],
  172: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _bmfont = _interopRequireDefault(require("../../webgl/assemblers/label/2d/bmfont"));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    function _inheritsLoose(subClass, superClass) {
      subClass.prototype = Object.create(superClass.prototype);
      subClass.prototype.constructor = subClass;
      subClass.__proto__ = superClass;
    }
    var Label = require("../../../components/CCLabel");
    var LabelOutline = require("../../../components/CCLabelOutline");
    var textUtils = require("../../../utils/text-utils");
    var Component = require("../../../components/CCComponent");
    var RenderTexture = require("../../../assets/CCRenderTexture");
    var OUTLINE_SUPPORTED = cc.js.isChildClassOf(LabelOutline, Component);
    var getFontFamily = require("../utils").getFontFamily;
    var shareLabelInfo = require("../utils").shareLabelInfo;
    var FontLetterDefinition = cc.BitmapFont.FontLetterDefinition;
    var FontAtlas = cc.BitmapFont.FontAtlas;
    var WHITE = cc.Color.WHITE;
    var space = 0;
    var bleed = 2;
    var _invisibleAlpha = (1 / 255).toFixed(3);
    function LetterTexture(_char, labelInfo) {
      this._texture = null;
      this._labelInfo = labelInfo;
      this._char = _char;
      this._hash = null;
      this._data = null;
      this._canvas = null;
      this._context = null;
      this._width = 0;
      this._height = 0;
      this._offsetY = 0;
      this._hash = _char.charCodeAt(0) + labelInfo.hash;
    }
    LetterTexture.prototype = {
      constructor: LetterTexture,
      updateRenderData: function updateRenderData() {
        this._updateProperties();
        this._updateTexture();
      },
      _updateProperties: function _updateProperties() {
        this._texture = new cc.Texture2D();
        this._data = Label._canvasPool.get();
        this._canvas = this._data.canvas;
        this._context = this._data.context;
        this._context.font = this._labelInfo.fontDesc;
        var width = textUtils.safeMeasureText(this._context, this._char, this._labelInfo.fontDesc);
        var blank = 2 * this._labelInfo.margin + bleed;
        this._width = parseFloat(width.toFixed(2)) + blank;
        this._height = (1 + textUtils.BASELINE_RATIO) * this._labelInfo.fontSize + blank;
        this._offsetY = -this._labelInfo.fontSize * textUtils.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 _updateTexture() {
        var context = this._context;
        var labelInfo = this._labelInfo, width = this._canvas.width, height = this._canvas.height;
        var fontSize = this._labelInfo.fontSize;
        var startX = width / 2;
        var startY = height / 2 + fontSize * textUtils.MIDDLE_RATIO + fontSize * textUtils.BASELINE_OFFSET;
        var color = labelInfo.color;
        context.textAlign = "center";
        context.clearRect(0, 0, width, height);
        context.fillStyle = "rgba(" + color.r + ", " + color.g + ", " + color.b + ", " + _invisibleAlpha + ")";
        context.fillRect(0, 0, width, height);
        context.font = labelInfo.fontDesc;
        context.fillStyle = "rgba(" + color.r + ", " + color.g + ", " + color.b + ", 1)";
        if (labelInfo.isOutlined && labelInfo.margin > 0) {
          var strokeColor = labelInfo.out || WHITE;
          context.strokeStyle = "rgba(" + strokeColor.r + ", " + strokeColor.g + ", " + strokeColor.b + ", " + strokeColor.a / 255 + ")";
          context.lineWidth = 2 * labelInfo.margin;
          context.strokeText(this._char, startX, startY);
        }
        context.fillText(this._char, startX, startY);
        this._texture.handleLoadedTexture();
      },
      destroy: function destroy() {
        this._texture.destroy();
        this._texture = null;
        Label._canvasPool.put(this._data);
      }
    };
    function LetterAtlas(width, height) {
      var texture = new RenderTexture();
      texture.initWithSize(width, height);
      texture.update();
      this._fontDefDictionary = new FontAtlas(texture);
      this._x = space;
      this._y = space;
      this._nexty = space;
      this._width = width;
      this._height = height;
      cc.director.on(cc.Director.EVENT_BEFORE_SCENE_LAUNCH, this.beforeSceneLoad, this);
    }
    cc.js.mixin(LetterAtlas.prototype, {
      insertLetterTexture: function insertLetterTexture(letterTexture) {
        var texture = letterTexture._texture;
        var width = texture.width, height = texture.height;
        if (this._x + width + space > this._width) {
          this._x = space;
          this._y = this._nexty;
        }
        this._y + height > this._nexty && (this._nexty = this._y + height + space);
        if (this._nexty > this._height) return null;
        this._fontDefDictionary._texture.drawTextureAt(texture, this._x, this._y);
        this._dirty = true;
        var letter = new FontLetterDefinition();
        letter.u = this._x + bleed / 2;
        letter.v = this._y + bleed / 2;
        letter.texture = this._fontDefDictionary._texture;
        letter.valid = true;
        letter.w = letterTexture._width - bleed;
        letter.h = letterTexture._height - bleed;
        letter.xAdvance = letter.w;
        letter.offsetY = letterTexture._offsetY;
        this._x += width + space;
        this._fontDefDictionary.addLetterDefinitions(letterTexture._hash, letter);
        return letter;
      },
      update: function update() {
        if (!this._dirty) return;
        this._fontDefDictionary._texture.update();
        this._dirty = false;
      },
      reset: function reset() {
        this._x = space;
        this._y = space;
        this._nexty = space;
        var chars = this._fontDefDictionary._letterDefinitions;
        for (var i = 0, l = chars.length; i < l; i++) {
          var _char2 = chars[i];
          if (!_char2.isValid) continue;
          _char2.destroy();
        }
        this._fontDefDictionary.clear();
      },
      destroy: function destroy() {
        this.reset();
        this._fontDefDictionary._texture.destroy();
        this._fontDefDictionary._texture = null;
      },
      beforeSceneLoad: function beforeSceneLoad() {
        this.clearAllCache();
      },
      clearAllCache: function clearAllCache() {
        this.destroy();
        var texture = new RenderTexture();
        texture.initWithSize(this._width, this._height);
        texture.update();
        this._fontDefDictionary._texture = texture;
      },
      getLetter: function getLetter(key) {
        return this._fontDefDictionary._letterDefinitions[key];
      },
      getTexture: function getTexture() {
        return this._fontDefDictionary.getTexture();
      },
      getLetterDefinitionForChar: function getLetterDefinitionForChar(_char3, labelInfo) {
        var hash = _char3.charCodeAt(0) + labelInfo.hash;
        var letter = this._fontDefDictionary._letterDefinitions[hash];
        if (!letter) {
          var temp = new LetterTexture(_char3, labelInfo);
          temp.updateRenderData();
          letter = this.insertLetterTexture(temp);
          temp.destroy();
        }
        return letter;
      }
    });
    function computeHash(labelInfo) {
      var hashData = "";
      var color = labelInfo.color.toHEX();
      var out = "";
      labelInfo.isOutlined && labelInfo.margin > 0 && (out = out + labelInfo.margin + labelInfo.out.toHEX());
      return hashData + labelInfo.fontSize + labelInfo.fontFamily + color + out;
    }
    var _shareAtlas = null;
    var _atlasWidth = 2048;
    var _atlasHeight = 2048;
    var _isBold = false;
    var LetterFontAssembler = (function(_WebglBmfontAssembler) {
      _inheritsLoose(LetterFontAssembler, _WebglBmfontAssembler);
      function LetterFontAssembler() {
        return _WebglBmfontAssembler.apply(this, arguments) || this;
      }
      var _proto = LetterFontAssembler.prototype;
      _proto._getAssemblerData = function _getAssemblerData() {
        if (!_shareAtlas) {
          _shareAtlas = new LetterAtlas(_atlasWidth, _atlasHeight);
          cc.Label._shareAtlas = _shareAtlas;
        }
        return _shareAtlas.getTexture();
      };
      _proto._updateFontFamily = function _updateFontFamily(comp) {
        shareLabelInfo.fontAtlas = _shareAtlas;
        shareLabelInfo.fontFamily = getFontFamily(comp);
        var outline = OUTLINE_SUPPORTED && comp.getComponent(LabelOutline);
        if (outline && outline.enabled) {
          shareLabelInfo.isOutlined = true;
          shareLabelInfo.margin = outline.width;
          shareLabelInfo.out = outline.color.clone();
          shareLabelInfo.out.a = outline.color.a * comp.node.color.a / 255;
        } else {
          shareLabelInfo.isOutlined = false;
          shareLabelInfo.margin = 0;
        }
      };
      _proto._updateLabelInfo = function _updateLabelInfo(comp) {
        shareLabelInfo.fontDesc = this._getFontDesc();
        shareLabelInfo.color = comp.node.color;
        shareLabelInfo.hash = computeHash(shareLabelInfo);
      };
      _proto._getFontDesc = function _getFontDesc() {
        var fontDesc = shareLabelInfo.fontSize.toString() + "px ";
        fontDesc += shareLabelInfo.fontFamily;
        _isBold && (fontDesc = "bold " + fontDesc);
        return fontDesc;
      };
      _proto._computeHorizontalKerningForText = function _computeHorizontalKerningForText() {};
      _proto._determineRect = function _determineRect(tempRect) {
        return false;
      };
      return LetterFontAssembler;
    })(_bmfont["default"]);
    exports["default"] = LetterFontAssembler;
    module.exports = exports["default"];
  }), {
    "../../../assets/CCRenderTexture": 67,
    "../../../components/CCComponent": 94,
    "../../../components/CCLabel": 96,
    "../../../components/CCLabelOutline": void 0,
    "../../../utils/text-utils": 216,
    "../../webgl/assemblers/label/2d/bmfont": 179,
    "../utils": 174
  } ],
  173: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _assembler2d = _interopRequireDefault(require("../../assembler-2d"));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    function _inheritsLoose(subClass, superClass) {
      subClass.prototype = Object.create(superClass.prototype);
      subClass.prototype.constructor = subClass;
      subClass.__proto__ = superClass;
    }
    var textUtils = require("../../../utils/text-utils");
    var macro = require("../../../platform/CCMacro");
    var Label = require("../../../components/CCLabel");
    var LabelOutline = require("../../../components/CCLabelOutline");
    var LabelShadow = require("../../../components/CCLabelShadow");
    var Overflow = Label.Overflow;
    var deleteFromDynamicAtlas = require("../utils").deleteFromDynamicAtlas;
    var getFontFamily = require("../utils").getFontFamily;
    var MAX_SIZE = 2048;
    var _invisibleAlpha = (1 / 255).toFixed(3);
    var _context = null;
    var _canvas = null;
    var _texture = null;
    var _fontDesc = "";
    var _string = "";
    var _fontSize = 0;
    var _drawFontSize = 0;
    var _splitedStrings = [];
    var _canvasSize = cc.Size.ZERO;
    var _lineHeight = 0;
    var _hAlign = 0;
    var _vAlign = 0;
    var _color = null;
    var _fontFamily = "";
    var _overflow = Overflow.NONE;
    var _isWrapText = false;
    var _premultiply = false;
    var _outlineComp = null;
    var _outlineColor = cc.Color.WHITE;
    var _shadowComp = null;
    var _shadowColor = cc.Color.BLACK;
    var _canvasPadding = cc.rect();
    var _contentSizeExtend = cc.Size.ZERO;
    var _nodeContentSize = cc.Size.ZERO;
    var _enableBold = false;
    var _enableItalic = false;
    var _enableUnderline = false;
    var _underlineThickness = 0;
    var _drawUnderlinePos = cc.Vec2.ZERO;
    var _drawUnderlineWidth = 0;
    var _sharedLabelData;
    var Alignment = [ "left", "center", "right" ];
    var TTFAssembler = (function(_Assembler2D) {
      _inheritsLoose(TTFAssembler, _Assembler2D);
      function TTFAssembler() {
        return _Assembler2D.apply(this, arguments) || this;
      }
      var _proto = TTFAssembler.prototype;
      _proto._getAssemblerData = function _getAssemblerData() {
        _sharedLabelData = Label._canvasPool.get();
        _sharedLabelData.canvas.width = _sharedLabelData.canvas.height = 1;
        return _sharedLabelData;
      };
      _proto._resetAssemblerData = function _resetAssemblerData(assemblerData) {
        assemblerData && Label._canvasPool.put(assemblerData);
      };
      _proto.updateRenderData = function updateRenderData(comp) {
        _Assembler2D.prototype.updateRenderData.call(this, comp);
        if (!comp._vertsDirty) return;
        this._updateProperties(comp);
        this._calculateLabelFont();
        this._updateLabelDimensions();
        this._updateTexture(comp);
        this._calDynamicAtlas(comp);
        comp._actualFontSize = _fontSize;
        comp.node.setContentSize(_nodeContentSize);
        this.updateVerts(comp);
        comp._vertsDirty = false;
        _context = null;
        _canvas = null;
        _texture = null;
      };
      _proto.updateVerts = function updateVerts() {};
      _proto._updatePaddingRect = function _updatePaddingRect() {
        var top = 0, bottom = 0, left = 0, right = 0;
        var outlineWidth = 0;
        _contentSizeExtend.width = _contentSizeExtend.height = 0;
        if (_outlineComp) {
          outlineWidth = _outlineComp.width;
          top = bottom = left = right = outlineWidth;
          _contentSizeExtend.width = _contentSizeExtend.height = 2 * outlineWidth;
        }
        if (_shadowComp) {
          var shadowWidth = _shadowComp.blur + outlineWidth;
          left = Math.max(left, -_shadowComp._offset.x + shadowWidth);
          right = Math.max(right, _shadowComp._offset.x + shadowWidth);
          top = Math.max(top, _shadowComp._offset.y + shadowWidth);
          bottom = Math.max(bottom, -_shadowComp._offset.y + shadowWidth);
        }
        if (_enableItalic) {
          var offset = _drawFontSize * Math.tan(.20943951);
          right += offset;
          _contentSizeExtend.width += offset;
        }
        _canvasPadding.x = left;
        _canvasPadding.y = top;
        _canvasPadding.width = left + right;
        _canvasPadding.height = top + bottom;
      };
      _proto._updateProperties = function _updateProperties(comp) {
        var assemblerData = comp._assemblerData;
        _context = assemblerData.context;
        _canvas = assemblerData.canvas;
        _texture = comp._frame._original ? comp._frame._original._texture : comp._frame._texture;
        _string = comp.string.toString();
        _fontSize = comp._fontSize;
        _drawFontSize = _fontSize;
        _underlineThickness = comp.underlineHeight || _drawFontSize / 8;
        _overflow = comp.overflow;
        _canvasSize.width = comp.node.width;
        _canvasSize.height = comp.node.height;
        _nodeContentSize = comp.node.getContentSize();
        _lineHeight = comp._lineHeight;
        _hAlign = comp.horizontalAlign;
        _vAlign = comp.verticalAlign;
        _color = comp.node.color;
        _enableBold = comp.enableBold;
        _enableItalic = comp.enableItalic;
        _enableUnderline = comp.enableUnderline;
        _fontFamily = getFontFamily(comp);
        _premultiply = comp.srcBlendFactor === cc.macro.BlendFactor.ONE;
        false;
        _isWrapText = _overflow !== Overflow.NONE && (_overflow === Overflow.RESIZE_HEIGHT || comp.enableWrapText);
        _outlineComp = LabelOutline && comp.getComponent(LabelOutline);
        _outlineComp = _outlineComp && _outlineComp.enabled && _outlineComp.width > 0 ? _outlineComp : null;
        _outlineComp && _outlineColor.set(_outlineComp.color);
        _shadowComp = LabelShadow && comp.getComponent(LabelShadow);
        _shadowComp = _shadowComp && _shadowComp.enabled ? _shadowComp : null;
        if (_shadowComp) {
          _shadowColor.set(_shadowComp.color);
          _shadowColor.a = _shadowColor.a * comp.node.color.a / 255;
        }
        this._updatePaddingRect();
      };
      _proto._calculateFillTextStartPosition = function _calculateFillTextStartPosition() {
        var labelX = 0;
        _hAlign === macro.TextAlignment.RIGHT ? labelX = _canvasSize.width - _canvasPadding.width : _hAlign === macro.TextAlignment.CENTER && (labelX = (_canvasSize.width - _canvasPadding.width) / 2);
        var lineHeight = this._getLineHeight();
        var drawStartY = lineHeight * (_splitedStrings.length - 1);
        var firstLinelabelY = _fontSize * (1 - textUtils.BASELINE_RATIO / 2);
        if (_vAlign !== macro.VerticalTextAlignment.TOP) {
          var blank = drawStartY + _canvasPadding.height + _fontSize - _canvasSize.height;
          if (_vAlign === macro.VerticalTextAlignment.BOTTOM) {
            blank += textUtils.BASELINE_RATIO / 2 * _fontSize;
            firstLinelabelY -= blank;
          } else firstLinelabelY -= blank / 2;
        }
        firstLinelabelY += textUtils.BASELINE_OFFSET * _fontSize;
        return cc.v2(labelX + _canvasPadding.x, firstLinelabelY + _canvasPadding.y);
      };
      _proto._setupOutline = function _setupOutline() {
        _context.strokeStyle = "rgba(" + _outlineColor.r + ", " + _outlineColor.g + ", " + _outlineColor.b + ", " + _outlineColor.a / 255 + ")";
        _context.lineWidth = 2 * _outlineComp.width;
      };
      _proto._setupShadow = function _setupShadow() {
        _context.shadowColor = "rgba(" + _shadowColor.r + ", " + _shadowColor.g + ", " + _shadowColor.b + ", " + _shadowColor.a / 255 + ")";
        _context.shadowBlur = _shadowComp.blur;
        _context.shadowOffsetX = _shadowComp.offset.x;
        _context.shadowOffsetY = -_shadowComp.offset.y;
      };
      _proto._drawTextEffect = function _drawTextEffect(startPosition, lineHeight) {
        if (!_shadowComp && !_outlineComp && !_enableUnderline) return;
        var isMultiple = _splitedStrings.length > 1 && _shadowComp;
        var measureText = this._measureText(_context, _fontDesc);
        var drawTextPosX = 0, drawTextPosY = 0;
        _shadowComp && this._setupShadow();
        _outlineComp && this._setupOutline();
        for (var i = 0; i < _splitedStrings.length; ++i) {
          drawTextPosX = startPosition.x;
          drawTextPosY = startPosition.y + i * lineHeight;
          if (isMultiple) {
            _outlineComp && _context.strokeText(_splitedStrings[i], drawTextPosX, drawTextPosY);
            _context.fillText(_splitedStrings[i], drawTextPosX, drawTextPosY);
          }
          if (_enableUnderline) {
            _drawUnderlineWidth = measureText(_splitedStrings[i]);
            _hAlign === macro.TextAlignment.RIGHT ? _drawUnderlinePos.x = startPosition.x - _drawUnderlineWidth : _hAlign === macro.TextAlignment.CENTER ? _drawUnderlinePos.x = startPosition.x - _drawUnderlineWidth / 2 : _drawUnderlinePos.x = startPosition.x;
            _drawUnderlinePos.y = drawTextPosY + _drawFontSize / 8;
            _context.fillRect(_drawUnderlinePos.x, _drawUnderlinePos.y, _drawUnderlineWidth, _underlineThickness);
          }
        }
        isMultiple && (_context.shadowColor = "transparent");
      };
      _proto._updateTexture = function _updateTexture() {
        _context.clearRect(0, 0, _canvas.width, _canvas.height);
        if (_premultiply) _context.fillStyle = "rgba(" + _color.r + ", " + _color.g + ", " + _color.b + ", " + _color.a / 255 + ")"; else {
          var _fillColor = _outlineComp ? _outlineColor : _color;
          _context.fillStyle = "rgba(" + _fillColor.r + ", " + _fillColor.g + ", " + _fillColor.b + ", " + _invisibleAlpha + ")";
          _context.fillRect(0, 0, _canvas.width, _canvas.height);
          _context.fillStyle = "rgba(" + _color.r + ", " + _color.g + ", " + _color.b + ", 1)";
        }
        var startPosition = this._calculateFillTextStartPosition();
        var lineHeight = this._getLineHeight();
        var drawTextPosX = startPosition.x, drawTextPosY = 0;
        this._drawTextEffect(startPosition, lineHeight);
        for (var i = 0; i < _splitedStrings.length; ++i) {
          drawTextPosY = startPosition.y + i * lineHeight;
          _outlineComp && _context.strokeText(_splitedStrings[i], drawTextPosX, drawTextPosY);
          _context.fillText(_splitedStrings[i], drawTextPosX, drawTextPosY);
        }
        _shadowComp && (_context.shadowColor = "transparent");
        _texture.handleLoadedTexture();
      };
      _proto._calDynamicAtlas = function _calDynamicAtlas(comp) {
        if (comp.cacheMode !== Label.CacheMode.BITMAP) return;
        var frame = comp._frame;
        deleteFromDynamicAtlas(comp, frame);
        frame._original || frame.setRect(cc.rect(0, 0, _canvas.width, _canvas.height));
        this.packToDynamicAtlas(comp, frame);
      };
      _proto._updateLabelDimensions = function _updateLabelDimensions() {
        _canvasSize.width = Math.min(_canvasSize.width, MAX_SIZE);
        _canvasSize.height = Math.min(_canvasSize.height, MAX_SIZE);
        var recreate = false;
        if (_canvas.width !== _canvasSize.width) {
          _canvas.width = _canvasSize.width;
          recreate = true;
        }
        if (_canvas.height !== _canvasSize.height) {
          _canvas.height = _canvasSize.height;
          recreate = true;
        }
        recreate && (_context.font = _fontDesc);
        _context.textAlign = Alignment[_hAlign];
      };
      _proto._getFontDesc = function _getFontDesc() {
        var fontDesc = _fontSize.toString() + "px ";
        fontDesc += _fontFamily;
        _enableBold && (fontDesc = "bold " + fontDesc);
        _enableItalic && (fontDesc = "italic " + fontDesc);
        return fontDesc;
      };
      _proto._getLineHeight = function _getLineHeight() {
        var nodeSpacingY = _lineHeight;
        nodeSpacingY = 0 === nodeSpacingY ? _fontSize : nodeSpacingY * _fontSize / _drawFontSize;
        return 0 | nodeSpacingY;
      };
      _proto._calculateParagraphLength = function _calculateParagraphLength(paragraphedStrings, ctx) {
        var paragraphLength = [];
        for (var i = 0; i < paragraphedStrings.length; ++i) {
          var width = textUtils.safeMeasureText(ctx, paragraphedStrings[i], _fontDesc);
          paragraphLength.push(width);
        }
        return paragraphLength;
      };
      _proto._measureText = function _measureText(ctx, fontDesc) {
        return function(string) {
          return textUtils.safeMeasureText(ctx, string, fontDesc);
        };
      };
      _proto._calculateShrinkFont = function _calculateShrinkFont(paragraphedStrings) {
        var paragraphLength = this._calculateParagraphLength(paragraphedStrings, _context);
        var i = 0;
        var totalHeight = 0;
        var maxLength = 0;
        if (_isWrapText) {
          var canvasWidthNoMargin = _nodeContentSize.width;
          var canvasHeightNoMargin = _nodeContentSize.height;
          if (canvasWidthNoMargin < 0 || canvasHeightNoMargin < 0) return;
          totalHeight = canvasHeightNoMargin + 1;
          var actualFontSize = _fontSize + 1;
          var textFragment = "";
          var left = 0, right = 0 | actualFontSize, mid = 0;
          while (left < right) {
            mid = left + right + 1 >> 1;
            if (mid <= 0) {
              cc.logID(4003);
              break;
            }
            _fontSize = mid;
            _fontDesc = this._getFontDesc();
            _context.font = _fontDesc;
            var lineHeight = this._getLineHeight();
            totalHeight = 0;
            for (i = 0; i < paragraphedStrings.length; ++i) {
              var allWidth = textUtils.safeMeasureText(_context, paragraphedStrings[i], _fontDesc);
              textFragment = textUtils.fragmentText(paragraphedStrings[i], allWidth, canvasWidthNoMargin, this._measureText(_context, _fontDesc));
              totalHeight += textFragment.length * lineHeight;
            }
            totalHeight > canvasHeightNoMargin ? right = mid - 1 : left = mid;
          }
          if (0 === left) cc.logID(4003); else {
            _fontSize = left;
            _fontDesc = this._getFontDesc();
            _context.font = _fontDesc;
          }
        } else {
          totalHeight = paragraphedStrings.length * this._getLineHeight();
          for (i = 0; i < paragraphedStrings.length; ++i) maxLength < paragraphLength[i] && (maxLength = paragraphLength[i]);
          var scaleX = (_canvasSize.width - _canvasPadding.width) / maxLength;
          var scaleY = _canvasSize.height / totalHeight;
          _fontSize = _drawFontSize * Math.min(1, scaleX, scaleY) | 0;
          _fontDesc = this._getFontDesc();
          _context.font = _fontDesc;
        }
      };
      _proto._calculateWrapText = function _calculateWrapText(paragraphedStrings) {
        if (!_isWrapText) return;
        _splitedStrings = [];
        var canvasWidthNoMargin = _nodeContentSize.width;
        for (var i = 0; i < paragraphedStrings.length; ++i) {
          var allWidth = textUtils.safeMeasureText(_context, paragraphedStrings[i], _fontDesc);
          var textFragment = textUtils.fragmentText(paragraphedStrings[i], allWidth, canvasWidthNoMargin, this._measureText(_context, _fontDesc));
          _splitedStrings = _splitedStrings.concat(textFragment);
        }
      };
      _proto._calculateLabelFont = function _calculateLabelFont() {
        var paragraphedStrings = _string.split("\n");
        _splitedStrings = paragraphedStrings;
        _fontDesc = this._getFontDesc();
        _context.font = _fontDesc;
        switch (_overflow) {
         case Overflow.NONE:
          var canvasSizeX = 0;
          var canvasSizeY = 0;
          for (var i = 0; i < paragraphedStrings.length; ++i) {
            var paraLength = textUtils.safeMeasureText(_context, paragraphedStrings[i], _fontDesc);
            canvasSizeX = canvasSizeX > paraLength ? canvasSizeX : paraLength;
          }
          canvasSizeY = (_splitedStrings.length + textUtils.BASELINE_RATIO) * this._getLineHeight();
          var rawWidth = parseFloat(canvasSizeX.toFixed(2));
          var rawHeight = parseFloat(canvasSizeY.toFixed(2));
          _canvasSize.width = rawWidth + _canvasPadding.width;
          _canvasSize.height = rawHeight + _canvasPadding.height;
          _nodeContentSize.width = rawWidth + _contentSizeExtend.width;
          _nodeContentSize.height = rawHeight + _contentSizeExtend.height;
          break;

         case Overflow.SHRINK:
          this._calculateShrinkFont(paragraphedStrings);
          this._calculateWrapText(paragraphedStrings);
          break;

         case Overflow.CLAMP:
          this._calculateWrapText(paragraphedStrings);
          break;

         case Overflow.RESIZE_HEIGHT:
          this._calculateWrapText(paragraphedStrings);
          var _rawHeight = (_splitedStrings.length + textUtils.BASELINE_RATIO) * this._getLineHeight();
          _canvasSize.height = _rawHeight + _canvasPadding.height;
          _nodeContentSize.height = _rawHeight + _contentSizeExtend.height;
        }
      };
      return TTFAssembler;
    })(_assembler2d["default"]);
    exports["default"] = TTFAssembler;
    module.exports = exports["default"];
  }), {
    "../../../components/CCLabel": 96,
    "../../../components/CCLabelOutline": void 0,
    "../../../components/CCLabelShadow": void 0,
    "../../../platform/CCMacro": 143,
    "../../../utils/text-utils": 216,
    "../../assembler-2d": 163,
    "../utils": 174
  } ],
  174: [ (function(require, module, exports) {
    "use strict";
    var dynamicAtlasManager = require("./dynamic-atlas/manager");
    var WHITE = cc.Color.WHITE;
    var shareLabelInfo = {
      fontAtlas: null,
      fontSize: 0,
      lineHeight: 0,
      hAlign: 0,
      vAlign: 0,
      hash: "",
      fontFamily: "",
      fontDesc: "Arial",
      color: WHITE,
      isOutlined: false,
      out: WHITE,
      margin: 0
    };
    module.exports = {
      deleteFromDynamicAtlas: function deleteFromDynamicAtlas(comp, frame) {
        if (frame && true && frame._original && dynamicAtlasManager) {
          dynamicAtlasManager.deleteAtlasSpriteFrame(frame);
          frame._resetDynamicAtlasFrame();
        }
      },
      getFontFamily: function getFontFamily(comp) {
        if (comp.useSystemFont) return comp.fontFamily || "Arial";
        if (comp.font) {
          if (comp.font._nativeAsset) return comp.font._nativeAsset;
          cc.assetManager.postLoadNative(comp.font, (function(err) {
            comp.setVertsDirty();
          }));
          return "Arial";
        }
        return "Arial";
      },
      shareLabelInfo: shareLabelInfo
    };
  }), {
    "./dynamic-atlas/manager": void 0
  } ],
  175: [ (function(require, module, exports) {
    "use strict";
    cc.Graphics.earcut = module.exports = earcut;
    function earcut(data, holeIndices, dim) {
      dim = dim || 2;
      var hasHoles = holeIndices && holeIndices.length, outerLen = hasHoles ? holeIndices[0] * dim : data.length, outerNode = linkedList(data, 0, outerLen, dim, true), triangles = [];
      if (!outerNode) return triangles;
      var minX, minY, maxX, maxY, x, y, size;
      hasHoles && (outerNode = eliminateHoles(data, holeIndices, outerNode, dim));
      if (data.length > 80 * dim) {
        minX = maxX = data[0];
        minY = maxY = data[1];
        for (var i = dim; i < outerLen; i += dim) {
          x = data[i];
          y = data[i + 1];
          x < minX && (minX = x);
          y < minY && (minY = y);
          x > maxX && (maxX = x);
          y > maxY && (maxY = y);
        }
        size = Math.max(maxX - minX, maxY - minY);
      }
      earcutLinked(outerNode, triangles, dim, minX, minY, size);
      return triangles;
    }
    function linkedList(data, start, end, dim, clockwise) {
      var i, last;
      if (clockwise === signedArea(data, start, end, dim) > 0) for (i = start; i < end; i += dim) last = insertNode(i, data[i], data[i + 1], last); else for (i = end - dim; i >= start; i -= dim) last = insertNode(i, data[i], data[i + 1], last);
      if (last && equals(last, last.next)) {
        removeNode(last);
        last = last.next;
      }
      return last;
    }
    function filterPoints(start, end) {
      if (!start) return start;
      end || (end = start);
      var p = start, again;
      do {
        again = false;
        if (p.steiner || !equals(p, p.next) && 0 !== area(p.prev, p, p.next)) p = p.next; else {
          removeNode(p);
          p = end = p.prev;
          if (p === p.next) return null;
          again = true;
        }
      } while (again || p !== end);
      return end;
    }
    function earcutLinked(ear, triangles, dim, minX, minY, size, pass) {
      if (!ear) return;
      !pass && size && indexCurve(ear, minX, minY, size);
      var stop = ear, prev, next;
      while (ear.prev !== ear.next) {
        prev = ear.prev;
        next = ear.next;
        if (size ? isEarHashed(ear, minX, minY, size) : isEar(ear)) {
          triangles.push(prev.i / dim);
          triangles.push(ear.i / dim);
          triangles.push(next.i / dim);
          removeNode(ear);
          ear = next.next;
          stop = next.next;
          continue;
        }
        ear = next;
        if (ear === stop) {
          if (pass) if (1 === pass) {
            ear = cureLocalIntersections(ear, triangles, dim);
            earcutLinked(ear, triangles, dim, minX, minY, size, 2);
          } else 2 === pass && splitEarcut(ear, triangles, dim, minX, minY, size); else earcutLinked(filterPoints(ear), triangles, dim, minX, minY, size, 1);
          break;
        }
      }
    }
    function isEar(ear) {
      var a = ear.prev, b = ear, c = ear.next;
      if (area(a, b, c) >= 0) return false;
      var p = ear.next.next;
      while (p !== ear.prev) {
        if (pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false;
        p = p.next;
      }
      return true;
    }
    function isEarHashed(ear, minX, minY, size) {
      var a = ear.prev, b = ear, c = ear.next;
      if (area(a, b, c) >= 0) return false;
      var minTX = a.x < b.x ? a.x < c.x ? a.x : c.x : b.x < c.x ? b.x : c.x, minTY = a.y < b.y ? a.y < c.y ? a.y : c.y : b.y < c.y ? b.y : c.y, maxTX = a.x > b.x ? a.x > c.x ? a.x : c.x : b.x > c.x ? b.x : c.x, maxTY = a.y > b.y ? a.y > c.y ? a.y : c.y : b.y > c.y ? b.y : c.y;
      var minZ = zOrder(minTX, minTY, minX, minY, size), maxZ = zOrder(maxTX, maxTY, minX, minY, size);
      var p = ear.nextZ;
      while (p && p.z <= maxZ) {
        if (p !== ear.prev && p !== ear.next && pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false;
        p = p.nextZ;
      }
      p = ear.prevZ;
      while (p && p.z >= minZ) {
        if (p !== ear.prev && p !== ear.next && pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false;
        p = p.prevZ;
      }
      return true;
    }
    function cureLocalIntersections(start, triangles, dim) {
      var p = start;
      do {
        var a = p.prev, b = p.next.next;
        if (!equals(a, b) && intersects(a, p, p.next, b) && locallyInside(a, b) && locallyInside(b, a)) {
          triangles.push(a.i / dim);
          triangles.push(p.i / dim);
          triangles.push(b.i / dim);
          removeNode(p);
          removeNode(p.next);
          p = start = b;
        }
        p = p.next;
      } while (p !== start);
      return p;
    }
    function splitEarcut(start, triangles, dim, minX, minY, size) {
      var a = start;
      do {
        var b = a.next.next;
        while (b !== a.prev) {
          if (a.i !== b.i && isValidDiagonal(a, b)) {
            var c = splitPolygon(a, b);
            a = filterPoints(a, a.next);
            c = filterPoints(c, c.next);
            earcutLinked(a, triangles, dim, minX, minY, size);
            earcutLinked(c, triangles, dim, minX, minY, size);
            return;
          }
          b = b.next;
        }
        a = a.next;
      } while (a !== start);
    }
    function eliminateHoles(data, holeIndices, outerNode, dim) {
      var queue = [], i, len, start, end, list;
      for (i = 0, len = holeIndices.length; i < len; i++) {
        start = holeIndices[i] * dim;
        end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;
        list = linkedList(data, start, end, dim, false);
        list === list.next && (list.steiner = true);
        queue.push(getLeftmost(list));
      }
      queue.sort(compareX);
      for (i = 0; i < queue.length; i++) {
        eliminateHole(queue[i], outerNode);
        outerNode = filterPoints(outerNode, outerNode.next);
      }
      return outerNode;
    }
    function compareX(a, b) {
      return a.x - b.x;
    }
    function eliminateHole(hole, outerNode) {
      outerNode = findHoleBridge(hole, outerNode);
      if (outerNode) {
        var b = splitPolygon(outerNode, hole);
        filterPoints(b, b.next);
      }
    }
    function findHoleBridge(hole, outerNode) {
      var p = outerNode, hx = hole.x, hy = hole.y, qx = -Infinity, m;
      do {
        if (hy <= p.y && hy >= p.next.y) {
          var x = p.x + (hy - p.y) * (p.next.x - p.x) / (p.next.y - p.y);
          if (x <= hx && x > qx) {
            qx = x;
            if (x === hx) {
              if (hy === p.y) return p;
              if (hy === p.next.y) return p.next;
            }
            m = p.x < p.next.x ? p : p.next;
          }
        }
        p = p.next;
      } while (p !== outerNode);
      if (!m) return null;
      if (hx === qx) return m.prev;
      var stop = m, mx = m.x, my = m.y, tanMin = Infinity, tan;
      p = m.next;
      while (p !== stop) {
        if (hx >= p.x && p.x >= mx && pointInTriangle(hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y)) {
          tan = Math.abs(hy - p.y) / (hx - p.x);
          if ((tan < tanMin || tan === tanMin && p.x > m.x) && locallyInside(p, hole)) {
            m = p;
            tanMin = tan;
          }
        }
        p = p.next;
      }
      return m;
    }
    function indexCurve(start, minX, minY, size) {
      var p = start;
      do {
        null === p.z && (p.z = zOrder(p.x, p.y, minX, minY, size));
        p.prevZ = p.prev;
        p.nextZ = p.next;
        p = p.next;
      } while (p !== start);
      p.prevZ.nextZ = null;
      p.prevZ = null;
      sortLinked(p);
    }
    function sortLinked(list) {
      var i, p, q, e, tail, numMerges, pSize, qSize, inSize = 1;
      do {
        p = list;
        list = null;
        tail = null;
        numMerges = 0;
        while (p) {
          numMerges++;
          q = p;
          pSize = 0;
          for (i = 0; i < inSize; i++) {
            pSize++;
            q = q.nextZ;
            if (!q) break;
          }
          qSize = inSize;
          while (pSize > 0 || qSize > 0 && q) {
            if (0 === pSize) {
              e = q;
              q = q.nextZ;
              qSize--;
            } else if (0 !== qSize && q) if (p.z <= q.z) {
              e = p;
              p = p.nextZ;
              pSize--;
            } else {
              e = q;
              q = q.nextZ;
              qSize--;
            } else {
              e = p;
              p = p.nextZ;
              pSize--;
            }
            tail ? tail.nextZ = e : list = e;
            e.prevZ = tail;
            tail = e;
          }
          p = q;
        }
        tail.nextZ = null;
        inSize *= 2;
      } while (numMerges > 1);
      return list;
    }
    function zOrder(x, y, minX, minY, size) {
      x = 32767 * (x - minX) / size;
      y = 32767 * (y - minY) / size;
      x = 16711935 & (x | x << 8);
      x = 252645135 & (x | x << 4);
      x = 858993459 & (x | x << 2);
      x = 1431655765 & (x | x << 1);
      y = 16711935 & (y | y << 8);
      y = 252645135 & (y | y << 4);
      y = 858993459 & (y | y << 2);
      y = 1431655765 & (y | y << 1);
      return x | y << 1;
    }
    function getLeftmost(start) {
      var p = start, leftmost = start;
      do {
        p.x < leftmost.x && (leftmost = p);
        p = p.next;
      } while (p !== start);
      return leftmost;
    }
    function pointInTriangle(ax, ay, bx, by, cx, cy, px, py) {
      return (cx - px) * (ay - py) - (ax - px) * (cy - py) >= 0 && (ax - px) * (by - py) - (bx - px) * (ay - py) >= 0 && (bx - px) * (cy - py) - (cx - px) * (by - py) >= 0;
    }
    function isValidDiagonal(a, b) {
      return a.next.i !== b.i && a.prev.i !== b.i && !intersectsPolygon(a, b) && locallyInside(a, b) && locallyInside(b, a) && middleInside(a, b);
    }
    function area(p, q, r) {
      return (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y);
    }
    function equals(p1, p2) {
      return p1.x === p2.x && p1.y === p2.y;
    }
    function intersects(p1, q1, p2, q2) {
      if (equals(p1, q1) && equals(p2, q2) || equals(p1, q2) && equals(p2, q1)) return true;
      return area(p1, q1, p2) > 0 !== area(p1, q1, q2) > 0 && area(p2, q2, p1) > 0 !== area(p2, q2, q1) > 0;
    }
    function intersectsPolygon(a, b) {
      var p = a;
      do {
        if (p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i && intersects(p, p.next, a, b)) return true;
        p = p.next;
      } while (p !== a);
      return false;
    }
    function locallyInside(a, b) {
      return area(a.prev, a, a.next) < 0 ? area(a, b, a.next) >= 0 && area(a, a.prev, b) >= 0 : area(a, b, a.prev) < 0 || area(a, a.next, b) < 0;
    }
    function middleInside(a, b) {
      var p = a, inside = false, px = (a.x + b.x) / 2, py = (a.y + b.y) / 2;
      do {
        p.y > py !== p.next.y > py && px < (p.next.x - p.x) * (py - p.y) / (p.next.y - p.y) + p.x && (inside = !inside);
        p = p.next;
      } while (p !== a);
      return inside;
    }
    function splitPolygon(a, b) {
      var a2 = new Node(a.i, a.x, a.y), b2 = new Node(b.i, b.x, b.y), an = a.next, bp = b.prev;
      a.next = b;
      b.prev = a;
      a2.next = an;
      an.prev = a2;
      b2.next = a2;
      a2.prev = b2;
      bp.next = b2;
      b2.prev = bp;
      return b2;
    }
    function insertNode(i, x, y, last) {
      var p = new Node(i, x, y);
      if (last) {
        p.next = last.next;
        p.prev = last;
        last.next.prev = p;
        last.next = p;
      } else {
        p.prev = p;
        p.next = p;
      }
      return p;
    }
    function removeNode(p) {
      p.next.prev = p.prev;
      p.prev.next = p.next;
      p.prevZ && (p.prevZ.nextZ = p.nextZ);
      p.nextZ && (p.nextZ.prevZ = p.prevZ);
    }
    function Node(i, x, y) {
      this.i = i;
      this.x = x;
      this.y = y;
      this.prev = null;
      this.next = null;
      this.z = null;
      this.prevZ = null;
      this.nextZ = null;
      this.steiner = false;
    }
    earcut.deviation = function(data, holeIndices, dim, triangles) {
      var hasHoles = holeIndices && holeIndices.length;
      var outerLen = hasHoles ? holeIndices[0] * dim : data.length;
      var polygonArea = Math.abs(signedArea(data, 0, outerLen, dim));
      if (hasHoles) for (var i = 0, len = holeIndices.length; i < len; i++) {
        var start = holeIndices[i] * dim;
        var end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;
        polygonArea -= Math.abs(signedArea(data, start, end, dim));
      }
      var trianglesArea = 0;
      for (i = 0; i < triangles.length; i += 3) {
        var a = triangles[i] * dim;
        var b = triangles[i + 1] * dim;
        var c = triangles[i + 2] * dim;
        trianglesArea += Math.abs((data[a] - data[c]) * (data[b + 1] - data[a + 1]) - (data[a] - data[b]) * (data[c + 1] - data[a + 1]));
      }
      return 0 === polygonArea && 0 === trianglesArea ? 0 : Math.abs((trianglesArea - polygonArea) / polygonArea);
    };
    function signedArea(data, start, end, dim) {
      var sum = 0;
      for (var i = start, j = end - dim; i < end; i += dim) {
        sum += (data[j] - data[i]) * (data[i + 1] + data[j + 1]);
        j = i;
      }
      return sum;
    }
    earcut.flatten = function(data) {
      var dim = data[0][0].length, result = {
        vertices: [],
        holes: [],
        dimensions: dim
      }, holeIndex = 0;
      for (var i = 0; i < data.length; i++) {
        for (var j = 0; j < data[i].length; j++) for (var d = 0; d < dim; d++) result.vertices.push(data[i][j][d]);
        if (i > 0) {
          holeIndex += data[i - 1].length;
          result.holes.push(holeIndex);
        }
      }
      return result;
    };
  }), {} ],
  176: [ (function(require, module, exports) {
    "use strict";
    var Helper = require("../../../../graphics/helper");
    var PointFlags = require("../../../../graphics/types").PointFlags;
    var Point = cc.Graphics.Point = cc.Class({
      name: "cc.GraphicsPoint",
      extends: cc.Vec2,
      ctor: function ctor(x, y) {
        this.reset();
      },
      reset: function reset() {
        this.dx = 0;
        this.dy = 0;
        this.dmx = 0;
        this.dmy = 0;
        this.flags = 0;
        this.len = 0;
      }
    });
    function Path() {
      this.reset();
    }
    cc.js.mixin(Path.prototype, {
      reset: function reset() {
        this.closed = false;
        this.nbevel = 0;
        this.complex = true;
        this.points ? this.points.length = 0 : this.points = [];
      }
    });
    function Impl(graphics) {
      this._tessTol = .25;
      this._distTol = .01;
      this._updatePathOffset = false;
      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(Impl.prototype, {
      moveTo: function moveTo(x, y) {
        if (this._updatePathOffset) {
          this._pathOffset = this._pathLength;
          this._updatePathOffset = false;
        }
        this._addPath();
        this._addPoint(x, y, PointFlags.PT_CORNER);
        this._commandx = x;
        this._commandy = y;
      },
      lineTo: function lineTo(x, y) {
        this._addPoint(x, y, PointFlags.PT_CORNER);
        this._commandx = x;
        this._commandy = y;
      },
      bezierCurveTo: function bezierCurveTo(c1x, c1y, c2x, c2y, x, y) {
        var path = this._curPath;
        var last = path.points[path.points.length - 1];
        if (last.x === c1x && last.y === c1y && c2x === x && c2y === y) {
          this.lineTo(x, y);
          return;
        }
        Helper.tesselateBezier(this, last.x, last.y, c1x, c1y, c2x, c2y, x, y, 0, PointFlags.PT_CORNER);
        this._commandx = x;
        this._commandy = y;
      },
      quadraticCurveTo: function quadraticCurveTo(cx, cy, x, y) {
        var x0 = this._commandx;
        var y0 = this._commandy;
        this.bezierCurveTo(x0 + 2 / 3 * (cx - x0), y0 + 2 / 3 * (cy - y0), x + 2 / 3 * (cx - x), y + 2 / 3 * (cy - y), x, y);
      },
      arc: function arc(cx, cy, r, startAngle, endAngle, counterclockwise) {
        Helper.arc(this, cx, cy, r, startAngle, endAngle, counterclockwise);
      },
      ellipse: function ellipse(cx, cy, rx, ry) {
        Helper.ellipse(this, cx, cy, rx, ry);
        this._curPath.complex = false;
      },
      circle: function circle(cx, cy, r) {
        Helper.ellipse(this, cx, cy, r, r);
        this._curPath.complex = false;
      },
      rect: function rect(x, y, w, h) {
        this.moveTo(x, y);
        this.lineTo(x, y + h);
        this.lineTo(x + w, y + h);
        this.lineTo(x + w, y);
        this.close();
        this._curPath.complex = false;
      },
      roundRect: function roundRect(x, y, w, h, r) {
        Helper.roundRect(this, x, y, w, h, r);
        this._curPath.complex = false;
      },
      clear: function clear(clean) {
        this._pathLength = 0;
        this._pathOffset = 0;
        this._pointsOffset = 0;
        this._curPath = null;
        if (clean) {
          this._paths.length = 0;
          this._points.length = 0;
        }
      },
      close: function close() {
        this._curPath.closed = true;
      },
      _addPath: function _addPath() {
        var offset = this._pathLength;
        var path = this._paths[offset];
        if (path) path.reset(); else {
          path = new Path();
          this._paths.push(path);
        }
        this._pathLength++;
        this._curPath = path;
        return path;
      },
      _addPoint: function _addPoint(x, y, flags) {
        var path = this._curPath;
        if (!path) return;
        var pt;
        var points = this._points;
        var pathPoints = path.points;
        var offset = this._pointsOffset++;
        pt = points[offset];
        if (pt) {
          pt.x = x;
          pt.y = y;
        } else {
          pt = new Point(x, y);
          points.push(pt);
        }
        pt.flags = flags;
        pathPoints.push(pt);
      }
    });
    cc.Graphics._Impl = Impl;
    module.exports = Impl;
  }), {
    "../../../../graphics/helper": 128,
    "../../../../graphics/types": 130
  } ],
  177: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _assembler = _interopRequireDefault(require("../../../assembler"));
    var _inputAssembler = _interopRequireDefault(require("../../../../../renderer/core/input-assembler"));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    function _inheritsLoose(subClass, superClass) {
      subClass.prototype = Object.create(superClass.prototype);
      subClass.prototype.constructor = subClass;
      subClass.__proto__ = superClass;
    }
    var MeshBuffer = require("../../mesh-buffer");
    var renderer = require("../../../index");
    var Graphics = require("../../../../graphics/graphics");
    var PointFlags = require("../../../../graphics/types").PointFlags;
    var LineJoin = Graphics.LineJoin;
    var LineCap = Graphics.LineCap;
    var Earcut = require("./earcut");
    require("./impl");
    var MAX_VERTEX = 65535;
    var MAX_INDICE = 2 * MAX_VERTEX;
    var PI = Math.PI;
    var min = Math.min;
    var max = Math.max;
    var ceil = Math.ceil;
    var acos = Math.acos;
    var cos = Math.cos;
    var sin = Math.sin;
    var atan2 = Math.atan2;
    function curveDivs(r, arc, tol) {
      var da = 2 * acos(r / (r + tol));
      return max(2, ceil(arc / da));
    }
    function clamp(v, min, max) {
      if (v < min) return min;
      if (v > max) return max;
      return v;
    }
    var gfx = cc.gfx;
    var vfmtPosColorSdf = new gfx.VertexFormat([ {
      name: gfx.ATTR_POSITION,
      type: gfx.ATTR_TYPE_FLOAT32,
      num: 2
    }, {
      name: gfx.ATTR_COLOR,
      type: gfx.ATTR_TYPE_UINT8,
      num: 4,
      normalize: true
    }, {
      name: "a_dist",
      type: gfx.ATTR_TYPE_FLOAT32,
      num: 1
    } ]);
    vfmtPosColorSdf.name = "vfmtPosColorSdf";
    var GraphicsAssembler = (function(_Assembler) {
      _inheritsLoose(GraphicsAssembler, _Assembler);
      function GraphicsAssembler(graphics) {
        var _this;
        _this = _Assembler.call(this, graphics) || this;
        _this._buffer = null;
        _this._buffers = [];
        _this._bufferOffset = 0;
        return _this;
      }
      var _proto = GraphicsAssembler.prototype;
      _proto.getVfmt = function getVfmt() {
        return vfmtPosColorSdf;
      };
      _proto.getVfmtFloatCount = function getVfmtFloatCount() {
        return 4;
      };
      _proto.requestBuffer = function requestBuffer() {
        var buffer = {
          indiceStart: 0,
          vertexStart: 0
        };
        var meshbuffer = new MeshBuffer(renderer._handle, this.getVfmt());
        buffer.meshbuffer = meshbuffer;
        var ia = new _inputAssembler["default"](meshbuffer._vb, meshbuffer._ib);
        buffer.ia = ia;
        this._buffers.push(buffer);
        return buffer;
      };
      _proto.getBuffers = function getBuffers() {
        0 === this._buffers.length && this.requestBuffer();
        return this._buffers;
      };
      _proto.clear = function clear(clean) {
        this._bufferOffset = 0;
        var datas = this._buffers;
        if (clean) {
          for (var i = 0, l = datas.length; i < l; i++) {
            var data = datas[i];
            data.meshbuffer.destroy();
            data.meshbuffer = null;
          }
          datas.length = 0;
        } else for (var _i = 0, _l = datas.length; _i < _l; _i++) {
          var _data = datas[_i];
          _data.indiceStart = 0;
          _data.vertexStart = 0;
          var meshbuffer = _data.meshbuffer;
          meshbuffer.reset();
        }
      };
      _proto.fillBuffers = function fillBuffers(graphics, renderer) {
        renderer._flush();
        renderer.node = graphics.node;
        renderer.material = graphics._materials[0];
        var buffers = this.getBuffers();
        for (var index = 0, length = buffers.length; index < length; index++) {
          var buffer = buffers[index];
          var meshbuffer = buffer.meshbuffer;
          buffer.ia._count = buffer.indiceStart;
          renderer._flushIA(buffer.ia);
          meshbuffer.uploadData();
        }
      };
      _proto.genBuffer = function genBuffer(graphics, cverts) {
        var buffers = this.getBuffers();
        var buffer = buffers[this._bufferOffset];
        var meshbuffer = buffer.meshbuffer;
        var maxVertsCount = buffer.vertexStart + cverts;
        if (maxVertsCount > MAX_VERTEX || 3 * maxVertsCount > MAX_INDICE) {
          ++this._bufferOffset;
          maxVertsCount = cverts;
          if (this._bufferOffset < buffers.length) buffer = buffers[this._bufferOffset]; else {
            buffer = this.requestBuffer(graphics);
            buffers[this._bufferOffset] = buffer;
          }
          meshbuffer = buffer.meshbuffer;
        }
        maxVertsCount > meshbuffer.vertexOffset && meshbuffer.requestStatic(cverts, 3 * cverts);
        this._buffer = buffer;
        return buffer;
      };
      _proto.stroke = function stroke(graphics) {
        this._curColor = graphics._strokeColor._val;
        this._flattenPaths(graphics._impl);
        this._expandStroke(graphics);
        graphics._impl._updatePathOffset = true;
      };
      _proto.fill = function fill(graphics) {
        this._curColor = graphics._fillColor._val;
        this._expandFill(graphics);
        graphics._impl._updatePathOffset = true;
      };
      _proto._expandStroke = function _expandStroke(graphics) {
        var w = .5 * graphics.lineWidth, lineCap = graphics.lineCap, lineJoin = graphics.lineJoin, miterLimit = graphics.miterLimit;
        var impl = graphics._impl;
        var ncap = curveDivs(w, PI, impl._tessTol);
        this._calculateJoins(impl, w, lineJoin, miterLimit);
        var paths = impl._paths;
        var cverts = 0;
        for (var i = impl._pathOffset, l = impl._pathLength; i < l; i++) {
          var path = paths[i];
          var pointsLength = path.points.length;
          lineJoin === LineJoin.ROUND ? cverts += 2 * (pointsLength + path.nbevel * (ncap + 2) + 1) : cverts += 2 * (pointsLength + 5 * path.nbevel + 1);
          path.closed || (lineCap === LineCap.ROUND ? cverts += 2 * (2 * ncap + 2) : cverts += 12);
        }
        var buffer = this.genBuffer(graphics, cverts), meshbuffer = buffer.meshbuffer, vData = meshbuffer._vData, iData = meshbuffer._iData;
        for (var _i2 = impl._pathOffset, _l2 = impl._pathLength; _i2 < _l2; _i2++) {
          var _path = paths[_i2];
          var pts = _path.points;
          var _pointsLength = pts.length;
          var offset = buffer.vertexStart;
          var p0 = void 0, p1 = void 0;
          var start = void 0, end = void 0, loop = void 0;
          loop = _path.closed;
          if (loop) {
            p0 = pts[_pointsLength - 1];
            p1 = pts[0];
            start = 0;
            end = _pointsLength;
          } else {
            p0 = pts[0];
            p1 = pts[1];
            start = 1;
            end = _pointsLength - 1;
          }
          p1 = p1 || p0;
          if (!loop) {
            var dPos = p1.sub(p0);
            dPos.normalizeSelf();
            var dx = dPos.x;
            var dy = dPos.y;
            lineCap === LineCap.BUTT ? this._buttCapStart(p0, dx, dy, w, 0) : lineCap === LineCap.SQUARE ? this._buttCapStart(p0, dx, dy, w, w) : lineCap === LineCap.ROUND && this._roundCapStart(p0, dx, dy, w, ncap);
          }
          for (var j = start; j < end; ++j) {
            if (lineJoin === LineJoin.ROUND) this._roundJoin(p0, p1, w, w, ncap); else if (0 !== (p1.flags & (PointFlags.PT_BEVEL | PointFlags.PT_INNERBEVEL))) this._bevelJoin(p0, p1, w, w); else {
              this._vset(p1.x + p1.dmx * w, p1.y + p1.dmy * w, 1);
              this._vset(p1.x - p1.dmx * w, p1.y - p1.dmy * w, -1);
            }
            p0 = p1;
            p1 = pts[j + 1];
          }
          if (loop) {
            var floatCount = this.getVfmtFloatCount();
            var vDataoOfset = offset * floatCount;
            this._vset(vData[vDataoOfset], vData[vDataoOfset + 1], 1);
            this._vset(vData[vDataoOfset + floatCount], vData[vDataoOfset + floatCount + 1], -1);
          } else {
            var _dPos = p1.sub(p0);
            _dPos.normalizeSelf();
            var _dx = _dPos.x;
            var _dy = _dPos.y;
            lineCap === LineCap.BUTT ? this._buttCapEnd(p1, _dx, _dy, w, 0) : lineCap === LineCap.SQUARE ? this._buttCapEnd(p1, _dx, _dy, w, w) : lineCap === LineCap.ROUND && this._roundCapEnd(p1, _dx, _dy, w, ncap);
          }
          var indicesOffset = buffer.indiceStart;
          for (var _start = offset + 2, _end = buffer.vertexStart; _start < _end; _start++) {
            iData[indicesOffset++] = _start - 2;
            iData[indicesOffset++] = _start - 1;
            iData[indicesOffset++] = _start;
          }
          buffer.indiceStart = indicesOffset;
        }
      };
      _proto._expandFill = function _expandFill(graphics) {
        var impl = graphics._impl;
        var paths = impl._paths;
        var cverts = 0;
        for (var i = impl._pathOffset, l = impl._pathLength; i < l; i++) {
          var path = paths[i];
          var pointsLength = path.points.length;
          cverts += pointsLength;
        }
        var buffer = this.genBuffer(graphics, cverts), meshbuffer = buffer.meshbuffer, vData = meshbuffer._vData, iData = meshbuffer._iData;
        for (var _i3 = impl._pathOffset, _l3 = impl._pathLength; _i3 < _l3; _i3++) {
          var _path2 = paths[_i3];
          var pts = _path2.points;
          var _pointsLength2 = pts.length;
          if (0 === _pointsLength2) continue;
          var offset = buffer.vertexStart;
          for (var j = 0; j < _pointsLength2; ++j) this._vset(pts[j].x, pts[j].y);
          var indicesOffset = buffer.indiceStart;
          if (_path2.complex) {
            var earcutData = [];
            var floatCount = this.getVfmtFloatCount();
            for (var _j = offset, end = buffer.vertexStart; _j < end; _j++) {
              var vDataOffset = _j * floatCount;
              earcutData.push(vData[vDataOffset]);
              earcutData.push(vData[vDataOffset + 1]);
            }
            var newIndices = Earcut(earcutData, null, 2);
            if (!newIndices || 0 === newIndices.length) continue;
            for (var _j2 = 0, nIndices = newIndices.length; _j2 < nIndices; _j2++) iData[indicesOffset++] = newIndices[_j2] + offset;
          } else {
            var first = offset;
            for (var start = offset + 2, _end2 = buffer.vertexStart; start < _end2; start++) {
              iData[indicesOffset++] = first;
              iData[indicesOffset++] = start - 1;
              iData[indicesOffset++] = start;
            }
          }
          buffer.indiceStart = indicesOffset;
        }
      };
      _proto._calculateJoins = function _calculateJoins(impl, w, lineJoin, miterLimit) {
        var iw = 0;
        w > 0 && (iw = 1 / w);
        var paths = impl._paths;
        for (var i = impl._pathOffset, l = impl._pathLength; i < l; i++) {
          var path = paths[i];
          var pts = path.points;
          var ptsLength = pts.length;
          var p0 = pts[ptsLength - 1];
          var p1 = pts[0];
          var nleft = 0;
          path.nbevel = 0;
          for (var j = 0; j < ptsLength; j++) {
            var dmr2 = void 0, cross = void 0, limit = void 0;
            var dlx0 = p0.dy;
            var dly0 = -p0.dx;
            var dlx1 = p1.dy;
            var dly1 = -p1.dx;
            p1.dmx = .5 * (dlx0 + dlx1);
            p1.dmy = .5 * (dly0 + dly1);
            dmr2 = p1.dmx * p1.dmx + p1.dmy * p1.dmy;
            if (dmr2 > 1e-6) {
              var scale = 1 / dmr2;
              scale > 600 && (scale = 600);
              p1.dmx *= scale;
              p1.dmy *= scale;
            }
            cross = p1.dx * p0.dy - p0.dx * p1.dy;
            if (cross > 0) {
              nleft++;
              p1.flags |= PointFlags.PT_LEFT;
            }
            limit = max(11, min(p0.len, p1.len) * iw);
            dmr2 * limit * limit < 1 && (p1.flags |= PointFlags.PT_INNERBEVEL);
            p1.flags & PointFlags.PT_CORNER && (dmr2 * miterLimit * miterLimit < 1 || lineJoin === LineJoin.BEVEL || lineJoin === LineJoin.ROUND) && (p1.flags |= PointFlags.PT_BEVEL);
            0 !== (p1.flags & (PointFlags.PT_BEVEL | PointFlags.PT_INNERBEVEL)) && path.nbevel++;
            p0 = p1;
            p1 = pts[j + 1];
          }
        }
      };
      _proto._flattenPaths = function _flattenPaths(impl) {
        var paths = impl._paths;
        for (var i = impl._pathOffset, l = impl._pathLength; i < l; i++) {
          var path = paths[i];
          var pts = path.points;
          var p0 = pts[pts.length - 1];
          var p1 = pts[0];
          if (pts.length > 2 && p0.equals(p1)) {
            path.closed = true;
            pts.pop();
            p0 = pts[pts.length - 1];
          }
          for (var j = 0, size = pts.length; j < size; j++) {
            var dPos = p1.sub(p0);
            p0.len = dPos.mag();
            (dPos.x || dPos.y) && dPos.normalizeSelf();
            p0.dx = dPos.x;
            p0.dy = dPos.y;
            p0 = p1;
            p1 = pts[j + 1];
          }
        }
      };
      _proto._chooseBevel = function _chooseBevel(bevel, p0, p1, w) {
        var x = p1.x;
        var y = p1.y;
        var x0, y0, x1, y1;
        if (0 !== bevel) {
          x0 = x + p0.dy * w;
          y0 = y - p0.dx * w;
          x1 = x + p1.dy * w;
          y1 = y - p1.dx * w;
        } else {
          x0 = x1 = x + p1.dmx * w;
          y0 = y1 = y + p1.dmy * w;
        }
        return [ x0, y0, x1, y1 ];
      };
      _proto._buttCapStart = function _buttCapStart(p, dx, dy, w, d) {
        var px = p.x - dx * d;
        var py = p.y - dy * d;
        var dlx = dy;
        var dly = -dx;
        this._vset(px + dlx * w, py + dly * w, 1);
        this._vset(px - dlx * w, py - dly * w, -1);
      };
      _proto._buttCapEnd = function _buttCapEnd(p, dx, dy, w, d) {
        var px = p.x + dx * d;
        var py = p.y + dy * d;
        var dlx = dy;
        var dly = -dx;
        this._vset(px + dlx * w, py + dly * w, 1);
        this._vset(px - dlx * w, py - dly * w, -1);
      };
      _proto._roundCapStart = function _roundCapStart(p, dx, dy, w, ncap) {
        var px = p.x;
        var py = p.y;
        var dlx = dy;
        var dly = -dx;
        for (var i = 0; i < ncap; i++) {
          var a = i / (ncap - 1) * PI;
          var ax = cos(a) * w, ay = sin(a) * w;
          this._vset(px - dlx * ax - dx * ay, py - dly * ax - dy * ay, 1);
          this._vset(px, py, 0);
        }
        this._vset(px + dlx * w, py + dly * w, 1);
        this._vset(px - dlx * w, py - dly * w, -1);
      };
      _proto._roundCapEnd = function _roundCapEnd(p, dx, dy, w, ncap) {
        var px = p.x;
        var py = p.y;
        var dlx = dy;
        var dly = -dx;
        this._vset(px + dlx * w, py + dly * w, 1);
        this._vset(px - dlx * w, py - dly * w, -1);
        for (var i = 0; i < ncap; i++) {
          var a = i / (ncap - 1) * PI;
          var ax = cos(a) * w, ay = sin(a) * w;
          this._vset(px, py, 0);
          this._vset(px - dlx * ax + dx * ay, py - dly * ax + dy * ay, 1);
        }
      };
      _proto._roundJoin = function _roundJoin(p0, p1, lw, rw, ncap) {
        var dlx0 = p0.dy;
        var dly0 = -p0.dx;
        var dlx1 = p1.dy;
        var dly1 = -p1.dx;
        var p1x = p1.x;
        var p1y = p1.y;
        if (0 !== (p1.flags & PointFlags.PT_LEFT)) {
          var out = this._chooseBevel(p1.flags & PointFlags.PT_INNERBEVEL, p0, p1, lw);
          var lx0 = out[0];
          var ly0 = out[1];
          var lx1 = out[2];
          var ly1 = out[3];
          var a0 = atan2(-dly0, -dlx0);
          var a1 = atan2(-dly1, -dlx1);
          a1 > a0 && (a1 -= 2 * PI);
          this._vset(lx0, ly0, 1);
          this._vset(p1x - dlx0 * rw, p1.y - dly0 * rw, -1);
          var n = clamp(ceil((a0 - a1) / PI) * ncap, 2, ncap);
          for (var i = 0; i < n; i++) {
            var u = i / (n - 1);
            var a = a0 + u * (a1 - a0);
            var rx = p1x + cos(a) * rw;
            var ry = p1y + sin(a) * rw;
            this._vset(p1x, p1y, 0);
            this._vset(rx, ry, -1);
          }
          this._vset(lx1, ly1, 1);
          this._vset(p1x - dlx1 * rw, p1y - dly1 * rw, -1);
        } else {
          var _out = this._chooseBevel(p1.flags & PointFlags.PT_INNERBEVEL, p0, p1, -rw);
          var rx0 = _out[0];
          var ry0 = _out[1];
          var rx1 = _out[2];
          var ry1 = _out[3];
          var _a = atan2(dly0, dlx0);
          var _a2 = atan2(dly1, dlx1);
          _a2 < _a && (_a2 += 2 * PI);
          this._vset(p1x + dlx0 * rw, p1y + dly0 * rw, 1);
          this._vset(rx0, ry0, -1);
          var _n = clamp(ceil((_a2 - _a) / PI) * ncap, 2, ncap);
          for (var _i4 = 0; _i4 < _n; _i4++) {
            var _u = _i4 / (_n - 1);
            var _a3 = _a + _u * (_a2 - _a);
            var lx = p1x + cos(_a3) * lw;
            var ly = p1y + sin(_a3) * lw;
            this._vset(lx, ly, 1);
            this._vset(p1x, p1y, 0);
          }
          this._vset(p1x + dlx1 * rw, p1y + dly1 * rw, 1);
          this._vset(rx1, ry1, -1);
        }
      };
      _proto._bevelJoin = function _bevelJoin(p0, p1, lw, rw) {
        var rx0, ry0, rx1, ry1;
        var lx0, ly0, lx1, ly1;
        var dlx0 = p0.dy;
        var dly0 = -p0.dx;
        var dlx1 = p1.dy;
        var dly1 = -p1.dx;
        if (p1.flags & PointFlags.PT_LEFT) {
          var out = this._chooseBevel(p1.flags & PointFlags.PT_INNERBEVEL, p0, p1, lw);
          lx0 = out[0];
          ly0 = out[1];
          lx1 = out[2];
          ly1 = out[3];
          this._vset(lx0, ly0, 1);
          this._vset(p1.x - dlx0 * rw, p1.y - dly0 * rw, -1);
          this._vset(lx1, ly1, 1);
          this._vset(p1.x - dlx1 * rw, p1.y - dly1 * rw, -1);
        } else {
          var _out2 = this._chooseBevel(p1.flags & PointFlags.PT_INNERBEVEL, p0, p1, -rw);
          rx0 = _out2[0];
          ry0 = _out2[1];
          rx1 = _out2[2];
          ry1 = _out2[3];
          this._vset(p1.x + dlx0 * lw, p1.y + dly0 * lw, 1);
          this._vset(rx0, ry0, -1);
          this._vset(p1.x + dlx1 * lw, p1.y + dly1 * lw, 1);
          this._vset(rx1, ry1, -1);
        }
      };
      _proto._vset = function _vset(x, y, distance) {
        void 0 === distance && (distance = 0);
        var buffer = this._buffer;
        var meshbuffer = buffer.meshbuffer;
        var dataOffset = buffer.vertexStart * this.getVfmtFloatCount();
        var vData = meshbuffer._vData;
        var uintVData = meshbuffer._uintVData;
        vData[dataOffset] = x;
        vData[dataOffset + 1] = y;
        uintVData[dataOffset + 2] = this._curColor;
        vData[dataOffset + 3] = distance;
        buffer.vertexStart++;
        meshbuffer._dirty = true;
      };
      return GraphicsAssembler;
    })(_assembler["default"]);
    exports["default"] = GraphicsAssembler;
    _assembler["default"].register(cc.Graphics, GraphicsAssembler);
    module.exports = exports["default"];
  }), {
    "../../../../../renderer/core/input-assembler": 241,
    "../../../../graphics/graphics": 127,
    "../../../../graphics/types": 130,
    "../../../assembler": 165,
    "../../../index": 168,
    "../../mesh-buffer": 193,
    "./earcut": 175,
    "./impl": 176
  } ],
  178: [ (function(require, module, exports) {
    "use strict";
    cc.assemblers = {};
    require("./sprite");
    require("./mask-assembler");
    require("./graphics");
    require("./label");
    require("./motion-streak");
  }), {
    "./graphics": 177,
    "./label": 183,
    "./mask-assembler": 184,
    "./motion-streak": void 0,
    "./sprite": 191
  } ],
  179: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _bmfont = _interopRequireDefault(require("../../../../utils/label/bmfont"));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    function _inheritsLoose(subClass, superClass) {
      subClass.prototype = Object.create(superClass.prototype);
      subClass.prototype.constructor = subClass;
      subClass.__proto__ = superClass;
    }
    var _dataOffset = 0;
    var WebglBmfontAssembler = (function(_BmfontAssembler) {
      _inheritsLoose(WebglBmfontAssembler, _BmfontAssembler);
      function WebglBmfontAssembler() {
        return _BmfontAssembler.apply(this, arguments) || this;
      }
      var _proto = WebglBmfontAssembler.prototype;
      _proto.initData = function initData() {
        this._renderData.createFlexData(0, 4, 6, this.getVfmt());
      };
      _proto._reserveQuads = function _reserveQuads(comp, count) {
        var verticesCount = 4 * count;
        var indicesCount = 6 * count;
        var flexBuffer = this._renderData._flexBuffer;
        flexBuffer.reserve(verticesCount, indicesCount);
        flexBuffer.used(verticesCount, indicesCount);
        var iData = this._renderData.iDatas[0];
        for (var i = 0, vid = 0, l = indicesCount; i < l; i += 6, vid += 4) {
          iData[i] = vid;
          iData[i + 1] = vid + 1;
          iData[i + 2] = vid + 2;
          iData[i + 3] = vid + 1;
          iData[i + 4] = vid + 3;
          iData[i + 5] = vid + 2;
        }
        _dataOffset = 0;
      };
      _proto._quadsUpdated = function _quadsUpdated(comp) {
        _dataOffset = 0;
        var flexBuffer = this._renderData._flexBuffer;
        flexBuffer.used(this.verticesCount, this.indicesCount);
      };
      _proto._getColor = function _getColor(comp) {
        return comp.node._color._val;
      };
      _proto.appendQuad = function appendQuad(comp, texture, rect, rotated, x, y, scale) {
        var renderData = this._renderData;
        var verts = renderData.vDatas[0], uintVerts = renderData.uintVDatas[0];
        this.verticesCount += 4;
        this.indicesCount = this.verticesCount / 2 * 3;
        var texw = texture.width, texh = texture.height, rectWidth = rect.width, rectHeight = rect.height, color = this._getColor(comp);
        var l, b, r, t;
        var floatsPerVert = this.floatsPerVert;
        var uvDataOffset = _dataOffset + this.uvOffset;
        if (rotated) {
          l = rect.x / texw;
          r = (rect.x + rectHeight) / texw;
          b = (rect.y + rectWidth) / texh;
          t = rect.y / texh;
          verts[uvDataOffset] = l;
          verts[uvDataOffset + 1] = t;
          uvDataOffset += floatsPerVert;
          verts[uvDataOffset] = l;
          verts[uvDataOffset + 1] = b;
          uvDataOffset += floatsPerVert;
          verts[uvDataOffset] = r;
          verts[uvDataOffset + 1] = t;
          uvDataOffset += floatsPerVert;
          verts[uvDataOffset] = r;
          verts[uvDataOffset + 1] = b;
        } else {
          l = rect.x / texw;
          r = (rect.x + rectWidth) / texw;
          b = (rect.y + rectHeight) / texh;
          t = rect.y / texh;
          verts[uvDataOffset] = l;
          verts[uvDataOffset + 1] = b;
          uvDataOffset += floatsPerVert;
          verts[uvDataOffset] = r;
          verts[uvDataOffset + 1] = b;
          uvDataOffset += floatsPerVert;
          verts[uvDataOffset] = l;
          verts[uvDataOffset + 1] = t;
          uvDataOffset += floatsPerVert;
          verts[uvDataOffset] = r;
          verts[uvDataOffset + 1] = t;
        }
        l = x;
        r = x + rectWidth * scale;
        b = y - rectHeight * scale;
        t = y;
        this.appendVerts(comp, _dataOffset, l, r, b, t);
        var colorOffset = _dataOffset + this.colorOffset;
        for (var i = 0; i < 4; i++) {
          uintVerts[colorOffset] = color;
          colorOffset += floatsPerVert;
        }
        _dataOffset += 4 * this.floatsPerVert;
      };
      _proto.appendVerts = function appendVerts(comp, offset, l, r, b, t) {
        var local = this._local;
        var floatsPerVert = this.floatsPerVert;
        local[offset] = l;
        local[offset + 1] = b;
        offset += floatsPerVert;
        local[offset] = r;
        local[offset + 1] = b;
        offset += floatsPerVert;
        local[offset] = l;
        local[offset + 1] = t;
        offset += floatsPerVert;
        local[offset] = r;
        local[offset + 1] = t;
      };
      _proto.updateWorldVerts = function updateWorldVerts(comp) {
        var node = comp.node;
        var matrix = node._worldMatrix;
        var matrixm = matrix.m, a = matrixm[0], b = matrixm[1], c = matrixm[4], d = matrixm[5], tx = matrixm[12], ty = matrixm[13];
        var local = this._local;
        var world = this._renderData.vDatas[0];
        var floatsPerVert = this.floatsPerVert;
        for (var offset = 0; offset < local.length; offset += floatsPerVert) {
          var x = local[offset];
          var y = local[offset + 1];
          world[offset] = x * a + y * c + tx;
          world[offset + 1] = x * b + y * d + ty;
        }
      };
      return WebglBmfontAssembler;
    })(_bmfont["default"]);
    exports["default"] = WebglBmfontAssembler;
    module.exports = exports["default"];
  }), {
    "../../../../utils/label/bmfont": 170
  } ],
  180: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    function _inheritsLoose(subClass, superClass) {
      subClass.prototype = Object.create(superClass.prototype);
      subClass.prototype.constructor = subClass;
      subClass.__proto__ = superClass;
    }
    var js = require("../../../../../platform/js");
    var WebglBmfontAssembler = require("./bmfont");
    var LetterFontAssembler = require("../../../../utils/label/letter-font");
    var WHITE = cc.color(255, 255, 255, 255);
    var WebglLetterFontAssembler = (function(_LetterFontAssembler) {
      _inheritsLoose(WebglLetterFontAssembler, _LetterFontAssembler);
      function WebglLetterFontAssembler() {
        return _LetterFontAssembler.apply(this, arguments) || this;
      }
      var _proto = WebglLetterFontAssembler.prototype;
      _proto.createData = function createData(comp) {
        return comp.requestRenderData();
      };
      _proto._getColor = function _getColor(comp) {
        WHITE._fastSetA(comp.node._color.a);
        return WHITE._val;
      };
      _proto.updateColor = function updateColor(comp) {
        var color = this._getColor(comp);
        _LetterFontAssembler.prototype.updateColor.call(this, comp, color);
      };
      return WebglLetterFontAssembler;
    })(LetterFontAssembler);
    exports["default"] = WebglLetterFontAssembler;
    module.exports = exports["default"];
  }), {
    "../../../../../platform/js": 158,
    "../../../../utils/label/letter-font": 172,
    "./bmfont": 179
  } ],
  181: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _materialVariant = _interopRequireDefault(require("../../../../../assets/material/material-variant"));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    var Label = require("../../../../../components/CCLabel");
    var LabelShadow = require("../../../../../components/CCLabelShadow");
    var LabelOutline = require("../../../../../components/CCLabelOutline");
    var Material = require("../../../../../assets/material/CCMaterial");
    var UPDATE_CONTENT = 1;
    var UPDATE_FONT = 2;
    var UPDATE_EFFECT = 4;
    var NativeTTF = (function() {
      function NativeTTF() {}
      var _proto = NativeTTF.prototype;
      _proto.init = function init(comp) {
        this.labelMaterial = null;
        this._label = this._renderComp = comp;
        renderer.CustomAssembler.prototype.ctor.call(this);
        comp.node._proxy.setAssembler(this);
        this._layout = new jsb.LabelRenderer();
        this._layout.init();
        this._cfg = new DataView(this._layout._cfg);
        this._layoutInfo = new DataView(this._layout._layout);
        this._cfgFields = jsb.LabelRenderer._cfgFields;
        this._layoutFields = jsb.LabelRenderer._layoutFields;
        this._layout.bindNodeProxy(comp.node._proxy);
        this._bindMaterial(comp);
      };
      _proto._setBufferFlag = function _setBufferFlag(dv, offset, size, type, flag) {
        if ("int8" == type && 1 == size) {
          var v = dv.getInt8(offset);
          dv.setInt8(offset, flag | v);
        } else if ("int32" == type && 4 == size) {
          var _v = dv.getInt32(offset, jsb.__isLittleEndian__);
          dv.setInt32(offset, flag | _v, jsb.__isLittleEndian__);
        } else cc.warn("flag storage type should be int8/int32 only, type/size -> " + type + "/" + size + ".");
      };
      _proto._updateCfgFlag = function _updateCfgFlag(flag) {
        var field = this._cfgFields.updateFlags;
        this._setBufferFlag(this._cfg, field.offset, field.size, field.type, flag);
      };
      _proto._setBufferValue = function _setBufferValue(dv, offset, size, type, value) {
        if ("float" == type && 4 == size) dv.setFloat32(offset, value, jsb.__isLittleEndian__); else if ("int32" == type && 4 == size) dv.setInt32(offset, value, jsb.__isLittleEndian__); else if ("bool" == type && 1 == size) dv.setInt8(offset, !value ? 0 : 1, jsb.__isLittleEndian__); else if ("Color4B" == type && 4 == size) {
          dv.setUint8(offset, value.r);
          dv.setUint8(offset + 1, value.g);
          dv.setUint8(offset + 2, value.b);
          dv.setUint8(offset + 3, value.a);
        } else "int8" == type && 1 == size ? dv.setUint8(offset, value) : cc.warn("dont know how to set value to buffer, type/size -> " + type + "/" + size + ".");
      };
      _proto._setFieldValue = function _setFieldValue(dv, desc, field_name, value) {
        var field = desc[field_name];
        this._setBufferValue(dv, field.offset, field.size, field.type, value);
      };
      _proto._getBufferValue = function _getBufferValue(dv, offset, size, type) {
        if ("float" == type && 4 == size) return dv.getFloat32(offset, jsb.__isLittleEndian__);
        if ("int32" == type && 4 == size) return dv.getInt32(offset, jsb.__isLittleEndian__);
        if ("bool" == type && 1 == size) return 0 != dv.getInt8(offset, jsb.__isLittleEndian__);
        if ("Color4B" == type && 4 == size) {
          var r = dv.getUint8(offset);
          var g = dv.getUint8(offset + 1);
          var b = dv.getUint8(offset + 2);
          var a = dv.getUint8(offset + 3);
          return {
            r: r,
            g: g,
            b: b,
            a: a
          };
        }
        if ("int8" == type && 1 == size) return dv.getUint8(offset);
        cc.warn("dont know how to get value from buffer, type/size -> " + type + "/" + size + ".");
        return;
      };
      _proto._getFieldValue = function _getFieldValue(dv, desc, field_name) {
        var field = desc[field_name];
        return this._getBufferValue(dv, field.offset, field.size, field.type);
      };
      _proto._getLayoutValue = function _getLayoutValue(field_name) {
        return this._getFieldValue(this._layoutInfo, this._layoutFields, field_name);
      };
      _proto._setLayoutValue = function _setLayoutValue(field_name, value) {
        return this._setFieldValue(this._layoutInfo, this._layoutFields, field_name, value);
      };
      _proto._updateCfgFlag_Content = function _updateCfgFlag_Content() {
        this._updateCfgFlag(UPDATE_CONTENT);
      };
      _proto._updateCfgFlag_Font = function _updateCfgFlag_Font() {
        this._updateCfgFlag(UPDATE_FONT);
      };
      _proto._colorEqual = function _colorEqual(a, b) {
        return a.r == b.r && a.g == b.g && a.b == b.b && a.a == b.a;
      };
      _proto._colorToObj = function _colorToObj(r, g, b, a) {
        return {
          r: r,
          g: g,
          b: b,
          a: a
        };
      };
      _proto.setString = function setString(str) {
        if (str != this._layout.string) {
          this._layout.string = str;
          this._updateCfgFlag_Content();
        }
      };
      _proto.setFontPath = function setFontPath(path) {
        if (path != this._layout.fontPath) {
          this._layout.fontPath = path;
          this._updateCfgFlag_Font();
        }
      };
      _proto.setFontSize = function setFontSize(fontSize, fontSizeRetina) {
        var oldfontsize = this._getFieldValue(this._cfg, this._cfgFields, "fontSize");
        if (oldfontsize != fontSize) {
          this._setFieldValue(this._cfg, this._cfgFields, "fontSize", fontSize);
          this._setFieldValue(this._cfg, this._cfgFields, "fontSizeRetina", fontSizeRetina);
          this._updateCfgFlag_Font();
        }
      };
      _proto.setOutline = function setOutline(outline) {
        var oldOutline = this._getLayoutValue("outlineSize");
        oldOutline > 0 != outline > 0 && this._updateCfgFlag_Font();
        if (oldOutline != outline) {
          this._updateCfgFlag_Content();
          this._setLayoutValue("outlineSize", outline);
        }
      };
      _proto.setOutlineColor = function setOutlineColor(color) {
        var oldColor = this._getLayoutValue("outlineColor");
        if (!this._colorEqual(oldColor, color)) {
          this._setLayoutValue("outlineColor", color);
          this._updateCfgFlag_Content();
        }
      };
      _proto.setLineHeight = function setLineHeight(lineHeight) {
        var oldLineHeight = this._getLayoutValue("lineHeight");
        if (oldLineHeight != lineHeight) {
          this._setLayoutValue("lineHeight", lineHeight);
          this._updateCfgFlag_Content();
        }
      };
      _proto.setOverFlow = function setOverFlow(overflow) {
        var oldValue = this._getLayoutValue("overflow");
        if (oldValue != overflow) {
          this._setLayoutValue("overflow", overflow);
          this._updateCfgFlag_Content();
        }
      };
      _proto.setEnableWrap = function setEnableWrap(value) {
        var oldValue = this._getLayoutValue("wrap");
        if (oldValue != value) {
          this._setLayoutValue("wrap", value);
          this._updateCfgFlag_Content();
        }
      };
      _proto.setVerticalAlign = function setVerticalAlign(value) {
        var oldValue = this._getLayoutValue("valign");
        if (oldValue != value) {
          this._setLayoutValue("valign", value);
          this._updateCfgFlag_Content();
        }
      };
      _proto.setHorizontalAlign = function setHorizontalAlign(value) {
        var oldValue = this._getLayoutValue("halign");
        if (oldValue != value) {
          this._setLayoutValue("halign", value);
          this._updateCfgFlag_Content();
        }
      };
      _proto.setContentSize = function setContentSize(width, height) {
        var oldWidth = this._getLayoutValue("width");
        var oldHeight = this._getLayoutValue("height");
        if (oldWidth != width || oldHeight != height) {
          this._setLayoutValue("height", height);
          this._setLayoutValue("width", width);
          this._updateCfgFlag_Content();
        }
      };
      _proto.setAnchorPoint = function setAnchorPoint(x, y) {
        var oldX = this._getLayoutValue("anchorX");
        var oldY = this._getLayoutValue("anchorY");
        if (oldX != x || oldY != y) {
          this._setLayoutValue("anchorX", x);
          this._setLayoutValue("anchorY", y);
          this._updateCfgFlag_Content();
        }
      };
      _proto.setColor = function setColor(color) {
        var oldColor = this._getLayoutValue("color");
        if (!this._colorEqual(oldColor, color)) {
          this._setLayoutValue("color", color);
          this._updateCfgFlag_Content();
        }
      };
      _proto.setShadow = function setShadow(x, y, blur) {
        var oldBlur = this._getLayoutValue("shadowBlur");
        var oldX = this._getLayoutValue("shadowX");
        var oldY = this._getLayoutValue("shadowY");
        oldBlur > 0 != blur > 0 && this._updateCfgFlag_Font();
        var updateContent = false;
        if (oldBlur != blur) {
          this._setLayoutValue("shadowBlur", blur);
          updateContent = true;
        }
        if (oldX != x) {
          this._setLayoutValue("shadowX", x);
          updateContent = true;
        }
        if (oldY != y) {
          this._setLayoutValue("shadowY", y);
          updateContent = true;
        }
        updateContent && this._updateCfgFlag_Content();
      };
      _proto.setShadowColor = function setShadowColor(color) {
        var oldColor = this._getLayoutValue("shadowColor");
        if (!this._colorEqual(oldColor, color)) {
          this._setLayoutValue("shadowColor", color);
          this._updateCfgFlag_Content();
        }
      };
      _proto.setItalic = function setItalic(enabled) {
        var oldItalic = this._getLayoutValue("italic");
        if (oldItalic != enabled) {
          this._setLayoutValue("italic", enabled);
          this._updateCfgFlag_Content();
        }
      };
      _proto.setBold = function setBold(bold) {
        var oldBold = this._getLayoutValue("bold");
        if (oldBold != bold) {
          this._setLayoutValue("bold", bold);
          this._updateCfgFlag_Content();
          this._updateCfgFlag_Font();
        }
      };
      _proto.setUnderline = function setUnderline(underline) {
        var oldBold = this._getLayoutValue("underline");
        if (oldBold != underline) {
          this._setLayoutValue("underline", underline);
          this._updateCfgFlag_Content();
        }
      };
      _proto.setSpacingX = function setSpacingX(x) {
        var oldX = this._getLayoutValue("spaceX");
        if (oldX != x && "number" == typeof x && !isNaN(x)) {
          this._setLayoutValue("spaceX", x);
          this._updateCfgFlag_Content();
        }
      };
      _proto.updateRenderData = function updateRenderData(comp) {
        if (!comp._vertsDirty) return;
        comp.font && comp.font.nativeUrl && this.setFontPath(comp.font.nativeUrl);
        var layout = this._layout;
        var c = comp.node.color;
        var node = comp.node;
        var retinaSize = comp.fontSize;
        this.setString(comp.string);
        this.setFontSize(comp.fontSize, retinaSize / 72 * comp.fontSize);
        this.setLineHeight(comp.lineHeight);
        this.setEnableWrap(comp.enableWrapText);
        this.setItalic(comp.enableItalic);
        this.setUnderline(comp.enableUnderline);
        this.setBold(comp.enableBold);
        this.setOverFlow(comp.overflow);
        this.setVerticalAlign(comp.verticalAlign);
        this.setHorizontalAlign(comp.horizontalAlign);
        this.setSpacingX(comp.spacingX);
        this.setContentSize(node.getContentSize().width, node.getContentSize().height);
        this.setAnchorPoint(node.anchorX, node.anchorY);
        this.setColor(this._colorToObj(c.getR(), c.getG(), c.getB(), Math.ceil(c.getA() * node.opacity / 255)));
        var shadow = node.getComponent(cc.LabelShadow);
        if (shadow && shadow.enabled) {
          var shadowColor = shadow.color;
          this.setShadow(shadow.offset.x, shadow.offset.y, shadow.blur);
          this.setShadowColor(this._colorToObj(shadowColor.getR(), shadowColor.getG(), shadowColor.getB(), Math.ceil(shadowColor.getA() * node.opacity / 255)));
        } else this.setShadow(0, 0, -1);
        this._updateTTFMaterial(comp);
        layout.render();
      };
      _proto._bindMaterial = function _bindMaterial(comp) {
        var material = this.labelMaterial;
        if (!material) {
          material = _materialVariant["default"].createWithBuiltin("2d-label", comp);
          this.labelMaterial = material;
        }
        return material;
      };
      _proto._updateTTFMaterial = function _updateTTFMaterial(comp) {
        var material = this._bindMaterial(comp);
        var node = this._label.node;
        var layout = this._layout;
        var outline = node.getComponent(cc.LabelOutline);
        var outlineSize = 0;
        if (outline && outline.enabled && outline.width > 0) {
          outlineSize = Math.max(Math.min(outline.width / 10, .4), .1);
          var c = outline.color;
          this.setOutlineColor(this._colorToObj(c.getR(), c.getG(), c.getB(), Math.ceil(c.getA() * node.opacity / 255)));
        }
        this.setOutline(outlineSize);
        material.define("CC_USE_MODEL", true);
        material.define("USE_TEXTURE_ALPHAONLY", true);
        material.define("USE_SDF", outlineSize > 0 || comp.enableBold);
        material.define("USE_SDF_EXTEND", comp.enableBold ? 1 : 0);
        void 0 !== material.getDefine("CC_SUPPORT_standard_derivatives") && cc.sys.glExtension("OES_standard_derivatives") && material.define("CC_SUPPORT_standard_derivatives", true);
        layout.setEffect(material.effect._nativeObj);
      };
      _proto.fillBuffers = function fillBuffers(comp, renderer) {
        this._layout.render();
      };
      _proto.getVfmt = function getVfmt() {};
      return NativeTTF;
    })();
    exports["default"] = NativeTTF;
    module.exports = exports["default"];
  }), {
    "../../../../../assets/material/CCMaterial": 77,
    "../../../../../assets/material/material-variant": 84,
    "../../../../../components/CCLabel": 96,
    "../../../../../components/CCLabelOutline": void 0,
    "../../../../../components/CCLabelShadow": void 0
  } ],
  182: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _ttf = _interopRequireDefault(require("../../../../utils/label/ttf"));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    function _inheritsLoose(subClass, superClass) {
      subClass.prototype = Object.create(superClass.prototype);
      subClass.prototype.constructor = subClass;
      subClass.__proto__ = superClass;
    }
    var LabelShadow = require("../../../../../components/CCLabelShadow");
    var WHITE = cc.color(255, 255, 255, 255);
    var WebglTTFAssembler = (function(_TTFAssembler) {
      _inheritsLoose(WebglTTFAssembler, _TTFAssembler);
      function WebglTTFAssembler() {
        return _TTFAssembler.apply(this, arguments) || this;
      }
      var _proto = WebglTTFAssembler.prototype;
      _proto.updateUVs = function updateUVs(comp) {
        var verts = this._renderData.vDatas[0];
        var uv = comp._frame.uv;
        var uvOffset = this.uvOffset;
        var floatsPerVert = this.floatsPerVert;
        for (var i = 0; i < 4; i++) {
          var srcOffset = 2 * i;
          var dstOffset = floatsPerVert * i + uvOffset;
          verts[dstOffset] = uv[srcOffset];
          verts[dstOffset + 1] = uv[srcOffset + 1];
        }
      };
      _proto.updateColor = function updateColor(comp) {
        WHITE._fastSetA(comp.node._color.a);
        var color = WHITE._val;
        _TTFAssembler.prototype.updateColor.call(this, comp, color);
      };
      _proto.updateVerts = function updateVerts(comp) {
        var node = comp.node, canvasWidth = comp._ttfTexture.width, canvasHeight = comp._ttfTexture.height, appx = node.anchorX * node.width, appy = node.anchorY * node.height;
        var shadow = LabelShadow && comp.getComponent(LabelShadow);
        if (shadow && shadow._enabled) {
          var offsetX = (canvasWidth - node.width) / 2;
          var offsetY = (canvasHeight - node.height) / 2;
          var shadowOffset = shadow.offset;
          -shadowOffset.x > offsetX ? appx += canvasWidth - node.width : offsetX > shadowOffset.x && (appx += offsetX - shadowOffset.x);
          -shadowOffset.y > offsetY ? appy += canvasHeight - node.height : offsetY > shadowOffset.y && (appy += offsetY - shadowOffset.y);
        }
        var local = this._local;
        local[0] = -appx;
        local[1] = -appy;
        local[2] = canvasWidth - appx;
        local[3] = canvasHeight - appy;
        this.updateUVs(comp);
        this.updateWorldVerts(comp);
      };
      return WebglTTFAssembler;
    })(_ttf["default"]);
    exports["default"] = WebglTTFAssembler;
    module.exports = exports["default"];
  }), {
    "../../../../../components/CCLabelShadow": void 0,
    "../../../../utils/label/ttf": 173
  } ],
  183: [ (function(require, module, exports) {
    "use strict";
    var _assembler = _interopRequireDefault(require("../../../assembler"));
    var _CCLabel = _interopRequireDefault(require("../../../../components/CCLabel"));
    var _ttf = _interopRequireDefault(require("./2d/ttf"));
    var _bmfont = _interopRequireDefault(require("./2d/bmfont"));
    var _letter = _interopRequireDefault(require("./2d/letter"));
    var _ttf2 = _interopRequireDefault(require("./3d/ttf"));
    var _bmfont2 = _interopRequireDefault(require("./3d/bmfont"));
    var _letter2 = _interopRequireDefault(require("./3d/letter"));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    var NativeTTF = void 0;
    false;
    _CCLabel["default"]._canvasPool = {
      pool: [],
      get: function get() {
        var data = this.pool.pop();
        if (!data) {
          var canvas = document.createElement("canvas");
          var context = canvas.getContext("2d");
          data = {
            canvas: canvas,
            context: context
          };
          context.textBaseline = "alphabetic";
          context.lineJoin = "round";
        }
        return data;
      },
      put: function put(canvas) {
        if (this.pool.length >= 32) return;
        this.pool.push(canvas);
      }
    };
    _assembler["default"].register(cc.Label, {
      getConstructor: function getConstructor(label) {
        var is3DNode = label.node.is3DNode;
        var ctor = is3DNode ? _ttf2["default"] : _ttf["default"];
        if (label.font instanceof cc.BitmapFont) ctor = is3DNode ? _bmfont2["default"] : _bmfont["default"]; else if (label.cacheMode === _CCLabel["default"].CacheMode.CHAR) {
          false;
          cc.sys.browserType === cc.sys.BROWSER_TYPE_WECHAT_GAME_SUB ? cc.warn("sorry, subdomain does not support CHAR mode currently!") : ctor = is3DNode ? _letter2["default"] : _letter["default"];
        }
        return ctor;
      },
      TTF: _ttf["default"],
      Bmfont: _bmfont["default"],
      Letter: _letter["default"],
      TTF3D: _ttf2["default"],
      Bmfont3D: _bmfont2["default"],
      Letter3D: _letter2["default"],
      NativeTTF: NativeTTF
    });
  }), {
    "../../../../components/CCLabel": 96,
    "../../../assembler": 165,
    "./2d/bmfont": 179,
    "./2d/letter": 180,
    "./2d/nativeTTF": 181,
    "./2d/ttf": 182,
    "./3d/bmfont": void 0,
    "./3d/letter": void 0,
    "./3d/ttf": void 0
  } ],
  184: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports.MaskAssembler = void 0;
    var _assembler = _interopRequireDefault(require("../../assembler"));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    function _inheritsLoose(subClass, superClass) {
      subClass.prototype = Object.create(superClass.prototype);
      subClass.prototype.constructor = subClass;
      subClass.__proto__ = superClass;
    }
    var Mask = require("../../../components/CCMask");
    var RenderFlow = require("../../render-flow");
    var SimpleSpriteAssembler = require("./sprite/2d/simple");
    var GraphicsAssembler = require("./graphics");
    var gfx = require("../../../../renderer/gfx");
    var vfmtPos = require("../vertex-format").vfmtPos;
    var _maxLevel = 8;
    var _maskStack = [];
    function getWriteMask() {
      return 1 << _maskStack.length - 1;
    }
    function getStencilRef() {
      var result = 0;
      for (var i = 0; i < _maskStack.length; ++i) result += 1 << i;
      return result;
    }
    function applyStencil(material, func, failOp, ref, stencilMask, writeMask) {
      var effect = material.effect;
      var zFailOp = gfx.STENCIL_OP_KEEP, zPassOp = gfx.STENCIL_OP_KEEP;
      effect.setStencil(gfx.STENCIL_ENABLE, func, ref, stencilMask, failOp, zFailOp, zPassOp, writeMask);
    }
    function pushMask(mask) {
      _maskStack.length + 1 > _maxLevel && cc.errorID(9e3, _maxLevel);
      _maskStack.push(mask);
    }
    function exitMask(mask, renderer) {
      0 === _maskStack.length && cc.errorID(9001);
      _maskStack.pop();
      0 === _maskStack.length ? renderer._flushMaterial(mask._exitMaterial) : enableMask(renderer);
    }
    function applyClearMask(mask, renderer) {
      var func = gfx.DS_FUNC_NEVER;
      var ref = getWriteMask();
      var stencilMask = ref;
      var writeMask = ref;
      var failOp = mask.inverted ? gfx.STENCIL_OP_REPLACE : gfx.STENCIL_OP_ZERO;
      applyStencil(mask._clearMaterial, func, failOp, ref, stencilMask, writeMask);
      var buffer = renderer.getBuffer("mesh", vfmtPos);
      var offsetInfo = buffer.request(4, 6);
      var indiceOffset = offsetInfo.indiceOffset, vertexOffset = offsetInfo.byteOffset >> 2, vertexId = offsetInfo.vertexOffset, vbuf = buffer._vData, ibuf = buffer._iData;
      vbuf[vertexOffset++] = -1;
      vbuf[vertexOffset++] = -1;
      vbuf[vertexOffset++] = -1;
      vbuf[vertexOffset++] = 1;
      vbuf[vertexOffset++] = 1;
      vbuf[vertexOffset++] = 1;
      vbuf[vertexOffset++] = 1;
      vbuf[vertexOffset++] = -1;
      ibuf[indiceOffset++] = vertexId;
      ibuf[indiceOffset++] = vertexId + 3;
      ibuf[indiceOffset++] = vertexId + 1;
      ibuf[indiceOffset++] = vertexId + 1;
      ibuf[indiceOffset++] = vertexId + 3;
      ibuf[indiceOffset++] = vertexId + 2;
      renderer.node = renderer._dummyNode;
      renderer.material = mask._clearMaterial;
      renderer._flush();
    }
    function applyAreaMask(mask, renderer) {
      var func = gfx.DS_FUNC_NEVER;
      var ref = getWriteMask();
      var stencilMask = ref;
      var writeMask = ref;
      var failOp = mask.inverted ? gfx.STENCIL_OP_ZERO : gfx.STENCIL_OP_REPLACE;
      applyStencil(mask._materials[0], func, failOp, ref, stencilMask, writeMask);
      renderer.material = mask._materials[0];
      if (mask._type === Mask.Type.IMAGE_STENCIL) {
        renderer.node = renderer._dummyNode;
        SimpleSpriteAssembler.prototype.fillBuffers.call(mask._assembler, mask, renderer);
        renderer._flush();
      } else {
        renderer.node = mask.node;
        GraphicsAssembler.prototype.fillBuffers.call(mask._graphics._assembler, mask._graphics, renderer);
      }
    }
    function enableMask(renderer) {
      var func = gfx.DS_FUNC_EQUAL;
      var failOp = gfx.STENCIL_OP_KEEP;
      var ref = getStencilRef();
      var stencilMask = ref;
      var writeMask = getWriteMask();
      var mask = _maskStack[_maskStack.length - 1];
      applyStencil(mask._enableMaterial, func, failOp, ref, stencilMask, writeMask);
      renderer._flushMaterial(mask._enableMaterial);
    }
    var MaskAssembler = (function(_SimpleSpriteAssemble) {
      _inheritsLoose(MaskAssembler, _SimpleSpriteAssemble);
      function MaskAssembler() {
        return _SimpleSpriteAssemble.apply(this, arguments) || this;
      }
      var _proto = MaskAssembler.prototype;
      _proto.updateRenderData = function updateRenderData(mask) {
        if (mask._type === Mask.Type.IMAGE_STENCIL) mask.spriteFrame ? SimpleSpriteAssembler.prototype.updateRenderData.call(this, mask) : mask.setMaterial(0, null); else {
          mask._graphics.setMaterial(0, mask._materials[0]);
          GraphicsAssembler.prototype.updateRenderData.call(mask._graphics._assembler, mask._graphics, mask._graphics);
        }
      };
      _proto.fillBuffers = function fillBuffers(mask, renderer) {
        if (mask._type !== Mask.Type.IMAGE_STENCIL || mask.spriteFrame) {
          pushMask(mask);
          applyClearMask(mask, renderer);
          applyAreaMask(mask, renderer);
          enableMask(renderer);
        }
        mask.node._renderFlag |= RenderFlow.FLAG_UPDATE_RENDER_DATA;
      };
      _proto.postFillBuffers = function postFillBuffers(mask, renderer) {
        (mask._type !== Mask.Type.IMAGE_STENCIL || mask.spriteFrame) && exitMask(mask, renderer);
        mask.node._renderFlag |= RenderFlow.FLAG_UPDATE_RENDER_DATA;
      };
      return MaskAssembler;
    })(SimpleSpriteAssembler);
    exports.MaskAssembler = MaskAssembler;
    _assembler["default"].register(Mask, MaskAssembler);
  }), {
    "../../../../renderer/gfx": 251,
    "../../../components/CCMask": 98,
    "../../assembler": 165,
    "../../render-flow": 169,
    "../vertex-format": 198,
    "./graphics": 177,
    "./sprite/2d/simple": 188
  } ],
  185: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _assembler2d = _interopRequireDefault(require("../../../../assembler-2d"));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    function _inheritsLoose(subClass, superClass) {
      subClass.prototype = Object.create(superClass.prototype);
      subClass.prototype.constructor = subClass;
      subClass.__proto__ = superClass;
    }
    var Sprite = require("../../../../../components/CCSprite");
    var FillType = Sprite.FillType;
    var BarFilledAssembler = (function(_Assembler2D) {
      _inheritsLoose(BarFilledAssembler, _Assembler2D);
      function BarFilledAssembler() {
        return _Assembler2D.apply(this, arguments) || this;
      }
      var _proto = BarFilledAssembler.prototype;
      _proto.updateRenderData = function updateRenderData(sprite) {
        var frame = sprite._spriteFrame;
        this.packToDynamicAtlas(sprite, frame);
        if (!sprite._vertsDirty) return;
        var fillStart = sprite._fillStart;
        var fillRange = sprite._fillRange;
        if (fillRange < 0) {
          fillStart += fillRange;
          fillRange = -fillRange;
        }
        fillRange = fillStart + fillRange;
        fillStart = fillStart > 1 ? 1 : fillStart;
        fillStart = fillStart < 0 ? 0 : fillStart;
        fillRange = fillRange > 1 ? 1 : fillRange;
        fillRange = fillRange < 0 ? 0 : fillRange;
        fillRange -= fillStart;
        fillRange = fillRange < 0 ? 0 : fillRange;
        var fillEnd = fillStart + fillRange;
        fillEnd = fillEnd > 1 ? 1 : fillEnd;
        this.updateUVs(sprite, fillStart, fillEnd);
        this.updateVerts(sprite, fillStart, fillEnd);
        sprite._vertsDirty = false;
      };
      _proto.updateUVs = function updateUVs(sprite, fillStart, fillEnd) {
        var spriteFrame = sprite._spriteFrame;
        var atlasWidth = spriteFrame._texture.width;
        var atlasHeight = spriteFrame._texture.height;
        var textureRect = spriteFrame._rect;
        var ul, vb, ur, vt;
        var quadUV0, quadUV1, quadUV2, quadUV3, quadUV4, quadUV5, quadUV6, quadUV7;
        if (spriteFrame._rotated) {
          ul = textureRect.x / atlasWidth;
          vb = (textureRect.y + textureRect.width) / atlasHeight;
          ur = (textureRect.x + textureRect.height) / atlasWidth;
          vt = textureRect.y / atlasHeight;
          quadUV0 = quadUV2 = ul;
          quadUV4 = quadUV6 = ur;
          quadUV3 = quadUV7 = vb;
          quadUV1 = quadUV5 = vt;
        } else {
          ul = textureRect.x / atlasWidth;
          vb = (textureRect.y + textureRect.height) / atlasHeight;
          ur = (textureRect.x + textureRect.width) / atlasWidth;
          vt = textureRect.y / atlasHeight;
          quadUV0 = quadUV4 = ul;
          quadUV2 = quadUV6 = ur;
          quadUV1 = quadUV3 = vb;
          quadUV5 = quadUV7 = vt;
        }
        var verts = this._renderData.vDatas[0];
        var uvOffset = this.uvOffset;
        var floatsPerVert = this.floatsPerVert;
        switch (sprite._fillType) {
         case FillType.HORIZONTAL:
          verts[uvOffset] = quadUV0 + (quadUV2 - quadUV0) * fillStart;
          verts[uvOffset + 1] = quadUV1 + (quadUV3 - quadUV1) * fillStart;
          verts[uvOffset + floatsPerVert] = quadUV0 + (quadUV2 - quadUV0) * fillEnd;
          verts[uvOffset + floatsPerVert + 1] = quadUV1 + (quadUV3 - quadUV1) * fillEnd;
          verts[uvOffset + 2 * floatsPerVert] = quadUV4 + (quadUV6 - quadUV4) * fillStart;
          verts[uvOffset + 2 * floatsPerVert + 1] = quadUV5 + (quadUV7 - quadUV5) * fillStart;
          verts[uvOffset + 3 * floatsPerVert] = quadUV4 + (quadUV6 - quadUV4) * fillEnd;
          verts[uvOffset + 3 * floatsPerVert + 1] = quadUV5 + (quadUV7 - quadUV5) * fillEnd;
          break;

         case FillType.VERTICAL:
          verts[uvOffset] = quadUV0 + (quadUV4 - quadUV0) * fillStart;
          verts[uvOffset + 1] = quadUV1 + (quadUV5 - quadUV1) * fillStart;
          verts[uvOffset + floatsPerVert] = quadUV2 + (quadUV6 - quadUV2) * fillStart;
          verts[uvOffset + floatsPerVert + 1] = quadUV3 + (quadUV7 - quadUV3) * fillStart;
          verts[uvOffset + 2 * floatsPerVert] = quadUV0 + (quadUV4 - quadUV0) * fillEnd;
          verts[uvOffset + 2 * floatsPerVert + 1] = quadUV1 + (quadUV5 - quadUV1) * fillEnd;
          verts[uvOffset + 3 * floatsPerVert] = quadUV2 + (quadUV6 - quadUV2) * fillEnd;
          verts[uvOffset + 3 * floatsPerVert + 1] = quadUV3 + (quadUV7 - quadUV3) * fillEnd;
          break;

         default:
          cc.errorID(2626);
        }
      };
      _proto.updateVerts = function updateVerts(sprite, fillStart, fillEnd) {
        var node = sprite.node, width = node.width, height = node.height, appx = node.anchorX * width, appy = node.anchorY * height;
        var l = -appx, b = -appy, r = width - appx, t = height - appy;
        var progressStart, progressEnd;
        switch (sprite._fillType) {
         case FillType.HORIZONTAL:
          progressStart = l + (r - l) * fillStart;
          progressEnd = l + (r - l) * fillEnd;
          l = progressStart;
          r = progressEnd;
          break;

         case FillType.VERTICAL:
          progressStart = b + (t - b) * fillStart;
          progressEnd = b + (t - b) * fillEnd;
          b = progressStart;
          t = progressEnd;
          break;

         default:
          cc.errorID(2626);
        }
        var local = this._local;
        local[0] = l;
        local[1] = b;
        local[2] = r;
        local[3] = t;
        this.updateWorldVerts(sprite);
      };
      return BarFilledAssembler;
    })(_assembler2d["default"]);
    exports["default"] = BarFilledAssembler;
    module.exports = exports["default"];
  }), {
    "../../../../../components/CCSprite": 106,
    "../../../../assembler-2d": 163
  } ],
  186: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _assembler2d = _interopRequireDefault(require("../../../../assembler-2d"));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    function _inheritsLoose(subClass, superClass) {
      subClass.prototype = Object.create(superClass.prototype);
      subClass.prototype.constructor = subClass;
      subClass.__proto__ = superClass;
    }
    var MeshSpriteAssembler = (function(_Assembler2D) {
      _inheritsLoose(MeshSpriteAssembler, _Assembler2D);
      function MeshSpriteAssembler() {
        return _Assembler2D.apply(this, arguments) || this;
      }
      var _proto = MeshSpriteAssembler.prototype;
      _proto.initData = function initData(sprite) {
        this._renderData.createFlexData(0, 4, 6, this.getVfmt());
      };
      _proto.updateRenderData = function updateRenderData(sprite) {
        this.packToDynamicAtlas(sprite, sprite._spriteFrame);
        var frame = sprite.spriteFrame;
        if (frame) {
          var vertices = frame.vertices;
          if (vertices) {
            this.verticesCount = vertices.x.length;
            this.indicesCount = vertices.triangles.length;
            var renderData = this._renderData;
            var flexBuffer = renderData._flexBuffer;
            if (flexBuffer.reserve(this.verticesCount, this.indicesCount)) {
              this.updateColor(sprite);
              sprite._vertsDirty = true;
            }
            flexBuffer.used(this.verticesCount, this.indicesCount);
            this.updateIndices(vertices.triangles);
            if (sprite._vertsDirty) {
              this.updateUVs(sprite);
              this.updateVerts(sprite);
              this.updateWorldVerts(sprite);
              sprite._vertsDirty = false;
            }
          }
        }
      };
      _proto.updateIndices = function updateIndices(triangles) {
        this._renderData.iDatas[0].set(triangles);
      };
      _proto.updateUVs = function updateUVs(sprite) {
        var vertices = sprite.spriteFrame.vertices, u = vertices.nu, v = vertices.nv;
        var uvOffset = this.uvOffset;
        var floatsPerVert = this.floatsPerVert;
        var verts = this._renderData.vDatas[0];
        for (var i = 0; i < u.length; i++) {
          var dstOffset = floatsPerVert * i + uvOffset;
          verts[dstOffset] = u[i];
          verts[dstOffset + 1] = v[i];
        }
      };
      _proto.updateVerts = function updateVerts(sprite) {
        var node = sprite.node, contentWidth = Math.abs(node.width), contentHeight = Math.abs(node.height), appx = node.anchorX * contentWidth, appy = node.anchorY * contentHeight;
        var frame = sprite.spriteFrame, vertices = frame.vertices, x = vertices.x, y = vertices.y, originalWidth = frame._originalSize.width, originalHeight = frame._originalSize.height, rectWidth = frame._rect.width, rectHeight = frame._rect.height, offsetX = frame._offset.x, offsetY = frame._offset.y, trimX = offsetX + (originalWidth - rectWidth) / 2, trimY = offsetY + (originalHeight - rectHeight) / 2;
        var scaleX = contentWidth / (sprite.trim ? rectWidth : originalWidth), scaleY = contentHeight / (sprite.trim ? rectHeight : originalHeight);
        var local = this._local;
        if (sprite.trim) for (var _i = 0, _l = x.length; _i < _l; _i++) {
          var _offset = 2 * _i;
          local[_offset] = (x[_i] - trimX) * scaleX - appx;
          local[_offset + 1] = (originalHeight - y[_i] - trimY) * scaleY - appy;
        } else for (var i = 0, l = x.length; i < l; i++) {
          var offset = 2 * i;
          local[offset] = x[i] * scaleX - appx;
          local[offset + 1] = (originalHeight - y[i]) * scaleY - appy;
        }
      };
      _proto.updateWorldVerts = function updateWorldVerts(sprite) {
        var node = sprite.node;
        var matrix = node._worldMatrix;
        var matrixm = matrix.m;
        var a = matrixm[0], b = matrixm[1], c = matrixm[4], d = matrixm[5], tx = matrixm[12], ty = matrixm[13];
        var local = this._local;
        var world = this._renderData.vDatas[0];
        var floatsPerVert = this.floatsPerVert;
        for (var i = 0, l = this.verticesCount; i < l; i++) {
          var lx = local[2 * i];
          var ly = local[2 * i + 1];
          world[floatsPerVert * i] = lx * a + ly * c + tx;
          world[floatsPerVert * i + 1] = lx * b + ly * d + ty;
        }
      };
      return MeshSpriteAssembler;
    })(_assembler2d["default"]);
    exports["default"] = MeshSpriteAssembler;
    module.exports = exports["default"];
  }), {
    "../../../../assembler-2d": 163
  } ],
  187: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _assembler2d = _interopRequireDefault(require("../../../../assembler-2d"));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    function _inheritsLoose(subClass, superClass) {
      subClass.prototype = Object.create(superClass.prototype);
      subClass.prototype.constructor = subClass;
      subClass.__proto__ = superClass;
    }
    var PI_2 = 2 * Math.PI;
    var _vertPos = [ cc.v2(0, 0), cc.v2(0, 0), cc.v2(0, 0), cc.v2(0, 0) ];
    var _vertices = [ 0, 0, 0, 0 ];
    var _uvs = [ 0, 0, 0, 0, 0, 0, 0, 0 ];
    var _intersectPoint_1 = [ cc.v2(0, 0), cc.v2(0, 0), cc.v2(0, 0), cc.v2(0, 0) ];
    var _intersectPoint_2 = [ cc.v2(0, 0), cc.v2(0, 0), cc.v2(0, 0), cc.v2(0, 0) ];
    var _center = cc.v2(0, 0);
    var _triangles = [];
    function _calcInsectedPoints(left, right, bottom, top, center, angle, intersectPoints) {
      var sinAngle = Math.sin(angle);
      var cosAngle = Math.cos(angle);
      var tanAngle, cotAngle;
      if (0 !== Math.cos(angle)) {
        tanAngle = sinAngle / cosAngle;
        if ((left - center.x) * cosAngle > 0) {
          var yleft = center.y + tanAngle * (left - center.x);
          intersectPoints[0].x = left;
          intersectPoints[0].y = yleft;
        }
        if ((right - center.x) * cosAngle > 0) {
          var yright = center.y + tanAngle * (right - center.x);
          intersectPoints[2].x = right;
          intersectPoints[2].y = yright;
        }
      }
      if (0 !== Math.sin(angle)) {
        cotAngle = cosAngle / sinAngle;
        if ((top - center.y) * sinAngle > 0) {
          var xtop = center.x + cotAngle * (top - center.y);
          intersectPoints[3].x = xtop;
          intersectPoints[3].y = top;
        }
        if ((bottom - center.y) * sinAngle > 0) {
          var xbottom = center.x + cotAngle * (bottom - center.y);
          intersectPoints[1].x = xbottom;
          intersectPoints[1].y = bottom;
        }
      }
    }
    function _calculateVertices(sprite) {
      var node = sprite.node, width = node.width, height = node.height, appx = node.anchorX * width, appy = node.anchorY * height;
      var l = -appx, b = -appy, r = width - appx, t = height - appy;
      var vertices = _vertices;
      vertices[0] = l;
      vertices[1] = b;
      vertices[2] = r;
      vertices[3] = t;
      var fillCenter = sprite._fillCenter, cx = _center.x = Math.min(Math.max(0, fillCenter.x), 1) * (r - l) + l, cy = _center.y = Math.min(Math.max(0, fillCenter.y), 1) * (t - b) + b;
      _vertPos[0].x = _vertPos[3].x = l;
      _vertPos[1].x = _vertPos[2].x = r;
      _vertPos[0].y = _vertPos[1].y = b;
      _vertPos[2].y = _vertPos[3].y = t;
      _triangles.length = 0;
      cx !== vertices[0] && (_triangles[0] = [ 3, 0 ]);
      cx !== vertices[2] && (_triangles[2] = [ 1, 2 ]);
      cy !== vertices[1] && (_triangles[1] = [ 0, 1 ]);
      cy !== vertices[3] && (_triangles[3] = [ 2, 3 ]);
    }
    function _calculateUVs(spriteFrame) {
      var atlasWidth = spriteFrame._texture.width;
      var atlasHeight = spriteFrame._texture.height;
      var textureRect = spriteFrame._rect;
      var u0, u1, v0, v1;
      var uvs = _uvs;
      if (spriteFrame._rotated) {
        u0 = textureRect.x / atlasWidth;
        u1 = (textureRect.x + textureRect.height) / atlasWidth;
        v0 = textureRect.y / atlasHeight;
        v1 = (textureRect.y + textureRect.width) / atlasHeight;
        uvs[0] = uvs[2] = u0;
        uvs[4] = uvs[6] = u1;
        uvs[3] = uvs[7] = v1;
        uvs[1] = uvs[5] = v0;
      } else {
        u0 = textureRect.x / atlasWidth;
        u1 = (textureRect.x + textureRect.width) / atlasWidth;
        v0 = textureRect.y / atlasHeight;
        v1 = (textureRect.y + textureRect.height) / atlasHeight;
        uvs[0] = uvs[4] = u0;
        uvs[2] = uvs[6] = u1;
        uvs[1] = uvs[3] = v1;
        uvs[5] = uvs[7] = v0;
      }
    }
    function _getVertAngle(start, end) {
      var placementX, placementY;
      placementX = end.x - start.x;
      placementY = end.y - start.y;
      if (0 === placementX && 0 === placementY) return;
      if (0 === placementX) return placementY > 0 ? .5 * Math.PI : 1.5 * Math.PI;
      var angle = Math.atan(placementY / placementX);
      placementX < 0 && (angle += Math.PI);
      return angle;
    }
    var RadialFilledAssembler = (function(_Assembler2D) {
      _inheritsLoose(RadialFilledAssembler, _Assembler2D);
      function RadialFilledAssembler() {
        return _Assembler2D.apply(this, arguments) || this;
      }
      var _proto = RadialFilledAssembler.prototype;
      _proto.initData = function initData(sprite) {
        this._renderData.createFlexData(0, 4, 6, this.getVfmt());
        this.updateIndices();
      };
      _proto.updateRenderData = function updateRenderData(sprite) {
        _Assembler2D.prototype.updateRenderData.call(this, sprite);
        var frame = sprite.spriteFrame;
        this.packToDynamicAtlas(sprite, frame);
        if (sprite._vertsDirty) {
          var fillStart = sprite._fillStart;
          var fillRange = sprite._fillRange;
          if (fillRange < 0) {
            fillStart += fillRange;
            fillRange = -fillRange;
          }
          while (fillStart >= 1) fillStart -= 1;
          while (fillStart < 0) fillStart += 1;
          fillStart *= PI_2;
          fillRange *= PI_2;
          _calculateVertices(sprite);
          _calculateUVs(frame);
          _calcInsectedPoints(_vertices[0], _vertices[2], _vertices[1], _vertices[3], _center, fillStart, _intersectPoint_1);
          _calcInsectedPoints(_vertices[0], _vertices[2], _vertices[1], _vertices[3], _center, fillStart + fillRange, _intersectPoint_2);
          this.updateVerts(sprite, fillStart, fillRange);
          sprite._vertsDirty = false;
        }
      };
      _proto.updateVerts = function updateVerts(sprite, fillStart, fillRange) {
        var fillEnd = fillStart + fillRange;
        var local = this._local;
        local.length = 0;
        var offset = 0;
        var floatsPerTriangle = 3 * this.floatsPerVert;
        for (var triangleIndex = 0; triangleIndex < 4; ++triangleIndex) {
          var triangle = _triangles[triangleIndex];
          if (!triangle) continue;
          if (fillRange >= PI_2) {
            local.length = offset + floatsPerTriangle;
            this._generateTriangle(local, offset, _center, _vertPos[triangle[0]], _vertPos[triangle[1]]);
            offset += floatsPerTriangle;
            continue;
          }
          var startAngle = _getVertAngle(_center, _vertPos[triangle[0]]);
          var endAngle = _getVertAngle(_center, _vertPos[triangle[1]]);
          endAngle < startAngle && (endAngle += PI_2);
          startAngle -= PI_2;
          endAngle -= PI_2;
          for (var testIndex = 0; testIndex < 3; ++testIndex) {
            if (startAngle >= fillEnd) ; else if (startAngle >= fillStart) {
              local.length = offset + floatsPerTriangle;
              endAngle >= fillEnd ? this._generateTriangle(local, offset, _center, _vertPos[triangle[0]], _intersectPoint_2[triangleIndex]) : this._generateTriangle(local, offset, _center, _vertPos[triangle[0]], _vertPos[triangle[1]]);
              offset += floatsPerTriangle;
            } else if (endAngle <= fillStart) ; else if (endAngle <= fillEnd) {
              local.length = offset + floatsPerTriangle;
              this._generateTriangle(local, offset, _center, _intersectPoint_1[triangleIndex], _vertPos[triangle[1]]);
              offset += floatsPerTriangle;
            } else {
              local.length = offset + floatsPerTriangle;
              this._generateTriangle(local, offset, _center, _intersectPoint_1[triangleIndex], _intersectPoint_2[triangleIndex]);
              offset += floatsPerTriangle;
            }
            startAngle += PI_2;
            endAngle += PI_2;
          }
        }
        this.allocWorldVerts(sprite);
        this.updateWorldVerts(sprite);
      };
      _proto.allocWorldVerts = function allocWorldVerts(sprite) {
        var color = sprite.node._color._val;
        var renderData = this._renderData;
        var floatsPerVert = this.floatsPerVert;
        var local = this._local;
        var verticesCount = local.length / floatsPerVert;
        this.verticesCount = this.indicesCount = verticesCount;
        var flexBuffer = renderData._flexBuffer;
        flexBuffer.reserve(verticesCount, verticesCount) && this.updateIndices();
        flexBuffer.used(this.verticesCount, this.indicesCount);
        var verts = renderData.vDatas[0], uintVerts = renderData.uintVDatas[0];
        var uvOffset = this.uvOffset;
        for (var offset = 0; offset < local.length; offset += floatsPerVert) {
          var start = offset + uvOffset;
          verts[start] = local[start];
          verts[start + 1] = local[start + 1];
          uintVerts[start + 2] = color;
        }
      };
      _proto.updateIndices = function updateIndices() {
        var iData = this._renderData.iDatas[0];
        for (var i = 0; i < iData.length; i++) iData[i] = i;
      };
      _proto.updateWorldVerts = function updateWorldVerts(sprite) {
        var node = sprite.node;
        var matrix = node._worldMatrix;
        var matrixm = matrix.m, a = matrixm[0], b = matrixm[1], c = matrixm[4], d = matrixm[5], tx = matrixm[12], ty = matrixm[13];
        var local = this._local;
        var world = this._renderData.vDatas[0];
        var floatsPerVert = this.floatsPerVert;
        for (var offset = 0; offset < local.length; offset += floatsPerVert) {
          var x = local[offset];
          var y = local[offset + 1];
          world[offset] = x * a + y * c + tx;
          world[offset + 1] = x * b + y * d + ty;
        }
      };
      _proto._generateTriangle = function _generateTriangle(verts, offset, vert0, vert1, vert2) {
        var vertices = _vertices;
        var v0x = vertices[0];
        var v0y = vertices[1];
        var v1x = vertices[2];
        var v1y = vertices[3];
        var floatsPerVert = this.floatsPerVert;
        verts[offset] = vert0.x;
        verts[offset + 1] = vert0.y;
        verts[offset + floatsPerVert] = vert1.x;
        verts[offset + floatsPerVert + 1] = vert1.y;
        verts[offset + 2 * floatsPerVert] = vert2.x;
        verts[offset + 2 * floatsPerVert + 1] = vert2.y;
        var uvOffset = this.uvOffset;
        var progressX, progressY;
        progressX = (vert0.x - v0x) / (v1x - v0x);
        progressY = (vert0.y - v0y) / (v1y - v0y);
        this._generateUV(progressX, progressY, verts, offset + uvOffset);
        progressX = (vert1.x - v0x) / (v1x - v0x);
        progressY = (vert1.y - v0y) / (v1y - v0y);
        this._generateUV(progressX, progressY, verts, offset + floatsPerVert + uvOffset);
        progressX = (vert2.x - v0x) / (v1x - v0x);
        progressY = (vert2.y - v0y) / (v1y - v0y);
        this._generateUV(progressX, progressY, verts, offset + 2 * floatsPerVert + uvOffset);
      };
      _proto._generateUV = function _generateUV(progressX, progressY, verts, offset) {
        var uvs = _uvs;
        var px1 = uvs[0] + (uvs[2] - uvs[0]) * progressX;
        var px2 = uvs[4] + (uvs[6] - uvs[4]) * progressX;
        var py1 = uvs[1] + (uvs[3] - uvs[1]) * progressX;
        var py2 = uvs[5] + (uvs[7] - uvs[5]) * progressX;
        verts[offset] = px1 + (px2 - px1) * progressY;
        verts[offset + 1] = py1 + (py2 - py1) * progressY;
      };
      return RadialFilledAssembler;
    })(_assembler2d["default"]);
    exports["default"] = RadialFilledAssembler;
    module.exports = exports["default"];
  }), {
    "../../../../assembler-2d": 163
  } ],
  188: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _assembler2d = _interopRequireDefault(require("../../../../assembler-2d"));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    function _inheritsLoose(subClass, superClass) {
      subClass.prototype = Object.create(superClass.prototype);
      subClass.prototype.constructor = subClass;
      subClass.__proto__ = superClass;
    }
    var SimpleSpriteAssembler = (function(_Assembler2D) {
      _inheritsLoose(SimpleSpriteAssembler, _Assembler2D);
      function SimpleSpriteAssembler() {
        return _Assembler2D.apply(this, arguments) || this;
      }
      var _proto = SimpleSpriteAssembler.prototype;
      _proto.updateRenderData = function updateRenderData(sprite) {
        this.packToDynamicAtlas(sprite, sprite._spriteFrame);
        if (sprite._vertsDirty) {
          this.updateUVs(sprite);
          this.updateVerts(sprite);
          sprite._vertsDirty = false;
        }
      };
      _proto.updateUVs = function updateUVs(sprite) {
        var uv = sprite._spriteFrame.uv;
        var uvOffset = this.uvOffset;
        var floatsPerVert = this.floatsPerVert;
        var verts = this._renderData.vDatas[0];
        for (var i = 0; i < 4; i++) {
          var srcOffset = 2 * i;
          var dstOffset = floatsPerVert * i + uvOffset;
          verts[dstOffset] = uv[srcOffset];
          verts[dstOffset + 1] = uv[srcOffset + 1];
        }
      };
      _proto.updateVerts = function updateVerts(sprite) {
        var node = sprite.node, cw = node.width, ch = node.height, appx = node.anchorX * cw, appy = node.anchorY * ch, l, b, r, t;
        if (sprite.trim) {
          l = -appx;
          b = -appy;
          r = cw - appx;
          t = ch - appy;
        } else {
          var frame = sprite.spriteFrame, ow = frame._originalSize.width, oh = frame._originalSize.height, rw = frame._rect.width, rh = frame._rect.height, offset = frame._offset, scaleX = cw / ow, scaleY = ch / oh;
          var trimLeft = offset.x + (ow - rw) / 2;
          var trimRight = offset.x - (ow - rw) / 2;
          var trimBottom = offset.y + (oh - rh) / 2;
          var trimTop = offset.y - (oh - rh) / 2;
          l = trimLeft * scaleX - appx;
          b = trimBottom * scaleY - appy;
          r = cw + trimRight * scaleX - appx;
          t = ch + trimTop * scaleY - appy;
        }
        var local = this._local;
        local[0] = l;
        local[1] = b;
        local[2] = r;
        local[3] = t;
        this.updateWorldVerts(sprite);
      };
      return SimpleSpriteAssembler;
    })(_assembler2d["default"]);
    exports["default"] = SimpleSpriteAssembler;
    module.exports = exports["default"];
  }), {
    "../../../../assembler-2d": 163
  } ],
  189: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _assembler2d = _interopRequireDefault(require("../../../../assembler-2d"));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    function _inheritsLoose(subClass, superClass) {
      subClass.prototype = Object.create(superClass.prototype);
      subClass.prototype.constructor = subClass;
      subClass.__proto__ = superClass;
    }
    var SlicedAssembler = (function(_Assembler2D) {
      _inheritsLoose(SlicedAssembler, _Assembler2D);
      function SlicedAssembler() {
        return _Assembler2D.apply(this, arguments) || this;
      }
      var _proto = SlicedAssembler.prototype;
      _proto.initData = function initData(sprite) {
        if (this._renderData.meshCount > 0) return;
        this._renderData.createData(0, this.verticesFloats, this.indicesCount);
        var indices = this._renderData.iDatas[0];
        var indexOffset = 0;
        for (var r = 0; r < 3; ++r) for (var c = 0; c < 3; ++c) {
          var start = 4 * r + c;
          indices[indexOffset++] = start;
          indices[indexOffset++] = start + 1;
          indices[indexOffset++] = start + 4;
          indices[indexOffset++] = start + 1;
          indices[indexOffset++] = start + 5;
          indices[indexOffset++] = start + 4;
        }
      };
      _proto.initLocal = function initLocal() {
        this._local = [];
        this._local.length = 8;
      };
      _proto.updateRenderData = function updateRenderData(sprite) {
        var frame = sprite._spriteFrame;
        this.packToDynamicAtlas(sprite, frame);
        if (sprite._vertsDirty) {
          this.updateUVs(sprite);
          this.updateVerts(sprite);
          sprite._vertsDirty = false;
        }
      };
      _proto.updateVerts = function updateVerts(sprite) {
        var node = sprite.node, width = node.width, height = node.height, appx = node.anchorX * width, appy = node.anchorY * height;
        var frame = sprite.spriteFrame;
        var leftWidth = frame.insetLeft;
        var rightWidth = frame.insetRight;
        var topHeight = frame.insetTop;
        var bottomHeight = frame.insetBottom;
        var sizableWidth = width - leftWidth - rightWidth;
        var sizableHeight = height - topHeight - bottomHeight;
        var xScale = width / (leftWidth + rightWidth);
        var yScale = height / (topHeight + bottomHeight);
        xScale = isNaN(xScale) || xScale > 1 ? 1 : xScale;
        yScale = isNaN(yScale) || yScale > 1 ? 1 : yScale;
        sizableWidth = sizableWidth < 0 ? 0 : sizableWidth;
        sizableHeight = sizableHeight < 0 ? 0 : sizableHeight;
        var local = this._local;
        local[0] = -appx;
        local[1] = -appy;
        local[2] = leftWidth * xScale - appx;
        local[3] = bottomHeight * yScale - appy;
        local[4] = local[2] + sizableWidth;
        local[5] = local[3] + sizableHeight;
        local[6] = width - appx;
        local[7] = height - appy;
        this.updateWorldVerts(sprite);
      };
      _proto.updateUVs = function updateUVs(sprite) {
        var verts = this._renderData.vDatas[0];
        var uvSliced = sprite.spriteFrame.uvSliced;
        var uvOffset = this.uvOffset;
        var floatsPerVert = this.floatsPerVert;
        for (var row = 0; row < 4; ++row) for (var col = 0; col < 4; ++col) {
          var vid = 4 * row + col;
          var uv = uvSliced[vid];
          var voffset = vid * floatsPerVert;
          verts[voffset + uvOffset] = uv.u;
          verts[voffset + uvOffset + 1] = uv.v;
        }
      };
      _proto.updateWorldVerts = function updateWorldVerts(sprite) {
        var matrix = sprite.node._worldMatrix;
        var matrixm = matrix.m, a = matrixm[0], b = matrixm[1], c = matrixm[4], d = matrixm[5], tx = matrixm[12], ty = matrixm[13];
        var local = this._local;
        var world = this._renderData.vDatas[0];
        var floatsPerVert = this.floatsPerVert;
        for (var row = 0; row < 4; ++row) {
          var localRowY = local[2 * row + 1];
          for (var col = 0; col < 4; ++col) {
            var localColX = local[2 * col];
            var worldIndex = (4 * row + col) * floatsPerVert;
            world[worldIndex] = localColX * a + localRowY * c + tx;
            world[worldIndex + 1] = localColX * b + localRowY * d + ty;
          }
        }
      };
      return SlicedAssembler;
    })(_assembler2d["default"]);
    exports["default"] = SlicedAssembler;
    Object.assign(SlicedAssembler.prototype, {
      verticesCount: 16,
      indicesCount: 54
    });
    module.exports = exports["default"];
  }), {
    "../../../../assembler-2d": 163
  } ],
  190: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _assembler2d = _interopRequireDefault(require("../../../../assembler-2d"));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    function _inheritsLoose(subClass, superClass) {
      subClass.prototype = Object.create(superClass.prototype);
      subClass.prototype.constructor = subClass;
      subClass.__proto__ = superClass;
    }
    var TiledAssembler = (function(_Assembler2D) {
      _inheritsLoose(TiledAssembler, _Assembler2D);
      function TiledAssembler() {
        return _Assembler2D.apply(this, arguments) || this;
      }
      var _proto = TiledAssembler.prototype;
      _proto.initData = function initData(sprite) {
        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();
      };
      _proto.initLocal = function initLocal() {
        this._local = {
          x: [],
          y: []
        };
      };
      _proto._updateIndices = function _updateIndices() {
        var iData = this._renderData.iDatas[0];
        for (var i = 0, vid = 0, l = iData.length; i < l; i += 6, vid += 4) {
          iData[i] = vid;
          iData[i + 1] = vid + 1;
          iData[i + 2] = vid + 2;
          iData[i + 3] = vid + 1;
          iData[i + 4] = vid + 3;
          iData[i + 5] = vid + 2;
        }
      };
      _proto.updateRenderData = function updateRenderData(sprite) {
        var frame = sprite._spriteFrame;
        this.packToDynamicAtlas(sprite, frame);
        var node = sprite.node;
        var contentWidth = this.contentWidth = Math.abs(node.width);
        var contentHeight = this.contentHeight = Math.abs(node.height);
        var rect = frame._rect;
        var leftWidth = frame.insetLeft, rightWidth = frame.insetRight, centerWidth = rect.width - leftWidth - rightWidth, topHeight = frame.insetTop, bottomHeight = frame.insetBottom, centerHeight = rect.height - topHeight - bottomHeight;
        this.sizableWidth = contentWidth - leftWidth - rightWidth;
        this.sizableHeight = contentHeight - topHeight - bottomHeight;
        this.sizableWidth = this.sizableWidth > 0 ? this.sizableWidth : 0;
        this.sizableHeight = this.sizableHeight > 0 ? this.sizableHeight : 0;
        var hRepeat = this.hRepeat = 0 === centerWidth ? this.sizableWidth : this.sizableWidth / centerWidth;
        var vRepeat = this.vRepeat = 0 === centerHeight ? this.sizableHeight : this.sizableHeight / centerHeight;
        var row = this.row = Math.ceil(vRepeat + 2);
        var col = this.col = Math.ceil(hRepeat + 2);
        var count = row * col;
        this.verticesCount = 4 * count;
        this.indicesCount = 6 * count;
        var renderData = this._renderData;
        var flexBuffer = renderData._flexBuffer;
        if (flexBuffer.reserve(this.verticesCount, this.indicesCount)) {
          this._updateIndices();
          this.updateColor(sprite);
        }
        flexBuffer.used(this.verticesCount, this.indicesCount);
        if (sprite._vertsDirty) {
          this.updateUVs(sprite);
          this.updateVerts(sprite);
          sprite._vertsDirty = false;
        }
      };
      _proto.updateVerts = function updateVerts(sprite) {
        var frame = sprite._spriteFrame;
        var rect = frame._rect;
        var node = sprite.node, appx = node.anchorX * node.width, appy = node.anchorY * node.height;
        var row = this.row, col = this.col, contentWidth = this.contentWidth, contentHeight = this.contentHeight;
        var _this$_local = this._local, x = _this$_local.x, y = _this$_local.y;
        x.length = y.length = 0;
        var leftWidth = frame.insetLeft, rightWidth = frame.insetRight, centerWidth = rect.width - leftWidth - rightWidth, topHeight = frame.insetTop, bottomHeight = frame.insetBottom, centerHeight = rect.height - topHeight - bottomHeight;
        var xScale = node.width / (leftWidth + rightWidth) > 1 ? 1 : node.width / (leftWidth + rightWidth);
        var yScale = node.height / (topHeight + bottomHeight) > 1 ? 1 : node.height / (topHeight + bottomHeight);
        var offsetWidth = 0, offsetHeight = 0;
        offsetWidth = centerWidth > 0 ? Math.floor(1e3 * this.sizableWidth) / 1e3 % centerWidth === 0 ? centerWidth : this.sizableWidth % centerWidth : this.sizableWidth;
        offsetHeight = centerHeight > 0 ? Math.floor(1e3 * this.sizableHeight) / 1e3 % centerHeight === 0 ? centerHeight : this.sizableHeight % centerHeight : this.sizableHeight;
        for (var i = 0; i <= col; i++) 0 === i ? x[i] = -appx : i > 0 && i < col ? x[i] = 1 === i ? leftWidth * xScale + Math.min(centerWidth, this.sizableWidth) - appx : centerWidth > 0 ? i === col - 1 ? leftWidth + offsetWidth + centerWidth * (i - 2) - appx : leftWidth + Math.min(centerWidth, this.sizableWidth) + centerWidth * (i - 2) - appx : leftWidth + this.sizableWidth - appx : i === col && (x[i] = Math.min(leftWidth + this.sizableWidth + rightWidth, contentWidth) - appx);
        for (var _i = 0; _i <= row; _i++) 0 === _i ? y[_i] = -appy : _i > 0 && _i < row ? y[_i] = 1 === _i ? bottomHeight * yScale + Math.min(centerHeight, this.sizableHeight) - appy : centerHeight > 0 ? _i === row - 1 ? bottomHeight + offsetHeight + (_i - 2) * centerHeight - appy : bottomHeight + Math.min(centerHeight, this.sizableHeight) + (_i - 2) * centerHeight - appy : bottomHeight + this.sizableHeight - appy : _i === row && (y[_i] = Math.min(bottomHeight + this.sizableHeight + topHeight, contentHeight) - appy);
        this.updateWorldVerts(sprite);
      };
      _proto.updateWorldVerts = function updateWorldVerts(sprite) {
        var renderData = this._renderData;
        var local = this._local;
        var localX = local.x, localY = local.y;
        var world = renderData.vDatas[0];
        var row = this.row, col = this.col;
        var matrix = sprite.node._worldMatrix;
        var matrixm = matrix.m;
        var a = matrixm[0], b = matrixm[1], c = matrixm[4], d = matrixm[5], tx = matrixm[12], ty = matrixm[13];
        var x, x1, y, y1;
        var floatsPerVert = this.floatsPerVert;
        var vertexOffset = 0;
        for (var yindex = 0, ylength = row; yindex < ylength; ++yindex) {
          y = localY[yindex];
          y1 = localY[yindex + 1];
          for (var xindex = 0, xlength = col; xindex < xlength; ++xindex) {
            x = localX[xindex];
            x1 = localX[xindex + 1];
            world[vertexOffset] = x * a + y * c + tx;
            world[vertexOffset + 1] = x * b + y * d + ty;
            vertexOffset += floatsPerVert;
            world[vertexOffset] = x1 * a + y * c + tx;
            world[vertexOffset + 1] = x1 * b + y * d + ty;
            vertexOffset += floatsPerVert;
            world[vertexOffset] = x * a + y1 * c + tx;
            world[vertexOffset + 1] = x * b + y1 * d + ty;
            vertexOffset += floatsPerVert;
            world[vertexOffset] = x1 * a + y1 * c + tx;
            world[vertexOffset + 1] = x1 * b + y1 * d + ty;
            vertexOffset += floatsPerVert;
          }
        }
      };
      _proto.updateUVs = function updateUVs(sprite) {
        var verts = this._renderData.vDatas[0];
        if (!verts) return;
        var frame = sprite._spriteFrame;
        var rect = frame._rect;
        var leftWidth = frame.insetLeft, rightWidth = frame.insetRight, centerWidth = rect.width - leftWidth - rightWidth, topHeight = frame.insetTop, bottomHeight = frame.insetBottom, centerHeight = rect.height - topHeight - bottomHeight;
        var row = this.row, col = this.col, hRepeat = this.hRepeat, vRepeat = this.vRepeat;
        var coefu = 0, coefv = 0;
        var uv = sprite.spriteFrame.uv;
        var uvSliced = sprite.spriteFrame.uvSliced;
        var rotated = sprite.spriteFrame._rotated;
        var floatsPerVert = this.floatsPerVert, uvOffset = this.uvOffset;
        for (var yindex = 0, ylength = row; yindex < ylength; ++yindex) {
          coefv = this.sizableHeight > centerHeight ? this.sizableHeight >= yindex * centerHeight ? 1 : vRepeat % 1 : vRepeat;
          for (var xindex = 0, xlength = col; xindex < xlength; ++xindex) {
            coefu = this.sizableWidth > centerWidth ? this.sizableWidth >= xindex * centerWidth ? 1 : hRepeat % 1 : hRepeat;
            if (rotated) {
              verts[uvOffset] = uv[0];
              verts[uvOffset + 1] = uv[1];
              uvOffset += floatsPerVert;
              verts[uvOffset] = uv[0];
              verts[uvOffset + 1] = uv[1] + (uv[7] - uv[1]) * coefu;
              uvOffset += floatsPerVert;
              verts[uvOffset] = uv[0] + (uv[6] - uv[0]) * coefv;
              verts[uvOffset + 1] = uv[1];
              uvOffset += floatsPerVert;
              verts[uvOffset] = verts[uvOffset - floatsPerVert];
              verts[uvOffset + 1] = verts[uvOffset + 1 - 2 * floatsPerVert];
              uvOffset += floatsPerVert;
            } else {
              0 === xindex ? verts[uvOffset] = uv[0] : xindex > 0 && xindex < col - 1 ? verts[uvOffset] = uvSliced[1].u : xindex === col - 1 && (verts[uvOffset] = uvSliced[2].u);
              0 === yindex ? verts[uvOffset + 1] = uvSliced[0].v : yindex > 0 && yindex < row - 1 ? verts[uvOffset + 1] = uvSliced[4].v : yindex === row - 1 && (verts[uvOffset + 1] = uvSliced[8].v);
              uvOffset += floatsPerVert;
              0 === xindex ? verts[uvOffset] = uvSliced[1].u + (uvSliced[2].u - uvSliced[1].u) * coefu : xindex > 0 && xindex < col - 1 ? verts[uvOffset] = uvSliced[1].u + (uvSliced[2].u - uvSliced[1].u) * coefu : xindex === col - 1 && (verts[uvOffset] = uvSliced[3].u);
              0 === yindex ? verts[uvOffset + 1] = uvSliced[0].v : yindex > 0 && yindex < row - 1 ? verts[uvOffset + 1] = uvSliced[4].v : yindex === row - 1 && (verts[uvOffset + 1] = uvSliced[8].v);
              uvOffset += floatsPerVert;
              0 === xindex ? verts[uvOffset] = uv[0] : xindex > 0 && xindex < col - 1 ? verts[uvOffset] = uvSliced[1].u : xindex === col - 1 && (verts[uvOffset] = uvSliced[2].u);
              0 === yindex ? verts[uvOffset + 1] = uvSliced[4].v + (uvSliced[8].v - uvSliced[4].v) * coefv : yindex > 0 && yindex < row - 1 ? verts[uvOffset + 1] = uvSliced[4].v + (uvSliced[8].v - uvSliced[4].v) * coefv : yindex === row - 1 && (verts[uvOffset + 1] = uvSliced[12].v);
              uvOffset += floatsPerVert;
              verts[uvOffset] = verts[uvOffset - 2 * floatsPerVert];
              verts[uvOffset + 1] = verts[uvOffset + 1 - floatsPerVert];
              uvOffset += floatsPerVert;
            }
          }
        }
      };
      return TiledAssembler;
    })(_assembler2d["default"]);
    exports["default"] = TiledAssembler;
    module.exports = exports["default"];
  }), {
    "../../../../assembler-2d": 163
  } ],
  191: [ (function(require, module, exports) {
    "use strict";
    var _assembler = _interopRequireDefault(require("../../../assembler"));
    var _CCSprite = require("../../../../components/CCSprite");
    var _simple = _interopRequireDefault(require("./2d/simple"));
    var _sliced = _interopRequireDefault(require("./2d/sliced"));
    var _tiled = _interopRequireDefault(require("./2d/tiled"));
    var _radialFilled = _interopRequireDefault(require("./2d/radial-filled"));
    var _barFilled = _interopRequireDefault(require("./2d/bar-filled"));
    var _mesh = _interopRequireDefault(require("./2d/mesh"));
    var _simple2 = _interopRequireDefault(require("./3d/simple"));
    var _sliced2 = _interopRequireDefault(require("./3d/sliced"));
    var _tiled2 = _interopRequireDefault(require("./3d/tiled"));
    var _radialFilled2 = _interopRequireDefault(require("./3d/radial-filled"));
    var _barFilled2 = _interopRequireDefault(require("./3d/bar-filled"));
    var _mesh2 = _interopRequireDefault(require("./3d/mesh"));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    var ctor = {
      getConstructor: function getConstructor(sprite) {
        var is3DNode = sprite.node.is3DNode;
        var ctor = is3DNode ? _simple2["default"] : _simple["default"];
        switch (sprite.type) {
         case _CCSprite.Type.SLICED:
          ctor = is3DNode ? _sliced2["default"] : _sliced["default"];
          break;

         case _CCSprite.Type.TILED:
          ctor = is3DNode ? _tiled2["default"] : _tiled["default"];
          break;

         case _CCSprite.Type.FILLED:
          ctor = sprite._fillType === _CCSprite.FillType.RADIAL ? is3DNode ? _radialFilled2["default"] : _radialFilled["default"] : is3DNode ? _barFilled2["default"] : _barFilled["default"];
          break;

         case _CCSprite.Type.MESH:
          ctor = is3DNode ? _mesh2["default"] : _mesh["default"];
        }
        return ctor;
      },
      Simple: _simple["default"],
      Sliced: _sliced["default"],
      Tiled: _tiled["default"],
      RadialFilled: _radialFilled["default"],
      BarFilled: _barFilled["default"],
      Mesh: _mesh["default"],
      Simple3D: _simple2["default"],
      Sliced3D: _sliced2["default"],
      Tiled3D: _tiled2["default"],
      RadialFilled3D: _radialFilled2["default"],
      BarFilled3D: _barFilled2["default"],
      Mesh3D: _mesh2["default"]
    };
    _assembler["default"].register(cc.Sprite, ctor);
  }), {
    "../../../../components/CCSprite": 106,
    "../../../assembler": 165,
    "./2d/bar-filled": 185,
    "./2d/mesh": 186,
    "./2d/radial-filled": 187,
    "./2d/simple": 188,
    "./2d/sliced": 189,
    "./2d/tiled": 190,
    "./3d/bar-filled": void 0,
    "./3d/mesh": void 0,
    "./3d/radial-filled": void 0,
    "./3d/simple": void 0,
    "./3d/sliced": void 0,
    "./3d/tiled": void 0
  } ],
  192: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var FlexBuffer = (function() {
      function FlexBuffer(handler, index, verticesCount, indicesCount, vfmt) {
        this._handler = handler;
        this._index = index;
        this._vfmt = vfmt;
        this._verticesBytes = vfmt._bytes;
        this._initVerticesCount = verticesCount;
        this._initIndicesCount = indicesCount;
        this.reset();
      }
      var _proto = FlexBuffer.prototype;
      _proto._reallocVData = function _reallocVData(floatsCount, oldData) {
        this.vData = new Float32Array(floatsCount);
        this.uintVData = new Uint32Array(this.vData.buffer);
        oldData && this.vData.set(oldData);
        this._handler.updateMesh(this._index, this.vData, this.iData);
      };
      _proto._reallocIData = function _reallocIData(indicesCount, oldData) {
        this.iData = new Uint16Array(indicesCount);
        oldData && this.iData.set(oldData);
        this._handler.updateMesh(this._index, this.vData, this.iData);
      };
      _proto.reserve = function reserve(verticesCount, indicesCount) {
        var floatsCount = verticesCount * this._verticesBytes >> 2;
        var newFloatsCount = this.vData.length;
        var realloced = false;
        if (floatsCount > newFloatsCount) {
          while (newFloatsCount < floatsCount) newFloatsCount *= 2;
          this._reallocVData(newFloatsCount, this.vData);
          realloced = true;
        }
        var newIndicesCount = this.iData.length;
        if (indicesCount > newIndicesCount) {
          while (newIndicesCount < indicesCount) newIndicesCount *= 2;
          this._reallocIData(indicesCount, this.iData);
          realloced = true;
        }
        return realloced;
      };
      _proto.used = function used(verticesCount, indicesCount) {
        this.usedVertices = verticesCount;
        this.usedIndices = indicesCount;
        this.usedVerticesFloats = verticesCount * this._verticesBytes >> 2;
        this._handler.updateMeshRange(verticesCount, indicesCount);
      };
      _proto.reset = function reset() {
        var floatsCount = this._initVerticesCount * this._verticesBytes >> 2;
        this._reallocVData(floatsCount);
        this._reallocIData(this._initIndicesCount);
        this.usedVertices = 0;
        this.usedVerticesFloats = 0;
        this.usedIndices = 0;
      };
      return FlexBuffer;
    })();
    exports["default"] = FlexBuffer;
    cc.FlexBuffer = FlexBuffer;
    module.exports = exports["default"];
  }), {} ],
  193: [ (function(require, module, exports) {
    "use strict";
    var _gfx = _interopRequireDefault(require("../../../renderer/gfx"));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    var MeshBuffer = cc.Class({
      name: "cc.MeshBuffer",
      ctor: function ctor(batcher, vertexFormat) {
        this.init(batcher, vertexFormat);
      },
      init: function init(batcher, vertexFormat) {
        this.byteOffset = 0;
        this.indiceOffset = 0;
        this.vertexOffset = 0;
        this.indiceStart = 0;
        this._dirty = false;
        this._vertexFormat = vertexFormat;
        this._vertexBytes = this._vertexFormat._bytes;
        this._arrOffset = 0;
        this._vbArr = [];
        this._vb = new _gfx["default"].VertexBuffer(batcher._device, vertexFormat, _gfx["default"].USAGE_DYNAMIC, new ArrayBuffer(), 0);
        this._vbArr[0] = this._vb;
        this._ibArr = [];
        this._ib = new _gfx["default"].IndexBuffer(batcher._device, _gfx["default"].INDEX_FMT_UINT16, _gfx["default"].USAGE_STATIC, new ArrayBuffer(), 0);
        this._ibArr[0] = this._ib;
        this._vData = null;
        this._uintVData = null;
        this._iData = null;
        this._batcher = batcher;
        this._initVDataCount = 256 * vertexFormat._bytes;
        this._initIDataCount = 1536;
        this._offsetInfo = {
          byteOffset: 0,
          vertexOffset: 0,
          indiceOffset: 0
        };
        this._reallocBuffer();
      },
      uploadData: function uploadData() {
        if (0 === this.byteOffset || !this._dirty) return;
        var vertexsData = new Float32Array(this._vData.buffer, 0, this.byteOffset >> 2);
        var indicesData = new Uint16Array(this._iData.buffer, 0, this.indiceOffset);
        var vb = this._vb;
        vb.update(0, vertexsData);
        var ib = this._ib;
        ib.update(0, indicesData);
        this._dirty = false;
      },
      switchBuffer: function switchBuffer() {
        var offset = ++this._arrOffset;
        this.byteOffset = 0;
        this.vertexOffset = 0;
        this.indiceOffset = 0;
        this.indiceStart = 0;
        if (offset < this._vbArr.length) {
          this._vb = this._vbArr[offset];
          this._ib = this._ibArr[offset];
        } else {
          this._vb = new _gfx["default"].VertexBuffer(this._batcher._device, this._vertexFormat, _gfx["default"].USAGE_DYNAMIC, new ArrayBuffer(), 0);
          this._vbArr[offset] = this._vb;
          this._ib = new _gfx["default"].IndexBuffer(this._batcher._device, _gfx["default"].INDEX_FMT_UINT16, _gfx["default"].USAGE_STATIC, new ArrayBuffer(), 0);
          this._ibArr[offset] = this._ib;
        }
      },
      checkAndSwitchBuffer: function checkAndSwitchBuffer(vertexCount) {
        if (this.vertexOffset + vertexCount > 65535) {
          this.uploadData();
          this._batcher._flush();
          this.switchBuffer();
        }
      },
      requestStatic: function requestStatic(vertexCount, indiceCount) {
        this.checkAndSwitchBuffer(vertexCount);
        var byteOffset = this.byteOffset + vertexCount * this._vertexBytes;
        var indiceOffset = this.indiceOffset + indiceCount;
        var byteLength = this._vData.byteLength;
        var indiceLength = this._iData.length;
        if (byteOffset > byteLength || indiceOffset > indiceLength) {
          while (byteLength < byteOffset || indiceLength < indiceOffset) {
            this._initVDataCount *= 2;
            this._initIDataCount *= 2;
            byteLength = 4 * this._initVDataCount;
            indiceLength = this._initIDataCount;
          }
          this._reallocBuffer();
        }
        this._updateOffset(vertexCount, indiceCount, byteOffset);
      },
      _updateOffset: function _updateOffset(vertexCount, indiceCount, byteOffset) {
        var offsetInfo = this._offsetInfo;
        offsetInfo.vertexOffset = this.vertexOffset;
        this.vertexOffset += vertexCount;
        offsetInfo.indiceOffset = this.indiceOffset;
        this.indiceOffset += indiceCount;
        offsetInfo.byteOffset = this.byteOffset;
        this.byteOffset = byteOffset;
        this._dirty = true;
      },
      request: function request(vertexCount, indiceCount) {
        if (this._batcher._buffer !== this) {
          this._batcher._flush();
          this._batcher._buffer = this;
        }
        this.requestStatic(vertexCount, indiceCount);
        return this._offsetInfo;
      },
      _reallocBuffer: function _reallocBuffer() {
        this._reallocVData(true);
        this._reallocIData(true);
      },
      _reallocVData: function _reallocVData(copyOldData) {
        var oldVData;
        this._vData && (oldVData = new Uint8Array(this._vData.buffer));
        this._vData = new Float32Array(this._initVDataCount);
        this._uintVData = new Uint32Array(this._vData.buffer);
        var newData = new Uint8Array(this._uintVData.buffer);
        if (oldVData && copyOldData) for (var i = 0, l = oldVData.length; i < l; i++) newData[i] = oldVData[i];
      },
      _reallocIData: function _reallocIData(copyOldData) {
        var oldIData = this._iData;
        this._iData = new Uint16Array(this._initIDataCount);
        if (oldIData && copyOldData) {
          var iData = this._iData;
          for (var i = 0, l = oldIData.length; i < l; i++) iData[i] = oldIData[i];
        }
      },
      reset: function reset() {
        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 = false;
      },
      destroy: function destroy() {
        this.reset();
        for (var i = 0; i < this._vbArr.length; i++) {
          var vb = this._vbArr[i];
          vb.destroy();
        }
        this._vbArr = null;
        for (var _i = 0; _i < this._ibArr.length; _i++) {
          var ib = this._ibArr[_i];
          ib.destroy();
        }
        this._ibArr = null;
        this._ib = null;
        this._vb = null;
      },
      forwardIndiceStartToOffset: function forwardIndiceStartToOffset() {
        this.indiceStart = this.indiceOffset;
      }
    });
    cc.MeshBuffer = module.exports = MeshBuffer;
  }), {
    "../../../renderer/gfx": 251
  } ],
  194: [ (function(require, module, exports) {
    "use strict";
    var _inputAssembler = _interopRequireDefault(require("../../../renderer/core/input-assembler"));
    var _recyclePool = _interopRequireDefault(require("../../../renderer/memop/recycle-pool"));
    var _model = _interopRequireDefault(require("../../../renderer/scene/model"));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    var _require = require("./vertex-format"), vfmtPosUvColor = _require.vfmtPosUvColor, vfmt3D = _require.vfmt3D;
    var QuadBuffer = require("./quad-buffer");
    var MeshBuffer = require("./mesh-buffer");
    var SpineBuffer = require("./spine-buffer");
    var Material = require("../../assets/material/CCMaterial");
    var idGenerater = new (require("../../platform/id-generater"))("VertextFormat");
    var _buffers = {};
    var empty_material = new Material();
    var empty_ia = new _inputAssembler["default"]();
    empty_ia._count = 0;
    var ModelBatcher = function ModelBatcher(device, renderScene) {
      this._renderScene = renderScene;
      this._device = device;
      this.walking = false;
      this.material = empty_material;
      this.cullingMask = 1;
      this._iaPool = new _recyclePool["default"](function() {
        return new _inputAssembler["default"]();
      }, 16);
      this._modelPool = new _recyclePool["default"](function() {
        return new _model["default"]();
      }, 16);
      this._quadBuffer = this.getBuffer("quad", vfmtPosUvColor);
      this._meshBuffer = this.getBuffer("mesh", vfmtPosUvColor);
      this._quadBuffer3D = this.getBuffer("quad", vfmt3D);
      this._meshBuffer3D = this.getBuffer("mesh", vfmt3D);
      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;
    };
    ModelBatcher.prototype = {
      constructor: ModelBatcher,
      reset: function reset() {
        this._iaPool.reset();
        var scene = this._renderScene;
        var models = this._batchedModels;
        for (var i = 0; i < models.length; ++i) {
          models[i].setInputAssembler(null);
          models[i].setEffect(null);
          scene.removeModel(models[i]);
        }
        this._modelPool.reset();
        models.length = 0;
        this._sortKey = 0;
        for (var key in _buffers) _buffers[key].reset();
        this._buffer = this._meshBuffer;
        this.node = this._dummyNode;
        this.material = empty_material;
        this.cullingMask = 1;
        this.parentOpacity = 1;
        this.parentOpacityDirty = 0;
        this.worldMatDirty = 0;
      },
      _flushMaterial: function _flushMaterial(material) {
        if (!material) return;
        this.material = material;
        var effect = material.effect;
        if (!effect) return;
        var model = this._modelPool.add();
        this._batchedModels.push(model);
        model.sortKey = this._sortKey++;
        model._cullingMask = this.cullingMask;
        model.setNode(this.node);
        model.setEffect(effect, null);
        model.setInputAssembler(empty_ia);
        this._renderScene.addModel(model);
      },
      _flush: function _flush() {
        var material = this.material, buffer = this._buffer, indiceCount = buffer.indiceOffset - buffer.indiceStart;
        if (!this.walking || !material || indiceCount <= 0) return;
        var effect = material.effect;
        if (!effect) return;
        var ia = this._iaPool.add();
        ia._vertexBuffer = buffer._vb;
        ia._indexBuffer = buffer._ib;
        ia._start = buffer.indiceStart;
        ia._count = indiceCount;
        var model = this._modelPool.add();
        this._batchedModels.push(model);
        model.sortKey = this._sortKey++;
        model._cullingMask = this.cullingMask;
        model.setNode(this.node);
        model.setEffect(effect);
        model.setInputAssembler(ia);
        this._renderScene.addModel(model);
        buffer.forwardIndiceStartToOffset();
      },
      _flushIA: function _flushIA(ia) {
        if (!ia) return;
        var material = this.material;
        var effect = material.effect;
        if (!effect) return;
        var model = this._modelPool.add();
        this._batchedModels.push(model);
        model.sortKey = this._sortKey++;
        model._cullingMask = this.cullingMask;
        model.setNode(this.node);
        model.setEffect(effect);
        model.setInputAssembler(ia);
        this._renderScene.addModel(model);
      },
      terminate: function terminate() {
        cc.dynamicAtlasManager && cc.dynamicAtlasManager.enabled && cc.dynamicAtlasManager.update();
        this._flush();
        for (var key in _buffers) _buffers[key].uploadData();
        this.walking = false;
      },
      getBuffer: function getBuffer(type, vertextFormat) {
        var key = type + vertextFormat.getHash();
        var buffer = _buffers[key];
        if (!buffer) {
          if ("mesh" === type) buffer = new MeshBuffer(this, vertextFormat); else if ("quad" === type) buffer = new QuadBuffer(this, vertextFormat); else {
            if ("spine" !== type) {
              cc.error("Not support buffer type [" + type + "]");
              return null;
            }
            buffer = new SpineBuffer(this, vertextFormat);
          }
          _buffers[key] = buffer;
        }
        return buffer;
      }
    };
    module.exports = ModelBatcher;
  }), {
    "../../../renderer/core/input-assembler": 241,
    "../../../renderer/memop/recycle-pool": 266,
    "../../../renderer/scene/model": 272,
    "../../assets/material/CCMaterial": 77,
    "../../platform/id-generater": 154,
    "./mesh-buffer": 193,
    "./quad-buffer": 195,
    "./spine-buffer": 197,
    "./vertex-format": 198
  } ],
  195: [ (function(require, module, exports) {
    "use strict";
    var MeshBuffer = require("./mesh-buffer");
    var QuadBuffer = cc.Class({
      name: "cc.QuadBuffer",
      extends: MeshBuffer,
      _fillQuadBuffer: function _fillQuadBuffer() {
        var count = this._initIDataCount / 6;
        var buffer = this._iData;
        for (var i = 0, idx = 0; i < count; i++) {
          var vertextID = 4 * i;
          buffer[idx++] = vertextID;
          buffer[idx++] = vertextID + 1;
          buffer[idx++] = vertextID + 2;
          buffer[idx++] = vertextID + 1;
          buffer[idx++] = vertextID + 3;
          buffer[idx++] = vertextID + 2;
        }
        var indicesData = new Uint16Array(this._iData.buffer, 0, 6 * count);
        this._ib.update(0, indicesData);
      },
      uploadData: function uploadData() {
        if (0 === this.byteOffset || !this._dirty) return;
        var vertexsData = new Float32Array(this._vData.buffer, 0, this.byteOffset >> 2);
        this._vb.update(0, vertexsData);
        this._dirty = false;
      },
      switchBuffer: function switchBuffer() {
        this._super();
        var indicesData = new Uint16Array(this._iData.buffer, 0, this._initIDataCount);
        this._ib.update(0, indicesData);
      },
      _reallocBuffer: function _reallocBuffer() {
        this._reallocVData(true);
        this._reallocIData();
        this._fillQuadBuffer();
      }
    });
    cc.QuadBuffer = module.exports = QuadBuffer;
  }), {
    "./mesh-buffer": 193
  } ],
  196: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = RenderData;
    var _flexBuffer = _interopRequireDefault(require("./flex-buffer"));
    var _vertexFormat = require("./vertex-format");
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    function RenderData() {
      this.vDatas = [];
      this.uintVDatas = [];
      this.iDatas = [];
      this.meshCount = 0;
      this._infos = null;
      this._flexBuffer = null;
    }
    cc.js.mixin(RenderData.prototype, {
      init: function init(assembler) {},
      clear: function clear() {
        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 updateMesh(index, vertices, indices) {
        this.vDatas[index] = vertices;
        this.uintVDatas[index] = new Uint32Array(vertices.buffer, 0, vertices.length);
        this.iDatas[index] = indices;
        this.meshCount = this.vDatas.length;
      },
      updateMeshRange: function updateMeshRange(verticesCount, indicesCount) {},
      createData: function createData(index, verticesFloats, indicesCount) {
        var vertices = new Float32Array(verticesFloats);
        var indices = new Uint16Array(indicesCount);
        this.updateMesh(index, vertices, indices);
      },
      createQuadData: function createQuadData(index, verticesFloats, indicesCount) {
        this.createData(index, verticesFloats, indicesCount);
        this.initQuadIndices(this.iDatas[index]);
      },
      createFlexData: function createFlexData(index, verticesFloats, indicesCount, vfmt) {
        vfmt = vfmt || _vertexFormat.vfmtPosUvColor;
        this._flexBuffer = new _flexBuffer["default"](this, index, verticesFloats, indicesCount, vfmt);
      },
      initQuadIndices: function initQuadIndices(indices) {
        var count = indices.length / 6;
        for (var i = 0, idx = 0; i < count; i++) {
          var vertextID = 4 * i;
          indices[idx++] = vertextID;
          indices[idx++] = vertextID + 1;
          indices[idx++] = vertextID + 2;
          indices[idx++] = vertextID + 1;
          indices[idx++] = vertextID + 3;
          indices[idx++] = vertextID + 2;
        }
      }
    });
    cc.RenderData = RenderData;
    module.exports = exports["default"];
  }), {
    "./flex-buffer": 192,
    "./vertex-format": 198
  } ],
  197: [ (function(require, module, exports) {
    "use strict";
    var SpineBuffer = cc.Class({
      name: "cc.SpineBuffer",
      extends: require("./mesh-buffer"),
      requestStatic: function requestStatic(vertexCount, indiceCount) {
        this.checkAndSwitchBuffer(vertexCount);
        var byteOffset = this.byteOffset + vertexCount * this._vertexBytes;
        var indiceOffset = this.indiceOffset + indiceCount;
        var byteLength = this._vData.byteLength;
        var indiceLength = this._iData.length;
        if (byteOffset > byteLength || indiceOffset > indiceLength) {
          while (byteLength < byteOffset || indiceLength < indiceOffset) {
            this._initVDataCount *= 2;
            this._initIDataCount *= 2;
            byteLength = 4 * this._initVDataCount;
            indiceLength = this._initIDataCount;
          }
          this._reallocBuffer();
        }
        var offsetInfo = this._offsetInfo;
        offsetInfo.vertexOffset = this.vertexOffset;
        offsetInfo.indiceOffset = this.indiceOffset;
        offsetInfo.byteOffset = this.byteOffset;
      },
      adjust: function adjust(vertexCount, indiceCount) {
        this.vertexOffset += vertexCount;
        this.indiceOffset += indiceCount;
        this.byteOffset = this.byteOffset + vertexCount * this._vertexBytes;
        this._dirty = true;
      }
    });
    cc.SpineBuffer = module.exports = SpineBuffer;
  }), {
    "./mesh-buffer": 193
  } ],
  198: [ (function(require, module, exports) {
    "use strict";
    var _gfx = _interopRequireDefault(require("../../../renderer/gfx"));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    var vfmt3D = new _gfx["default"].VertexFormat([ {
      name: _gfx["default"].ATTR_POSITION,
      type: _gfx["default"].ATTR_TYPE_FLOAT32,
      num: 3
    }, {
      name: _gfx["default"].ATTR_UV0,
      type: _gfx["default"].ATTR_TYPE_FLOAT32,
      num: 2
    }, {
      name: _gfx["default"].ATTR_COLOR,
      type: _gfx["default"].ATTR_TYPE_UINT8,
      num: 4,
      normalize: true
    } ]);
    vfmt3D.name = "vfmt3D";
    _gfx["default"].VertexFormat.XYZ_UV_Color = vfmt3D;
    var vfmtPosUvColor = new _gfx["default"].VertexFormat([ {
      name: _gfx["default"].ATTR_POSITION,
      type: _gfx["default"].ATTR_TYPE_FLOAT32,
      num: 2
    }, {
      name: _gfx["default"].ATTR_UV0,
      type: _gfx["default"].ATTR_TYPE_FLOAT32,
      num: 2
    }, {
      name: _gfx["default"].ATTR_COLOR,
      type: _gfx["default"].ATTR_TYPE_UINT8,
      num: 4,
      normalize: true
    } ]);
    vfmtPosUvColor.name = "vfmtPosUvColor";
    _gfx["default"].VertexFormat.XY_UV_Color = vfmtPosUvColor;
    var vfmtPosUvTwoColor = new _gfx["default"].VertexFormat([ {
      name: _gfx["default"].ATTR_POSITION,
      type: _gfx["default"].ATTR_TYPE_FLOAT32,
      num: 2
    }, {
      name: _gfx["default"].ATTR_UV0,
      type: _gfx["default"].ATTR_TYPE_FLOAT32,
      num: 2
    }, {
      name: _gfx["default"].ATTR_COLOR,
      type: _gfx["default"].ATTR_TYPE_UINT8,
      num: 4,
      normalize: true
    }, {
      name: _gfx["default"].ATTR_COLOR0,
      type: _gfx["default"].ATTR_TYPE_UINT8,
      num: 4,
      normalize: true
    } ]);
    vfmtPosUvTwoColor.name = "vfmtPosUvTwoColor";
    _gfx["default"].VertexFormat.XY_UV_Two_Color = vfmtPosUvTwoColor;
    var vfmtPosUv = new _gfx["default"].VertexFormat([ {
      name: _gfx["default"].ATTR_POSITION,
      type: _gfx["default"].ATTR_TYPE_FLOAT32,
      num: 2
    }, {
      name: _gfx["default"].ATTR_UV0,
      type: _gfx["default"].ATTR_TYPE_FLOAT32,
      num: 2
    } ]);
    vfmtPosUv.name = "vfmtPosUv";
    _gfx["default"].VertexFormat.XY_UV = vfmtPosUv;
    var vfmtPosColor = new _gfx["default"].VertexFormat([ {
      name: _gfx["default"].ATTR_POSITION,
      type: _gfx["default"].ATTR_TYPE_FLOAT32,
      num: 2
    }, {
      name: _gfx["default"].ATTR_COLOR,
      type: _gfx["default"].ATTR_TYPE_UINT8,
      num: 4,
      normalize: true
    } ]);
    vfmtPosColor.name = "vfmtPosColor";
    _gfx["default"].VertexFormat.XY_Color = vfmtPosColor;
    var vfmtPos = new _gfx["default"].VertexFormat([ {
      name: _gfx["default"].ATTR_POSITION,
      type: _gfx["default"].ATTR_TYPE_FLOAT32,
      num: 2
    } ]);
    vfmtPos.name = "vfmtPos";
    _gfx["default"].VertexFormat.XY = vfmtPos;
    module.exports = {
      vfmt3D: vfmt3D,
      vfmtPosUvColor: vfmtPosUvColor,
      vfmtPosUvTwoColor: vfmtPosUvTwoColor,
      vfmtPosUv: vfmtPosUv,
      vfmtPosColor: vfmtPosColor,
      vfmtPos: vfmtPos
    };
  }), {
    "../../../renderer/gfx": 251
  } ],
  199: [ (function(require, module, exports) {
    "use strict";
    require("../platform/CCSys");
    var EXTNAME_RE = /(\.[^\.\/\?\\]*)(\?.*)?$/;
    var DIRNAME_RE = /((.*)(\/|\\|\\\\))?(.*?\..*$)?/;
    var NORMALIZE_RE = /[^\.\/]+\/\.\.\//;
    cc.path = {
      join: function join() {
        var l = arguments.length;
        var result = "";
        for (var i = 0; i < l; i++) result = (result + ("" === result ? "" : "/") + arguments[i]).replace(/(\/|\\\\)$/, "");
        return result;
      },
      extname: function extname(pathStr) {
        var temp = EXTNAME_RE.exec(pathStr);
        return temp ? temp[1] : "";
      },
      mainFileName: function mainFileName(fileName) {
        if (fileName) {
          var idx = fileName.lastIndexOf(".");
          if (-1 !== idx) return fileName.substring(0, idx);
        }
        return fileName;
      },
      basename: function basename(pathStr, extname) {
        var index = pathStr.indexOf("?");
        index > 0 && (pathStr = pathStr.substring(0, index));
        var reg = /(\/|\\)([^\/\\]+)$/g;
        var result = reg.exec(pathStr.replace(/(\/|\\)$/, ""));
        if (!result) return pathStr;
        var baseName = result[2];
        if (extname && pathStr.substring(pathStr.length - extname.length).toLowerCase() === extname.toLowerCase()) return baseName.substring(0, baseName.length - extname.length);
        return baseName;
      },
      dirname: function dirname(pathStr) {
        var temp = DIRNAME_RE.exec(pathStr);
        return temp ? temp[2] : "";
      },
      changeExtname: function changeExtname(pathStr, extname) {
        extname = extname || "";
        var index = pathStr.indexOf("?");
        var tempStr = "";
        if (index > 0) {
          tempStr = pathStr.substring(index);
          pathStr = pathStr.substring(0, index);
        }
        index = pathStr.lastIndexOf(".");
        if (index < 0) return pathStr + extname + tempStr;
        return pathStr.substring(0, index) + extname + tempStr;
      },
      changeBasename: function changeBasename(pathStr, basename, isSameExt) {
        if (0 === basename.indexOf(".")) return this.changeExtname(pathStr, basename);
        var index = pathStr.indexOf("?");
        var tempStr = "";
        var ext = isSameExt ? this.extname(pathStr) : "";
        if (index > 0) {
          tempStr = pathStr.substring(index);
          pathStr = pathStr.substring(0, index);
        }
        index = pathStr.lastIndexOf("/");
        index = index <= 0 ? 0 : index + 1;
        return pathStr.substring(0, index) + basename + ext + tempStr;
      },
      _normalize: function _normalize(url) {
        var oldUrl = url = String(url);
        do {
          oldUrl = url;
          url = url.replace(NORMALIZE_RE, "");
        } while (oldUrl.length !== url.length);
        return url;
      },
      sep: cc.sys.os === cc.sys.OS_WINDOWS ? "\\" : "/",
      stripSep: function stripSep(path) {
        return path.replace(/[\/\\]$/, "");
      }
    };
    module.exports = cc.path;
  }), {
    "../platform/CCSys": 147
  } ],
  200: [ (function(require, module, exports) {
    "use strict";
    var AffineTransform = function AffineTransform(a, b, c, d, tx, ty) {
      this.a = a;
      this.b = b;
      this.c = c;
      this.d = d;
      this.tx = tx;
      this.ty = ty;
    };
    AffineTransform.create = function(a, b, c, d, tx, ty) {
      return {
        a: a,
        b: b,
        c: c,
        d: d,
        tx: tx,
        ty: ty
      };
    };
    AffineTransform.identity = function() {
      return {
        a: 1,
        b: 0,
        c: 0,
        d: 1,
        tx: 0,
        ty: 0
      };
    };
    AffineTransform.clone = function(t) {
      return {
        a: t.a,
        b: t.b,
        c: t.c,
        d: t.d,
        tx: t.tx,
        ty: t.ty
      };
    };
    AffineTransform.concat = function(out, t1, t2) {
      var a = t1.a, b = t1.b, c = t1.c, d = t1.d, tx = t1.tx, ty = t1.ty;
      out.a = a * t2.a + b * t2.c;
      out.b = a * t2.b + b * t2.d;
      out.c = c * t2.a + d * t2.c;
      out.d = c * t2.b + d * t2.d;
      out.tx = tx * t2.a + ty * t2.c + t2.tx;
      out.ty = tx * t2.b + ty * t2.d + t2.ty;
      return out;
    };
    AffineTransform.invert = function(out, t) {
      var a = t.a, b = t.b, c = t.c, d = t.d;
      var determinant = 1 / (a * d - b * c);
      var tx = t.tx, ty = t.ty;
      out.a = determinant * d;
      out.b = -determinant * b;
      out.c = -determinant * c;
      out.d = determinant * a;
      out.tx = determinant * (c * ty - d * tx);
      out.ty = determinant * (b * tx - a * ty);
      return out;
    };
    AffineTransform.fromMat4 = function(out, mat) {
      var matm = mat.m;
      out.a = matm[0];
      out.b = matm[1];
      out.c = matm[4];
      out.d = matm[5];
      out.tx = matm[12];
      out.ty = matm[13];
      return out;
    };
    AffineTransform.transformVec2 = function(out, point, transOrY, t) {
      var x, y;
      if (void 0 === t) {
        t = transOrY;
        x = point.x;
        y = point.y;
      } else {
        x = point;
        y = transOrY;
      }
      out.x = t.a * x + t.c * y + t.tx;
      out.y = t.b * x + t.d * y + t.ty;
      return out;
    };
    AffineTransform.transformSize = function(out, size, t) {
      out.width = t.a * size.width + t.c * size.height;
      out.height = t.b * size.width + t.d * size.height;
      return out;
    };
    AffineTransform.transformRect = function(out, rect, t) {
      var ol = rect.x;
      var ob = rect.y;
      var or = ol + rect.width;
      var ot = ob + rect.height;
      var lbx = t.a * ol + t.c * ob + t.tx;
      var lby = t.b * ol + t.d * ob + t.ty;
      var rbx = t.a * or + t.c * ob + t.tx;
      var rby = t.b * or + t.d * ob + t.ty;
      var ltx = t.a * ol + t.c * ot + t.tx;
      var lty = t.b * ol + t.d * ot + t.ty;
      var rtx = t.a * or + t.c * ot + t.tx;
      var rty = t.b * or + t.d * ot + t.ty;
      var minX = Math.min(lbx, rbx, ltx, rtx);
      var maxX = Math.max(lbx, rbx, ltx, rtx);
      var minY = Math.min(lby, rby, lty, rty);
      var maxY = Math.max(lby, rby, lty, rty);
      out.x = minX;
      out.y = minY;
      out.width = maxX - minX;
      out.height = maxY - minY;
      return out;
    };
    AffineTransform.transformObb = function(out_bl, out_tl, out_tr, out_br, rect, anAffineTransform) {
      var x = rect.x;
      var y = rect.y;
      var width = rect.width;
      var height = rect.height;
      var tx = anAffineTransform.a * x + anAffineTransform.c * y + anAffineTransform.tx;
      var ty = anAffineTransform.b * x + anAffineTransform.d * y + anAffineTransform.ty;
      var xa = anAffineTransform.a * width;
      var xb = anAffineTransform.b * width;
      var yc = anAffineTransform.c * height;
      var yd = anAffineTransform.d * height;
      out_tl.x = tx;
      out_tl.y = ty;
      out_tr.x = xa + tx;
      out_tr.y = xb + ty;
      out_bl.x = yc + tx;
      out_bl.y = yd + ty;
      out_br.x = xa + yc + tx;
      out_br.y = xb + yd + ty;
    };
    cc.AffineTransform = module.exports = AffineTransform;
  }), {} ],
  201: [ (function(require, module, exports) {
    "use strict";
    var Flags = require("../platform/CCObject").Flags;
    var misc = require("./misc");
    var js = require("../platform/js");
    var IdGenerater = require("../platform/id-generater");
    var eventManager = require("../event-manager");
    var RenderFlow = require("../renderer/render-flow");
    var Destroying = Flags.Destroying;
    var DontDestroy = Flags.DontDestroy;
    var Deactivating = Flags.Deactivating;
    var CHILD_ADDED = "child-added";
    var CHILD_REMOVED = "child-removed";
    var idGenerater = new IdGenerater("Node");
    function getConstructor(typeOrClassName) {
      if (!typeOrClassName) {
        cc.errorID(3804);
        return null;
      }
      if ("string" === typeof typeOrClassName) return js.getClassByName(typeOrClassName);
      return typeOrClassName;
    }
    function findComponent(node, constructor) {
      if (constructor._sealed) for (var i = 0; i < node._components.length; ++i) {
        var comp = node._components[i];
        if (comp.constructor === constructor) return comp;
      } else for (var _i = 0; _i < node._components.length; ++_i) {
        var _comp = node._components[_i];
        if (_comp instanceof constructor) return _comp;
      }
      return null;
    }
    function findComponents(node, constructor, components) {
      if (constructor._sealed) for (var i = 0; i < node._components.length; ++i) {
        var comp = node._components[i];
        comp.constructor === constructor && components.push(comp);
      } else for (var _i2 = 0; _i2 < node._components.length; ++_i2) {
        var _comp2 = node._components[_i2];
        _comp2 instanceof constructor && components.push(_comp2);
      }
    }
    function findChildComponent(children, constructor) {
      for (var i = 0; i < children.length; ++i) {
        var node = children[i];
        var comp = findComponent(node, constructor);
        if (comp) return comp;
        if (node._children.length > 0) {
          comp = findChildComponent(node._children, constructor);
          if (comp) return comp;
        }
      }
      return null;
    }
    function findChildComponents(children, constructor, components) {
      for (var i = 0; i < children.length; ++i) {
        var node = children[i];
        findComponents(node, constructor, components);
        node._children.length > 0 && findChildComponents(node._children, constructor, components);
      }
    }
    var BaseNode = cc.Class({
      name: "cc._BaseNode",
      extends: cc.Object,
      properties: {
        _parent: null,
        _children: [],
        _active: true,
        _components: [],
        _prefab: null,
        _persistNode: {
          get: function get() {
            return (this._objFlags & DontDestroy) > 0;
          },
          set: function set(value) {
            value ? this._objFlags |= DontDestroy : this._objFlags &= ~DontDestroy;
          }
        },
        name: {
          get: function get() {
            return this._name;
          },
          set: function set(value) {
            false;
            this._name = value;
            false;
          }
        },
        uuid: {
          get: function get() {
            return this._id;
          }
        },
        children: {
          get: function get() {
            return this._children;
          }
        },
        childrenCount: {
          get: function get() {
            return this._children.length;
          }
        },
        active: {
          get: function get() {
            return this._active;
          },
          set: function set(value) {
            value = !!value;
            if (this._active !== value) {
              this._active = value;
              var parent = this._parent;
              if (parent) {
                var couldActiveInScene = parent._activeInHierarchy;
                couldActiveInScene && cc.director._nodeActivator.activateNode(this, value);
              }
            }
          }
        },
        activeInHierarchy: {
          get: function get() {
            return this._activeInHierarchy;
          }
        }
      },
      ctor: function ctor(name) {
        this._name = void 0 !== name ? name : "New Node";
        this._activeInHierarchy = false;
        this._id = idGenerater.getNewId();
        cc.director._scheduler && cc.director._scheduler.enableForTarget(this);
        this.__eventTargets = [];
      },
      getParent: function getParent() {
        return this._parent;
      },
      setParent: function setParent(value) {
        if (this._parent === value) return;
        false;
        var oldParent = this._parent;
        (true, oldParent) && oldParent._objFlags & Deactivating && cc.errorID(3821);
        this._parent = value || null;
        this._onSetParent(value);
        if (value) {
          (true, value._objFlags & Deactivating) && cc.errorID(3821);
          eventManager._setDirtyForNode(this);
          value._children.push(this);
          value.emit && value.emit(CHILD_ADDED, this);
          value._renderFlag |= RenderFlow.FLAG_CHILDREN;
        }
        if (oldParent) {
          if (!(oldParent._objFlags & Destroying)) {
            var removeAt = oldParent._children.indexOf(this);
            false;
            oldParent._children.splice(removeAt, 1);
            oldParent.emit && oldParent.emit(CHILD_REMOVED, this);
            this._onHierarchyChanged(oldParent);
            0 === oldParent._children.length && (oldParent._renderFlag &= ~RenderFlow.FLAG_CHILDREN);
          }
        } else value && this._onHierarchyChanged(null);
      },
      attr: function attr(attrs) {
        js.mixin(this, attrs);
      },
      getChildByUuid: function getChildByUuid(uuid) {
        if (!uuid) {
          cc.log("Invalid uuid");
          return null;
        }
        var locChildren = this._children;
        for (var i = 0, len = locChildren.length; i < len; i++) if (locChildren[i]._id === uuid) return locChildren[i];
        return null;
      },
      getChildByName: function getChildByName(name) {
        if (!name) {
          cc.log("Invalid name");
          return null;
        }
        var locChildren = this._children;
        for (var i = 0, len = locChildren.length; i < len; i++) if (locChildren[i]._name === name) return locChildren[i];
        return null;
      },
      addChild: function addChild(child) {
        false;
        cc.assertID(child, 1606);
        cc.assertID(null === child._parent, 1605);
        child.setParent(this);
      },
      insertChild: function insertChild(child, siblingIndex) {
        child.parent = this;
        child.setSiblingIndex(siblingIndex);
      },
      getSiblingIndex: function getSiblingIndex() {
        return this._parent ? this._parent._children.indexOf(this) : 0;
      },
      setSiblingIndex: function setSiblingIndex(index) {
        if (!this._parent) return;
        if (this._parent._objFlags & Deactivating) {
          cc.errorID(3821);
          return;
        }
        var siblings = this._parent._children;
        index = -1 !== index ? index : siblings.length - 1;
        var oldIndex = siblings.indexOf(this);
        if (index !== oldIndex) {
          siblings.splice(oldIndex, 1);
          index < siblings.length ? siblings.splice(index, 0, this) : siblings.push(this);
          this._onSiblingIndexChanged && this._onSiblingIndexChanged(index);
        }
      },
      walk: function walk(prefunc, postfunc) {
        var BaseNode = cc._BaseNode;
        var index = 1;
        var children, child, curr, i, afterChildren;
        var stack = BaseNode._stacks[BaseNode._stackId];
        if (!stack) {
          stack = [];
          BaseNode._stacks.push(stack);
        }
        BaseNode._stackId++;
        stack.length = 0;
        stack[0] = this;
        var parent = null;
        afterChildren = false;
        while (index) {
          index--;
          curr = stack[index];
          if (!curr) continue;
          !afterChildren && prefunc ? prefunc(curr) : afterChildren && postfunc && postfunc(curr);
          stack[index] = null;
          if (!afterChildren) {
            if (curr._children.length > 0) {
              parent = curr;
              children = curr._children;
              i = 0;
              stack[index] = children[i];
              index++;
            } else {
              stack[index] = curr;
              index++;
              afterChildren = true;
            }
            continue;
          }
          if (parent === this._parent) break;
          afterChildren = false;
          if (children) {
            i++;
            if (children[i]) {
              stack[index] = children[i];
              index++;
            } else if (parent) {
              stack[index] = parent;
              index++;
              afterChildren = true;
              if (parent._parent) {
                children = parent._parent._children;
                i = children.indexOf(parent);
                parent = parent._parent;
              } else {
                parent = null;
                children = null;
              }
              if (i < 0) break;
            }
          }
        }
        stack.length = 0;
        BaseNode._stackId--;
      },
      cleanup: function cleanup() {},
      removeFromParent: function removeFromParent(cleanup) {
        if (this._parent) {
          void 0 === cleanup && (cleanup = true);
          this._parent.removeChild(this, cleanup);
        }
      },
      removeChild: function removeChild(child, cleanup) {
        if (this._children.indexOf(child) > -1) {
          (cleanup || void 0 === cleanup) && child.cleanup();
          child.parent = null;
        }
      },
      removeAllChildren: function removeAllChildren(cleanup) {
        var children = this._children;
        void 0 === cleanup && (cleanup = true);
        for (var i = children.length - 1; i >= 0; i--) {
          var node = children[i];
          if (node) {
            cleanup && node.cleanup();
            node.parent = null;
          }
        }
        this._children.length = 0;
      },
      isChildOf: function isChildOf(parent) {
        var child = this;
        do {
          if (child === parent) return true;
          child = child._parent;
        } while (child);
        return false;
      },
      getComponent: function getComponent(typeOrClassName) {
        var constructor = getConstructor(typeOrClassName);
        if (constructor) return findComponent(this, constructor);
        return null;
      },
      getComponents: function getComponents(typeOrClassName) {
        var constructor = getConstructor(typeOrClassName), components = [];
        constructor && findComponents(this, constructor, components);
        return components;
      },
      getComponentInChildren: function getComponentInChildren(typeOrClassName) {
        var constructor = getConstructor(typeOrClassName);
        if (constructor) return findChildComponent(this._children, constructor);
        return null;
      },
      getComponentsInChildren: function getComponentsInChildren(typeOrClassName) {
        var constructor = getConstructor(typeOrClassName), components = [];
        if (constructor) {
          findComponents(this, constructor, components);
          findChildComponents(this._children, constructor, components);
        }
        return components;
      },
      _checkMultipleComp: (false, false) && function(ctor) {
        var existing = this.getComponent(ctor._disallowMultiple);
        if (existing) {
          existing.constructor === ctor ? cc.errorID(3805, js.getClassName(ctor), this._name) : cc.errorID(3806, js.getClassName(ctor), this._name, js.getClassName(existing));
          return false;
        }
        return true;
      },
      addComponent: function addComponent(typeOrClassName) {
        false;
        var constructor;
        if ("string" === typeof typeOrClassName) {
          constructor = js.getClassByName(typeOrClassName);
          if (!constructor) {
            cc.errorID(3807, typeOrClassName);
            cc._RFpeek() && cc.errorID(3808, typeOrClassName);
            return null;
          }
        } else {
          if (!typeOrClassName) {
            cc.errorID(3804);
            return null;
          }
          constructor = typeOrClassName;
        }
        if ("function" !== typeof constructor) {
          cc.errorID(3809);
          return null;
        }
        if (!js.isChildClassOf(constructor, cc.Component)) {
          cc.errorID(3810);
          return null;
        }
        if ((false, false) && constructor._disallowMultiple && !this._checkMultipleComp(constructor)) return null;
        var ReqComp = constructor._requireComponent;
        if (ReqComp && !this.getComponent(ReqComp)) {
          var depended = this.addComponent(ReqComp);
          if (!depended) return null;
        }
        var component = new constructor();
        component.node = this;
        this._components.push(component);
        (false, false) && cc.engine && this._id in cc.engine.attachedObjsForEditor && (cc.engine.attachedObjsForEditor[component._id] = component);
        this._activeInHierarchy && cc.director._nodeActivator.activateComp(component);
        return component;
      },
      _addComponentAt: false,
      removeComponent: function removeComponent(component) {
        if (!component) {
          cc.errorID(3813);
          return;
        }
        component instanceof cc.Component || (component = this.getComponent(component));
        component && component.destroy();
      },
      _getDependComponent: false,
      _removeComponent: function _removeComponent(component) {
        if (!component) {
          cc.errorID(3814);
          return;
        }
        if (!(this._objFlags & Destroying)) {
          var i = this._components.indexOf(component);
          if (-1 !== i) {
            this._components.splice(i, 1);
            (false, false) && cc.engine && delete cc.engine.attachedObjsForEditor[component._id];
          } else component.node !== this && cc.errorID(3815);
        }
      },
      destroy: function destroy() {
        cc.Object.prototype.destroy.call(this) && (this.active = false);
      },
      destroyAllChildren: function destroyAllChildren() {
        var children = this._children;
        for (var i = 0; i < children.length; ++i) children[i].destroy();
      },
      _onSetParent: function _onSetParent(value) {},
      _onPostActivated: function _onPostActivated() {},
      _onBatchRestored: function _onBatchRestored() {},
      _onBatchCreated: function _onBatchCreated() {},
      _onHierarchyChanged: function _onHierarchyChanged(oldParent) {
        var newParent = this._parent;
        if (this._persistNode && !(newParent instanceof cc.Scene)) {
          cc.game.removePersistRootNode(this);
          false;
        }
        var scene;
        var inCurrentSceneBefore;
        var inCurrentSceneNow;
        var newPrefabRoot;
        var myPrefabInfo;
        var PrefabUtils;
        false, false;
        var shouldActiveNow = this._active && !!(newParent && newParent._activeInHierarchy);
        this._activeInHierarchy !== shouldActiveNow && cc.director._nodeActivator.activateNode(this, shouldActiveNow);
      },
      _instantiate: function _instantiate(cloned) {
        cloned || (cloned = cc.instantiate._clone(this, this));
        var thisPrefabInfo = this._prefab;
        var PrefabUtils;
        false;
        var syncing = thisPrefabInfo && this === thisPrefabInfo.root && thisPrefabInfo.sync;
        syncing || false;
        cloned._parent = null;
        cloned._onBatchRestored();
        return cloned;
      },
      _registerIfAttached: (false, false) && function(register) {
        var attachedObjsForEditor = cc.engine.attachedObjsForEditor;
        if (register) {
          attachedObjsForEditor[this._id] = this;
          for (var i = 0; i < this._components.length; i++) {
            var comp = this._components[i];
            attachedObjsForEditor[comp._id] = comp;
          }
          cc.engine.emit("node-attach-to-scene", this);
        } else {
          cc.engine.emit("node-detach-from-scene", this);
          delete attachedObjsForEditor[this._id];
          for (var _i3 = 0; _i3 < this._components.length; _i3++) {
            var _comp3 = this._components[_i3];
            delete attachedObjsForEditor[_comp3._id];
          }
        }
        var children = this._children;
        for (var _i4 = 0, len = children.length; _i4 < len; ++_i4) {
          var child = children[_i4];
          child._registerIfAttached(register);
        }
      },
      _onPreDestroy: function _onPreDestroy() {
        var i, len;
        this._objFlags |= Destroying;
        var parent = this._parent;
        var destroyByParent = parent && parent._objFlags & Destroying;
        !destroyByParent && (false, false) && this._registerIfAttached(false);
        var children = this._children;
        for (i = 0, len = children.length; i < len; ++i) children[i]._destroyImmediate();
        for (i = 0, len = this._components.length; i < len; ++i) {
          var component = this._components[i];
          component._destroyImmediate();
        }
        var eventTargets = this.__eventTargets;
        for (i = 0, len = eventTargets.length; i < len; ++i) {
          var target = eventTargets[i];
          target && target.targetOff(this);
        }
        eventTargets.length = 0;
        this._persistNode && cc.game.removePersistRootNode(this);
        if (!destroyByParent && parent) {
          var childIndex = parent._children.indexOf(this);
          parent._children.splice(childIndex, 1);
          parent.emit && parent.emit("child-removed", this);
        }
        return destroyByParent;
      },
      onRestore: false
    });
    BaseNode.idGenerater = idGenerater;
    BaseNode._stacks = [ [] ];
    BaseNode._stackId = 0;
    BaseNode.prototype._onPreDestroyBase = BaseNode.prototype._onPreDestroy;
    false;
    BaseNode.prototype._onHierarchyChangedBase = BaseNode.prototype._onHierarchyChanged;
    false;
    var SameNameGetSets = [ "parent", "name", "children", "childrenCount" ];
    misc.propertyDefine(BaseNode, SameNameGetSets, {});
    false;
    cc._BaseNode = module.exports = BaseNode;
  }), {
    "../event-manager": 119,
    "../platform/CCObject": 144,
    "../platform/id-generater": 154,
    "../platform/js": 158,
    "../renderer/render-flow": 169,
    "./misc": 209
  } ],
  202: [ (function(require, module, exports) {
    "use strict";
    var EPSILON = 1e-6;
    function binarySearchEpsilon(array, value) {
      for (var l = 0, h = array.length - 1, m = h >>> 1; l <= h; m = l + h >>> 1) {
        var test = array[m];
        if (test > value + EPSILON) h = m - 1; else {
          if (!(test < value - EPSILON)) return m;
          l = m + 1;
        }
      }
      return ~l;
    }
    module.exports = {
      binarySearchEpsilon: binarySearchEpsilon
    };
  }), {} ],
  203: [ (function(require, module, exports) {
    "use strict";
    var RenderComponent = require("../components/CCRenderComponent");
    var BlendFactor = require("../platform/CCMacro").BlendFactor;
    var gfx = require("../../renderer/gfx");
    var BlendFunc = cc.Class({
      properties: {
        _srcBlendFactor: BlendFactor.SRC_ALPHA,
        _dstBlendFactor: BlendFactor.ONE_MINUS_SRC_ALPHA,
        srcBlendFactor: {
          get: function get() {
            return this._srcBlendFactor;
          },
          set: function set(value) {
            if (this._srcBlendFactor === value) return;
            this._srcBlendFactor = value;
            this._updateBlendFunc(true);
            this._onBlendChanged && this._onBlendChanged();
          },
          animatable: false,
          type: BlendFactor,
          tooltip: false,
          visible: true
        },
        dstBlendFactor: {
          get: function get() {
            return this._dstBlendFactor;
          },
          set: function set(value) {
            if (this._dstBlendFactor === value) return;
            this._dstBlendFactor = value;
            this._updateBlendFunc(true);
          },
          animatable: false,
          type: BlendFactor,
          tooltip: false,
          visible: true
        }
      },
      setMaterial: function setMaterial(index, material) {
        var materialVar = RenderComponent.prototype.setMaterial.call(this, index, material);
        this._srcBlendFactor === BlendFactor.SRC_ALPHA && this._dstBlendFactor === BlendFactor.ONE_MINUS_SRC_ALPHA || this._updateMaterialBlendFunc(materialVar);
        return materialVar;
      },
      _updateMaterial: function _updateMaterial() {
        this._updateBlendFunc();
      },
      _updateBlendFunc: function _updateBlendFunc(force) {
        if (!force && this._srcBlendFactor === BlendFactor.SRC_ALPHA && this._dstBlendFactor === BlendFactor.ONE_MINUS_SRC_ALPHA) return;
        var materials = this.getMaterials();
        for (var i = 0; i < materials.length; i++) {
          var material = materials[i];
          this._updateMaterialBlendFunc(material);
        }
      },
      _updateMaterialBlendFunc: function _updateMaterialBlendFunc(material) {
        material.setBlend(true, gfx.BLEND_FUNC_ADD, this._srcBlendFactor, this._dstBlendFactor, gfx.BLEND_FUNC_ADD, this._srcBlendFactor, this._dstBlendFactor);
      }
    });
    module.exports = cc.BlendFunc = BlendFunc;
  }), {
    "../../renderer/gfx": 251,
    "../components/CCRenderComponent": 100,
    "../platform/CCMacro": 143
  } ],
  204: [ (function(require, module, exports) {
    "use strict";
    var Base64Values = require("./misc").BASE64_VALUES;
    var HexChars = "0123456789abcdef".split("");
    var _t = [ "", "", "", "" ];
    var UuidTemplate = _t.concat(_t, "-", _t, "-", _t, "-", _t, "-", _t, _t, _t);
    var Indices = UuidTemplate.map((function(x, i) {
      return "-" === x ? NaN : i;
    })).filter(isFinite);
    module.exports = function(base64) {
      if (22 !== base64.length) return base64;
      UuidTemplate[0] = base64[0];
      UuidTemplate[1] = base64[1];
      for (var i = 2, j = 2; i < 22; i += 2) {
        var lhs = Base64Values[base64.charCodeAt(i)];
        var rhs = Base64Values[base64.charCodeAt(i + 1)];
        UuidTemplate[Indices[j++]] = HexChars[lhs >> 2];
        UuidTemplate[Indices[j++]] = HexChars[(3 & lhs) << 2 | rhs >> 4];
        UuidTemplate[Indices[j++]] = HexChars[15 & rhs];
      }
      return UuidTemplate.join("");
    };
    false;
  }), {
    "./misc": 209
  } ],
  205: [ (function(require, module, exports) {
    "use strict";
    cc.find = module.exports = function(path, referenceNode) {
      if (null == path) {
        cc.errorID(3814);
        return null;
      }
      if (referenceNode) false; else {
        var scene = cc.director.getScene();
        if (!scene) {
          false;
          return null;
        }
        false;
        referenceNode = scene;
      }
      var match = referenceNode;
      var startIndex = "/" !== path[0] ? 0 : 1;
      var nameList = path.split("/");
      for (var n = startIndex; n < nameList.length; n++) {
        var name = nameList[n];
        var children = match._children;
        match = null;
        for (var t = 0, len = children.length; t < len; ++t) {
          var subChild = children[t];
          if (subChild.name === name) {
            match = subChild;
            break;
          }
        }
        if (!match) return null;
      }
      return match;
    };
  }), {} ],
  206: [ (function(require, module, exports) {
    "use strict";
    var _materialVariant = _interopRequireDefault(require("../assets/material/material-variant"));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    var Material = require("../assets/material/CCMaterial");
    var GraySpriteState = cc.Class({
      properties: {
        _normalMaterial: null,
        normalMaterial: {
          get: function get() {
            return this._normalMaterial;
          },
          set: function set(val) {
            this._normalMaterial = val;
            this._updateDisabledState && this._updateDisabledState();
          },
          type: Material,
          tooltip: false,
          animatable: false
        },
        _grayMaterial: null,
        grayMaterial: {
          get: function get() {
            return this._grayMaterial;
          },
          set: function set(val) {
            this._grayMaterial = val;
            this._updateDisabledState && this._updateDisabledState();
          },
          type: Material,
          tooltip: false,
          animatable: false
        }
      },
      _switchGrayMaterial: function _switchGrayMaterial(useGrayMaterial, renderComp) {
        var material;
        if (useGrayMaterial) {
          material = this._grayMaterial;
          material || (material = Material.getBuiltinMaterial("2d-gray-sprite"));
          material = this._grayMaterial = _materialVariant["default"].create(material, renderComp);
        } else {
          material = this._normalMaterial;
          material || (material = Material.getBuiltinMaterial("2d-sprite", renderComp));
          material = this._normalMaterial = _materialVariant["default"].create(material, renderComp);
        }
        renderComp.setMaterial(0, material);
      }
    });
    module.exports = GraySpriteState;
  }), {
    "../assets/material/CCMaterial": 77,
    "../assets/material/material-variant": 84
  } ],
  207: [ (function(require, module, exports) {
    "use strict";
    var eventRegx = /^(click)(\s)*=|(param)(\s)*=/;
    var imageAttrReg = /(\s)*src(\s)*=|(\s)*height(\s)*=|(\s)*width(\s)*=|(\s)*align(\s)*=|(\s)*offset(\s)*=|(\s)*click(\s)*=|(\s)*param(\s)*=/;
    var HtmlTextParser = function HtmlTextParser() {
      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, "'" ]);
      this._specialSymbolArray.push([ /&nbsp;/g, " " ]);
    };
    HtmlTextParser.prototype = {
      constructor: HtmlTextParser,
      parse: function parse(htmlString) {
        this._resultObjectArray = [];
        this._stack = [];
        var startIndex = 0;
        var length = htmlString.length;
        while (startIndex < length) {
          var tagEndIndex = htmlString.indexOf(">", startIndex);
          var tagBeginIndex = -1;
          if (tagEndIndex >= 0) {
            tagBeginIndex = htmlString.lastIndexOf("<", tagEndIndex);
            var noTagBegin = tagBeginIndex < startIndex - 1;
            if (noTagBegin) {
              tagBeginIndex = htmlString.indexOf("<", tagEndIndex + 1);
              tagEndIndex = htmlString.indexOf(">", tagBeginIndex + 1);
            }
          }
          if (tagBeginIndex < 0) {
            this._stack.pop();
            this._processResult(htmlString.substring(startIndex));
            startIndex = length;
          } else {
            var newStr = htmlString.substring(startIndex, tagBeginIndex);
            var tagStr = htmlString.substring(tagBeginIndex + 1, tagEndIndex);
            "" === tagStr && (newStr = htmlString.substring(startIndex, tagEndIndex + 1));
            this._processResult(newStr);
            -1 === tagEndIndex ? tagEndIndex = tagBeginIndex : "/" === htmlString.charAt(tagBeginIndex + 1) ? this._stack.pop() : this._addToStack(tagStr);
            startIndex = tagEndIndex + 1;
          }
        }
        return this._resultObjectArray;
      },
      _attributeToObject: function _attributeToObject(attribute) {
        attribute = attribute.trim();
        var obj = {};
        var header = attribute.match(/^(color|size)(\s)*=/);
        var tagName;
        var nextSpace;
        var eventObj;
        var eventHanlderString;
        if (header) {
          tagName = header[0];
          attribute = attribute.substring(tagName.length).trim();
          if ("" === attribute) return obj;
          nextSpace = attribute.indexOf(" ");
          switch (tagName[0]) {
           case "c":
            obj.color = nextSpace > -1 ? attribute.substring(0, nextSpace).trim() : attribute;
            break;

           case "s":
            obj.size = parseInt(attribute);
          }
          if (nextSpace > -1) {
            eventHanlderString = attribute.substring(nextSpace + 1).trim();
            eventObj = this._processEventHandler(eventHanlderString);
            obj.event = eventObj;
          }
          return obj;
        }
        header = attribute.match(/^(br(\s)*\/)/);
        if (header && header[0].length > 0) {
          tagName = header[0].trim();
          if (tagName.startsWith("br") && "/" === tagName[tagName.length - 1]) {
            obj.isNewLine = true;
            this._resultObjectArray.push({
              text: "",
              style: {
                newline: true
              }
            });
            return obj;
          }
        }
        header = attribute.match(/^(img(\s)*src(\s)*=[^>]+\/)/);
        if (header && header[0].length > 0) {
          tagName = header[0].trim();
          if (tagName.startsWith("img") && "/" === tagName[tagName.length - 1]) {
            header = attribute.match(imageAttrReg);
            var tagValue;
            var remainingArgument;
            var isValidImageTag = false;
            while (header) {
              attribute = attribute.substring(attribute.indexOf(header[0]));
              tagName = attribute.substr(0, header[0].length);
              remainingArgument = attribute.substring(tagName.length).trim();
              nextSpace = remainingArgument.indexOf(" ");
              tagValue = nextSpace > -1 ? remainingArgument.substr(0, nextSpace) : remainingArgument;
              tagName = tagName.replace(/[^a-zA-Z]/g, "").trim();
              tagName = tagName.toLocaleLowerCase();
              attribute = remainingArgument.substring(nextSpace).trim();
              tagValue.endsWith("/") && (tagValue = tagValue.slice(0, -1));
              if ("src" === tagName) {
                switch (tagValue.charCodeAt(0)) {
                 case 34:
                 case 39:
                  isValidImageTag = true;
                  tagValue = tagValue.slice(1, -1);
                }
                obj.isImage = true;
                obj.src = tagValue;
              } else if ("height" === tagName) obj.imageHeight = parseInt(tagValue); else if ("width" === tagName) obj.imageWidth = parseInt(tagValue); else if ("align" === tagName) {
                switch (tagValue.charCodeAt(0)) {
                 case 34:
                 case 39:
                  tagValue = tagValue.slice(1, -1);
                }
                obj.imageAlign = tagValue.toLocaleLowerCase();
              } else "offset" === tagName ? obj.imageOffset = tagValue : "click" === tagName && (obj.event = this._processEventHandler(tagName + "=" + tagValue));
              obj.event && "param" === tagName && (obj.event.param = tagValue.replace(/^\"|\"$/g, ""));
              header = attribute.match(imageAttrReg);
            }
            isValidImageTag && obj.isImage && this._resultObjectArray.push({
              text: "",
              style: obj
            });
            return {};
          }
        }
        header = attribute.match(/^(outline(\s)*[^>]*)/);
        if (header) {
          attribute = header[0].substring("outline".length).trim();
          var defaultOutlineObject = {
            color: "#ffffff",
            width: 1
          };
          if (attribute) {
            var outlineAttrReg = /(\s)*color(\s)*=|(\s)*width(\s)*=|(\s)*click(\s)*=|(\s)*param(\s)*=/;
            header = attribute.match(outlineAttrReg);
            var tagValue;
            while (header) {
              attribute = attribute.substring(attribute.indexOf(header[0]));
              tagName = attribute.substr(0, header[0].length);
              remainingArgument = attribute.substring(tagName.length).trim();
              nextSpace = remainingArgument.indexOf(" ");
              tagValue = nextSpace > -1 ? remainingArgument.substr(0, nextSpace) : remainingArgument;
              tagName = tagName.replace(/[^a-zA-Z]/g, "").trim();
              tagName = tagName.toLocaleLowerCase();
              attribute = remainingArgument.substring(nextSpace).trim();
              "click" === tagName ? obj.event = this._processEventHandler(tagName + "=" + tagValue) : "color" === tagName ? defaultOutlineObject.color = tagValue : "width" === tagName && (defaultOutlineObject.width = parseInt(tagValue));
              obj.event && "param" === tagName && (obj.event.param = tagValue.replace(/^\"|\"$/g, ""));
              header = attribute.match(outlineAttrReg);
            }
          }
          obj.outline = defaultOutlineObject;
        }
        header = attribute.match(/^(on|u|b|i)(\s)*/);
        if (header && header[0].length > 0) {
          tagName = header[0];
          attribute = attribute.substring(tagName.length).trim();
          switch (tagName[0]) {
           case "u":
            obj.underline = true;
            break;

           case "i":
            obj.italic = true;
            break;

           case "b":
            obj.bold = true;
          }
          if ("" === attribute) return obj;
          eventObj = this._processEventHandler(attribute);
          obj.event = eventObj;
        }
        return obj;
      },
      _processEventHandler: function _processEventHandler(eventString) {
        var index = 0;
        var obj = {};
        var eventNames = eventString.match(eventRegx);
        var isValidTag = false;
        while (eventNames) {
          var eventName = eventNames[0];
          var eventValue = "";
          isValidTag = false;
          eventString = eventString.substring(eventName.length).trim();
          if ('"' === eventString.charAt(0)) {
            index = eventString.indexOf('"', 1);
            if (index > -1) {
              eventValue = eventString.substring(1, index).trim();
              isValidTag = true;
            }
            index++;
          } else if ("'" === eventString.charAt(0)) {
            index = eventString.indexOf("'", 1);
            if (index > -1) {
              eventValue = eventString.substring(1, index).trim();
              isValidTag = true;
            }
            index++;
          } else {
            var match = eventString.match(/(\S)+/);
            eventValue = match ? match[0] : "";
            index = eventValue.length;
          }
          if (isValidTag) {
            eventName = eventName.substring(0, eventName.length - 1).trim();
            obj[eventName] = eventValue;
          }
          eventString = eventString.substring(index).trim();
          eventNames = eventString.match(eventRegx);
        }
        return obj;
      },
      _addToStack: function _addToStack(attribute) {
        var obj = this._attributeToObject(attribute);
        if (0 === this._stack.length) this._stack.push(obj); else {
          if (obj.isNewLine || obj.isImage) return;
          var previousTagObj = this._stack[this._stack.length - 1];
          for (var key in previousTagObj) obj[key] || (obj[key] = previousTagObj[key]);
          this._stack.push(obj);
        }
      },
      _processResult: function _processResult(value) {
        if ("" === value) return;
        value = this._escapeSpecialSymbol(value);
        this._stack.length > 0 ? this._resultObjectArray.push({
          text: value,
          style: this._stack[this._stack.length - 1]
        }) : this._resultObjectArray.push({
          text: value
        });
      },
      _escapeSpecialSymbol: function _escapeSpecialSymbol(str) {
        for (var i = 0; i < this._specialSymbolArray.length; ++i) {
          var key = this._specialSymbolArray[i][0];
          var value = this._specialSymbolArray[i][1];
          str = str.replace(key, value);
        }
        return str;
      }
    };
    false;
    module.exports = HtmlTextParser;
  }), {} ],
  208: [ (function(require, module, exports) {
    "use strict";
    require("./CCPath");
    true;
    require("./profiler/CCProfiler");
    require("./find");
    require("./mutable-forward-iterator");
  }), {
    "./CCPath": 199,
    "./find": 205,
    "./mutable-forward-iterator": 210,
    "./profiler/CCProfiler": 213
  } ],
  209: [ (function(require, module, exports) {
    "use strict";
    var js = require("../platform/js");
    var misc = {};
    misc.propertyDefine = function(ctor, sameNameGetSets, diffNameGetSets) {
      function define(np, propName, getter, setter) {
        var pd = Object.getOwnPropertyDescriptor(np, propName);
        if (pd) {
          pd.get && (np[getter] = pd.get);
          pd.set && setter && (np[setter] = pd.set);
        } else {
          var getterFunc = np[getter];
          var clsName;
          false;
          js.getset(np, propName, getterFunc, np[setter]);
        }
      }
      var propName, np = ctor.prototype;
      for (var i = 0; i < sameNameGetSets.length; i++) {
        propName = sameNameGetSets[i];
        var suffix = propName[0].toUpperCase() + propName.slice(1);
        define(np, propName, "get" + suffix, "set" + suffix);
      }
      for (propName in diffNameGetSets) {
        var getset = diffNameGetSets[propName];
        define(np, propName, getset[0], getset[1]);
      }
    };
    misc.NextPOT = function(x) {
      x -= 1;
      x |= x >> 1;
      x |= x >> 2;
      x |= x >> 4;
      x |= x >> 8;
      x |= x >> 16;
      return x + 1;
    };
    false;
    misc.BUILTIN_CLASSID_RE = /^(?:cc|dragonBones|sp|ccsg)\..+/;
    var BASE64_KEYS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
    var BASE64_VALUES = new Array(123);
    for (var i = 0; i < 123; ++i) BASE64_VALUES[i] = 64;
    for (var _i = 0; _i < 64; ++_i) BASE64_VALUES[BASE64_KEYS.charCodeAt(_i)] = _i;
    misc.BASE64_VALUES = BASE64_VALUES;
    misc.pushToMap = function(map, key, value, pushFront) {
      var exists = map[key];
      if (exists) if (Array.isArray(exists)) if (pushFront) {
        exists.push(exists[0]);
        exists[0] = value;
      } else exists.push(value); else map[key] = pushFront ? [ value, exists ] : [ exists, value ]; else map[key] = value;
    };
    misc.clampf = function(value, min_inclusive, max_inclusive) {
      if (min_inclusive > max_inclusive) {
        var temp = min_inclusive;
        min_inclusive = max_inclusive;
        max_inclusive = temp;
      }
      return value < min_inclusive ? min_inclusive : value < max_inclusive ? value : max_inclusive;
    };
    misc.clamp01 = function(value) {
      return value < 0 ? 0 : value < 1 ? value : 1;
    };
    misc.lerp = function(a, b, r) {
      return a + (b - a) * r;
    };
    misc.degreesToRadians = function(angle) {
      return angle * cc.macro.RAD;
    };
    misc.radiansToDegrees = function(angle) {
      return angle * cc.macro.DEG;
    };
    cc.misc = module.exports = misc;
  }), {
    "../platform/js": 158
  } ],
  210: [ (function(require, module, exports) {
    "use strict";
    function MutableForwardIterator(array) {
      this.i = 0;
      this.array = array;
    }
    var proto = MutableForwardIterator.prototype;
    proto.remove = function(value) {
      var index = this.array.indexOf(value);
      index >= 0 && this.removeAt(index);
    };
    proto.removeAt = function(i) {
      this.array.splice(i, 1);
      i <= this.i && --this.i;
    };
    proto.fastRemove = function(value) {
      var index = this.array.indexOf(value);
      index >= 0 && this.fastRemoveAt(index);
    };
    proto.fastRemoveAt = function(i) {
      var array = this.array;
      array[i] = array[array.length - 1];
      --array.length;
      i <= this.i && --this.i;
    };
    proto.push = function(item) {
      this.array.push(item);
    };
    module.exports = MutableForwardIterator;
  }), {} ],
  211: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var Pool = (function() {
      function Pool() {
        this.enabled = false;
        this.count = 0;
        this.maxSize = 1024;
      }
      var _proto = Pool.prototype;
      _proto.get = function get() {};
      _proto.put = function put() {};
      _proto.clear = function clear() {};
      return Pool;
    })();
    exports["default"] = Pool;
    cc.pool = {};
    Pool.register = function(name, pool) {
      cc.pool[name] = pool;
    };
    module.exports = exports["default"];
  }), {} ],
  212: [ (function(require, module, exports) {
    "use strict";
    cc._PrefabInfo = cc.Class({
      name: "cc.PrefabInfo",
      properties: {
        root: null,
        asset: null,
        fileId: "",
        sync: false,
        _synced: {
          default: false,
          serializable: false
        }
      }
    });
    module.exports = {
      syncWithPrefab: function syncWithPrefab(node) {
        var _prefab = node._prefab;
        _prefab._synced = true;
        if (!_prefab.asset) {
          var NodeUtils;
          var PrefabUtils;
          false;
          cc.errorID(3701, node.name);
          node._prefab = null;
          return;
        }
        var _objFlags = node._objFlags;
        var _parent = node._parent;
        var _id = node._id;
        var _name = node._name;
        var _active = node._active;
        var eulerAnglesX = node._eulerAngles.x;
        var eulerAnglesY = node._eulerAngles.y;
        var eulerAnglesZ = node._eulerAngles.z;
        var _localZOrder = node._localZOrder;
        var _globalZOrder = node._globalZOrder;
        var trs = node._trs;
        var x = trs[0];
        var y = trs[1];
        var z = trs[2];
        cc.game._isCloning = true;
        false;
        var prefabRoot = _prefab.asset.data;
        prefabRoot._prefab._synced = true;
        prefabRoot._iN$t = node;
        cc.instantiate._clone(prefabRoot, prefabRoot);
        cc.game._isCloning = false;
        node._objFlags = _objFlags;
        node._parent = _parent;
        node._id = _id;
        node._prefab = _prefab;
        node._name = _name;
        node._active = _active;
        node._localZOrder = _localZOrder;
        node._globalZOrder = _globalZOrder;
        trs = node._trs;
        trs[0] = x;
        trs[1] = y;
        trs[2] = z;
        node._eulerAngles.x = eulerAnglesX;
        node._eulerAngles.y = eulerAnglesY;
        node._eulerAngles.z = eulerAnglesZ;
      }
    };
  }), {} ],
  213: [ (function(require, module, exports) {
    "use strict";
    var macro = require("../../platform/CCMacro");
    var PerfCounter = require("./perf-counter");
    var _showFPS = false;
    var _fontSize = 15;
    var _stats = null;
    var _rootNode = null;
    var _label = null;
    function generateStats() {
      if (_stats) return;
      _stats = {
        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 now = performance.now();
      for (var id in _stats) _stats[id]._counter = new PerfCounter(id, _stats[id], now);
    }
    function generateNode() {
      if (_rootNode && _rootNode.isValid) return;
      _rootNode = new cc.Node("PROFILER-NODE");
      _rootNode.x = _rootNode.y = 10;
      _rootNode.groupIndex = cc.Node.BuiltinGroupIndex.DEBUG;
      cc.Camera._setupDebugCamera();
      _rootNode.zIndex = macro.MAX_ZINDEX;
      cc.game.addPersistRootNode(_rootNode);
      var left = new cc.Node("LEFT-PANEL");
      left.anchorX = left.anchorY = 0;
      var leftLabel = left.addComponent(cc.Label);
      leftLabel.fontSize = _fontSize;
      leftLabel.lineHeight = _fontSize;
      left.parent = _rootNode;
      var right = new cc.Node("RIGHT-PANEL");
      right.anchorX = 1;
      right.anchorY = 0;
      right.x = 200;
      var rightLabel = right.addComponent(cc.Label);
      rightLabel.horizontalAlign = cc.Label.HorizontalAlign.RIGHT;
      rightLabel.fontSize = _fontSize;
      rightLabel.lineHeight = _fontSize;
      right.parent = _rootNode;
      if (cc.sys.browserType !== cc.sys.BROWSER_TYPE_BAIDU_GAME_SUB && cc.sys.browserType !== cc.sys.BROWSER_TYPE_WECHAT_GAME_SUB) {
        leftLabel.cacheMode = cc.Label.CacheMode.CHAR;
        rightLabel.cacheMode = cc.Label.CacheMode.CHAR;
      }
      _label = {
        left: leftLabel,
        right: rightLabel
      };
    }
    function beforeUpdate() {
      generateNode();
      var now = cc.director._lastUpdate;
      _stats["frame"]._counter.start(now);
      _stats["logic"]._counter.start(now);
    }
    function afterUpdate() {
      var now = performance.now();
      cc.director.isPaused() ? _stats["frame"]._counter.start(now) : _stats["logic"]._counter.end(now);
      _stats["render"]._counter.start(now);
    }
    function updateLabel(stat) {
      var length = 20;
      var desc = stat.desc;
      var value = stat._counter.human() + "";
      stat.label.string = stat.desc + "  " + stat._counter.human();
    }
    function afterDraw() {
      var now = performance.now();
      _stats["render"]._counter.end(now);
      _stats["draws"]._counter.value = cc.renderer.drawCalls;
      _stats["frame"]._counter.end(now);
      _stats["fps"]._counter.frame(now);
      var left = "";
      var right = "";
      for (var id in _stats) {
        var stat = _stats[id];
        stat._counter.sample(now);
        left += stat.desc + "\n";
        right += stat._counter.human() + "\n";
      }
      if (_label) {
        _label.left.string = left;
        _label.right.string = right;
      }
    }
    cc.profiler = module.exports = {
      isShowingStats: function isShowingStats() {
        return _showFPS;
      },
      hideStats: function hideStats() {
        if (_showFPS) {
          _rootNode && (_rootNode.active = false);
          cc.director.off(cc.Director.EVENT_BEFORE_UPDATE, beforeUpdate);
          cc.director.off(cc.Director.EVENT_AFTER_UPDATE, afterUpdate);
          cc.director.off(cc.Director.EVENT_AFTER_DRAW, afterDraw);
          _showFPS = false;
        }
      },
      showStats: function showStats() {
        if (!_showFPS) {
          generateStats();
          _rootNode && (_rootNode.active = true);
          cc.director.on(cc.Director.EVENT_BEFORE_UPDATE, beforeUpdate);
          cc.director.on(cc.Director.EVENT_AFTER_UPDATE, afterUpdate);
          cc.director.on(cc.Director.EVENT_AFTER_DRAW, afterDraw);
          _showFPS = true;
        }
      }
    };
  }), {
    "../../platform/CCMacro": 143,
    "./perf-counter": 215
  } ],
  214: [ (function(require, module, exports) {
    "use strict";
    var Counter = cc.Class({
      name: "cc.Counter",
      ctor: function ctor(id, opts, now) {
        this._id = id;
        this._opts = opts || {};
        this._value = 0;
        this._total = 0;
        this._averageValue = 0;
        this._accumValue = 0;
        this._accumSamples = 0;
        this._accumStart = now;
      },
      properties: {
        value: {
          get: function get() {
            return this._value;
          },
          set: function set(v) {
            this._value = v;
          }
        }
      },
      _average: function _average(v, now) {
        if (this._opts.average) {
          this._accumValue += v;
          ++this._accumSamples;
          var t = now;
          if (t - this._accumStart >= this._opts.average) {
            this._averageValue = this._accumValue / this._accumSamples;
            this._accumValue = 0;
            this._accumStart = t;
            this._accumSamples = 0;
          }
        }
      },
      sample: function sample(now) {
        this._average(this._value, now);
      },
      human: function human() {
        var v = this._opts.average ? this._averageValue : this._value;
        return Math.round(100 * v) / 100;
      },
      alarm: function alarm() {
        return this._opts.below && this._value < this._opts.below || this._opts.over && this._value > this._opts.over;
      }
    });
    module.exports = Counter;
  }), {} ],
  215: [ (function(require, module, exports) {
    "use strict";
    var Counter = require("./counter");
    var PerfCounter = cc.Class({
      name: "cc.PerfCounter",
      extends: Counter,
      ctor: function ctor(id, opts, now) {
        this._time = now;
      },
      start: function start(now) {
        this._time = now;
      },
      end: function end(now) {
        this._value = now - this._time;
        this._average(this._value);
      },
      tick: function tick() {
        this.end();
        this.start();
      },
      frame: function frame(now) {
        var t = now;
        var e = t - this._time;
        this._total++;
        var avg = this._opts.average || 1e3;
        if (e > avg) {
          this._value = 1e3 * this._total / e;
          this._total = 0;
          this._time = t;
          this._average(this._value);
        }
      }
    });
    module.exports = PerfCounter;
  }), {
    "./counter": 214
  } ],
  216: [ (function(require, module, exports) {
    "use strict";
    var _js = _interopRequireDefault(require("../platform/js"));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    var _BASELINE_RATIO = .26;
    var _BASELINE_OFFSET = 0;
    false;
    var MAX_CACHE_SIZE = 100;
    var pool = new _js["default"].Pool(2);
    pool.get = function() {
      var node = this._get() || {
        key: null,
        value: null,
        prev: null,
        next: null
      };
      return node;
    };
    function LRUCache(size) {
      this.count = 0;
      this.limit = size;
      this.datas = {};
      this.head = null;
      this.tail = null;
    }
    LRUCache.prototype.moveToHead = function(node) {
      node.next = this.head;
      node.prev = null;
      null !== this.head && (this.head.prev = node);
      this.head = node;
      null === this.tail && (this.tail = node);
      this.count++;
      this.datas[node.key] = node;
    };
    LRUCache.prototype.put = function(key, value) {
      var node = pool.get();
      node.key = key;
      node.value = value;
      if (this.count >= this.limit) {
        var discard = this.tail;
        delete this.datas[discard.key];
        this.count--;
        this.tail = discard.prev;
        this.tail.next = null;
        discard.prev = null;
        discard.next = null;
        pool.put(discard);
      }
      this.moveToHead(node);
    };
    LRUCache.prototype.remove = function(node) {
      null !== node.prev ? node.prev.next = node.next : this.head = node.next;
      null !== node.next ? node.next.prev = node.prev : this.tail = node.prev;
      delete this.datas[node.key];
      this.count--;
    };
    LRUCache.prototype.get = function(key) {
      var node = this.datas[key];
      if (node) {
        this.remove(node);
        this.moveToHead(node);
        return node.value;
      }
      return null;
    };
    LRUCache.prototype.clear = function() {
      this.count = 0;
      this.datas = {};
      this.head = null;
      this.tail = null;
    };
    LRUCache.prototype.has = function(key) {
      return !!this.datas[key];
    };
    LRUCache.prototype["delete"] = function(key) {
      var node = this.datas[key];
      this.remove(node);
    };
    var measureCache = new LRUCache(MAX_CACHE_SIZE);
    var textUtils = {
      BASELINE_RATIO: _BASELINE_RATIO,
      MIDDLE_RATIO: (_BASELINE_RATIO + 1) / 2 - _BASELINE_RATIO,
      BASELINE_OFFSET: _BASELINE_OFFSET,
      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]/,
      highSurrogateRex: /[\uD800-\uDBFF]/,
      lowSurrogateRex: /[\uDC00-\uDFFF]/,
      label_wrapinspection: true,
      __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 isUnicodeCJK(ch) {
        return this.__CHINESE_REG.test(ch) || this.__JAPANESE_REG.test(ch) || this.__KOREAN_REG.test(ch);
      },
      isUnicodeSpace: function isUnicodeSpace(ch) {
        ch = ch.charCodeAt(0);
        return ch >= 9 && ch <= 13 || 32 === ch || 133 === ch || 160 === ch || 5760 === ch || ch >= 8192 && ch <= 8202 || 8232 === ch || 8233 === ch || 8239 === ch || 8287 === ch || 12288 === ch;
      },
      safeMeasureText: function safeMeasureText(ctx, string, desc) {
        var font = desc || ctx.font;
        var key = font + "\ud83c\udfae" + string;
        var cache = measureCache.get(key);
        if (null !== cache) return cache;
        var metric = ctx.measureText(string);
        var width = metric && metric.width || 0;
        measureCache.put(key, width);
        return width;
      },
      _safeSubstring: function _safeSubstring(targetString, startIndex, endIndex) {
        var newStartIndex = startIndex, newEndIndex = endIndex;
        var startChar = targetString[startIndex];
        this.lowSurrogateRex.test(startChar) && newStartIndex--;
        if (void 0 !== endIndex) if (endIndex - 1 !== startIndex) {
          var endChar = targetString[endIndex - 1];
          this.highSurrogateRex.test(endChar) && newEndIndex--;
        } else this.highSurrogateRex.test(startChar) && newEndIndex++;
        return targetString.substring(newStartIndex, newEndIndex);
      },
      fragmentText: function fragmentText(stringToken, allWidth, maxWidth, measureText) {
        var wrappedWords = [];
        if (0 === stringToken.length || maxWidth < 0) {
          wrappedWords.push("");
          return wrappedWords;
        }
        var text = stringToken;
        while (allWidth > maxWidth && text.length > 1) {
          var fuzzyLen = text.length * (maxWidth / allWidth) | 0;
          var tmpText = this._safeSubstring(text, fuzzyLen);
          var width = allWidth - measureText(tmpText);
          var sLine = tmpText;
          var pushNum = 0;
          var checkWhile = 0;
          var checkCount = 10;
          while (width > maxWidth && checkWhile++ < checkCount) {
            fuzzyLen *= maxWidth / width;
            fuzzyLen |= 0;
            tmpText = this._safeSubstring(text, fuzzyLen);
            width = allWidth - measureText(tmpText);
          }
          checkWhile = 0;
          while (width <= maxWidth && checkWhile++ < checkCount) {
            if (tmpText) {
              var exec = this.label_wordRex.exec(tmpText);
              pushNum = exec ? exec[0].length : 1;
              sLine = tmpText;
            }
            fuzzyLen += pushNum;
            tmpText = this._safeSubstring(text, fuzzyLen);
            width = allWidth - measureText(tmpText);
          }
          fuzzyLen -= pushNum;
          if (0 === fuzzyLen) {
            fuzzyLen = 1;
            sLine = this._safeSubstring(text, 1);
          } else if (1 === fuzzyLen && this.highSurrogateRex.test(text[0])) {
            fuzzyLen = 2;
            sLine = this._safeSubstring(text, 2);
          }
          var sText = this._safeSubstring(text, 0, fuzzyLen), result;
          if (this.label_wrapinspection && this.label_symbolRex.test(sLine || tmpText)) {
            result = this.label_lastWordRex.exec(sText);
            fuzzyLen -= result ? result[0].length : 0;
            0 === fuzzyLen && (fuzzyLen = 1);
            sLine = this._safeSubstring(text, fuzzyLen);
            sText = this._safeSubstring(text, 0, fuzzyLen);
          }
          if (this.label_firstEnglish.test(sLine)) {
            result = this.label_lastEnglish.exec(sText);
            if (result && sText !== result[0]) {
              fuzzyLen -= result[0].length;
              sLine = this._safeSubstring(text, fuzzyLen);
              sText = this._safeSubstring(text, 0, fuzzyLen);
            }
          }
          if (0 === wrappedWords.length) wrappedWords.push(sText); else {
            sText = sText.trimLeft();
            sText.length > 0 && wrappedWords.push(sText);
          }
          text = sLine || tmpText;
          allWidth = measureText(text);
        }
        if (0 === wrappedWords.length) wrappedWords.push(text); else {
          text = text.trimLeft();
          text.length > 0 && wrappedWords.push(text);
        }
        return wrappedWords;
      }
    };
    cc.textUtils = module.exports = textUtils;
  }), {
    "../platform/js": 158
  } ],
  217: [ (function(require, module, exports) {
    "use strict";
    var Texture2D = require("../assets/CCTexture2D");
    var textureUtil = {
      loadImage: function loadImage(url, cb, target) {
        cc.assertID(url, 3103);
        var tex = cc.assetManager.assets.get(url);
        if (tex) {
          if (tex.loaded) {
            cb && cb.call(target, null, tex);
            return tex;
          }
          tex.once("load", (function() {
            cb && cb.call(target, null, tex);
          }), target);
          return tex;
        }
        cc.assetManager.loadRemote(url, (function(err, texture) {
          cb && cb.call(target, err, texture);
        }));
      },
      cacheImage: function cacheImage(url, image) {
        if (url && image) {
          var tex = new Texture2D();
          tex.initWithElement(image);
          cc.assetManager.assets.add(url, tex);
          return tex;
        }
      },
      postLoadTexture: function postLoadTexture(texture, callback) {
        if (texture.loaded) {
          callback && callback();
          return;
        }
        if (!texture.nativeUrl) {
          callback && callback();
          return;
        }
        cc.assetManager.loadNativeFile(texture, (function(err, image) {
          err || (texture._nativeAsset = image);
          callback && callback(err);
        }));
      }
    };
    module.exports = textureUtil;
  }), {
    "../assets/CCTexture2D": 74
  } ],
  218: [ (function(require, module, exports) {
    "use strict";
    var NodeUnit = require("./node-unit");
    var NodeMemPool = require("./node-mem-pool");
    module.exports = {
      NodeMemPool: new NodeMemPool(NodeUnit)
    };
  }), {
    "./node-mem-pool": 220,
    "./node-unit": 221
  } ],
  219: [ (function(require, module, exports) {
    "use strict";
    var MemPool = function MemPool(unitClass) {
      this._unitClass = unitClass;
      this._pool = [];
      this._findOrder = [];
      false;
    };
    var proto = MemPool.prototype;
    proto._initNative = function() {
      this._nativeMemPool = new renderer.MemPool();
    };
    proto._buildUnit = function(unitID) {
      var unit = new this._unitClass(unitID, this);
      false;
      return unit;
    };
    proto._destroyUnit = function(unitID) {
      this._pool[unitID] = null;
      for (var idx = 0, n = this._findOrder.length; idx < n; idx++) {
        var unit = this._findOrder[idx];
        if (unit && unit.unitID == unitID) {
          this._findOrder.splice(idx, 1);
          break;
        }
      }
      false;
    };
    proto._findUnitID = function() {
      var unitID = 0;
      var pool = this._pool;
      while (pool[unitID]) unitID++;
      return unitID;
    };
    proto.pop = function() {
      var findUnit = null;
      var idx = 0;
      var findOrder = this._findOrder;
      var pool = this._pool;
      for (var n = findOrder.length; idx < n; idx++) {
        var unit = findOrder[idx];
        if (unit && unit.hasSpace()) {
          findUnit = unit;
          break;
        }
      }
      if (!findUnit) {
        var unitID = this._findUnitID();
        findUnit = this._buildUnit(unitID);
        pool[unitID] = findUnit;
        findOrder.push(findUnit);
        idx = findOrder.length - 1;
      }
      var firstUnit = findOrder[0];
      if (firstUnit !== findUnit) {
        findOrder[0] = findUnit;
        findOrder[idx] = firstUnit;
      }
      return findUnit.pop();
    };
    proto.push = function(info) {
      var unit = this._pool[info.unitID];
      unit.push(info.index);
      this._findOrder.length > 1 && unit.isAllFree() && this._destroyUnit(info.unitID);
      return unit;
    };
    module.exports = MemPool;
  }), {} ],
  220: [ (function(require, module, exports) {
    "use strict";
    var MemPool = require("./mem-pool");
    var NodeMemPool = function NodeMemPool(unitClass) {
      MemPool.call(this, unitClass);
    };
    (function() {
      var Super = function Super() {};
      Super.prototype = MemPool.prototype;
      NodeMemPool.prototype = new Super();
    })();
    var proto = NodeMemPool.prototype;
    proto._initNative = function() {
      this._nativeMemPool = new renderer.NodeMemPool();
    };
    proto._destroyUnit = function(unitID) {
      MemPool.prototype._destroyUnit.call(this, unitID);
      false;
    };
    module.exports = NodeMemPool;
  }), {
    "./mem-pool": 219
  } ],
  221: [ (function(require, module, exports) {
    "use strict";
    var _utils = require("../../value-types/utils");
    var Uint32_Bytes = 4;
    var Uint8_Bytes = 1;
    var Dirty_Type = Uint32Array;
    var Dirty_Members = 1;
    var Dirty_Stride = Dirty_Members * Uint32_Bytes;
    var TRS_Members = 10;
    var TRS_Stride = TRS_Members * _utils.FLOAT_BYTES;
    var LocalMatrix_Members = 16;
    var LocalMatrix_Stride = LocalMatrix_Members * _utils.FLOAT_BYTES;
    var WorldMatrix_Members = 16;
    var WorldMatrix_Stride = WorldMatrix_Members * _utils.FLOAT_BYTES;
    var Parent_Type = Uint32Array;
    var Parent_Members = 2;
    var Parent_Stride = Parent_Members * Uint32_Bytes;
    var ZOrder_Type = Uint32Array;
    var ZOrder_Members = 1;
    var ZOrder_Stride = ZOrder_Members * Uint32_Bytes;
    var CullingMask_Type = Int32Array;
    var CullingMask_Members = 1;
    var CullingMask_Stride = CullingMask_Members * Uint32_Bytes;
    var Opacity_Type = Uint8Array;
    var Opacity_Members = 1;
    var Opacity_Stride = Opacity_Members * Uint8_Bytes;
    var Is3D_Type = Uint8Array;
    var Is3D_Members = 1;
    var Is3D_Stride = Is3D_Members * Uint8_Bytes;
    var Node_Type = Uint32Array;
    var Node_Members = 2;
    var Skew_Members = 2;
    var Skew_Stride = Skew_Members * _utils.FLOAT_BYTES;
    var UnitBase = require("./unit-base");
    var NodeUnit = function NodeUnit(unitID, memPool) {
      UnitBase.call(this, unitID, memPool);
      var contentNum = this._contentNum;
      this.trsList = new _utils.FLOAT_ARRAY_TYPE(contentNum * TRS_Members);
      this.localMatList = new _utils.FLOAT_ARRAY_TYPE(contentNum * LocalMatrix_Members);
      this.worldMatList = new _utils.FLOAT_ARRAY_TYPE(contentNum * WorldMatrix_Members);
      false;
      for (var i = 0; i < contentNum; i++) {
        var space = this._spacesData[i];
        space.trs = new _utils.FLOAT_ARRAY_TYPE(this.trsList.buffer, i * TRS_Stride, TRS_Members);
        space.localMat = new _utils.FLOAT_ARRAY_TYPE(this.localMatList.buffer, i * LocalMatrix_Stride, LocalMatrix_Members);
        space.worldMat = new _utils.FLOAT_ARRAY_TYPE(this.worldMatList.buffer, i * WorldMatrix_Stride, WorldMatrix_Members);
        false;
      }
    };
    (function() {
      var Super = function Super() {};
      Super.prototype = UnitBase.prototype;
      NodeUnit.prototype = new Super();
    })();
    module.exports = NodeUnit;
  }), {
    "../../value-types/utils": 231,
    "./unit-base": 222
  } ],
  222: [ (function(require, module, exports) {
    "use strict";
    var POINTER_INVALID_FLAG = 65535;
    var SPACE_FREE_FLAG = 0;
    var SPACE_USE_FLAG = 1;
    var POS_NEXT_FREE = 0;
    var POS_FREE_FLAG = 1;
    var UnitBase = function UnitBase(unitID, memPool, contentNum) {
      contentNum = contentNum || 128;
      this.unitID = unitID;
      this._memPool = memPool;
      this._data = new Uint16Array(2);
      this._data[0] = 0;
      this._data[1] = 0;
      this._contentNum = contentNum;
      this._signData = new Uint16Array(2 * this._contentNum);
      this._spacesData = [];
      for (var i = 0; i < contentNum; i++) {
        var signIndex = 2 * i;
        this._signData[signIndex + POS_NEXT_FREE] = i + 1;
        this._signData[signIndex + POS_FREE_FLAG] = SPACE_FREE_FLAG;
        this._spacesData[i] = {
          index: i,
          unitID: unitID
        };
      }
      this._signData[2 * (contentNum - 1)] = POINTER_INVALID_FLAG;
    };
    var UnitBaseProto = UnitBase.prototype;
    UnitBaseProto.hasSpace = function() {
      return this._data[0] !== POINTER_INVALID_FLAG;
    };
    UnitBaseProto.isAllFree = function() {
      return 0 == this._data[1];
    };
    UnitBaseProto.pop = function() {
      var headFreeIndex = this._data[0];
      if (headFreeIndex === POINTER_INVALID_FLAG) return null;
      var index = headFreeIndex;
      var signIndex = 2 * index;
      var space = this._spacesData[index];
      this._signData[signIndex + POS_FREE_FLAG] = SPACE_USE_FLAG;
      this._data[0] = this._signData[signIndex + POS_NEXT_FREE];
      this._data[1]++;
      return space;
    };
    UnitBaseProto.push = function(index) {
      var signIndex = 2 * index;
      this._signData[signIndex + POS_FREE_FLAG] = SPACE_FREE_FLAG;
      this._signData[signIndex + POS_NEXT_FREE] = this._data[0];
      this._data[0] = index;
      this._data[1]--;
    };
    UnitBaseProto.dump = function() {
      var spaceNum = 0;
      var index = this._data[0];
      var freeStr = "";
      while (index != POINTER_INVALID_FLAG) {
        spaceNum++;
        freeStr += index + "->";
        index = this._signData[2 * index + POS_NEXT_FREE];
      }
      var usingNum = 0;
      var usingStr = "";
      var contentNum = this._contentNum;
      for (var i = 0; i < contentNum; i++) {
        var freeFlag = this._signData[2 * i + POS_FREE_FLAG];
        if (freeFlag == SPACE_USE_FLAG) {
          usingNum++;
          usingStr += i + "->";
        }
      }
      var totalNum = spaceNum + usingNum;
      console.log("unitID:", this.unitID, "spaceNum:", spaceNum, "calc using num:", usingNum, "store using num:", this._data[1], "calc total num:", totalNum, "actually total num:", this._contentNum);
      console.log("free info:", freeStr);
      console.log("using info:", usingStr);
      usingNum != this._data[1] && cc.error("using num error", "calc using num:", usingNum, "store using num:", this._data[1]);
      spaceNum + usingNum != this._contentNum && cc.error("total num error", "calc total num:", totalNum, "actually total num:", this._contentNum);
    };
    module.exports = UnitBase;
  }), {} ],
  223: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _valueType = _interopRequireDefault(require("./value-type"));
    var _CCClass = _interopRequireDefault(require("../platform/CCClass"));
    var _misc = _interopRequireDefault(require("../utils/misc"));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    function _defineProperties(target, props) {
      for (var i = 0; i < props.length; i++) {
        var descriptor = props[i];
        descriptor.enumerable = descriptor.enumerable || false;
        descriptor.configurable = true;
        "value" in descriptor && (descriptor.writable = true);
        Object.defineProperty(target, descriptor.key, descriptor);
      }
    }
    function _createClass(Constructor, protoProps, staticProps) {
      protoProps && _defineProperties(Constructor.prototype, protoProps);
      staticProps && _defineProperties(Constructor, staticProps);
      return Constructor;
    }
    function _inheritsLoose(subClass, superClass) {
      subClass.prototype = Object.create(superClass.prototype);
      subClass.prototype.constructor = subClass;
      subClass.__proto__ = superClass;
    }
    var Color = (function(_ValueType) {
      _inheritsLoose(Color, _ValueType);
      Color.copy = function copy(out, a) {
        out.r = a.r;
        out.g = a.g;
        out.b = a.b;
        out.a = a.a;
        return out;
      };
      Color.clone = function clone(a) {
        return new Color(a.r, a.g, a.b, a.a);
      };
      Color.set = function set(out, r, g, b, a) {
        void 0 === r && (r = 255);
        void 0 === g && (g = 255);
        void 0 === b && (b = 255);
        void 0 === a && (a = 255);
        out.r = r;
        out.g = g;
        out.b = b;
        out.a = a;
        return out;
      };
      Color.fromHex = function fromHex(out, hex) {
        var r = (hex >> 24) / 255;
        var g = (hex >> 16 & 255) / 255;
        var b = (hex >> 8 & 255) / 255;
        var a = (255 & hex) / 255;
        out.r = r;
        out.g = g;
        out.b = b;
        out.a = a;
        return out;
      };
      Color.fromHEX = function fromHEX(out, hexString) {
        hexString = 0 === hexString.indexOf("#") ? hexString.substring(1) : hexString;
        out.r = parseInt(hexString.substr(0, 2), 16) || 0;
        out.g = parseInt(hexString.substr(2, 2), 16) || 0;
        out.b = parseInt(hexString.substr(4, 2), 16) || 0;
        out.a = parseInt(hexString.substr(6, 2), 16) || 255;
        out._val = (out.a << 24 >>> 0) + (out.b << 16) + (out.g << 8) + out.r;
        return out;
      };
      Color.add = function add(out, a, b) {
        out.r = a.r + b.r;
        out.g = a.g + b.g;
        out.b = a.b + b.b;
        out.a = a.a + b.a;
        return out;
      };
      Color.subtract = function subtract(out, a, b) {
        out.r = a.r - b.r;
        out.g = a.g - b.g;
        out.b = a.b - b.b;
        out.a = a.a - b.a;
        return out;
      };
      Color.multiply = function multiply(out, a, b) {
        out.r = a.r * b.r;
        out.g = a.g * b.g;
        out.b = a.b * b.b;
        out.a = a.a * b.a;
        return out;
      };
      Color.divide = function divide(out, a, b) {
        out.r = a.r / b.r;
        out.g = a.g / b.g;
        out.b = a.b / b.b;
        out.a = a.a / b.a;
        return out;
      };
      Color.scale = function scale(out, a, b) {
        out.r = a.r * b;
        out.g = a.g * b;
        out.b = a.b * b;
        out.a = a.a * b;
        return out;
      };
      Color.lerp = function lerp(out, a, b, t) {
        var ar = a.r, ag = a.g, ab = a.b, aa = a.a;
        out.r = ar + t * (b.r - ar);
        out.g = ag + t * (b.g - ag);
        out.b = ab + t * (b.b - ab);
        out.a = aa + t * (b.a - aa);
        return out;
      };
      Color.toArray = function toArray(out, a, ofs) {
        void 0 === ofs && (ofs = 0);
        var scale = a instanceof Color || a.a > 1 ? 1 / 255 : 1;
        out[ofs + 0] = a.r * scale;
        out[ofs + 1] = a.g * scale;
        out[ofs + 2] = a.b * scale;
        out[ofs + 3] = a.a * scale;
        return out;
      };
      Color.fromArray = function fromArray(arr, out, ofs) {
        void 0 === ofs && (ofs = 0);
        out.r = 255 * arr[ofs + 0];
        out.g = 255 * arr[ofs + 1];
        out.b = 255 * arr[ofs + 2];
        out.a = 255 * arr[ofs + 3];
        return out;
      };
      Color.premultiplyAlpha = function premultiplyAlpha(out, color) {
        var alpha = color.a / 255;
        out.r = color.r * alpha;
        out.g = color.g * alpha;
        out.b = color.b * alpha;
        out._fastSetA(color.a);
        return out;
      };
      _createClass(Color, null, [ {
        key: "WHITE",
        get: function get() {
          return new Color(255, 255, 255, 255);
        }
      }, {
        key: "BLACK",
        get: function get() {
          return new Color(0, 0, 0, 255);
        }
      }, {
        key: "TRANSPARENT",
        get: function get() {
          return new Color(0, 0, 0, 0);
        }
      }, {
        key: "GRAY",
        get: function get() {
          return new Color(127.5, 127.5, 127.5);
        }
      }, {
        key: "RED",
        get: function get() {
          return new Color(255, 0, 0);
        }
      }, {
        key: "GREEN",
        get: function get() {
          return new Color(0, 255, 0);
        }
      }, {
        key: "BLUE",
        get: function get() {
          return new Color(0, 0, 255);
        }
      }, {
        key: "YELLOW",
        get: function get() {
          return new Color(255, 235, 4);
        }
      }, {
        key: "ORANGE",
        get: function get() {
          return new Color(255, 127, 0);
        }
      }, {
        key: "CYAN",
        get: function get() {
          return new Color(0, 255, 255);
        }
      }, {
        key: "MAGENTA",
        get: function get() {
          return new Color(255, 0, 255);
        }
      } ]);
      function Color(r, g, b, a) {
        var _this;
        void 0 === r && (r = 0);
        void 0 === g && (g = 0);
        void 0 === b && (b = 0);
        void 0 === a && (a = 255);
        _this = _ValueType.call(this) || this;
        _this._val = 0;
        if ("object" === typeof r) {
          g = r.g;
          b = r.b;
          a = r.a;
          r = r.r;
        }
        _this._val = (a << 24 >>> 0) + (b << 16) + (g << 8) + r;
        return _this;
      }
      var _proto = Color.prototype;
      _proto.clone = function clone() {
        var ret = new Color();
        ret._val = this._val;
        return ret;
      };
      _proto.equals = function equals(other) {
        return other && this._val === other._val;
      };
      _proto.lerp = function lerp(to, ratio, out) {
        out = out || new Color();
        var r = this.r;
        var g = this.g;
        var b = this.b;
        var a = this.a;
        out.r = r + (to.r - r) * ratio;
        out.g = g + (to.g - g) * ratio;
        out.b = b + (to.b - b) * ratio;
        out.a = a + (to.a - a) * ratio;
        return out;
      };
      _proto.toString = function toString() {
        return "rgba(" + this.r.toFixed() + ", " + this.g.toFixed() + ", " + this.b.toFixed() + ", " + this.a.toFixed() + ")";
      };
      _proto.getR = function getR() {
        return 255 & this._val;
      };
      _proto.setR = function setR(red) {
        red = ~~_misc["default"].clampf(red, 0, 255);
        this._val = (4294967040 & this._val | red) >>> 0;
        return this;
      };
      _proto.getG = function getG() {
        return (65280 & this._val) >> 8;
      };
      _proto.setG = function setG(green) {
        green = ~~_misc["default"].clampf(green, 0, 255);
        this._val = (4294902015 & this._val | green << 8) >>> 0;
        return this;
      };
      _proto.getB = function getB() {
        return (16711680 & this._val) >> 16;
      };
      _proto.setB = function setB(blue) {
        blue = ~~_misc["default"].clampf(blue, 0, 255);
        this._val = (4278255615 & this._val | blue << 16) >>> 0;
        return this;
      };
      _proto.getA = function getA() {
        return (4278190080 & this._val) >>> 24;
      };
      _proto.setA = function setA(alpha) {
        alpha = ~~_misc["default"].clampf(alpha, 0, 255);
        this._val = (16777215 & this._val | alpha << 24) >>> 0;
        return this;
      };
      _proto.toCSS = function toCSS(opt) {
        return opt && "rgba" !== opt ? "rgb" === opt ? "rgb(" + this.r + "," + this.g + "," + this.b + ")" : "#" + this.toHEX(opt) : "rgba(" + this.r + "," + this.g + "," + this.b + "," + (this.a / 255).toFixed(2) + ")";
      };
      _proto.fromHEX = function fromHEX(hexString) {
        hexString = 0 === hexString.indexOf("#") ? hexString.substring(1) : hexString;
        var r = parseInt(hexString.substr(0, 2), 16) || 0;
        var g = parseInt(hexString.substr(2, 2), 16) || 0;
        var b = parseInt(hexString.substr(4, 2), 16) || 0;
        var a = parseInt(hexString.substr(6, 2), 16) || 255;
        this._val = (a << 24 >>> 0) + (b << 16) + (g << 8) + r;
        return this;
      };
      _proto.toHEX = function toHEX(fmt) {
        var prefix = "0";
        var hex = [ (this.r < 16 ? prefix : "") + this.r.toString(16), (this.g < 16 ? prefix : "") + this.g.toString(16), (this.b < 16 ? prefix : "") + this.b.toString(16) ];
        if ("#rgb" === fmt) {
          hex[0] = hex[0][0];
          hex[1] = hex[1][0];
          hex[2] = hex[2][0];
        } else "#rrggbbaa" === fmt && hex.push((this.a < 16 ? prefix : "") + this.a.toString(16));
        return hex.join("");
      };
      _proto.toRGBValue = function toRGBValue() {
        return 16777215 & this._val;
      };
      _proto.fromHSV = function fromHSV(h, s, v) {
        var r, g, b;
        if (0 === s) r = g = b = v; else if (0 === v) r = g = b = 0; else {
          1 === h && (h = 0);
          h *= 6;
          var i = Math.floor(h);
          var f = h - i;
          var p = v * (1 - s);
          var q = v * (1 - s * f);
          var t = v * (1 - s * (1 - f));
          switch (i) {
           case 0:
            r = v;
            g = t;
            b = p;
            break;

           case 1:
            r = q;
            g = v;
            b = p;
            break;

           case 2:
            r = p;
            g = v;
            b = t;
            break;

           case 3:
            r = p;
            g = q;
            b = v;
            break;

           case 4:
            r = t;
            g = p;
            b = v;
            break;

           case 5:
            r = v;
            g = p;
            b = q;
          }
        }
        r *= 255;
        g *= 255;
        b *= 255;
        this._val = (this.a << 24 >>> 0) + (b << 16) + (g << 8) + r;
        return this;
      };
      _proto.toHSV = function toHSV() {
        var r = this.r / 255;
        var g = this.g / 255;
        var b = this.b / 255;
        var hsv = {
          h: 0,
          s: 0,
          v: 0
        };
        var max = Math.max(r, g, b);
        var min = Math.min(r, g, b);
        var delta = 0;
        hsv.v = max;
        hsv.s = max ? (max - min) / max : 0;
        if (hsv.s) {
          delta = max - min;
          hsv.h = r === max ? (g - b) / delta : g === max ? 2 + (b - r) / delta : 4 + (r - g) / delta;
          hsv.h /= 6;
          hsv.h < 0 && (hsv.h += 1);
        } else hsv.h = 0;
        return hsv;
      };
      _proto.set = function set(color) {
        if (color._val) this._val = color._val; else {
          this.r = color.r;
          this.g = color.g;
          this.b = color.b;
          this.a = color.a;
        }
        return this;
      };
      _proto._fastSetA = function _fastSetA(alpha) {
        this._val = (16777215 & this._val | alpha << 24) >>> 0;
      };
      _proto.multiply = function multiply(other) {
        var r = (255 & this._val) * other.r >> 8;
        var g = (65280 & this._val) * other.g >> 8;
        var b = (16711680 & this._val) * other.b >> 8;
        var a = ((4278190080 & this._val) >>> 8) * other.a;
        this._val = 4278190080 & a | 16711680 & b | 65280 & g | 255 & r;
        return this;
      };
      _createClass(Color, [ {
        key: "r",
        get: function get() {
          return this.getR();
        },
        set: function set(v) {
          this.setR(v);
        }
      }, {
        key: "g",
        get: function get() {
          return this.getG();
        },
        set: function set(v) {
          this.setG(v);
        }
      }, {
        key: "b",
        get: function get() {
          return this.getB();
        },
        set: function set(v) {
          this.setB(v);
        }
      }, {
        key: "a",
        get: function get() {
          return this.getA();
        },
        set: function set(v) {
          this.setA(v);
        }
      } ]);
      return Color;
    })(_valueType["default"]);
    exports["default"] = Color;
    Color.div = Color.divide;
    Color.sub = Color.subtract;
    Color.mul = Color.multiply;
    Color.WHITE_R = Color.WHITE;
    Color.BLACK_R = Color.BLACK;
    Color.TRANSPARENT_R = Color.TRANSPARENT;
    Color.GRAY_R = Color.GRAY;
    Color.RED_R = Color.RED;
    Color.GREEN_R = Color.GREEN;
    Color.BLUE_R = Color.BLUE;
    Color.YELLOW_R = Color.YELLOW;
    Color.ORANGE_R = Color.ORANGE;
    Color.CYAN_R = Color.CYAN;
    Color.MAGENTA_R = Color.MAGENTA;
    _CCClass["default"].fastDefine("cc.Color", Color, {
      r: 0,
      g: 0,
      b: 0,
      a: 255
    });
    cc.Color = Color;
    cc.color = function color(r, g, b, a) {
      if ("string" === typeof r) {
        var result = new Color();
        return result.fromHEX(r);
      }
      if ("object" === typeof r) return new Color(r.r, r.g, r.b, r.a);
      return new Color(r, g, b, a);
    };
    module.exports = exports["default"];
  }), {
    "../platform/CCClass": 138,
    "../utils/misc": 209,
    "./value-type": 232
  } ],
  224: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    var _exportNames = {
      Vec2: true,
      Vec3: true,
      Vec4: true,
      Mat4: true,
      Mat3: true,
      Rect: true,
      Size: true,
      Color: true,
      Quat: true,
      Trs: true
    };
    exports.Trs = exports.Quat = exports.Color = exports.Size = exports.Rect = exports.Mat3 = exports.Mat4 = exports.Vec4 = exports.Vec3 = exports.Vec2 = void 0;
    var _vec = _interopRequireDefault(require("./vec2"));
    exports.Vec2 = _vec["default"];
    var _vec2 = _interopRequireDefault(require("./vec3"));
    exports.Vec3 = _vec2["default"];
    var _vec3 = _interopRequireDefault(require("./vec4"));
    exports.Vec4 = _vec3["default"];
    var _mat = _interopRequireDefault(require("./mat4"));
    exports.Mat4 = _mat["default"];
    var _mat2 = _interopRequireDefault(require("./mat3"));
    exports.Mat3 = _mat2["default"];
    var _rect = _interopRequireDefault(require("./rect"));
    exports.Rect = _rect["default"];
    var _size = _interopRequireDefault(require("./size"));
    exports.Size = _size["default"];
    var _color = _interopRequireDefault(require("./color"));
    exports.Color = _color["default"];
    var _quat = _interopRequireDefault(require("./quat"));
    exports.Quat = _quat["default"];
    var _trs = _interopRequireDefault(require("./trs"));
    exports.Trs = _trs["default"];
    var _utils = require("./utils");
    Object.keys(_utils).forEach((function(key) {
      if ("default" === key || "__esModule" === key) return;
      if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
      exports[key] = _utils[key];
    }));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    cc.math = module.exports;
  }), {
    "./color": 223,
    "./mat3": 225,
    "./mat4": 226,
    "./quat": 227,
    "./rect": 228,
    "./size": 229,
    "./trs": 230,
    "./utils": 231,
    "./vec2": 233,
    "./vec3": 234,
    "./vec4": 235
  } ],
  225: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _utils = require("../value-types/utils");
    var _vec = _interopRequireDefault(require("./vec3"));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    var Mat3 = (function() {
      Mat3.create = function create(m00, m01, m02, m03, m04, m05, m06, m07, m08) {
        void 0 === m00 && (m00 = 1);
        void 0 === m01 && (m01 = 0);
        void 0 === m02 && (m02 = 0);
        void 0 === m03 && (m03 = 0);
        void 0 === m04 && (m04 = 1);
        void 0 === m05 && (m05 = 0);
        void 0 === m06 && (m06 = 0);
        void 0 === m07 && (m07 = 0);
        void 0 === m08 && (m08 = 1);
        return new Mat3(m00, m01, m02, m03, m04, m05, m06, m07, m08);
      };
      Mat3.clone = function clone(a) {
        var am = a.m;
        return new Mat3(am[0], am[1], am[2], am[3], am[4], am[5], am[6], am[7], am[8]);
      };
      Mat3.copy = function copy(out, a) {
        out.m.set(a.m);
        return out;
      };
      Mat3.set = function set(out, m00, m01, m02, m10, m11, m12, m20, m21, m22) {
        var outm = out.m;
        outm[0] = m00;
        outm[1] = m01;
        outm[2] = m02;
        outm[3] = m10;
        outm[4] = m11;
        outm[5] = m12;
        outm[6] = m20;
        outm[7] = m21;
        outm[8] = m22;
        return out;
      };
      Mat3.identity = function identity(out) {
        var outm = out.m;
        outm[0] = 1;
        outm[1] = 0;
        outm[2] = 0;
        outm[3] = 0;
        outm[4] = 1;
        outm[5] = 0;
        outm[6] = 0;
        outm[7] = 0;
        outm[8] = 1;
        return out;
      };
      Mat3.transpose = function transpose(out, a) {
        var am = a.m, outm = out.m;
        if (out === a) {
          var a01 = am[1], a02 = am[2], a12 = am[5];
          outm[1] = am[3];
          outm[2] = am[6];
          outm[3] = a01;
          outm[5] = am[7];
          outm[6] = a02;
          outm[7] = a12;
        } else {
          outm[0] = am[0];
          outm[1] = am[3];
          outm[2] = am[6];
          outm[3] = am[1];
          outm[4] = am[4];
          outm[5] = am[7];
          outm[6] = am[2];
          outm[7] = am[5];
          outm[8] = am[8];
        }
        return out;
      };
      Mat3.invert = function invert(out, a) {
        var am = a.m, outm = out.m;
        var a00 = am[0], a01 = am[1], a02 = am[2], a10 = am[3], a11 = am[4], a12 = am[5], a20 = am[6], a21 = am[7], a22 = am[8];
        var b01 = a22 * a11 - a12 * a21;
        var b11 = -a22 * a10 + a12 * a20;
        var b21 = a21 * a10 - a11 * a20;
        var det = a00 * b01 + a01 * b11 + a02 * b21;
        if (!det) return out;
        det = 1 / det;
        outm[0] = b01 * det;
        outm[1] = (-a22 * a01 + a02 * a21) * det;
        outm[2] = (a12 * a01 - a02 * a11) * det;
        outm[3] = b11 * det;
        outm[4] = (a22 * a00 - a02 * a20) * det;
        outm[5] = (-a12 * a00 + a02 * a10) * det;
        outm[6] = b21 * det;
        outm[7] = (-a21 * a00 + a01 * a20) * det;
        outm[8] = (a11 * a00 - a01 * a10) * det;
        return out;
      };
      Mat3.adjoint = function adjoint(out, a) {
        var am = a.m, outm = out.m;
        var a00 = am[0], a01 = am[1], a02 = am[2], a10 = am[3], a11 = am[4], a12 = am[5], a20 = am[6], a21 = am[7], a22 = am[8];
        outm[0] = a11 * a22 - a12 * a21;
        outm[1] = a02 * a21 - a01 * a22;
        outm[2] = a01 * a12 - a02 * a11;
        outm[3] = a12 * a20 - a10 * a22;
        outm[4] = a00 * a22 - a02 * a20;
        outm[5] = a02 * a10 - a00 * a12;
        outm[6] = a10 * a21 - a11 * a20;
        outm[7] = a01 * a20 - a00 * a21;
        outm[8] = a00 * a11 - a01 * a10;
        return out;
      };
      Mat3.determinant = function determinant(a) {
        var am = a.m;
        var a00 = am[0], a01 = am[1], a02 = am[2], a10 = am[3], a11 = am[4], a12 = am[5], a20 = am[6], a21 = am[7], a22 = am[8];
        return a00 * (a22 * a11 - a12 * a21) + a01 * (-a22 * a10 + a12 * a20) + a02 * (a21 * a10 - a11 * a20);
      };
      Mat3.multiply = function multiply(out, a, b) {
        var am = a.m, bm = b.m, outm = out.m;
        var a00 = am[0], a01 = am[1], a02 = am[2], a10 = am[3], a11 = am[4], a12 = am[5], a20 = am[6], a21 = am[7], a22 = am[8];
        var b00 = bm[0], b01 = bm[1], b02 = bm[2];
        var b10 = bm[3], b11 = bm[4], b12 = bm[5];
        var b20 = bm[6], b21 = bm[7], b22 = bm[8];
        outm[0] = b00 * a00 + b01 * a10 + b02 * a20;
        outm[1] = b00 * a01 + b01 * a11 + b02 * a21;
        outm[2] = b00 * a02 + b01 * a12 + b02 * a22;
        outm[3] = b10 * a00 + b11 * a10 + b12 * a20;
        outm[4] = b10 * a01 + b11 * a11 + b12 * a21;
        outm[5] = b10 * a02 + b11 * a12 + b12 * a22;
        outm[6] = b20 * a00 + b21 * a10 + b22 * a20;
        outm[7] = b20 * a01 + b21 * a11 + b22 * a21;
        outm[8] = b20 * a02 + b21 * a12 + b22 * a22;
        return out;
      };
      Mat3.multiplyMat4 = function multiplyMat4(out, a, b) {
        var am = a.m, bm = b.m, outm = out.m;
        var a00 = am[0], a01 = am[1], a02 = am[2], a10 = am[3], a11 = am[4], a12 = am[5], a20 = am[6], a21 = am[7], a22 = am[8];
        var b00 = bm[0], b01 = bm[1], b02 = bm[2];
        var b10 = bm[4], b11 = bm[5], b12 = bm[6];
        var b20 = bm[8], b21 = bm[9], b22 = bm[10];
        outm[0] = b00 * a00 + b01 * a10 + b02 * a20;
        outm[1] = b00 * a01 + b01 * a11 + b02 * a21;
        outm[2] = b00 * a02 + b01 * a12 + b02 * a22;
        outm[3] = b10 * a00 + b11 * a10 + b12 * a20;
        outm[4] = b10 * a01 + b11 * a11 + b12 * a21;
        outm[5] = b10 * a02 + b11 * a12 + b12 * a22;
        outm[6] = b20 * a00 + b21 * a10 + b22 * a20;
        outm[7] = b20 * a01 + b21 * a11 + b22 * a21;
        outm[8] = b20 * a02 + b21 * a12 + b22 * a22;
        return out;
      };
      Mat3.translate = function translate(out, a, v) {
        var am = a.m, outm = out.m;
        var a00 = am[0], a01 = am[1], a02 = am[2], a10 = am[3], a11 = am[4], a12 = am[5], a20 = am[6], a21 = am[7], a22 = am[8];
        var x = v.x, y = v.y;
        outm[0] = a00;
        outm[1] = a01;
        outm[2] = a02;
        outm[3] = a10;
        outm[4] = a11;
        outm[5] = a12;
        outm[6] = x * a00 + y * a10 + a20;
        outm[7] = x * a01 + y * a11 + a21;
        outm[8] = x * a02 + y * a12 + a22;
        return out;
      };
      Mat3.rotate = function rotate(out, a, rad) {
        var am = a.m, outm = out.m;
        var a00 = am[0], a01 = am[1], a02 = am[2], a10 = am[3], a11 = am[4], a12 = am[5], a20 = am[6], a21 = am[7], a22 = am[8];
        var s = Math.sin(rad);
        var c = Math.cos(rad);
        outm[0] = c * a00 + s * a10;
        outm[1] = c * a01 + s * a11;
        outm[2] = c * a02 + s * a12;
        outm[3] = c * a10 - s * a00;
        outm[4] = c * a11 - s * a01;
        outm[5] = c * a12 - s * a02;
        outm[6] = a20;
        outm[7] = a21;
        outm[8] = a22;
        return out;
      };
      Mat3.scale = function scale(out, a, v) {
        var x = v.x, y = v.y;
        var am = a.m, outm = out.m;
        outm[0] = x * am[0];
        outm[1] = x * am[1];
        outm[2] = x * am[2];
        outm[3] = y * am[3];
        outm[4] = y * am[4];
        outm[5] = y * am[5];
        outm[6] = am[6];
        outm[7] = am[7];
        outm[8] = am[8];
        return out;
      };
      Mat3.fromMat4 = function fromMat4(out, a) {
        var am = a.m, outm = out.m;
        outm[0] = am[0];
        outm[1] = am[1];
        outm[2] = am[2];
        outm[3] = am[4];
        outm[4] = am[5];
        outm[5] = am[6];
        outm[6] = am[8];
        outm[7] = am[9];
        outm[8] = am[10];
        return out;
      };
      Mat3.fromTranslation = function fromTranslation(out, v) {
        var outm = out.m;
        outm[0] = 1;
        outm[1] = 0;
        outm[2] = 0;
        outm[3] = 0;
        outm[4] = 1;
        outm[5] = 0;
        outm[6] = v.x;
        outm[7] = v.y;
        outm[8] = 1;
        return out;
      };
      Mat3.fromRotation = function fromRotation(out, rad) {
        var s = Math.sin(rad), c = Math.cos(rad);
        var outm = out.m;
        outm[0] = c;
        outm[1] = s;
        outm[2] = 0;
        outm[3] = -s;
        outm[4] = c;
        outm[5] = 0;
        outm[6] = 0;
        outm[7] = 0;
        outm[8] = 1;
        return out;
      };
      Mat3.fromScaling = function fromScaling(out, v) {
        var outm = out.m;
        outm[0] = v.x;
        outm[1] = 0;
        outm[2] = 0;
        outm[3] = 0;
        outm[4] = v.y;
        outm[5] = 0;
        outm[6] = 0;
        outm[7] = 0;
        outm[8] = 1;
        return out;
      };
      Mat3.fromQuat = function fromQuat(out, q) {
        var outm = out.m;
        var x = q.x, y = q.y, z = q.z, w = q.w;
        var x2 = x + x;
        var y2 = y + y;
        var z2 = z + z;
        var xx = x * x2;
        var yx = y * x2;
        var yy = y * y2;
        var zx = z * x2;
        var zy = z * y2;
        var zz = z * z2;
        var wx = w * x2;
        var wy = w * y2;
        var wz = w * z2;
        outm[0] = 1 - yy - zz;
        outm[3] = yx - wz;
        outm[6] = zx + wy;
        outm[1] = yx + wz;
        outm[4] = 1 - xx - zz;
        outm[7] = zy - wx;
        outm[2] = zx - wy;
        outm[5] = zy + wx;
        outm[8] = 1 - xx - yy;
        return out;
      };
      Mat3.fromViewUp = function fromViewUp(out, view, up) {
        var _fromViewUpIIFE = (function() {
          var default_up = new _vec["default"](0, 1, 0);
          var x = new _vec["default"]();
          var y = new _vec["default"]();
          return function(out, view, up) {
            if (_vec["default"].lengthSqr(view) < _utils.EPSILON * _utils.EPSILON) {
              Mat3.identity(out);
              return out;
            }
            up = up || default_up;
            _vec["default"].normalize(x, _vec["default"].cross(x, up, view));
            if (_vec["default"].lengthSqr(x) < _utils.EPSILON * _utils.EPSILON) {
              Mat3.identity(out);
              return out;
            }
            _vec["default"].cross(y, view, x);
            Mat3.set(out, x.x, x.y, x.z, y.x, y.y, y.z, view.x, view.y, view.z);
            return out;
          };
        })();
        return _fromViewUpIIFE(out, view, up);
      };
      Mat3.normalFromMat4 = function normalFromMat4(out, a) {
        var am = a.m, outm = out.m;
        var a00 = am[0], a01 = am[1], a02 = am[2], a03 = am[3], a10 = am[4], a11 = am[5], a12 = am[6], a13 = am[7], a20 = am[8], a21 = am[9], a22 = am[10], a23 = am[11], a30 = am[12], a31 = am[13], a32 = am[14], a33 = am[15];
        var b00 = a00 * a11 - a01 * a10;
        var b01 = a00 * a12 - a02 * a10;
        var b02 = a00 * a13 - a03 * a10;
        var b03 = a01 * a12 - a02 * a11;
        var b04 = a01 * a13 - a03 * a11;
        var b05 = a02 * a13 - a03 * a12;
        var b06 = a20 * a31 - a21 * a30;
        var b07 = a20 * a32 - a22 * a30;
        var b08 = a20 * a33 - a23 * a30;
        var b09 = a21 * a32 - a22 * a31;
        var b10 = a21 * a33 - a23 * a31;
        var b11 = a22 * a33 - a23 * a32;
        var det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;
        if (!det) return out;
        det = 1 / det;
        outm[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;
        outm[1] = (a12 * b08 - a10 * b11 - a13 * b07) * det;
        outm[2] = (a10 * b10 - a11 * b08 + a13 * b06) * det;
        outm[3] = (a02 * b10 - a01 * b11 - a03 * b09) * det;
        outm[4] = (a00 * b11 - a02 * b08 + a03 * b07) * det;
        outm[5] = (a01 * b08 - a00 * b10 - a03 * b06) * det;
        outm[6] = (a31 * b05 - a32 * b04 + a33 * b03) * det;
        outm[7] = (a32 * b02 - a30 * b05 - a33 * b01) * det;
        outm[8] = (a30 * b04 - a31 * b02 + a33 * b00) * det;
        return out;
      };
      Mat3.frob = function frob(a) {
        var am = a.m;
        return Math.sqrt(Math.pow(am[0], 2) + Math.pow(am[1], 2) + Math.pow(am[2], 2) + Math.pow(am[3], 2) + Math.pow(am[4], 2) + Math.pow(am[5], 2) + Math.pow(am[6], 2) + Math.pow(am[7], 2) + Math.pow(am[8], 2));
      };
      Mat3.add = function add(out, a, b) {
        var am = a.m, bm = b.m, outm = out.m;
        outm[0] = am[0] + bm[0];
        outm[1] = am[1] + bm[1];
        outm[2] = am[2] + bm[2];
        outm[3] = am[3] + bm[3];
        outm[4] = am[4] + bm[4];
        outm[5] = am[5] + bm[5];
        outm[6] = am[6] + bm[6];
        outm[7] = am[7] + bm[7];
        outm[8] = am[8] + bm[8];
        return out;
      };
      Mat3.subtract = function subtract(out, a, b) {
        var am = a.m, bm = b.m, outm = out.m;
        outm[0] = am[0] - bm[0];
        outm[1] = am[1] - bm[1];
        outm[2] = am[2] - bm[2];
        outm[3] = am[3] - bm[3];
        outm[4] = am[4] - bm[4];
        outm[5] = am[5] - bm[5];
        outm[6] = am[6] - bm[6];
        outm[7] = am[7] - bm[7];
        outm[8] = am[8] - bm[8];
        return out;
      };
      Mat3.multiplyScalar = function multiplyScalar(out, a, b) {
        var am = a.m, outm = out.m;
        outm[0] = am[0] * b;
        outm[1] = am[1] * b;
        outm[2] = am[2] * b;
        outm[3] = am[3] * b;
        outm[4] = am[4] * b;
        outm[5] = am[5] * b;
        outm[6] = am[6] * b;
        outm[7] = am[7] * b;
        outm[8] = am[8] * b;
        return out;
      };
      Mat3.multiplyScalarAndAdd = function multiplyScalarAndAdd(out, a, b, scale) {
        var am = a.m, bm = b.m, outm = out.m;
        outm[0] = am[0] + bm[0] * scale;
        outm[1] = am[1] + bm[1] * scale;
        outm[2] = am[2] + bm[2] * scale;
        outm[3] = am[3] + bm[3] * scale;
        outm[4] = am[4] + bm[4] * scale;
        outm[5] = am[5] + bm[5] * scale;
        outm[6] = am[6] + bm[6] * scale;
        outm[7] = am[7] + bm[7] * scale;
        outm[8] = am[8] + bm[8] * scale;
        return out;
      };
      Mat3.exactEquals = function exactEquals(a, b) {
        var am = a.m, bm = b.m;
        return am[0] === bm[0] && am[1] === bm[1] && am[2] === bm[2] && am[3] === bm[3] && am[4] === bm[4] && am[5] === bm[5] && am[6] === bm[6] && am[7] === bm[7] && am[8] === bm[8];
      };
      Mat3.equals = function equals(a, b) {
        var am = a.m, bm = b.m;
        var a0 = am[0], a1 = am[1], a2 = am[2], a3 = am[3], a4 = am[4], a5 = am[5], a6 = am[6], a7 = am[7], a8 = am[8];
        var b0 = bm[0], b1 = bm[1], b2 = bm[2], b3 = bm[3], b4 = bm[4], b5 = bm[5], b6 = bm[6], b7 = bm[7], b8 = bm[8];
        return Math.abs(a0 - b0) <= _utils.EPSILON * Math.max(1, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= _utils.EPSILON * Math.max(1, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= _utils.EPSILON * Math.max(1, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= _utils.EPSILON * Math.max(1, Math.abs(a3), Math.abs(b3)) && Math.abs(a4 - b4) <= _utils.EPSILON * Math.max(1, Math.abs(a4), Math.abs(b4)) && Math.abs(a5 - b5) <= _utils.EPSILON * Math.max(1, Math.abs(a5), Math.abs(b5)) && Math.abs(a6 - b6) <= _utils.EPSILON * Math.max(1, Math.abs(a6), Math.abs(b6)) && Math.abs(a7 - b7) <= _utils.EPSILON * Math.max(1, Math.abs(a7), Math.abs(b7)) && Math.abs(a8 - b8) <= _utils.EPSILON * Math.max(1, Math.abs(a8), Math.abs(b8));
      };
      Mat3.toArray = function toArray(out, mat, ofs) {
        void 0 === ofs && (ofs = 0);
        var m = mat.m;
        for (var i = 0; i < 9; i++) out[ofs + i] = m[i];
        return out;
      };
      Mat3.fromArray = function fromArray(out, arr, ofs) {
        void 0 === ofs && (ofs = 0);
        var m = out.m;
        for (var i = 0; i < 9; i++) m[i] = arr[ofs + i];
        return out;
      };
      function Mat3(m00, m01, m02, m03, m04, m05, m06, m07, m08) {
        void 0 === m00 && (m00 = 1);
        void 0 === m01 && (m01 = 0);
        void 0 === m02 && (m02 = 0);
        void 0 === m03 && (m03 = 0);
        void 0 === m04 && (m04 = 1);
        void 0 === m05 && (m05 = 0);
        void 0 === m06 && (m06 = 0);
        void 0 === m07 && (m07 = 0);
        void 0 === m08 && (m08 = 1);
        this.m = void 0;
        if (m00 instanceof _utils.FLOAT_ARRAY_TYPE) this.m = m00; else {
          this.m = new _utils.FLOAT_ARRAY_TYPE(9);
          var m = this.m;
          m[0] = m00;
          m[1] = m01;
          m[2] = m02;
          m[3] = m03;
          m[4] = m04;
          m[5] = m05;
          m[6] = m06;
          m[7] = m07;
          m[8] = m08;
        }
      }
      var _proto = Mat3.prototype;
      _proto.toString = function toString() {
        var am = this.m;
        return "mat3(" + am[0] + ", " + am[1] + ", " + am[2] + ", " + am[3] + ", " + am[4] + ", " + am[5] + ", " + am[6] + ", " + am[7] + ", " + am[8] + ")";
      };
      return Mat3;
    })();
    exports["default"] = Mat3;
    Mat3.sub = Mat3.subtract;
    Mat3.mul = Mat3.multiply;
    Mat3.IDENTITY = Object.freeze(new Mat3());
    cc.Mat3 = Mat3;
    module.exports = exports["default"];
  }), {
    "../value-types/utils": 231,
    "./vec3": 234
  } ],
  226: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _valueType = _interopRequireDefault(require("./value-type"));
    var _CCClass = _interopRequireDefault(require("../platform/CCClass"));
    var _vec = _interopRequireDefault(require("./vec3"));
    var _quat = _interopRequireDefault(require("./quat"));
    var _utils = require("./utils");
    var _mat = _interopRequireDefault(require("./mat3"));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    function _inheritsLoose(subClass, superClass) {
      subClass.prototype = Object.create(superClass.prototype);
      subClass.prototype.constructor = subClass;
      subClass.__proto__ = superClass;
    }
    var _a00 = 0;
    var _a01 = 0;
    var _a02 = 0;
    var _a03 = 0;
    var _a10 = 0;
    var _a11 = 0;
    var _a12 = 0;
    var _a13 = 0;
    var _a20 = 0;
    var _a21 = 0;
    var _a22 = 0;
    var _a23 = 0;
    var _a30 = 0;
    var _a31 = 0;
    var _a32 = 0;
    var _a33 = 0;
    var Mat4 = (function(_ValueType) {
      _inheritsLoose(Mat4, _ValueType);
      var _proto = Mat4.prototype;
      _proto.mul = function mul(m, out) {
        return Mat4.multiply(out || new Mat4(), this, m);
      };
      _proto.mulScalar = function mulScalar(num, out) {
        Mat4.multiplyScalar(out || new Mat4(), this, num);
      };
      _proto.sub = function sub(m, out) {
        Mat4.subtract(out || new Mat4(), this, m);
      };
      Mat4.clone = function clone(a) {
        var m = a.m;
        return new Mat4(m[0], m[1], m[2], m[3], m[4], m[5], m[6], m[7], m[8], m[9], m[10], m[11], m[12], m[13], m[14], m[15]);
      };
      Mat4.copy = function copy(out, a) {
        var m = out.m, am = a.m;
        m[0] = am[0];
        m[1] = am[1];
        m[2] = am[2];
        m[3] = am[3];
        m[4] = am[4];
        m[5] = am[5];
        m[6] = am[6];
        m[7] = am[7];
        m[8] = am[8];
        m[9] = am[9];
        m[10] = am[10];
        m[11] = am[11];
        m[12] = am[12];
        m[13] = am[13];
        m[14] = am[14];
        m[15] = am[15];
        return out;
      };
      Mat4.set = function set(out, m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {
        var m = out.m;
        m[0] = m00;
        m[1] = m01;
        m[2] = m02;
        m[3] = m03;
        m[4] = m10;
        m[5] = m11;
        m[6] = m12;
        m[7] = m13;
        m[8] = m20;
        m[9] = m21;
        m[10] = m22;
        m[11] = m23;
        m[12] = m30;
        m[13] = m31;
        m[14] = m32;
        m[15] = m33;
        return out;
      };
      Mat4.identity = function identity(out) {
        var m = out.m;
        m[0] = 1;
        m[1] = 0;
        m[2] = 0;
        m[3] = 0;
        m[4] = 0;
        m[5] = 1;
        m[6] = 0;
        m[7] = 0;
        m[8] = 0;
        m[9] = 0;
        m[10] = 1;
        m[11] = 0;
        m[12] = 0;
        m[13] = 0;
        m[14] = 0;
        m[15] = 1;
        return out;
      };
      Mat4.transpose = function transpose(out, a) {
        var m = out.m, am = a.m;
        if (out === a) {
          var a01 = am[1], a02 = am[2], a03 = am[3], a12 = am[6], a13 = am[7], a23 = am[11];
          m[1] = am[4];
          m[2] = am[8];
          m[3] = am[12];
          m[4] = a01;
          m[6] = am[9];
          m[7] = am[13];
          m[8] = a02;
          m[9] = a12;
          m[11] = am[14];
          m[12] = a03;
          m[13] = a13;
          m[14] = a23;
        } else {
          m[0] = am[0];
          m[1] = am[4];
          m[2] = am[8];
          m[3] = am[12];
          m[4] = am[1];
          m[5] = am[5];
          m[6] = am[9];
          m[7] = am[13];
          m[8] = am[2];
          m[9] = am[6];
          m[10] = am[10];
          m[11] = am[14];
          m[12] = am[3];
          m[13] = am[7];
          m[14] = am[11];
          m[15] = am[15];
        }
        return out;
      };
      Mat4.invert = function invert(out, a) {
        var am = a.m;
        _a00 = am[0];
        _a01 = am[1];
        _a02 = am[2];
        _a03 = am[3];
        _a10 = am[4];
        _a11 = am[5];
        _a12 = am[6];
        _a13 = am[7];
        _a20 = am[8];
        _a21 = am[9];
        _a22 = am[10];
        _a23 = am[11];
        _a30 = am[12];
        _a31 = am[13];
        _a32 = am[14];
        _a33 = am[15];
        var b00 = _a00 * _a11 - _a01 * _a10;
        var b01 = _a00 * _a12 - _a02 * _a10;
        var b02 = _a00 * _a13 - _a03 * _a10;
        var b03 = _a01 * _a12 - _a02 * _a11;
        var b04 = _a01 * _a13 - _a03 * _a11;
        var b05 = _a02 * _a13 - _a03 * _a12;
        var b06 = _a20 * _a31 - _a21 * _a30;
        var b07 = _a20 * _a32 - _a22 * _a30;
        var b08 = _a20 * _a33 - _a23 * _a30;
        var b09 = _a21 * _a32 - _a22 * _a31;
        var b10 = _a21 * _a33 - _a23 * _a31;
        var b11 = _a22 * _a33 - _a23 * _a32;
        var det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;
        if (0 === det) return null;
        det = 1 / det;
        var m = out.m;
        m[0] = (_a11 * b11 - _a12 * b10 + _a13 * b09) * det;
        m[1] = (_a02 * b10 - _a01 * b11 - _a03 * b09) * det;
        m[2] = (_a31 * b05 - _a32 * b04 + _a33 * b03) * det;
        m[3] = (_a22 * b04 - _a21 * b05 - _a23 * b03) * det;
        m[4] = (_a12 * b08 - _a10 * b11 - _a13 * b07) * det;
        m[5] = (_a00 * b11 - _a02 * b08 + _a03 * b07) * det;
        m[6] = (_a32 * b02 - _a30 * b05 - _a33 * b01) * det;
        m[7] = (_a20 * b05 - _a22 * b02 + _a23 * b01) * det;
        m[8] = (_a10 * b10 - _a11 * b08 + _a13 * b06) * det;
        m[9] = (_a01 * b08 - _a00 * b10 - _a03 * b06) * det;
        m[10] = (_a30 * b04 - _a31 * b02 + _a33 * b00) * det;
        m[11] = (_a21 * b02 - _a20 * b04 - _a23 * b00) * det;
        m[12] = (_a11 * b07 - _a10 * b09 - _a12 * b06) * det;
        m[13] = (_a00 * b09 - _a01 * b07 + _a02 * b06) * det;
        m[14] = (_a31 * b01 - _a30 * b03 - _a32 * b00) * det;
        m[15] = (_a20 * b03 - _a21 * b01 + _a22 * b00) * det;
        return out;
      };
      Mat4.determinant = function determinant(a) {
        var m = a.m;
        _a00 = m[0];
        _a01 = m[1];
        _a02 = m[2];
        _a03 = m[3];
        _a10 = m[4];
        _a11 = m[5];
        _a12 = m[6];
        _a13 = m[7];
        _a20 = m[8];
        _a21 = m[9];
        _a22 = m[10];
        _a23 = m[11];
        _a30 = m[12];
        _a31 = m[13];
        _a32 = m[14];
        _a33 = m[15];
        var b00 = _a00 * _a11 - _a01 * _a10;
        var b01 = _a00 * _a12 - _a02 * _a10;
        var b02 = _a00 * _a13 - _a03 * _a10;
        var b03 = _a01 * _a12 - _a02 * _a11;
        var b04 = _a01 * _a13 - _a03 * _a11;
        var b05 = _a02 * _a13 - _a03 * _a12;
        var b06 = _a20 * _a31 - _a21 * _a30;
        var b07 = _a20 * _a32 - _a22 * _a30;
        var b08 = _a20 * _a33 - _a23 * _a30;
        var b09 = _a21 * _a32 - _a22 * _a31;
        var b10 = _a21 * _a33 - _a23 * _a31;
        var b11 = _a22 * _a33 - _a23 * _a32;
        return b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;
      };
      Mat4.multiply = function multiply(out, a, b) {
        var m = out.m, am = a.m, bm = b.m;
        _a00 = am[0];
        _a01 = am[1];
        _a02 = am[2];
        _a03 = am[3];
        _a10 = am[4];
        _a11 = am[5];
        _a12 = am[6];
        _a13 = am[7];
        _a20 = am[8];
        _a21 = am[9];
        _a22 = am[10];
        _a23 = am[11];
        _a30 = am[12];
        _a31 = am[13];
        _a32 = am[14];
        _a33 = am[15];
        var b0 = bm[0], b1 = bm[1], b2 = bm[2], b3 = bm[3];
        m[0] = b0 * _a00 + b1 * _a10 + b2 * _a20 + b3 * _a30;
        m[1] = b0 * _a01 + b1 * _a11 + b2 * _a21 + b3 * _a31;
        m[2] = b0 * _a02 + b1 * _a12 + b2 * _a22 + b3 * _a32;
        m[3] = b0 * _a03 + b1 * _a13 + b2 * _a23 + b3 * _a33;
        b0 = bm[4];
        b1 = bm[5];
        b2 = bm[6];
        b3 = bm[7];
        m[4] = b0 * _a00 + b1 * _a10 + b2 * _a20 + b3 * _a30;
        m[5] = b0 * _a01 + b1 * _a11 + b2 * _a21 + b3 * _a31;
        m[6] = b0 * _a02 + b1 * _a12 + b2 * _a22 + b3 * _a32;
        m[7] = b0 * _a03 + b1 * _a13 + b2 * _a23 + b3 * _a33;
        b0 = bm[8];
        b1 = bm[9];
        b2 = bm[10];
        b3 = bm[11];
        m[8] = b0 * _a00 + b1 * _a10 + b2 * _a20 + b3 * _a30;
        m[9] = b0 * _a01 + b1 * _a11 + b2 * _a21 + b3 * _a31;
        m[10] = b0 * _a02 + b1 * _a12 + b2 * _a22 + b3 * _a32;
        m[11] = b0 * _a03 + b1 * _a13 + b2 * _a23 + b3 * _a33;
        b0 = bm[12];
        b1 = bm[13];
        b2 = bm[14];
        b3 = bm[15];
        m[12] = b0 * _a00 + b1 * _a10 + b2 * _a20 + b3 * _a30;
        m[13] = b0 * _a01 + b1 * _a11 + b2 * _a21 + b3 * _a31;
        m[14] = b0 * _a02 + b1 * _a12 + b2 * _a22 + b3 * _a32;
        m[15] = b0 * _a03 + b1 * _a13 + b2 * _a23 + b3 * _a33;
        return out;
      };
      Mat4.transform = function transform(out, a, v) {
        var x = v.x, y = v.y, z = v.z;
        var m = out.m, am = a.m;
        if (a === out) {
          m[12] = am[0] * x + am[4] * y + am[8] * z + am[12];
          m[13] = am[1] * x + am[5] * y + am[9] * z + am[13];
          m[14] = am[2] * x + am[6] * y + am[10] * z + am[14];
          m[15] = am[3] * x + am[7] * y + am[11] * z + am[15];
        } else {
          _a00 = am[0];
          _a01 = am[1];
          _a02 = am[2];
          _a03 = am[3];
          _a10 = am[4];
          _a11 = am[5];
          _a12 = am[6];
          _a13 = am[7];
          _a20 = am[8];
          _a21 = am[9];
          _a22 = am[10];
          _a23 = am[11];
          _a30 = am[12];
          _a31 = am[13];
          _a32 = am[14];
          _a33 = am[15];
          m[0] = _a00;
          m[1] = _a01;
          m[2] = _a02;
          m[3] = _a03;
          m[4] = _a10;
          m[5] = _a11;
          m[6] = _a12;
          m[7] = _a13;
          m[8] = _a20;
          m[9] = _a21;
          m[10] = _a22;
          m[11] = _a23;
          m[12] = _a00 * x + _a10 * y + _a20 * z + am[12];
          m[13] = _a01 * x + _a11 * y + _a21 * z + am[13];
          m[14] = _a02 * x + _a12 * y + _a22 * z + am[14];
          m[15] = _a03 * x + _a13 * y + _a23 * z + am[15];
        }
        return out;
      };
      Mat4.translate = function translate(out, a, v) {
        var m = out.m, am = a.m;
        if (a === out) {
          m[12] += v.x;
          m[13] += v.y;
          m[14] += v.z;
        } else {
          m[0] = am[0];
          m[1] = am[1];
          m[2] = am[2];
          m[3] = am[3];
          m[4] = am[4];
          m[5] = am[5];
          m[6] = am[6];
          m[7] = am[7];
          m[8] = am[8];
          m[9] = am[9];
          m[10] = am[10];
          m[11] = am[11];
          m[12] += v.x;
          m[13] += v.y;
          m[14] += v.z;
          m[15] = am[15];
        }
        return out;
      };
      Mat4.scale = function scale(out, a, v) {
        var x = v.x, y = v.y, z = v.z;
        var m = out.m, am = a.m;
        m[0] = am[0] * x;
        m[1] = am[1] * x;
        m[2] = am[2] * x;
        m[3] = am[3] * x;
        m[4] = am[4] * y;
        m[5] = am[5] * y;
        m[6] = am[6] * y;
        m[7] = am[7] * y;
        m[8] = am[8] * z;
        m[9] = am[9] * z;
        m[10] = am[10] * z;
        m[11] = am[11] * z;
        m[12] = am[12];
        m[13] = am[13];
        m[14] = am[14];
        m[15] = am[15];
        return out;
      };
      Mat4.rotate = function rotate(out, a, rad, axis) {
        var x = axis.x, y = axis.y, z = axis.z;
        var len = Math.sqrt(x * x + y * y + z * z);
        if (Math.abs(len) < _utils.EPSILON) return null;
        len = 1 / len;
        x *= len;
        y *= len;
        z *= len;
        var s = Math.sin(rad);
        var c = Math.cos(rad);
        var t = 1 - c;
        var am = a.m;
        _a00 = am[0];
        _a01 = am[1];
        _a02 = am[2];
        _a03 = am[3];
        _a10 = am[4];
        _a11 = am[5];
        _a12 = am[6];
        _a13 = am[7];
        _a20 = am[8];
        _a21 = am[9];
        _a22 = am[10];
        _a23 = am[11];
        var b00 = x * x * t + c, b01 = y * x * t + z * s, b02 = z * x * t - y * s;
        var b10 = x * y * t - z * s, b11 = y * y * t + c, b12 = z * y * t + x * s;
        var b20 = x * z * t + y * s, b21 = y * z * t - x * s, b22 = z * z * t + c;
        var m = out.m;
        m[0] = _a00 * b00 + _a10 * b01 + _a20 * b02;
        m[1] = _a01 * b00 + _a11 * b01 + _a21 * b02;
        m[2] = _a02 * b00 + _a12 * b01 + _a22 * b02;
        m[3] = _a03 * b00 + _a13 * b01 + _a23 * b02;
        m[4] = _a00 * b10 + _a10 * b11 + _a20 * b12;
        m[5] = _a01 * b10 + _a11 * b11 + _a21 * b12;
        m[6] = _a02 * b10 + _a12 * b11 + _a22 * b12;
        m[7] = _a03 * b10 + _a13 * b11 + _a23 * b12;
        m[8] = _a00 * b20 + _a10 * b21 + _a20 * b22;
        m[9] = _a01 * b20 + _a11 * b21 + _a21 * b22;
        m[10] = _a02 * b20 + _a12 * b21 + _a22 * b22;
        m[11] = _a03 * b20 + _a13 * b21 + _a23 * b22;
        if (a !== out) {
          m[12] = am[12];
          m[13] = am[13];
          m[14] = am[14];
          m[15] = am[15];
        }
        return out;
      };
      Mat4.rotateX = function rotateX(out, a, rad) {
        var m = out.m, am = a.m;
        var s = Math.sin(rad), c = Math.cos(rad), a10 = am[4], a11 = am[5], a12 = am[6], a13 = am[7], a20 = am[8], a21 = am[9], a22 = am[10], a23 = am[11];
        if (a !== out) {
          m[0] = am[0];
          m[1] = am[1];
          m[2] = am[2];
          m[3] = am[3];
          m[12] = am[12];
          m[13] = am[13];
          m[14] = am[14];
          m[15] = am[15];
        }
        m[4] = a10 * c + a20 * s;
        m[5] = a11 * c + a21 * s;
        m[6] = a12 * c + a22 * s;
        m[7] = a13 * c + a23 * s;
        m[8] = a20 * c - a10 * s;
        m[9] = a21 * c - a11 * s;
        m[10] = a22 * c - a12 * s;
        m[11] = a23 * c - a13 * s;
        return out;
      };
      Mat4.rotateY = function rotateY(out, a, rad) {
        var m = out.m, am = a.m;
        var s = Math.sin(rad), c = Math.cos(rad), a00 = am[0], a01 = am[1], a02 = am[2], a03 = am[3], a20 = am[8], a21 = am[9], a22 = am[10], a23 = am[11];
        if (a !== out) {
          m[4] = am[4];
          m[5] = am[5];
          m[6] = am[6];
          m[7] = am[7];
          m[12] = am[12];
          m[13] = am[13];
          m[14] = am[14];
          m[15] = am[15];
        }
        m[0] = a00 * c - a20 * s;
        m[1] = a01 * c - a21 * s;
        m[2] = a02 * c - a22 * s;
        m[3] = a03 * c - a23 * s;
        m[8] = a00 * s + a20 * c;
        m[9] = a01 * s + a21 * c;
        m[10] = a02 * s + a22 * c;
        m[11] = a03 * s + a23 * c;
        return out;
      };
      Mat4.rotateZ = function rotateZ(out, a, rad) {
        var am = a.m;
        var m = out.m;
        var s = Math.sin(rad), c = Math.cos(rad), a00 = a.m[0], a01 = a.m[1], a02 = a.m[2], a03 = a.m[3], a10 = a.m[4], a11 = a.m[5], a12 = a.m[6], a13 = a.m[7];
        if (a !== out) {
          m[8] = am[8];
          m[9] = am[9];
          m[10] = am[10];
          m[11] = am[11];
          m[12] = am[12];
          m[13] = am[13];
          m[14] = am[14];
          m[15] = am[15];
        }
        m[0] = a00 * c + a10 * s;
        m[1] = a01 * c + a11 * s;
        m[2] = a02 * c + a12 * s;
        m[3] = a03 * c + a13 * s;
        m[4] = a10 * c - a00 * s;
        m[5] = a11 * c - a01 * s;
        m[6] = a12 * c - a02 * s;
        m[7] = a13 * c - a03 * s;
        return out;
      };
      Mat4.fromTranslation = function fromTranslation(out, v) {
        var m = out.m;
        m[0] = 1;
        m[1] = 0;
        m[2] = 0;
        m[3] = 0;
        m[4] = 0;
        m[5] = 1;
        m[6] = 0;
        m[7] = 0;
        m[8] = 0;
        m[9] = 0;
        m[10] = 1;
        m[11] = 0;
        m[12] = v.x;
        m[13] = v.y;
        m[14] = v.z;
        m[15] = 1;
        return out;
      };
      Mat4.fromScaling = function fromScaling(out, v) {
        var m = out.m;
        m[0] = v.x;
        m[1] = 0;
        m[2] = 0;
        m[3] = 0;
        m[4] = 0;
        m[5] = v.y;
        m[6] = 0;
        m[7] = 0;
        m[8] = 0;
        m[9] = 0;
        m[10] = v.z;
        m[11] = 0;
        m[12] = 0;
        m[13] = 0;
        m[14] = 0;
        m[15] = 1;
        return out;
      };
      Mat4.fromRotation = function fromRotation(out, rad, axis) {
        var x = axis.x, y = axis.y, z = axis.z;
        var len = Math.sqrt(x * x + y * y + z * z);
        if (Math.abs(len) < _utils.EPSILON) return null;
        len = 1 / len;
        x *= len;
        y *= len;
        z *= len;
        var s = Math.sin(rad);
        var c = Math.cos(rad);
        var t = 1 - c;
        var m = out.m;
        m[0] = x * x * t + c;
        m[1] = y * x * t + z * s;
        m[2] = z * x * t - y * s;
        m[3] = 0;
        m[4] = x * y * t - z * s;
        m[5] = y * y * t + c;
        m[6] = z * y * t + x * s;
        m[7] = 0;
        m[8] = x * z * t + y * s;
        m[9] = y * z * t - x * s;
        m[10] = z * z * t + c;
        m[11] = 0;
        m[12] = 0;
        m[13] = 0;
        m[14] = 0;
        m[15] = 1;
        return out;
      };
      Mat4.fromXRotation = function fromXRotation(out, rad) {
        var s = Math.sin(rad), c = Math.cos(rad);
        var m = out.m;
        m[0] = 1;
        m[1] = 0;
        m[2] = 0;
        m[3] = 0;
        m[4] = 0;
        m[5] = c;
        m[6] = s;
        m[7] = 0;
        m[8] = 0;
        m[9] = -s;
        m[10] = c;
        m[11] = 0;
        m[12] = 0;
        m[13] = 0;
        m[14] = 0;
        m[15] = 1;
        return out;
      };
      Mat4.fromYRotation = function fromYRotation(out, rad) {
        var s = Math.sin(rad), c = Math.cos(rad);
        var m = out.m;
        m[0] = c;
        m[1] = 0;
        m[2] = -s;
        m[3] = 0;
        m[4] = 0;
        m[5] = 1;
        m[6] = 0;
        m[7] = 0;
        m[8] = s;
        m[9] = 0;
        m[10] = c;
        m[11] = 0;
        m[12] = 0;
        m[13] = 0;
        m[14] = 0;
        m[15] = 1;
        return out;
      };
      Mat4.fromZRotation = function fromZRotation(out, rad) {
        var s = Math.sin(rad), c = Math.cos(rad);
        var m = out.m;
        m[0] = c;
        m[1] = s;
        m[2] = 0;
        m[3] = 0;
        m[4] = -s;
        m[5] = c;
        m[6] = 0;
        m[7] = 0;
        m[8] = 0;
        m[9] = 0;
        m[10] = 1;
        m[11] = 0;
        m[12] = 0;
        m[13] = 0;
        m[14] = 0;
        m[15] = 1;
        return out;
      };
      Mat4.fromRT = function fromRT(out, q, v) {
        var x = q.x, y = q.y, z = q.z, w = q.w;
        var x2 = x + x;
        var y2 = y + y;
        var z2 = z + z;
        var xx = x * x2;
        var xy = x * y2;
        var xz = x * z2;
        var yy = y * y2;
        var yz = y * z2;
        var zz = z * z2;
        var wx = w * x2;
        var wy = w * y2;
        var wz = w * z2;
        var m = out.m;
        m[0] = 1 - (yy + zz);
        m[1] = xy + wz;
        m[2] = xz - wy;
        m[3] = 0;
        m[4] = xy - wz;
        m[5] = 1 - (xx + zz);
        m[6] = yz + wx;
        m[7] = 0;
        m[8] = xz + wy;
        m[9] = yz - wx;
        m[10] = 1 - (xx + yy);
        m[11] = 0;
        m[12] = v.x;
        m[13] = v.y;
        m[14] = v.z;
        m[15] = 1;
        return out;
      };
      Mat4.getTranslation = function getTranslation(out, mat) {
        var m = mat.m;
        out.x = m[12];
        out.y = m[13];
        out.z = m[14];
        return out;
      };
      Mat4.getScaling = function getScaling(out, mat) {
        var m = mat.m;
        var m3 = m3_1.m;
        var m00 = m3[0] = m[0];
        var m01 = m3[1] = m[1];
        var m02 = m3[2] = m[2];
        var m04 = m3[3] = m[4];
        var m05 = m3[4] = m[5];
        var m06 = m3[5] = m[6];
        var m08 = m3[6] = m[8];
        var m09 = m3[7] = m[9];
        var m10 = m3[8] = m[10];
        out.x = Math.sqrt(m00 * m00 + m01 * m01 + m02 * m02);
        out.y = Math.sqrt(m04 * m04 + m05 * m05 + m06 * m06);
        out.z = Math.sqrt(m08 * m08 + m09 * m09 + m10 * m10);
        _mat["default"].determinant(m3_1) < 0 && (out.x *= -1);
        return out;
      };
      Mat4.getRotation = function getRotation(out, mat) {
        var m = mat.m;
        var trace = m[0] + m[5] + m[10];
        var S = 0;
        if (trace > 0) {
          S = 2 * Math.sqrt(trace + 1);
          out.w = .25 * S;
          out.x = (m[6] - m[9]) / S;
          out.y = (m[8] - m[2]) / S;
          out.z = (m[1] - m[4]) / S;
        } else if (m[0] > m[5] && m[0] > m[10]) {
          S = 2 * Math.sqrt(1 + m[0] - m[5] - m[10]);
          out.w = (m[6] - m[9]) / S;
          out.x = .25 * S;
          out.y = (m[1] + m[4]) / S;
          out.z = (m[8] + m[2]) / S;
        } else if (m[5] > m[10]) {
          S = 2 * Math.sqrt(1 + m[5] - m[0] - m[10]);
          out.w = (m[8] - m[2]) / S;
          out.x = (m[1] + m[4]) / S;
          out.y = .25 * S;
          out.z = (m[6] + m[9]) / S;
        } else {
          S = 2 * Math.sqrt(1 + m[10] - m[0] - m[5]);
          out.w = (m[1] - m[4]) / S;
          out.x = (m[8] + m[2]) / S;
          out.y = (m[6] + m[9]) / S;
          out.z = .25 * S;
        }
        return out;
      };
      Mat4.toRTS = function toRTS(mat, q, v, s) {
        var m = mat.m;
        var m3 = m3_1.m;
        s.x = _vec["default"].set(v3_1, m[0], m[1], m[2]).mag();
        m3[0] = m[0] / s.x;
        m3[1] = m[1] / s.x;
        m3[2] = m[2] / s.x;
        s.y = _vec["default"].set(v3_1, m[4], m[5], m[6]).mag();
        m3[3] = m[4] / s.y;
        m3[4] = m[5] / s.y;
        m3[5] = m[6] / s.y;
        s.z = _vec["default"].set(v3_1, m[8], m[9], m[10]).mag();
        m3[6] = m[8] / s.z;
        m3[7] = m[9] / s.z;
        m3[8] = m[10] / s.z;
        var det = _mat["default"].determinant(m3_1);
        if (det < 0) {
          s.x *= -1;
          m3[0] *= -1;
          m3[1] *= -1;
          m3[2] *= -1;
        }
        _quat["default"].fromMat3(q, m3_1);
        _vec["default"].set(v, m[12], m[13], m[14]);
      };
      Mat4.fromRTS = function fromRTS(out, q, v, s) {
        var x = q.x, y = q.y, z = q.z, w = q.w;
        var x2 = x + x;
        var y2 = y + y;
        var z2 = z + z;
        var xx = x * x2;
        var xy = x * y2;
        var xz = x * z2;
        var yy = y * y2;
        var yz = y * z2;
        var zz = z * z2;
        var wx = w * x2;
        var wy = w * y2;
        var wz = w * z2;
        var sx = s.x;
        var sy = s.y;
        var sz = s.z;
        var m = out.m;
        m[0] = (1 - (yy + zz)) * sx;
        m[1] = (xy + wz) * sx;
        m[2] = (xz - wy) * sx;
        m[3] = 0;
        m[4] = (xy - wz) * sy;
        m[5] = (1 - (xx + zz)) * sy;
        m[6] = (yz + wx) * sy;
        m[7] = 0;
        m[8] = (xz + wy) * sz;
        m[9] = (yz - wx) * sz;
        m[10] = (1 - (xx + yy)) * sz;
        m[11] = 0;
        m[12] = v.x;
        m[13] = v.y;
        m[14] = v.z;
        m[15] = 1;
        return out;
      };
      Mat4.fromRTSOrigin = function fromRTSOrigin(out, q, v, s, o) {
        var x = q.x, y = q.y, z = q.z, w = q.w;
        var x2 = x + x;
        var y2 = y + y;
        var z2 = z + z;
        var xx = x * x2;
        var xy = x * y2;
        var xz = x * z2;
        var yy = y * y2;
        var yz = y * z2;
        var zz = z * z2;
        var wx = w * x2;
        var wy = w * y2;
        var wz = w * z2;
        var sx = s.x;
        var sy = s.y;
        var sz = s.z;
        var ox = o.x;
        var oy = o.y;
        var oz = o.z;
        var m = out.m;
        m[0] = (1 - (yy + zz)) * sx;
        m[1] = (xy + wz) * sx;
        m[2] = (xz - wy) * sx;
        m[3] = 0;
        m[4] = (xy - wz) * sy;
        m[5] = (1 - (xx + zz)) * sy;
        m[6] = (yz + wx) * sy;
        m[7] = 0;
        m[8] = (xz + wy) * sz;
        m[9] = (yz - wx) * sz;
        m[10] = (1 - (xx + yy)) * sz;
        m[11] = 0;
        m[12] = v.x + ox - (m[0] * ox + m[4] * oy + m[8] * oz);
        m[13] = v.y + oy - (m[1] * ox + m[5] * oy + m[9] * oz);
        m[14] = v.z + oz - (m[2] * ox + m[6] * oy + m[10] * oz);
        m[15] = 1;
        return out;
      };
      Mat4.fromQuat = function fromQuat(out, q) {
        var x = q.x, y = q.y, z = q.z, w = q.w;
        var x2 = x + x;
        var y2 = y + y;
        var z2 = z + z;
        var xx = x * x2;
        var yx = y * x2;
        var yy = y * y2;
        var zx = z * x2;
        var zy = z * y2;
        var zz = z * z2;
        var wx = w * x2;
        var wy = w * y2;
        var wz = w * z2;
        var m = out.m;
        m[0] = 1 - yy - zz;
        m[1] = yx + wz;
        m[2] = zx - wy;
        m[3] = 0;
        m[4] = yx - wz;
        m[5] = 1 - xx - zz;
        m[6] = zy + wx;
        m[7] = 0;
        m[8] = zx + wy;
        m[9] = zy - wx;
        m[10] = 1 - xx - yy;
        m[11] = 0;
        m[12] = 0;
        m[13] = 0;
        m[14] = 0;
        m[15] = 1;
        return out;
      };
      Mat4.frustum = function frustum(out, left, right, bottom, top, near, far) {
        var rl = 1 / (right - left);
        var tb = 1 / (top - bottom);
        var nf = 1 / (near - far);
        var m = out.m;
        m[0] = 2 * near * rl;
        m[1] = 0;
        m[2] = 0;
        m[3] = 0;
        m[4] = 0;
        m[5] = 2 * near * tb;
        m[6] = 0;
        m[7] = 0;
        m[8] = (right + left) * rl;
        m[9] = (top + bottom) * tb;
        m[10] = (far + near) * nf;
        m[11] = -1;
        m[12] = 0;
        m[13] = 0;
        m[14] = far * near * 2 * nf;
        m[15] = 0;
        return out;
      };
      Mat4.perspective = function perspective(out, fovy, aspect, near, far) {
        var f = 1 / Math.tan(fovy / 2);
        var nf = 1 / (near - far);
        var m = out.m;
        m[0] = f / aspect;
        m[1] = 0;
        m[2] = 0;
        m[3] = 0;
        m[4] = 0;
        m[5] = f;
        m[6] = 0;
        m[7] = 0;
        m[8] = 0;
        m[9] = 0;
        m[10] = (far + near) * nf;
        m[11] = -1;
        m[12] = 0;
        m[13] = 0;
        m[14] = 2 * far * near * nf;
        m[15] = 0;
        return out;
      };
      Mat4.ortho = function ortho(out, left, right, bottom, top, near, far) {
        var lr = 1 / (left - right);
        var bt = 1 / (bottom - top);
        var nf = 1 / (near - far);
        var m = out.m;
        m[0] = -2 * lr;
        m[1] = 0;
        m[2] = 0;
        m[3] = 0;
        m[4] = 0;
        m[5] = -2 * bt;
        m[6] = 0;
        m[7] = 0;
        m[8] = 0;
        m[9] = 0;
        m[10] = 2 * nf;
        m[11] = 0;
        m[12] = (left + right) * lr;
        m[13] = (top + bottom) * bt;
        m[14] = (far + near) * nf;
        m[15] = 1;
        return out;
      };
      Mat4.lookAt = function lookAt(out, eye, center, up) {
        var eyex = eye.x;
        var eyey = eye.y;
        var eyez = eye.z;
        var upx = up.x;
        var upy = up.y;
        var upz = up.z;
        var centerx = center.x;
        var centery = center.y;
        var centerz = center.z;
        var z0 = eyex - centerx;
        var z1 = eyey - centery;
        var z2 = eyez - centerz;
        var len = 1 / Math.sqrt(z0 * z0 + z1 * z1 + z2 * z2);
        z0 *= len;
        z1 *= len;
        z2 *= len;
        var x0 = upy * z2 - upz * z1;
        var x1 = upz * z0 - upx * z2;
        var x2 = upx * z1 - upy * z0;
        len = 1 / Math.sqrt(x0 * x0 + x1 * x1 + x2 * x2);
        x0 *= len;
        x1 *= len;
        x2 *= len;
        var y0 = z1 * x2 - z2 * x1;
        var y1 = z2 * x0 - z0 * x2;
        var y2 = z0 * x1 - z1 * x0;
        var m = out.m;
        m[0] = x0;
        m[1] = y0;
        m[2] = z0;
        m[3] = 0;
        m[4] = x1;
        m[5] = y1;
        m[6] = z1;
        m[7] = 0;
        m[8] = x2;
        m[9] = y2;
        m[10] = z2;
        m[11] = 0;
        m[12] = -(x0 * eyex + x1 * eyey + x2 * eyez);
        m[13] = -(y0 * eyex + y1 * eyey + y2 * eyez);
        m[14] = -(z0 * eyex + z1 * eyey + z2 * eyez);
        m[15] = 1;
        return out;
      };
      Mat4.inverseTranspose = function inverseTranspose(out, a) {
        var m = a.m;
        _a00 = m[0];
        _a01 = m[1];
        _a02 = m[2];
        _a03 = m[3];
        _a10 = m[4];
        _a11 = m[5];
        _a12 = m[6];
        _a13 = m[7];
        _a20 = m[8];
        _a21 = m[9];
        _a22 = m[10];
        _a23 = m[11];
        _a30 = m[12];
        _a31 = m[13];
        _a32 = m[14];
        _a33 = m[15];
        var b00 = _a00 * _a11 - _a01 * _a10;
        var b01 = _a00 * _a12 - _a02 * _a10;
        var b02 = _a00 * _a13 - _a03 * _a10;
        var b03 = _a01 * _a12 - _a02 * _a11;
        var b04 = _a01 * _a13 - _a03 * _a11;
        var b05 = _a02 * _a13 - _a03 * _a12;
        var b06 = _a20 * _a31 - _a21 * _a30;
        var b07 = _a20 * _a32 - _a22 * _a30;
        var b08 = _a20 * _a33 - _a23 * _a30;
        var b09 = _a21 * _a32 - _a22 * _a31;
        var b10 = _a21 * _a33 - _a23 * _a31;
        var b11 = _a22 * _a33 - _a23 * _a32;
        var det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;
        if (!det) return null;
        det = 1 / det;
        m = out.m;
        m[0] = (_a11 * b11 - _a12 * b10 + _a13 * b09) * det;
        m[1] = (_a12 * b08 - _a10 * b11 - _a13 * b07) * det;
        m[2] = (_a10 * b10 - _a11 * b08 + _a13 * b06) * det;
        m[3] = 0;
        m[4] = (_a02 * b10 - _a01 * b11 - _a03 * b09) * det;
        m[5] = (_a00 * b11 - _a02 * b08 + _a03 * b07) * det;
        m[6] = (_a01 * b08 - _a00 * b10 - _a03 * b06) * det;
        m[7] = 0;
        m[8] = (_a31 * b05 - _a32 * b04 + _a33 * b03) * det;
        m[9] = (_a32 * b02 - _a30 * b05 - _a33 * b01) * det;
        m[10] = (_a30 * b04 - _a31 * b02 + _a33 * b00) * det;
        m[11] = 0;
        m[12] = 0;
        m[13] = 0;
        m[14] = 0;
        m[15] = 1;
        return out;
      };
      Mat4.add = function add(out, a, b) {
        var m = out.m, am = a.m, bm = b.m;
        m[0] = am[0] + bm[0];
        m[1] = am[1] + bm[1];
        m[2] = am[2] + bm[2];
        m[3] = am[3] + bm[3];
        m[4] = am[4] + bm[4];
        m[5] = am[5] + bm[5];
        m[6] = am[6] + bm[6];
        m[7] = am[7] + bm[7];
        m[8] = am[8] + bm[8];
        m[9] = am[9] + bm[9];
        m[10] = am[10] + bm[10];
        m[11] = am[11] + bm[11];
        m[12] = am[12] + bm[12];
        m[13] = am[13] + bm[13];
        m[14] = am[14] + bm[14];
        m[15] = am[15] + bm[15];
        return out;
      };
      Mat4.subtract = function subtract(out, a, b) {
        var m = out.m, am = a.m, bm = b.m;
        m[0] = am[0] - bm[0];
        m[1] = am[1] - bm[1];
        m[2] = am[2] - bm[2];
        m[3] = am[3] - bm[3];
        m[4] = am[4] - bm[4];
        m[5] = am[5] - bm[5];
        m[6] = am[6] - bm[6];
        m[7] = am[7] - bm[7];
        m[8] = am[8] - bm[8];
        m[9] = am[9] - bm[9];
        m[10] = am[10] - bm[10];
        m[11] = am[11] - bm[11];
        m[12] = am[12] - bm[12];
        m[13] = am[13] - bm[13];
        m[14] = am[14] - bm[14];
        m[15] = am[15] - bm[15];
        return out;
      };
      Mat4.multiplyScalar = function multiplyScalar(out, a, b) {
        var m = out.m, am = a.m;
        m[0] = am[0] * b;
        m[1] = am[1] * b;
        m[2] = am[2] * b;
        m[3] = am[3] * b;
        m[4] = am[4] * b;
        m[5] = am[5] * b;
        m[6] = am[6] * b;
        m[7] = am[7] * b;
        m[8] = am[8] * b;
        m[9] = am[9] * b;
        m[10] = am[10] * b;
        m[11] = am[11] * b;
        m[12] = am[12] * b;
        m[13] = am[13] * b;
        m[14] = am[14] * b;
        m[15] = am[15] * b;
        return out;
      };
      Mat4.multiplyScalarAndAdd = function multiplyScalarAndAdd(out, a, b, scale) {
        var m = out.m, am = a.m, bm = b.m;
        m[0] = am[0] + bm[0] * scale;
        m[1] = am[1] + bm[1] * scale;
        m[2] = am[2] + bm[2] * scale;
        m[3] = am[3] + bm[3] * scale;
        m[4] = am[4] + bm[4] * scale;
        m[5] = am[5] + bm[5] * scale;
        m[6] = am[6] + bm[6] * scale;
        m[7] = am[7] + bm[7] * scale;
        m[8] = am[8] + bm[8] * scale;
        m[9] = am[9] + bm[9] * scale;
        m[10] = am[10] + bm[10] * scale;
        m[11] = am[11] + bm[11] * scale;
        m[12] = am[12] + bm[12] * scale;
        m[13] = am[13] + bm[13] * scale;
        m[14] = am[14] + bm[14] * scale;
        m[15] = am[15] + bm[15] * scale;
        return out;
      };
      Mat4.strictEquals = function strictEquals(a, b) {
        var am = a.m, bm = b.m;
        return am[0] === bm[0] && am[1] === bm[1] && am[2] === bm[2] && am[3] === bm[3] && am[4] === bm[4] && am[5] === bm[5] && am[6] === bm[6] && am[7] === bm[7] && am[8] === bm[8] && am[9] === bm[9] && am[10] === bm[10] && am[11] === bm[11] && am[12] === bm[12] && am[13] === bm[13] && am[14] === bm[14] && am[15] === bm[15];
      };
      Mat4.equals = function equals(a, b, epsilon) {
        void 0 === epsilon && (epsilon = _utils.EPSILON);
        var am = a.m, bm = b.m;
        return Math.abs(am[0] - bm[0]) <= epsilon * Math.max(1, Math.abs(am[0]), Math.abs(bm[0])) && Math.abs(am[1] - bm[1]) <= epsilon * Math.max(1, Math.abs(am[1]), Math.abs(bm[1])) && Math.abs(am[2] - bm[2]) <= epsilon * Math.max(1, Math.abs(am[2]), Math.abs(bm[2])) && Math.abs(am[3] - bm[3]) <= epsilon * Math.max(1, Math.abs(am[3]), Math.abs(bm[3])) && Math.abs(am[4] - bm[4]) <= epsilon * Math.max(1, Math.abs(am[4]), Math.abs(bm[4])) && Math.abs(am[5] - bm[5]) <= epsilon * Math.max(1, Math.abs(am[5]), Math.abs(bm[5])) && Math.abs(am[6] - bm[6]) <= epsilon * Math.max(1, Math.abs(am[6]), Math.abs(bm[6])) && Math.abs(am[7] - bm[7]) <= epsilon * Math.max(1, Math.abs(am[7]), Math.abs(bm[7])) && Math.abs(am[8] - bm[8]) <= epsilon * Math.max(1, Math.abs(am[8]), Math.abs(bm[8])) && Math.abs(am[9] - bm[9]) <= epsilon * Math.max(1, Math.abs(am[9]), Math.abs(bm[9])) && Math.abs(am[10] - bm[10]) <= epsilon * Math.max(1, Math.abs(am[10]), Math.abs(bm[10])) && Math.abs(am[11] - bm[11]) <= epsilon * Math.max(1, Math.abs(am[11]), Math.abs(bm[11])) && Math.abs(am[12] - bm[12]) <= epsilon * Math.max(1, Math.abs(am[12]), Math.abs(bm[12])) && Math.abs(am[13] - bm[13]) <= epsilon * Math.max(1, Math.abs(am[13]), Math.abs(bm[13])) && Math.abs(am[14] - bm[14]) <= epsilon * Math.max(1, Math.abs(am[14]), Math.abs(bm[14])) && Math.abs(am[15] - bm[15]) <= epsilon * Math.max(1, Math.abs(am[15]), Math.abs(bm[15]));
      };
      Mat4.adjoint = function adjoint(out, a) {
        var am = a.m, outm = out.m;
        var a00 = am[0], a01 = am[1], a02 = am[2], a03 = am[3], a10 = am[4], a11 = am[5], a12 = am[6], a13 = am[7], a20 = am[8], a21 = am[9], a22 = am[10], a23 = am[11], a30 = am[12], a31 = am[13], a32 = am[14], a33 = am[15];
        outm[0] = a11 * (a22 * a33 - a23 * a32) - a21 * (a12 * a33 - a13 * a32) + a31 * (a12 * a23 - a13 * a22);
        outm[1] = -(a01 * (a22 * a33 - a23 * a32) - a21 * (a02 * a33 - a03 * a32) + a31 * (a02 * a23 - a03 * a22));
        outm[2] = a01 * (a12 * a33 - a13 * a32) - a11 * (a02 * a33 - a03 * a32) + a31 * (a02 * a13 - a03 * a12);
        outm[3] = -(a01 * (a12 * a23 - a13 * a22) - a11 * (a02 * a23 - a03 * a22) + a21 * (a02 * a13 - a03 * a12));
        outm[4] = -(a10 * (a22 * a33 - a23 * a32) - a20 * (a12 * a33 - a13 * a32) + a30 * (a12 * a23 - a13 * a22));
        outm[5] = a00 * (a22 * a33 - a23 * a32) - a20 * (a02 * a33 - a03 * a32) + a30 * (a02 * a23 - a03 * a22);
        outm[6] = -(a00 * (a12 * a33 - a13 * a32) - a10 * (a02 * a33 - a03 * a32) + a30 * (a02 * a13 - a03 * a12));
        outm[7] = a00 * (a12 * a23 - a13 * a22) - a10 * (a02 * a23 - a03 * a22) + a20 * (a02 * a13 - a03 * a12);
        outm[8] = a10 * (a21 * a33 - a23 * a31) - a20 * (a11 * a33 - a13 * a31) + a30 * (a11 * a23 - a13 * a21);
        outm[9] = -(a00 * (a21 * a33 - a23 * a31) - a20 * (a01 * a33 - a03 * a31) + a30 * (a01 * a23 - a03 * a21));
        outm[10] = a00 * (a11 * a33 - a13 * a31) - a10 * (a01 * a33 - a03 * a31) + a30 * (a01 * a13 - a03 * a11);
        outm[11] = -(a00 * (a11 * a23 - a13 * a21) - a10 * (a01 * a23 - a03 * a21) + a20 * (a01 * a13 - a03 * a11));
        outm[12] = -(a10 * (a21 * a32 - a22 * a31) - a20 * (a11 * a32 - a12 * a31) + a30 * (a11 * a22 - a12 * a21));
        outm[13] = a00 * (a21 * a32 - a22 * a31) - a20 * (a01 * a32 - a02 * a31) + a30 * (a01 * a22 - a02 * a21);
        outm[14] = -(a00 * (a11 * a32 - a12 * a31) - a10 * (a01 * a32 - a02 * a31) + a30 * (a01 * a12 - a02 * a11));
        outm[15] = a00 * (a11 * a22 - a12 * a21) - a10 * (a01 * a22 - a02 * a21) + a20 * (a01 * a12 - a02 * a11);
        return out;
      };
      Mat4.toArray = function toArray(out, mat, ofs) {
        void 0 === ofs && (ofs = 0);
        var m = mat.m;
        for (var i = 0; i < 16; i++) out[ofs + i] = m[i];
        return out;
      };
      Mat4.fromArray = function fromArray(out, arr, ofs) {
        void 0 === ofs && (ofs = 0);
        var m = out.m;
        for (var i = 0; i < 16; i++) m[i] = arr[ofs + i];
        return out;
      };
      function Mat4(m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {
        var _this;
        void 0 === m00 && (m00 = 1);
        void 0 === m01 && (m01 = 0);
        void 0 === m02 && (m02 = 0);
        void 0 === m03 && (m03 = 0);
        void 0 === m10 && (m10 = 0);
        void 0 === m11 && (m11 = 1);
        void 0 === m12 && (m12 = 0);
        void 0 === m13 && (m13 = 0);
        void 0 === m20 && (m20 = 0);
        void 0 === m21 && (m21 = 0);
        void 0 === m22 && (m22 = 1);
        void 0 === m23 && (m23 = 0);
        void 0 === m30 && (m30 = 0);
        void 0 === m31 && (m31 = 0);
        void 0 === m32 && (m32 = 0);
        void 0 === m33 && (m33 = 1);
        _this = _ValueType.call(this) || this;
        _this.m = void 0;
        if (m00 instanceof _utils.FLOAT_ARRAY_TYPE) _this.m = m00; else {
          _this.m = new _utils.FLOAT_ARRAY_TYPE(16);
          var tm = _this.m;
          tm[0] = m00;
          tm[1] = m01;
          tm[2] = m02;
          tm[3] = m03;
          tm[4] = m10;
          tm[5] = m11;
          tm[6] = m12;
          tm[7] = m13;
          tm[8] = m20;
          tm[9] = m21;
          tm[10] = m22;
          tm[11] = m23;
          tm[12] = m30;
          tm[13] = m31;
          tm[14] = m32;
          tm[15] = m33;
        }
        return _this;
      }
      _proto.clone = function clone() {
        var t = this;
        var tm = t.m;
        return new Mat4(tm[0], tm[1], tm[2], tm[3], tm[4], tm[5], tm[6], tm[7], tm[8], tm[9], tm[10], tm[11], tm[12], tm[13], tm[14], tm[15]);
      };
      _proto.set = function set(s) {
        var t = this;
        var tm = t.m, sm = s.m;
        tm[0] = sm[0];
        tm[1] = sm[1];
        tm[2] = sm[2];
        tm[3] = sm[3];
        tm[4] = sm[4];
        tm[5] = sm[5];
        tm[6] = sm[6];
        tm[7] = sm[7];
        tm[8] = sm[8];
        tm[9] = sm[9];
        tm[10] = sm[10];
        tm[11] = sm[11];
        tm[12] = sm[12];
        tm[13] = sm[13];
        tm[14] = sm[14];
        tm[15] = sm[15];
        return this;
      };
      _proto.equals = function equals(other) {
        return Mat4.strictEquals(this, other);
      };
      _proto.fuzzyEquals = function fuzzyEquals(other) {
        return Mat4.equals(this, other);
      };
      _proto.toString = function toString() {
        var tm = this.m;
        return tm ? "[\n" + tm[0] + ", " + tm[1] + ", " + tm[2] + ", " + tm[3] + ",\n" + tm[4] + ", " + tm[5] + ", " + tm[6] + ", " + tm[7] + ",\n" + tm[8] + ", " + tm[9] + ", " + tm[10] + ", " + tm[11] + ",\n" + tm[12] + ", " + tm[13] + ", " + tm[14] + ", " + tm[15] + "\n]" : "[\n1, 0, 0, 0\n0, 1, 0, 0\n0, 0, 1, 0\n0, 0, 0, 1\n]";
      };
      _proto.identity = function identity() {
        return Mat4.identity(this);
      };
      _proto.transpose = function transpose(out) {
        out = out || new Mat4();
        return Mat4.transpose(out, this);
      };
      _proto.invert = function invert(out) {
        out = out || new Mat4();
        return Mat4.invert(out, this);
      };
      _proto.adjoint = function adjoint(out) {
        out = out || new Mat4();
        return Mat4.adjoint(out, this);
      };
      _proto.determinant = function determinant() {
        return Mat4.determinant(this);
      };
      _proto.add = function add(other, out) {
        out = out || new Mat4();
        return Mat4.add(out, this, other);
      };
      _proto.subtract = function subtract(other) {
        return Mat4.subtract(this, this, other);
      };
      _proto.multiply = function multiply(other) {
        return Mat4.multiply(this, this, other);
      };
      _proto.multiplyScalar = function multiplyScalar(number) {
        return Mat4.multiplyScalar(this, this, number);
      };
      _proto.translate = function translate(v, out) {
        out = out || new Mat4();
        return Mat4.translate(out, this, v);
      };
      _proto.scale = function scale(v, out) {
        out = out || new Mat4();
        return Mat4.scale(out, this, v);
      };
      _proto.rotate = function rotate(rad, axis, out) {
        out = out || new Mat4();
        return Mat4.rotate(out, this, rad, axis);
      };
      _proto.getTranslation = function getTranslation(out) {
        out = out || new _vec["default"]();
        return Mat4.getTranslation(out, this);
      };
      _proto.getScale = function getScale(out) {
        out = out || new _vec["default"]();
        return Mat4.getScaling(out, this);
      };
      _proto.getRotation = function getRotation(out) {
        out = out || new _quat["default"]();
        return Mat4.getRotation(out, this);
      };
      _proto.fromRTS = function fromRTS(q, v, s) {
        return Mat4.fromRTS(this, q, v, s);
      };
      _proto.fromQuat = function fromQuat(quat) {
        return Mat4.fromQuat(this, quat);
      };
      return Mat4;
    })(_valueType["default"]);
    exports["default"] = Mat4;
    Mat4.mul = Mat4.multiply;
    Mat4.sub = Mat4.subtract;
    Mat4.IDENTITY = Object.freeze(new Mat4());
    var v3_1 = new _vec["default"]();
    var m3_1 = new _mat["default"]();
    _CCClass["default"].fastDefine("cc.Mat4", Mat4, {
      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
    });
    var _loop = function _loop(i) {
      Object.defineProperty(Mat4.prototype, "m" + i, {
        get: function get() {
          return this.m[i];
        },
        set: function set(value) {
          this.m[i] = value;
        }
      });
    };
    for (var i = 0; i < 16; i++) _loop(i);
    cc.mat4 = function(m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {
      var mat = new Mat4(m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33);
      void 0 === m00 && Mat4.identity(mat);
      return mat;
    };
    cc.Mat4 = Mat4;
    module.exports = exports["default"];
  }), {
    "../platform/CCClass": 138,
    "./mat3": 225,
    "./quat": 227,
    "./utils": 231,
    "./value-type": 232,
    "./vec3": 234
  } ],
  227: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _valueType = _interopRequireDefault(require("./value-type"));
    var _CCClass = _interopRequireDefault(require("../platform/CCClass"));
    var _vec = _interopRequireDefault(require("./vec3"));
    var _mat = _interopRequireDefault(require("./mat3"));
    var _utils = require("./utils");
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    function _inheritsLoose(subClass, superClass) {
      subClass.prototype = Object.create(superClass.prototype);
      subClass.prototype.constructor = subClass;
      subClass.__proto__ = superClass;
    }
    var _x = 0;
    var _y = 0;
    var _z = 0;
    var _w = 0;
    var Quat = (function(_ValueType) {
      _inheritsLoose(Quat, _ValueType);
      var _proto = Quat.prototype;
      _proto.mul = function mul(other, out) {
        return Quat.multiply(out || new Quat(), this, other);
      };
      Quat.clone = function clone(a) {
        return new Quat(a.x, a.y, a.z, a.w);
      };
      Quat.copy = function copy(out, a) {
        out.x = a.x;
        out.y = a.y;
        out.z = a.z;
        out.w = a.w;
        return out;
      };
      Quat.set = function set(out, x, y, z, w) {
        out.x = x;
        out.y = y;
        out.z = z;
        out.w = w;
        return out;
      };
      Quat.identity = function identity(out) {
        out.x = 0;
        out.y = 0;
        out.z = 0;
        out.w = 1;
        return out;
      };
      Quat.rotationTo = function rotationTo(out, a, b) {
        var dot = _vec["default"].dot(a, b);
        if (dot < -.999999) {
          _vec["default"].cross(v3_1, _vec["default"].RIGHT, a);
          v3_1.mag() < 1e-6 && _vec["default"].cross(v3_1, _vec["default"].UP, a);
          _vec["default"].normalize(v3_1, v3_1);
          Quat.fromAxisAngle(out, v3_1, Math.PI);
          return out;
        }
        if (dot > .999999) {
          out.x = 0;
          out.y = 0;
          out.z = 0;
          out.w = 1;
          return out;
        }
        _vec["default"].cross(v3_1, a, b);
        out.x = v3_1.x;
        out.y = v3_1.y;
        out.z = v3_1.z;
        out.w = 1 + dot;
        return Quat.normalize(out, out);
      };
      Quat.getAxisAngle = function getAxisAngle(outAxis, q) {
        var rad = 2 * Math.acos(q.w);
        var s = Math.sin(rad / 2);
        if (0 !== s) {
          outAxis.x = q.x / s;
          outAxis.y = q.y / s;
          outAxis.z = q.z / s;
        } else {
          outAxis.x = 1;
          outAxis.y = 0;
          outAxis.z = 0;
        }
        return rad;
      };
      Quat.multiply = function multiply(out, a, b) {
        _x = a.x * b.w + a.w * b.x + a.y * b.z - a.z * b.y;
        _y = a.y * b.w + a.w * b.y + a.z * b.x - a.x * b.z;
        _z = a.z * b.w + a.w * b.z + a.x * b.y - a.y * b.x;
        _w = a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z;
        out.x = _x;
        out.y = _y;
        out.z = _z;
        out.w = _w;
        return out;
      };
      Quat.multiplyScalar = function multiplyScalar(out, a, b) {
        out.x = a.x * b;
        out.y = a.y * b;
        out.z = a.z * b;
        out.w = a.w * b;
        return out;
      };
      Quat.scaleAndAdd = function scaleAndAdd(out, a, b, scale) {
        out.x = a.x + b.x * scale;
        out.y = a.y + b.y * scale;
        out.z = a.z + b.z * scale;
        out.w = a.w + b.w * scale;
        return out;
      };
      Quat.rotateX = function rotateX(out, a, rad) {
        rad *= .5;
        var bx = Math.sin(rad);
        var bw = Math.cos(rad);
        out.x = a.x * bw + a.w * bx;
        out.y = a.y * bw + a.z * bx;
        out.z = a.z * bw - a.y * bx;
        out.w = a.w * bw - a.x * bx;
        return out;
      };
      Quat.rotateY = function rotateY(out, a, rad) {
        rad *= .5;
        var by = Math.sin(rad);
        var bw = Math.cos(rad);
        out.x = a.x * bw - a.z * by;
        out.y = a.y * bw + a.w * by;
        out.z = a.z * bw + a.x * by;
        out.w = a.w * bw - a.y * by;
        return out;
      };
      Quat.rotateZ = function rotateZ(out, a, rad) {
        rad *= .5;
        var bz = Math.sin(rad);
        var bw = Math.cos(rad);
        out.x = a.x * bw + a.y * bz;
        out.y = a.y * bw - a.x * bz;
        out.z = a.z * bw + a.w * bz;
        out.w = a.w * bw - a.z * bz;
        return out;
      };
      Quat.rotateAround = function rotateAround(out, rot, axis, rad) {
        Quat.invert(qt_1, rot);
        _vec["default"].transformQuat(v3_1, axis, qt_1);
        Quat.fromAxisAngle(qt_1, v3_1, rad);
        Quat.multiply(out, rot, qt_1);
        return out;
      };
      Quat.rotateAroundLocal = function rotateAroundLocal(out, rot, axis, rad) {
        Quat.fromAxisAngle(qt_1, axis, rad);
        Quat.multiply(out, rot, qt_1);
        return out;
      };
      Quat.calculateW = function calculateW(out, a) {
        out.x = a.x;
        out.y = a.y;
        out.z = a.z;
        out.w = Math.sqrt(Math.abs(1 - a.x * a.x - a.y * a.y - a.z * a.z));
        return out;
      };
      Quat.dot = function dot(a, b) {
        return a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w;
      };
      Quat.lerp = function lerp(out, a, b, t) {
        out.x = a.x + t * (b.x - a.x);
        out.y = a.y + t * (b.y - a.y);
        out.z = a.z + t * (b.z - a.z);
        out.w = a.w + t * (b.w - a.w);
        return out;
      };
      Quat.slerp = function slerp(out, a, b, t) {
        var scale0 = 0;
        var scale1 = 0;
        var cosom = a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w;
        if (cosom < 0) {
          cosom = -cosom;
          b.x = -b.x;
          b.y = -b.y;
          b.z = -b.z;
          b.w = -b.w;
        }
        if (1 - cosom > 1e-6) {
          var omega = Math.acos(cosom);
          var sinom = Math.sin(omega);
          scale0 = Math.sin((1 - t) * omega) / sinom;
          scale1 = Math.sin(t * omega) / sinom;
        } else {
          scale0 = 1 - t;
          scale1 = t;
        }
        out.x = scale0 * a.x + scale1 * b.x;
        out.y = scale0 * a.y + scale1 * b.y;
        out.z = scale0 * a.z + scale1 * b.z;
        out.w = scale0 * a.w + scale1 * b.w;
        return out;
      };
      Quat.sqlerp = function sqlerp(out, a, b, c, d, t) {
        Quat.slerp(qt_1, a, d, t);
        Quat.slerp(qt_2, b, c, t);
        Quat.slerp(out, qt_1, qt_2, 2 * t * (1 - t));
        return out;
      };
      Quat.invert = function invert(out, a) {
        var dot = a.x * a.x + a.y * a.y + a.z * a.z + a.w * a.w;
        var invDot = dot ? 1 / dot : 0;
        out.x = -a.x * invDot;
        out.y = -a.y * invDot;
        out.z = -a.z * invDot;
        out.w = a.w * invDot;
        return out;
      };
      Quat.conjugate = function conjugate(out, a) {
        out.x = -a.x;
        out.y = -a.y;
        out.z = -a.z;
        out.w = a.w;
        return out;
      };
      Quat.len = function len(a) {
        return Math.sqrt(a.x * a.x + a.y * a.y + a.z * a.z + a.w * a.w);
      };
      Quat.lengthSqr = function lengthSqr(a) {
        return a.x * a.x + a.y * a.y + a.z * a.z + a.w * a.w;
      };
      Quat.normalize = function normalize(out, a) {
        var len = a.x * a.x + a.y * a.y + a.z * a.z + a.w * a.w;
        if (len > 0) {
          len = 1 / Math.sqrt(len);
          out.x = a.x * len;
          out.y = a.y * len;
          out.z = a.z * len;
          out.w = a.w * len;
        }
        return out;
      };
      Quat.fromAxes = function fromAxes(out, xAxis, yAxis, zAxis) {
        _mat["default"].set(m3_1, xAxis.x, xAxis.y, xAxis.z, yAxis.x, yAxis.y, yAxis.z, zAxis.x, zAxis.y, zAxis.z);
        return Quat.normalize(out, Quat.fromMat3(out, m3_1));
      };
      Quat.fromViewUp = function fromViewUp(out, view, up) {
        _mat["default"].fromViewUp(m3_1, view, up);
        return Quat.normalize(out, Quat.fromMat3(out, m3_1));
      };
      Quat.fromAxisAngle = function fromAxisAngle(out, axis, rad) {
        rad *= .5;
        var s = Math.sin(rad);
        out.x = s * axis.x;
        out.y = s * axis.y;
        out.z = s * axis.z;
        out.w = Math.cos(rad);
        return out;
      };
      Quat.fromAngleZ = function fromAngleZ(out, z) {
        z *= halfToRad;
        out.x = out.y = 0;
        out.z = Math.sin(z);
        out.w = Math.cos(z);
        return out;
      };
      Quat.fromMat3 = function fromMat3(out, mat) {
        var m = mat.m;
        var m00 = m[0], m10 = m[1], m20 = m[2], m01 = m[3], m11 = m[4], m21 = m[5], m02 = m[6], m12 = m[7], m22 = m[8];
        var trace = m00 + m11 + m22;
        if (trace > 0) {
          var s = .5 / Math.sqrt(trace + 1);
          out.w = .25 / s;
          out.x = (m21 - m12) * s;
          out.y = (m02 - m20) * s;
          out.z = (m10 - m01) * s;
        } else if (m00 > m11 && m00 > m22) {
          var _s = 2 * Math.sqrt(1 + m00 - m11 - m22);
          out.w = (m21 - m12) / _s;
          out.x = .25 * _s;
          out.y = (m01 + m10) / _s;
          out.z = (m02 + m20) / _s;
        } else if (m11 > m22) {
          var _s2 = 2 * Math.sqrt(1 + m11 - m00 - m22);
          out.w = (m02 - m20) / _s2;
          out.x = (m01 + m10) / _s2;
          out.y = .25 * _s2;
          out.z = (m12 + m21) / _s2;
        } else {
          var _s3 = 2 * Math.sqrt(1 + m22 - m00 - m11);
          out.w = (m10 - m01) / _s3;
          out.x = (m02 + m20) / _s3;
          out.y = (m12 + m21) / _s3;
          out.z = .25 * _s3;
        }
        return out;
      };
      Quat.fromEuler = function fromEuler(out, x, y, z) {
        x *= halfToRad;
        y *= halfToRad;
        z *= halfToRad;
        var sx = Math.sin(x);
        var cx = Math.cos(x);
        var sy = Math.sin(y);
        var cy = Math.cos(y);
        var sz = Math.sin(z);
        var cz = Math.cos(z);
        out.x = sx * cy * cz + cx * sy * sz;
        out.y = cx * sy * cz + sx * cy * sz;
        out.z = cx * cy * sz - sx * sy * cz;
        out.w = cx * cy * cz - sx * sy * sz;
        return out;
      };
      Quat.toAxisX = function toAxisX(out, q) {
        var fy = 2 * q.y;
        var fz = 2 * q.z;
        out.x = 1 - fy * q.y - fz * q.z;
        out.y = fy * q.x + fz * q.w;
        out.z = fz * q.x + fy * q.w;
        return out;
      };
      Quat.toAxisY = function toAxisY(out, q) {
        var fx = 2 * q.x;
        var fy = 2 * q.y;
        var fz = 2 * q.z;
        out.x = fy * q.x - fz * q.w;
        out.y = 1 - fx * q.x - fz * q.z;
        out.z = fz * q.y + fx * q.w;
        return out;
      };
      Quat.toAxisZ = function toAxisZ(out, q) {
        var fx = 2 * q.x;
        var fy = 2 * q.y;
        var fz = 2 * q.z;
        out.x = fz * q.x - fy * q.w;
        out.y = fz * q.y - fx * q.w;
        out.z = 1 - fx * q.x - fy * q.y;
        return out;
      };
      Quat.toEuler = function toEuler(out, q, outerZ) {
        var x = q.x, y = q.y, z = q.z, w = q.w;
        var bank = 0;
        var heading = 0;
        var attitude = 0;
        var test = x * y + z * w;
        if (test > .499999) {
          bank = 0;
          heading = (0, _utils.toDegree)(2 * Math.atan2(x, w));
          attitude = 90;
        } else if (test < -.499999) {
          bank = 0;
          heading = -(0, _utils.toDegree)(2 * Math.atan2(x, w));
          attitude = -90;
        } else {
          var sqx = x * x;
          var sqy = y * y;
          var sqz = z * z;
          bank = (0, _utils.toDegree)(Math.atan2(2 * x * w - 2 * y * z, 1 - 2 * sqx - 2 * sqz));
          heading = (0, _utils.toDegree)(Math.atan2(2 * y * w - 2 * x * z, 1 - 2 * sqy - 2 * sqz));
          attitude = (0, _utils.toDegree)(Math.asin(2 * test));
          if (outerZ) {
            bank = -180 * Math.sign(bank + 1e-6) + bank;
            heading = -180 * Math.sign(heading + 1e-6) + heading;
            attitude = 180 * Math.sign(attitude + 1e-6) - attitude;
          }
        }
        out.x = bank;
        out.y = heading;
        out.z = attitude;
        return out;
      };
      Quat.strictEquals = function strictEquals(a, b) {
        return a.x === b.x && a.y === b.y && a.z === b.z && a.w === b.w;
      };
      Quat.equals = function equals(a, b, epsilon) {
        void 0 === epsilon && (epsilon = _utils.EPSILON);
        return Math.abs(a.x - b.x) <= epsilon * Math.max(1, Math.abs(a.x), Math.abs(b.x)) && Math.abs(a.y - b.y) <= epsilon * Math.max(1, Math.abs(a.y), Math.abs(b.y)) && Math.abs(a.z - b.z) <= epsilon * Math.max(1, Math.abs(a.z), Math.abs(b.z)) && Math.abs(a.w - b.w) <= epsilon * Math.max(1, Math.abs(a.w), Math.abs(b.w));
      };
      Quat.toArray = function toArray(out, q, ofs) {
        void 0 === ofs && (ofs = 0);
        out[ofs + 0] = q.x;
        out[ofs + 1] = q.y;
        out[ofs + 2] = q.z;
        out[ofs + 3] = q.w;
        return out;
      };
      Quat.fromArray = function fromArray(out, arr, ofs) {
        void 0 === ofs && (ofs = 0);
        out.x = arr[ofs + 0];
        out.y = arr[ofs + 1];
        out.z = arr[ofs + 2];
        out.w = arr[ofs + 3];
        return out;
      };
      function Quat(x, y, z, w) {
        var _this;
        void 0 === x && (x = 0);
        void 0 === y && (y = 0);
        void 0 === z && (z = 0);
        void 0 === w && (w = 1);
        _this = _ValueType.call(this) || this;
        _this.x = void 0;
        _this.y = void 0;
        _this.z = void 0;
        _this.w = void 0;
        if (x && "object" === typeof x) {
          _this.x = x.x;
          _this.y = x.y;
          _this.z = x.z;
          _this.w = x.w;
        } else {
          _this.x = x;
          _this.y = y;
          _this.z = z;
          _this.w = w;
        }
        return _this;
      }
      _proto.clone = function clone() {
        return new Quat(this.x, this.y, this.z, this.w);
      };
      _proto.set = function set(newValue) {
        this.x = newValue.x;
        this.y = newValue.y;
        this.z = newValue.z;
        this.w = newValue.w;
        return this;
      };
      _proto.equals = function equals(other) {
        return other && this.x === other.x && this.y === other.y && this.z === other.z && this.w === other.w;
      };
      _proto.toEuler = function toEuler(out) {
        return Quat.toEuler(out, this);
      };
      _proto.fromEuler = function fromEuler(euler) {
        return Quat.fromEuler(this, euler.x, euler.y, euler.z);
      };
      _proto.lerp = function lerp(to, ratio, out) {
        out = out || new Quat();
        Quat.slerp(out, this, to, ratio);
        return out;
      };
      _proto.multiply = function multiply(other) {
        return Quat.multiply(this, this, other);
      };
      _proto.rotateAround = function rotateAround(rot, axis, rad, out) {
        out = out || new Quat();
        return Quat.rotateAround(out, rot, axis, rad);
      };
      return Quat;
    })(_valueType["default"]);
    exports["default"] = Quat;
    Quat.mul = Quat.multiply;
    Quat.scale = Quat.multiplyScalar;
    Quat.mag = Quat.len;
    Quat.IDENTITY = Object.freeze(new Quat());
    var qt_1 = new Quat();
    var qt_2 = new Quat();
    var v3_1 = new _vec["default"]();
    var m3_1 = new _mat["default"]();
    var halfToRad = .5 * Math.PI / 180;
    _CCClass["default"].fastDefine("cc.Quat", Quat, {
      x: 0,
      y: 0,
      z: 0,
      w: 1
    });
    cc.quat = function quat(x, y, z, w) {
      return new Quat(x, y, z, w);
    };
    cc.Quat = Quat;
    module.exports = exports["default"];
  }), {
    "../platform/CCClass": 138,
    "./mat3": 225,
    "./utils": 231,
    "./value-type": 232,
    "./vec3": 234
  } ],
  228: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _valueType = _interopRequireDefault(require("./value-type"));
    var _CCClass = _interopRequireDefault(require("../platform/CCClass"));
    var _vec = _interopRequireDefault(require("./vec2"));
    var _size = _interopRequireDefault(require("./size"));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    function _defineProperties(target, props) {
      for (var i = 0; i < props.length; i++) {
        var descriptor = props[i];
        descriptor.enumerable = descriptor.enumerable || false;
        descriptor.configurable = true;
        "value" in descriptor && (descriptor.writable = true);
        Object.defineProperty(target, descriptor.key, descriptor);
      }
    }
    function _createClass(Constructor, protoProps, staticProps) {
      protoProps && _defineProperties(Constructor.prototype, protoProps);
      staticProps && _defineProperties(Constructor, staticProps);
      return Constructor;
    }
    function _inheritsLoose(subClass, superClass) {
      subClass.prototype = Object.create(superClass.prototype);
      subClass.prototype.constructor = subClass;
      subClass.__proto__ = superClass;
    }
    var Rect = (function(_ValueType) {
      _inheritsLoose(Rect, _ValueType);
      Rect.fromMinMax = function fromMinMax(v1, v2) {
        var min_x = Math.min(v1.x, v2.x);
        var min_y = Math.min(v1.y, v2.y);
        var max_x = Math.max(v1.x, v2.x);
        var max_y = Math.max(v1.y, v2.y);
        return new Rect(min_x, min_y, max_x - min_x, max_y - min_y);
      };
      function Rect(x, y, w, h) {
        var _this;
        void 0 === x && (x = 0);
        void 0 === y && (y = 0);
        void 0 === w && (w = 0);
        void 0 === h && (h = 0);
        _this = _ValueType.call(this) || this;
        _this.x = void 0;
        _this.y = void 0;
        _this.width = void 0;
        _this.height = void 0;
        if (x && "object" === typeof x) {
          y = x.y;
          w = x.width;
          h = x.height;
          x = x.x;
        }
        _this.x = x || 0;
        _this.y = y || 0;
        _this.width = w || 0;
        _this.height = h || 0;
        return _this;
      }
      var _proto = Rect.prototype;
      _proto.clone = function clone() {
        return new Rect(this.x, this.y, this.width, this.height);
      };
      _proto.equals = function equals(other) {
        return other && this.x === other.x && this.y === other.y && this.width === other.width && this.height === other.height;
      };
      _proto.lerp = function lerp(to, ratio, out) {
        out = out || new Rect();
        var x = this.x;
        var y = this.y;
        var width = this.width;
        var height = this.height;
        out.x = x + (to.x - x) * ratio;
        out.y = y + (to.y - y) * ratio;
        out.width = width + (to.width - width) * ratio;
        out.height = height + (to.height - height) * ratio;
        return out;
      };
      _proto.set = function set(source) {
        this.x = source.x;
        this.y = source.y;
        this.width = source.width;
        this.height = source.height;
        return this;
      };
      _proto.intersects = function intersects(rect) {
        var maxax = this.x + this.width, maxay = this.y + this.height, maxbx = rect.x + rect.width, maxby = rect.y + rect.height;
        return !(maxax < rect.x || maxbx < this.x || maxay < rect.y || maxby < this.y);
      };
      _proto.intersection = function intersection(out, rectB) {
        var axMin = this.x, ayMin = this.y, axMax = this.x + this.width, ayMax = this.y + this.height;
        var bxMin = rectB.x, byMin = rectB.y, bxMax = rectB.x + rectB.width, byMax = rectB.y + rectB.height;
        out.x = Math.max(axMin, bxMin);
        out.y = Math.max(ayMin, byMin);
        out.width = Math.min(axMax, bxMax) - out.x;
        out.height = Math.min(ayMax, byMax) - out.y;
        return out;
      };
      _proto.contains = function contains(point) {
        return this.x <= point.x && this.x + this.width >= point.x && this.y <= point.y && this.y + this.height >= point.y;
      };
      _proto.containsRect = function containsRect(rect) {
        return this.x <= rect.x && this.x + this.width >= rect.x + rect.width && this.y <= rect.y && this.y + this.height >= rect.y + rect.height;
      };
      _proto.union = function union(out, rectB) {
        var ax = this.x, ay = this.y, aw = this.width, ah = this.height;
        var bx = rectB.x, by = rectB.y, bw = rectB.width, bh = rectB.height;
        out.x = Math.min(ax, bx);
        out.y = Math.min(ay, by);
        out.width = Math.max(ax + aw, bx + bw) - out.x;
        out.height = Math.max(ay + ah, by + bh) - out.y;
        return out;
      };
      _proto.transformMat4 = function transformMat4(out, mat) {
        var ol = this.x;
        var ob = this.y;
        var or = ol + this.width;
        var ot = ob + this.height;
        var matm = mat.m;
        var lbx = matm[0] * ol + matm[4] * ob + matm[12];
        var lby = matm[1] * ol + matm[5] * ob + matm[13];
        var rbx = matm[0] * or + matm[4] * ob + matm[12];
        var rby = matm[1] * or + matm[5] * ob + matm[13];
        var ltx = matm[0] * ol + matm[4] * ot + matm[12];
        var lty = matm[1] * ol + matm[5] * ot + matm[13];
        var rtx = matm[0] * or + matm[4] * ot + matm[12];
        var rty = matm[1] * or + matm[5] * ot + matm[13];
        var minX = Math.min(lbx, rbx, ltx, rtx);
        var maxX = Math.max(lbx, rbx, ltx, rtx);
        var minY = Math.min(lby, rby, lty, rty);
        var maxY = Math.max(lby, rby, lty, rty);
        out.x = minX;
        out.y = minY;
        out.width = maxX - minX;
        out.height = maxY - minY;
        return out;
      };
      _proto.toString = function toString() {
        return "(" + this.x.toFixed(2) + ", " + this.y.toFixed(2) + ", " + this.width.toFixed(2) + ", " + this.height.toFixed(2) + ")";
      };
      _createClass(Rect, [ {
        key: "xMin",
        get: function get() {
          return this.x;
        },
        set: function set(v) {
          this.width += this.x - v;
          this.x = v;
        }
      }, {
        key: "yMin",
        get: function get() {
          return this.y;
        },
        set: function set(v) {
          this.height += this.y - v;
          this.y = v;
        }
      }, {
        key: "xMax",
        get: function get() {
          return this.x + this.width;
        },
        set: function set(value) {
          this.width = value - this.x;
        }
      }, {
        key: "yMax",
        get: function get() {
          return this.y + this.height;
        },
        set: function set(value) {
          this.height = value - this.y;
        }
      }, {
        key: "center",
        get: function get() {
          return new _vec["default"](this.x + .5 * this.width, this.y + .5 * this.height);
        },
        set: function set(value) {
          this.x = value.x - .5 * this.width;
          this.y = value.y - .5 * this.height;
        }
      }, {
        key: "origin",
        get: function get() {
          return new _vec["default"](this.x, this.y);
        },
        set: function set(value) {
          this.x = value.x;
          this.y = value.y;
        }
      }, {
        key: "size",
        get: function get() {
          return new _size["default"](this.width, this.height);
        },
        set: function set(value) {
          this.width = value.width;
          this.height = value.height;
        }
      } ]);
      return Rect;
    })(_valueType["default"]);
    exports["default"] = Rect;
    _CCClass["default"].fastDefine("cc.Rect", Rect, {
      x: 0,
      y: 0,
      width: 0,
      height: 0
    });
    cc.Rect = Rect;
    cc.rect = function rect(x, y, w, h) {
      return new Rect(x, y, w, h);
    };
    module.exports = exports["default"];
  }), {
    "../platform/CCClass": 138,
    "./size": 229,
    "./value-type": 232,
    "./vec2": 233
  } ],
  229: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _valueType = _interopRequireDefault(require("./value-type"));
    var _CCClass = _interopRequireDefault(require("../platform/CCClass"));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    function _defineProperties(target, props) {
      for (var i = 0; i < props.length; i++) {
        var descriptor = props[i];
        descriptor.enumerable = descriptor.enumerable || false;
        descriptor.configurable = true;
        "value" in descriptor && (descriptor.writable = true);
        Object.defineProperty(target, descriptor.key, descriptor);
      }
    }
    function _createClass(Constructor, protoProps, staticProps) {
      protoProps && _defineProperties(Constructor.prototype, protoProps);
      staticProps && _defineProperties(Constructor, staticProps);
      return Constructor;
    }
    function _inheritsLoose(subClass, superClass) {
      subClass.prototype = Object.create(superClass.prototype);
      subClass.prototype.constructor = subClass;
      subClass.__proto__ = superClass;
    }
    var Size = (function(_ValueType) {
      _inheritsLoose(Size, _ValueType);
      _createClass(Size, null, [ {
        key: "ZERO",
        get: function get() {
          return new Size();
        }
      } ]);
      function Size(width, height) {
        var _this;
        void 0 === width && (width = 0);
        void 0 === height && (height = 0);
        _this = _ValueType.call(this) || this;
        _this.width = void 0;
        _this.height = void 0;
        if (width && "object" === typeof width) {
          _this.width = width.width;
          _this.height = width.height;
        } else {
          _this.width = width || 0;
          _this.height = height || 0;
        }
        return _this;
      }
      var _proto = Size.prototype;
      _proto.clone = function clone() {
        return new Size(this.width, this.height);
      };
      _proto.equals = function equals(other) {
        return other && this.width === other.width && this.height === other.height;
      };
      _proto.lerp = function lerp(to, ratio, out) {
        out = out || new Size();
        var width = this.width;
        var height = this.height;
        out.width = width + (to.width - width) * ratio;
        out.height = height + (to.height - height) * ratio;
        return out;
      };
      _proto.set = function set(source) {
        this.width = source.width;
        this.height = source.height;
        return this;
      };
      _proto.toString = function toString() {
        return "(" + this.width.toFixed(2) + ", " + this.height.toFixed(2) + ")";
      };
      return Size;
    })(_valueType["default"]);
    exports["default"] = Size;
    Size.ZERO_R = Size.ZERO;
    _CCClass["default"].fastDefine("cc.Size", Size, {
      width: 0,
      height: 0
    });
    cc.size = function(w, h) {
      return new Size(w, h);
    };
    cc.Size = Size;
    module.exports = exports["default"];
  }), {
    "../platform/CCClass": 138,
    "./value-type": 232
  } ],
  230: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _quat = _interopRequireDefault(require("./quat"));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    var tmp_quat = new _quat["default"]();
    var Trs = (function() {
      function Trs() {}
      Trs.toRotation = function toRotation(out, a) {
        out.x = a[3];
        out.y = a[4];
        out.z = a[5];
        out.w = a[6];
        return out;
      };
      Trs.fromRotation = function fromRotation(out, a) {
        out[3] = a.x;
        out[4] = a.y;
        out[5] = a.z;
        out[6] = a.w;
        return out;
      };
      Trs.toEuler = function toEuler(out, a) {
        Trs.toRotation(tmp_quat, a);
        _quat["default"].toEuler(out, tmp_quat);
        return out;
      };
      Trs.fromEuler = function fromEuler(out, a) {
        _quat["default"].fromEuler(tmp_quat, a.x, a.y, a.z);
        Trs.fromRotation(out, tmp_quat);
        return out;
      };
      Trs.fromEulerNumber = function fromEulerNumber(out, x, y, z) {
        _quat["default"].fromEuler(tmp_quat, x, y, z);
        Trs.fromRotation(out, tmp_quat);
        return out;
      };
      Trs.toScale = function toScale(out, a) {
        out.x = a[7];
        out.y = a[8];
        out.z = a[9];
        return out;
      };
      Trs.fromScale = function fromScale(out, a) {
        out[7] = a.x;
        out[8] = a.y;
        out[9] = a.z;
        return out;
      };
      Trs.toPosition = function toPosition(out, a) {
        out.x = a[0];
        out.y = a[1];
        out.z = a[2];
        return out;
      };
      Trs.fromPosition = function fromPosition(out, a) {
        out[0] = a.x;
        out[1] = a.y;
        out[2] = a.z;
        return out;
      };
      Trs.fromAngleZ = function fromAngleZ(out, a) {
        _quat["default"].fromAngleZ(tmp_quat, a);
        Trs.fromRotation(out, tmp_quat);
        return out;
      };
      Trs.toMat4 = function toMat4(out, trs) {
        var x = trs[3], y = trs[4], z = trs[5], w = trs[6];
        var x2 = x + x;
        var y2 = y + y;
        var z2 = z + z;
        var xx = x * x2;
        var xy = x * y2;
        var xz = x * z2;
        var yy = y * y2;
        var yz = y * z2;
        var zz = z * z2;
        var wx = w * x2;
        var wy = w * y2;
        var wz = w * z2;
        var sx = trs[7];
        var sy = trs[8];
        var sz = trs[9];
        var m = out.m;
        m[0] = (1 - (yy + zz)) * sx;
        m[1] = (xy + wz) * sx;
        m[2] = (xz - wy) * sx;
        m[3] = 0;
        m[4] = (xy - wz) * sy;
        m[5] = (1 - (xx + zz)) * sy;
        m[6] = (yz + wx) * sy;
        m[7] = 0;
        m[8] = (xz + wy) * sz;
        m[9] = (yz - wx) * sz;
        m[10] = (1 - (xx + yy)) * sz;
        m[11] = 0;
        m[12] = trs[0];
        m[13] = trs[1];
        m[14] = trs[2];
        m[15] = 1;
        return out;
      };
      return Trs;
    })();
    exports["default"] = Trs;
    cc.Trs = Trs;
    module.exports = exports["default"];
  }), {
    "./quat": 227
  } ],
  231: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports.equals = equals;
    exports.approx = approx;
    exports.clamp = clamp;
    exports.clamp01 = clamp01;
    exports.lerp = lerp;
    exports.toRadian = toRadian;
    exports.toDegree = toDegree;
    exports.randomRange = randomRange;
    exports.randomRangeInt = randomRangeInt;
    exports.pseudoRandom = pseudoRandom;
    exports.pseudoRandomRange = pseudoRandomRange;
    exports.pseudoRandomRangeInt = pseudoRandomRangeInt;
    exports.nextPow2 = nextPow2;
    exports.repeat = repeat;
    exports.pingPong = pingPong;
    exports.inverseLerp = inverseLerp;
    exports.sign = sign;
    exports.random = exports.FLOAT_BYTES = exports.FLOAT_ARRAY_TYPE = exports.INT_MIN = exports.INT_MAX = exports.INT_BITS = exports.EPSILON = void 0;
    var _d2r = Math.PI / 180;
    var _r2d = 180 / Math.PI;
    var EPSILON = 1e-6;
    exports.EPSILON = EPSILON;
    var INT_BITS = 32;
    exports.INT_BITS = INT_BITS;
    var INT_MAX = 2147483647;
    exports.INT_MAX = INT_MAX;
    var INT_MIN = -1 << INT_BITS - 1;
    exports.INT_MIN = INT_MIN;
    var FLOAT_ARRAY_TYPE = Float64Array;
    exports.FLOAT_ARRAY_TYPE = FLOAT_ARRAY_TYPE;
    var FLOAT_BYTES = 8;
    exports.FLOAT_BYTES = FLOAT_BYTES;
    function equals(a, b) {
      return Math.abs(a - b) <= EPSILON * Math.max(1, Math.abs(a), Math.abs(b));
    }
    function approx(a, b, maxDiff) {
      maxDiff = maxDiff || EPSILON;
      return Math.abs(a - b) <= maxDiff;
    }
    function clamp(val, min, max) {
      return val < min ? min : val > max ? max : val;
    }
    function clamp01(val) {
      return val < 0 ? 0 : val > 1 ? 1 : val;
    }
    function lerp(from, to, ratio) {
      return from + (to - from) * ratio;
    }
    function toRadian(a) {
      return a * _d2r;
    }
    function toDegree(a) {
      return a * _r2d;
    }
    var random = Math.random;
    exports.random = random;
    function randomRange(min, max) {
      return Math.random() * (max - min) + min;
    }
    function randomRangeInt(min, max) {
      return Math.floor(randomRange(min, max));
    }
    function pseudoRandom(seed) {
      seed = (9301 * seed + 49297) % 233280;
      return seed / 233280;
    }
    function pseudoRandomRange(seed, min, max) {
      return pseudoRandom(seed) * (max - min) + min;
    }
    function pseudoRandomRangeInt(seed, min, max) {
      return Math.floor(pseudoRandomRange(seed, min, max));
    }
    function nextPow2(val) {
      --val;
      val |= val >> 1;
      val |= val >> 2;
      val |= val >> 4;
      val |= val >> 8;
      val |= val >> 16;
      ++val;
      return val;
    }
    function repeat(t, length) {
      return t - Math.floor(t / length) * length;
    }
    function pingPong(t, length) {
      t = repeat(t, 2 * length);
      t = length - Math.abs(t - length);
      return t;
    }
    function inverseLerp(from, to, value) {
      return (value - from) / (to - from);
    }
    function sign(v) {
      return (v > 0) - (v < 0);
    }
  }), {} ],
  232: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _js = _interopRequireDefault(require("../platform/js"));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    var ValueType = (function() {
      function ValueType() {}
      var _proto = ValueType.prototype;
      _proto.clone = function clone() {
        cc.errorID("0100", _js["default"].getClassName(this) + ".clone");
        return null;
      };
      _proto.equals = function equals(other) {
        cc.errorID("0100", _js["default"].getClassName(this) + ".equals");
        return false;
      };
      _proto.lerp = function lerp(to, ratio) {
        cc.errorID("0100", _js["default"].getClassName(this) + ".lerp");
        return this.clone();
      };
      _proto.set = function set(source) {
        cc.errorID("0100", _js["default"].getClassName(this) + ".set");
      };
      _proto.toString = function toString() {
        return "" + {};
      };
      return ValueType;
    })();
    exports["default"] = ValueType;
    _js["default"].setClassName("cc.ValueType", ValueType);
    cc.ValueType = ValueType;
    module.exports = exports["default"];
  }), {
    "../platform/js": 158
  } ],
  233: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _valueType = _interopRequireDefault(require("./value-type"));
    var _CCClass = _interopRequireDefault(require("../platform/CCClass"));
    var _misc = _interopRequireDefault(require("../utils/misc"));
    var _utils = require("./utils");
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    function _defineProperties(target, props) {
      for (var i = 0; i < props.length; i++) {
        var descriptor = props[i];
        descriptor.enumerable = descriptor.enumerable || false;
        descriptor.configurable = true;
        "value" in descriptor && (descriptor.writable = true);
        Object.defineProperty(target, descriptor.key, descriptor);
      }
    }
    function _createClass(Constructor, protoProps, staticProps) {
      protoProps && _defineProperties(Constructor.prototype, protoProps);
      staticProps && _defineProperties(Constructor, staticProps);
      return Constructor;
    }
    function _inheritsLoose(subClass, superClass) {
      subClass.prototype = Object.create(superClass.prototype);
      subClass.prototype.constructor = subClass;
      subClass.__proto__ = superClass;
    }
    var _x = 0;
    var _y = 0;
    var Vec2 = (function(_ValueType) {
      _inheritsLoose(Vec2, _ValueType);
      var _proto = Vec2.prototype;
      _proto.sub = function sub(vector, out) {
        return Vec2.subtract(out || new Vec2(), this, vector);
      };
      _proto.mul = function mul(num, out) {
        return Vec2.multiplyScalar(out || new Vec2(), this, num);
      };
      _proto.div = function div(num, out) {
        return Vec2.multiplyScalar(out || new Vec2(), this, 1 / num);
      };
      _proto.scale = function scale(vector, out) {
        return Vec2.multiply(out || new Vec2(), this, vector);
      };
      _proto.neg = function neg(out) {
        return Vec2.negate(out || new Vec2(), this);
      };
      Vec2.clone = function clone(a) {
        return new Vec2(a.x, a.y);
      };
      Vec2.copy = function copy(out, a) {
        out.x = a.x;
        out.y = a.y;
        return out;
      };
      Vec2.set = function set(out, x, y) {
        out.x = x;
        out.y = y;
        return out;
      };
      Vec2.add = function add(out, a, b) {
        out.x = a.x + b.x;
        out.y = a.y + b.y;
        return out;
      };
      Vec2.subtract = function subtract(out, a, b) {
        out.x = a.x - b.x;
        out.y = a.y - b.y;
        return out;
      };
      Vec2.multiply = function multiply(out, a, b) {
        out.x = a.x * b.x;
        out.y = a.y * b.y;
        return out;
      };
      Vec2.divide = function divide(out, a, b) {
        out.x = a.x / b.x;
        out.y = a.y / b.y;
        return out;
      };
      Vec2.ceil = function ceil(out, a) {
        out.x = Math.ceil(a.x);
        out.y = Math.ceil(a.y);
        return out;
      };
      Vec2.floor = function floor(out, a) {
        out.x = Math.floor(a.x);
        out.y = Math.floor(a.y);
        return out;
      };
      Vec2.min = function min(out, a, b) {
        out.x = Math.min(a.x, b.x);
        out.y = Math.min(a.y, b.y);
        return out;
      };
      Vec2.max = function max(out, a, b) {
        out.x = Math.max(a.x, b.x);
        out.y = Math.max(a.y, b.y);
        return out;
      };
      Vec2.round = function round(out, a) {
        out.x = Math.round(a.x);
        out.y = Math.round(a.y);
        return out;
      };
      Vec2.multiplyScalar = function multiplyScalar(out, a, b) {
        out.x = a.x * b;
        out.y = a.y * b;
        return out;
      };
      Vec2.scaleAndAdd = function scaleAndAdd(out, a, b, scale) {
        out.x = a.x + b.x * scale;
        out.y = a.y + b.y * scale;
        return out;
      };
      Vec2.distance = function distance(a, b) {
        _x = b.x - a.x;
        _y = b.y - a.y;
        return Math.sqrt(_x * _x + _y * _y);
      };
      Vec2.squaredDistance = function squaredDistance(a, b) {
        _x = b.x - a.x;
        _y = b.y - a.y;
        return _x * _x + _y * _y;
      };
      Vec2.len = function len(a) {
        _x = a.x;
        _y = a.y;
        return Math.sqrt(_x * _x + _y * _y);
      };
      Vec2.lengthSqr = function lengthSqr(a) {
        _x = a.x;
        _y = a.y;
        return _x * _x + _y * _y;
      };
      Vec2.negate = function negate(out, a) {
        out.x = -a.x;
        out.y = -a.y;
        return out;
      };
      Vec2.inverse = function inverse(out, a) {
        out.x = 1 / a.x;
        out.y = 1 / a.y;
        return out;
      };
      Vec2.inverseSafe = function inverseSafe(out, a) {
        _x = a.x;
        _y = a.y;
        Math.abs(_x) < _utils.EPSILON ? out.x = 0 : out.x = 1 / _x;
        Math.abs(_y) < _utils.EPSILON ? out.y = 0 : out.y = 1 / _y;
        return out;
      };
      Vec2.normalize = function normalize(out, a) {
        _x = a.x;
        _y = a.y;
        var len = _x * _x + _y * _y;
        if (len > 0) {
          len = 1 / Math.sqrt(len);
          out.x = _x * len;
          out.y = _y * len;
        }
        return out;
      };
      Vec2.dot = function dot(a, b) {
        return a.x * b.x + a.y * b.y;
      };
      Vec2.cross = function cross(out, a, b) {
        out.x = out.y = 0;
        out.z = a.x * b.y - a.y * b.x;
        return out;
      };
      Vec2.lerp = function lerp(out, a, b, t) {
        _x = a.x;
        _y = a.y;
        out.x = _x + t * (b.x - _x);
        out.y = _y + t * (b.y - _y);
        return out;
      };
      Vec2.random = function random(out, scale) {
        scale = scale || 1;
        var r = 2 * (0, _utils.random)() * Math.PI;
        out.x = Math.cos(r) * scale;
        out.y = Math.sin(r) * scale;
        return out;
      };
      Vec2.transformMat3 = function transformMat3(out, a, mat) {
        _x = a.x;
        _y = a.y;
        var m = mat.m;
        out.x = m[0] * _x + m[3] * _y + m[6];
        out.y = m[1] * _x + m[4] * _y + m[7];
        return out;
      };
      Vec2.transformMat4 = function transformMat4(out, a, mat) {
        _x = a.x;
        _y = a.y;
        var m = mat.m;
        out.x = m[0] * _x + m[4] * _y + m[12];
        out.y = m[1] * _x + m[5] * _y + m[13];
        return out;
      };
      Vec2.strictEquals = function strictEquals(a, b) {
        return a.x === b.x && a.y === b.y;
      };
      Vec2.equals = function equals(a, b, epsilon) {
        void 0 === epsilon && (epsilon = _utils.EPSILON);
        return Math.abs(a.x - b.x) <= epsilon * Math.max(1, Math.abs(a.x), Math.abs(b.x)) && Math.abs(a.y - b.y) <= epsilon * Math.max(1, Math.abs(a.y), Math.abs(b.y));
      };
      Vec2.angle = function angle(a, b) {
        Vec2.normalize(v2_1, a);
        Vec2.normalize(v2_2, b);
        var cosine = Vec2.dot(v2_1, v2_2);
        if (cosine > 1) return 0;
        if (cosine < -1) return Math.PI;
        return Math.acos(cosine);
      };
      Vec2.toArray = function toArray(out, v, ofs) {
        void 0 === ofs && (ofs = 0);
        out[ofs + 0] = v.x;
        out[ofs + 1] = v.y;
        return out;
      };
      Vec2.fromArray = function fromArray(out, arr, ofs) {
        void 0 === ofs && (ofs = 0);
        out.x = arr[ofs + 0];
        out.y = arr[ofs + 1];
        return out;
      };
      _createClass(Vec2, null, [ {
        key: "ONE",
        get: function get() {
          return new Vec2(1, 1);
        }
      }, {
        key: "ZERO",
        get: function get() {
          return new Vec2(0, 0);
        }
      }, {
        key: "UP",
        get: function get() {
          return new Vec2(0, 1);
        }
      }, {
        key: "RIGHT",
        get: function get() {
          return new Vec2(1, 0);
        }
      } ]);
      function Vec2(x, y) {
        var _this;
        void 0 === x && (x = 0);
        void 0 === y && (y = 0);
        _this = _ValueType.call(this) || this;
        _this.mag = Vec2.prototype.len;
        _this.magSqr = Vec2.prototype.lengthSqr;
        _this.subSelf = Vec2.prototype.subtract;
        _this.mulSelf = Vec2.prototype.multiplyScalar;
        _this.divSelf = Vec2.prototype.divide;
        _this.scaleSelf = Vec2.prototype.multiply;
        _this.negSelf = Vec2.prototype.negate;
        _this.x = void 0;
        _this.y = void 0;
        _this.z = 0;
        if (x && "object" === typeof x) {
          _this.x = x.x || 0;
          _this.y = x.y || 0;
        } else {
          _this.x = x || 0;
          _this.y = y || 0;
        }
        return _this;
      }
      _proto.clone = function clone() {
        return new Vec2(this.x, this.y);
      };
      _proto.set = function set(newValue) {
        this.x = newValue.x;
        this.y = newValue.y;
        return this;
      };
      _proto.equals = function equals(other) {
        return other && this.x === other.x && this.y === other.y;
      };
      _proto.fuzzyEquals = function fuzzyEquals(other, variance) {
        if (this.x - variance <= other.x && other.x <= this.x + variance && this.y - variance <= other.y && other.y <= this.y + variance) return true;
        return false;
      };
      _proto.toString = function toString() {
        return "(" + this.x.toFixed(2) + ", " + this.y.toFixed(2) + ")";
      };
      _proto.lerp = function lerp(to, ratio, out) {
        out = out || new Vec2();
        var x = this.x;
        var y = this.y;
        out.x = x + (to.x - x) * ratio;
        out.y = y + (to.y - y) * ratio;
        return out;
      };
      _proto.clampf = function clampf(min_inclusive, max_inclusive) {
        this.x = _misc["default"].clampf(this.x, min_inclusive.x, max_inclusive.x);
        this.y = _misc["default"].clampf(this.y, min_inclusive.y, max_inclusive.y);
        return this;
      };
      _proto.add = function add(vector, out) {
        out = out || new Vec2();
        out.x = this.x + vector.x;
        out.y = this.y + vector.y;
        return out;
      };
      _proto.addSelf = function addSelf(vector) {
        this.x += vector.x;
        this.y += vector.y;
        return this;
      };
      _proto.subtract = function subtract(vector) {
        this.x -= vector.x;
        this.y -= vector.y;
        return this;
      };
      _proto.multiplyScalar = function multiplyScalar(num) {
        this.x *= num;
        this.y *= num;
        return this;
      };
      _proto.multiply = function multiply(vector) {
        this.x *= vector.x;
        this.y *= vector.y;
        return this;
      };
      _proto.divide = function divide(num) {
        this.x /= num;
        this.y /= num;
        return this;
      };
      _proto.negate = function negate() {
        this.x = -this.x;
        this.y = -this.y;
        return this;
      };
      _proto.dot = function dot(vector) {
        return this.x * vector.x + this.y * vector.y;
      };
      _proto.cross = function cross(vector) {
        return this.x * vector.y - this.y * vector.x;
      };
      _proto.len = function len() {
        return Math.sqrt(this.x * this.x + this.y * this.y);
      };
      _proto.lengthSqr = function lengthSqr() {
        return this.x * this.x + this.y * this.y;
      };
      _proto.normalizeSelf = function normalizeSelf() {
        var magSqr = this.x * this.x + this.y * this.y;
        if (1 === magSqr) return this;
        if (0 === magSqr) return this;
        var invsqrt = 1 / Math.sqrt(magSqr);
        this.x *= invsqrt;
        this.y *= invsqrt;
        return this;
      };
      _proto.normalize = function normalize(out) {
        out = out || new Vec2();
        out.x = this.x;
        out.y = this.y;
        out.normalizeSelf();
        return out;
      };
      _proto.angle = function angle(vector) {
        var magSqr1 = this.magSqr();
        var magSqr2 = vector.magSqr();
        if (0 === magSqr1 || 0 === magSqr2) {
          console.warn("Can't get angle between zero vector");
          return 0;
        }
        var dot = this.dot(vector);
        var theta = dot / Math.sqrt(magSqr1 * magSqr2);
        theta = _misc["default"].clampf(theta, -1, 1);
        return Math.acos(theta);
      };
      _proto.signAngle = function signAngle(vector) {
        var angle = this.angle(vector);
        return this.cross(vector) < 0 ? -angle : angle;
      };
      _proto.rotate = function rotate(radians, out) {
        out = out || new Vec2();
        out.x = this.x;
        out.y = this.y;
        return out.rotateSelf(radians);
      };
      _proto.rotateSelf = function rotateSelf(radians) {
        var sin = Math.sin(radians);
        var cos = Math.cos(radians);
        var x = this.x;
        this.x = cos * x - sin * this.y;
        this.y = sin * x + cos * this.y;
        return this;
      };
      _proto.project = function project(vector) {
        return vector.multiplyScalar(this.dot(vector) / vector.dot(vector));
      };
      _proto.transformMat4 = function transformMat4(m, out) {
        out = out || new Vec2();
        Vec2.transformMat4(out, this, m);
        return out;
      };
      _proto.maxAxis = function maxAxis() {
        return Math.max(this.x, this.y);
      };
      return Vec2;
    })(_valueType["default"]);
    exports["default"] = Vec2;
    Vec2.sub = Vec2.subtract;
    Vec2.mul = Vec2.multiply;
    Vec2.scale = Vec2.multiplyScalar;
    Vec2.mag = Vec2.len;
    Vec2.squaredMagnitude = Vec2.lengthSqr;
    Vec2.div = Vec2.divide;
    Vec2.ONE_R = Vec2.ONE;
    Vec2.ZERO_R = Vec2.ZERO;
    Vec2.UP_R = Vec2.UP;
    Vec2.RIGHT_R = Vec2.RIGHT;
    var v2_1 = new Vec2();
    var v2_2 = new Vec2();
    _CCClass["default"].fastDefine("cc.Vec2", Vec2, {
      x: 0,
      y: 0
    });
    cc.v2 = function v2(x, y) {
      return new Vec2(x, y);
    };
    cc.Vec2 = Vec2;
    module.exports = exports["default"];
  }), {
    "../platform/CCClass": 138,
    "../utils/misc": 209,
    "./utils": 231,
    "./value-type": 232
  } ],
  234: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _valueType = _interopRequireDefault(require("./value-type"));
    var _CCClass = _interopRequireDefault(require("../platform/CCClass"));
    var _misc = _interopRequireDefault(require("../utils/misc"));
    var _vec = _interopRequireDefault(require("./vec2"));
    var _utils = require("./utils");
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    function _defineProperties(target, props) {
      for (var i = 0; i < props.length; i++) {
        var descriptor = props[i];
        descriptor.enumerable = descriptor.enumerable || false;
        descriptor.configurable = true;
        "value" in descriptor && (descriptor.writable = true);
        Object.defineProperty(target, descriptor.key, descriptor);
      }
    }
    function _createClass(Constructor, protoProps, staticProps) {
      protoProps && _defineProperties(Constructor.prototype, protoProps);
      staticProps && _defineProperties(Constructor, staticProps);
      return Constructor;
    }
    function _inheritsLoose(subClass, superClass) {
      subClass.prototype = Object.create(superClass.prototype);
      subClass.prototype.constructor = subClass;
      subClass.__proto__ = superClass;
    }
    var _x = 0;
    var _y = 0;
    var _z = 0;
    var Vec3 = (function(_ValueType) {
      _inheritsLoose(Vec3, _ValueType);
      var _proto = Vec3.prototype;
      _proto.sub = function sub(vector, out) {
        return Vec3.subtract(out || new Vec3(), this, vector);
      };
      _proto.mul = function mul(num, out) {
        return Vec3.multiplyScalar(out || new Vec3(), this, num);
      };
      _proto.div = function div(num, out) {
        return Vec3.multiplyScalar(out || new Vec3(), this, 1 / num);
      };
      _proto.scale = function scale(vector, out) {
        return Vec3.multiply(out || new Vec3(), this, vector);
      };
      _proto.neg = function neg(out) {
        return Vec3.negate(out || new Vec3(), this);
      };
      Vec3.zero = function zero(out) {
        out.x = 0;
        out.y = 0;
        out.z = 0;
        return out;
      };
      Vec3.clone = function clone(a) {
        return new Vec3(a.x, a.y, a.z);
      };
      Vec3.copy = function copy(out, a) {
        out.x = a.x;
        out.y = a.y;
        out.z = a.z;
        return out;
      };
      Vec3.set = function set(out, x, y, z) {
        out.x = x;
        out.y = y;
        out.z = z;
        return out;
      };
      Vec3.add = function add(out, a, b) {
        out.x = a.x + b.x;
        out.y = a.y + b.y;
        out.z = a.z + b.z;
        return out;
      };
      Vec3.subtract = function subtract(out, a, b) {
        out.x = a.x - b.x;
        out.y = a.y - b.y;
        out.z = a.z - b.z;
        return out;
      };
      Vec3.multiply = function multiply(out, a, b) {
        out.x = a.x * b.x;
        out.y = a.y * b.y;
        out.z = a.z * b.z;
        return out;
      };
      Vec3.divide = function divide(out, a, b) {
        out.x = a.x / b.x;
        out.y = a.y / b.y;
        out.z = a.z / b.z;
        return out;
      };
      Vec3.ceil = function ceil(out, a) {
        out.x = Math.ceil(a.x);
        out.y = Math.ceil(a.y);
        out.z = Math.ceil(a.z);
        return out;
      };
      Vec3.floor = function floor(out, a) {
        out.x = Math.floor(a.x);
        out.y = Math.floor(a.y);
        out.z = Math.floor(a.z);
        return out;
      };
      Vec3.min = function min(out, a, b) {
        out.x = Math.min(a.x, b.x);
        out.y = Math.min(a.y, b.y);
        out.z = Math.min(a.z, b.z);
        return out;
      };
      Vec3.max = function max(out, a, b) {
        out.x = Math.max(a.x, b.x);
        out.y = Math.max(a.y, b.y);
        out.z = Math.max(a.z, b.z);
        return out;
      };
      Vec3.round = function round(out, a) {
        out.x = Math.round(a.x);
        out.y = Math.round(a.y);
        out.z = Math.round(a.z);
        return out;
      };
      Vec3.multiplyScalar = function multiplyScalar(out, a, b) {
        out.x = a.x * b;
        out.y = a.y * b;
        out.z = a.z * b;
        return out;
      };
      Vec3.scaleAndAdd = function scaleAndAdd(out, a, b, scale) {
        out.x = a.x + b.x * scale;
        out.y = a.y + b.y * scale;
        out.z = a.z + b.z * scale;
        return out;
      };
      Vec3.distance = function distance(a, b) {
        _x = b.x - a.x;
        _y = b.y - a.y;
        _z = b.z - a.z;
        return Math.sqrt(_x * _x + _y * _y + _z * _z);
      };
      Vec3.squaredDistance = function squaredDistance(a, b) {
        _x = b.x - a.x;
        _y = b.y - a.y;
        _z = b.z - a.z;
        return _x * _x + _y * _y + _z * _z;
      };
      Vec3.len = function len(a) {
        _x = a.x;
        _y = a.y;
        _z = a.z;
        return Math.sqrt(_x * _x + _y * _y + _z * _z);
      };
      Vec3.lengthSqr = function lengthSqr(a) {
        _x = a.x;
        _y = a.y;
        _z = a.z;
        return _x * _x + _y * _y + _z * _z;
      };
      Vec3.negate = function negate(out, a) {
        out.x = -a.x;
        out.y = -a.y;
        out.z = -a.z;
        return out;
      };
      Vec3.inverse = function inverse(out, a) {
        out.x = 1 / a.x;
        out.y = 1 / a.y;
        out.z = 1 / a.z;
        return out;
      };
      Vec3.inverseSafe = function inverseSafe(out, a) {
        _x = a.x;
        _y = a.y;
        _z = a.z;
        Math.abs(_x) < _utils.EPSILON ? out.x = 0 : out.x = 1 / _x;
        Math.abs(_y) < _utils.EPSILON ? out.y = 0 : out.y = 1 / _y;
        Math.abs(_z) < _utils.EPSILON ? out.z = 0 : out.z = 1 / _z;
        return out;
      };
      Vec3.normalize = function normalize(out, a) {
        _x = a.x;
        _y = a.y;
        _z = a.z;
        var len = _x * _x + _y * _y + _z * _z;
        if (len > 0) {
          len = 1 / Math.sqrt(len);
          out.x = _x * len;
          out.y = _y * len;
          out.z = _z * len;
        }
        return out;
      };
      Vec3.dot = function dot(a, b) {
        return a.x * b.x + a.y * b.y + a.z * b.z;
      };
      Vec3.cross = function cross(out, a, b) {
        var ax = a.x, ay = a.y, az = a.z;
        var bx = b.x, by = b.y, bz = b.z;
        out.x = ay * bz - az * by;
        out.y = az * bx - ax * bz;
        out.z = ax * by - ay * bx;
        return out;
      };
      Vec3.lerp = function lerp(out, a, b, t) {
        out.x = a.x + t * (b.x - a.x);
        out.y = a.y + t * (b.y - a.y);
        out.z = a.z + t * (b.z - a.z);
        return out;
      };
      Vec3.random = function random(out, scale) {
        scale = scale || 1;
        var phi = 2 * (0, _utils.random)() * Math.PI;
        var cosTheta = 2 * (0, _utils.random)() - 1;
        var sinTheta = Math.sqrt(1 - cosTheta * cosTheta);
        out.x = sinTheta * Math.cos(phi) * scale;
        out.y = sinTheta * Math.sin(phi) * scale;
        out.z = cosTheta * scale;
        return out;
      };
      Vec3.transformMat4 = function transformMat4(out, a, mat) {
        _x = a.x;
        _y = a.y;
        _z = a.z;
        var m = mat.m;
        var rhw = m[3] * _x + m[7] * _y + m[11] * _z + m[15];
        rhw = rhw ? 1 / rhw : 1;
        out.x = (m[0] * _x + m[4] * _y + m[8] * _z + m[12]) * rhw;
        out.y = (m[1] * _x + m[5] * _y + m[9] * _z + m[13]) * rhw;
        out.z = (m[2] * _x + m[6] * _y + m[10] * _z + m[14]) * rhw;
        return out;
      };
      Vec3.transformMat4Normal = function transformMat4Normal(out, a, mat) {
        _x = a.x;
        _y = a.y;
        _z = a.z;
        var m = mat.m;
        var rhw = m[3] * _x + m[7] * _y + m[11] * _z;
        rhw = rhw ? 1 / rhw : 1;
        out.x = (m[0] * _x + m[4] * _y + m[8] * _z) * rhw;
        out.y = (m[1] * _x + m[5] * _y + m[9] * _z) * rhw;
        out.z = (m[2] * _x + m[6] * _y + m[10] * _z) * rhw;
        return out;
      };
      Vec3.transformMat3 = function transformMat3(out, a, mat) {
        _x = a.x;
        _y = a.y;
        _z = a.z;
        var m = mat.m;
        out.x = _x * m[0] + _y * m[3] + _z * m[6];
        out.y = _x * m[1] + _y * m[4] + _z * m[7];
        out.z = _x * m[2] + _y * m[5] + _z * m[8];
        return out;
      };
      Vec3.transformAffine = function transformAffine(out, v, mat) {
        _x = v.x;
        _y = v.y;
        _z = v.z;
        var m = mat.m;
        out.x = m[0] * _x + m[1] * _y + m[2] * _z + m[3];
        out.y = m[4] * _x + m[5] * _y + m[6] * _z + m[7];
        out.x = m[8] * _x + m[9] * _y + m[10] * _z + m[11];
        return out;
      };
      Vec3.transformQuat = function transformQuat(out, a, q) {
        var ix = q.w * a.x + q.y * a.z - q.z * a.y;
        var iy = q.w * a.y + q.z * a.x - q.x * a.z;
        var iz = q.w * a.z + q.x * a.y - q.y * a.x;
        var iw = -q.x * a.x - q.y * a.y - q.z * a.z;
        out.x = ix * q.w + iw * -q.x + iy * -q.z - iz * -q.y;
        out.y = iy * q.w + iw * -q.y + iz * -q.x - ix * -q.z;
        out.z = iz * q.w + iw * -q.z + ix * -q.y - iy * -q.x;
        return out;
      };
      Vec3.transformRTS = function transformRTS(out, a, r, t, s) {
        var x = a.x * s.x;
        var y = a.y * s.y;
        var z = a.z * s.z;
        var ix = r.w * x + r.y * z - r.z * y;
        var iy = r.w * y + r.z * x - r.x * z;
        var iz = r.w * z + r.x * y - r.y * x;
        var iw = -r.x * x - r.y * y - r.z * z;
        out.x = ix * r.w + iw * -r.x + iy * -r.z - iz * -r.y + t.x;
        out.y = iy * r.w + iw * -r.y + iz * -r.x - ix * -r.z + t.y;
        out.z = iz * r.w + iw * -r.z + ix * -r.y - iy * -r.x + t.z;
        return out;
      };
      Vec3.transformInverseRTS = function transformInverseRTS(out, a, r, t, s) {
        var x = a.x - t.x;
        var y = a.y - t.y;
        var z = a.z - t.z;
        var ix = r.w * x - r.y * z + r.z * y;
        var iy = r.w * y - r.z * x + r.x * z;
        var iz = r.w * z - r.x * y + r.y * x;
        var iw = r.x * x + r.y * y + r.z * z;
        out.x = (ix * r.w + iw * r.x + iy * r.z - iz * r.y) / s.x;
        out.y = (iy * r.w + iw * r.y + iz * r.x - ix * r.z) / s.y;
        out.z = (iz * r.w + iw * r.z + ix * r.y - iy * r.x) / s.z;
        return out;
      };
      Vec3.rotateX = function rotateX(out, v, o, a) {
        _x = v.x - o.x;
        _y = v.y - o.y;
        _z = v.z - o.z;
        var cos = Math.cos(a);
        var sin = Math.sin(a);
        var rx = _x;
        var ry = _y * cos - _z * sin;
        var rz = _y * sin + _z * cos;
        out.x = rx + o.x;
        out.y = ry + o.y;
        out.z = rz + o.z;
        return out;
      };
      Vec3.rotateY = function rotateY(out, v, o, a) {
        _x = v.x - o.x;
        _y = v.y - o.y;
        _z = v.z - o.z;
        var cos = Math.cos(a);
        var sin = Math.sin(a);
        var rx = _z * sin + _x * cos;
        var ry = _y;
        var rz = _z * cos - _x * sin;
        out.x = rx + o.x;
        out.y = ry + o.y;
        out.z = rz + o.z;
        return out;
      };
      Vec3.rotateZ = function rotateZ(out, v, o, a) {
        _x = v.x - o.x;
        _y = v.y - o.y;
        _z = v.z - o.z;
        var cos = Math.cos(a);
        var sin = Math.sin(a);
        var rx = _x * cos - _y * sin;
        var ry = _x * sin + _y * cos;
        var rz = _z;
        out.x = rx + o.x;
        out.y = ry + o.y;
        out.z = rz + o.z;
        return out;
      };
      Vec3.strictEquals = function strictEquals(a, b) {
        return a.x === b.x && a.y === b.y && a.z === b.z;
      };
      Vec3.equals = function equals(a, b, epsilon) {
        void 0 === epsilon && (epsilon = _utils.EPSILON);
        var a0 = a.x, a1 = a.y, a2 = a.z;
        var b0 = b.x, b1 = b.y, b2 = b.z;
        return Math.abs(a0 - b0) <= epsilon * Math.max(1, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= epsilon * Math.max(1, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= epsilon * Math.max(1, Math.abs(a2), Math.abs(b2));
      };
      Vec3.angle = function angle(a, b) {
        Vec3.normalize(v3_1, a);
        Vec3.normalize(v3_2, b);
        var cosine = Vec3.dot(v3_1, v3_2);
        if (cosine > 1) return 0;
        if (cosine < -1) return Math.PI;
        return Math.acos(cosine);
      };
      Vec3.projectOnPlane = function projectOnPlane(out, a, n) {
        return Vec3.subtract(out, a, Vec3.project(out, a, n));
      };
      Vec3.project = function project(out, a, b) {
        var sqrLen = Vec3.lengthSqr(b);
        return sqrLen < 1e-6 ? Vec3.set(out, 0, 0, 0) : Vec3.multiplyScalar(out, b, Vec3.dot(a, b) / sqrLen);
      };
      Vec3.toArray = function toArray(out, v, ofs) {
        void 0 === ofs && (ofs = 0);
        out[ofs + 0] = v.x;
        out[ofs + 1] = v.y;
        out[ofs + 2] = v.z;
        return out;
      };
      Vec3.fromArray = function fromArray(out, arr, ofs) {
        void 0 === ofs && (ofs = 0);
        out.x = arr[ofs + 0];
        out.y = arr[ofs + 1];
        out.z = arr[ofs + 2];
        return out;
      };
      _createClass(Vec3, null, [ {
        key: "ONE",
        get: function get() {
          return new Vec3(1, 1, 1);
        }
      }, {
        key: "ZERO",
        get: function get() {
          return new Vec3();
        }
      }, {
        key: "UP",
        get: function get() {
          return new Vec3(0, 1, 0);
        }
      }, {
        key: "RIGHT",
        get: function get() {
          return new Vec3(1, 0, 0);
        }
      }, {
        key: "FORWARD",
        get: function get() {
          return new Vec3(0, 0, 1);
        }
      } ]);
      function Vec3(x, y, z) {
        var _this;
        void 0 === x && (x = 0);
        void 0 === y && (y = 0);
        void 0 === z && (z = 0);
        _this = _ValueType.call(this) || this;
        _this.mag = Vec3.prototype.len;
        _this.magSqr = Vec3.prototype.lengthSqr;
        _this.subSelf = Vec3.prototype.subtract;
        _this.mulSelf = Vec3.prototype.multiplyScalar;
        _this.divSelf = Vec3.prototype.divide;
        _this.scaleSelf = Vec3.prototype.multiply;
        _this.negSelf = Vec3.prototype.negate;
        _this.x = void 0;
        _this.y = void 0;
        _this.z = void 0;
        _this.angle = _vec["default"].prototype.angle;
        _this.project = _vec["default"].prototype.project;
        if (x && "object" === typeof x) {
          _this.x = x.x;
          _this.y = x.y;
          _this.z = x.z;
        } else {
          _this.x = x;
          _this.y = y;
          _this.z = z;
        }
        return _this;
      }
      _proto.clone = function clone() {
        return new Vec3(this.x, this.y, this.z);
      };
      _proto.set = function set(newValue) {
        this.x = newValue.x;
        this.y = newValue.y;
        this.z = newValue.z;
        return this;
      };
      _proto.equals = function equals(other) {
        return other && this.x === other.x && this.y === other.y && this.z === other.z;
      };
      _proto.fuzzyEquals = function fuzzyEquals(other, variance) {
        if (this.x - variance <= other.x && other.x <= this.x + variance && this.y - variance <= other.y && other.y <= this.y + variance && this.z - variance <= other.z && other.z <= this.z + variance) return true;
        return false;
      };
      _proto.toString = function toString() {
        return "(" + this.x.toFixed(2) + ", " + this.y.toFixed(2) + ", " + this.z.toFixed(2) + ")";
      };
      _proto.lerp = function lerp(to, ratio, out) {
        out = out || new Vec3();
        Vec3.lerp(out, this, to, ratio);
        return out;
      };
      _proto.clampf = function clampf(min_inclusive, max_inclusive) {
        this.x = _misc["default"].clampf(this.x, min_inclusive.x, max_inclusive.x);
        this.y = _misc["default"].clampf(this.y, min_inclusive.y, max_inclusive.y);
        this.z = _misc["default"].clampf(this.z, min_inclusive.z, max_inclusive.z);
        return this;
      };
      _proto.addSelf = function addSelf(vector) {
        this.x += vector.x;
        this.y += vector.y;
        this.z += vector.z;
        return this;
      };
      _proto.add = function add(vector, out) {
        out = out || new Vec3();
        out.x = this.x + vector.x;
        out.y = this.y + vector.y;
        out.z = this.z + vector.z;
        return out;
      };
      _proto.subtract = function subtract(vector) {
        this.x -= vector.x;
        this.y -= vector.y;
        this.z -= vector.z;
        return this;
      };
      _proto.multiplyScalar = function multiplyScalar(num) {
        this.x *= num;
        this.y *= num;
        this.z *= num;
        return this;
      };
      _proto.multiply = function multiply(vector) {
        this.x *= vector.x;
        this.y *= vector.y;
        this.z *= vector.z;
        return this;
      };
      _proto.divide = function divide(num) {
        this.x /= num;
        this.y /= num;
        this.z /= num;
        return this;
      };
      _proto.negate = function negate() {
        this.x = -this.x;
        this.y = -this.y;
        this.z = -this.z;
        return this;
      };
      _proto.dot = function dot(vector) {
        return this.x * vector.x + this.y * vector.y + this.z * vector.z;
      };
      _proto.cross = function cross(vector, out) {
        out = out || new Vec3();
        Vec3.cross(out, this, vector);
        return out;
      };
      _proto.len = function len() {
        return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z);
      };
      _proto.lengthSqr = function lengthSqr() {
        return this.x * this.x + this.y * this.y + this.z * this.z;
      };
      _proto.normalizeSelf = function normalizeSelf() {
        Vec3.normalize(this, this);
        return this;
      };
      _proto.normalize = function normalize(out) {
        out = out || new Vec3();
        Vec3.normalize(out, this);
        return out;
      };
      _proto.transformMat4 = function transformMat4(m, out) {
        out = out || new Vec3();
        Vec3.transformMat4(out, this, m);
        return out;
      };
      _proto.maxAxis = function maxAxis() {
        return Math.max(this.x, this.y, this.z);
      };
      _proto.signAngle = function signAngle(vector) {
        cc.warnID(1408, "vec3.signAngle", "v2.1", "cc.v2(selfVector).signAngle(vector)");
        var vec1 = new _vec["default"](this.x, this.y);
        var vec2 = new _vec["default"](vector.x, vector.y);
        return vec1.signAngle(vec2);
      };
      _proto.rotate = function rotate(radians, out) {
        cc.warnID(1408, "vec3.rotate", "v2.1", "cc.v2(selfVector).rotate(radians, out)");
        return _vec["default"].prototype.rotate.call(this, radians, out);
      };
      _proto.rotateSelf = function rotateSelf(radians) {
        cc.warnID(1408, "vec3.rotateSelf", "v2.1", "cc.v2(selfVector).rotateSelf(radians)");
        return _vec["default"].prototype.rotateSelf.call(this, radians);
      };
      return Vec3;
    })(_valueType["default"]);
    exports["default"] = Vec3;
    Vec3.sub = Vec3.subtract;
    Vec3.mul = Vec3.multiply;
    Vec3.scale = Vec3.multiplyScalar;
    Vec3.mag = Vec3.len;
    Vec3.squaredMagnitude = Vec3.lengthSqr;
    Vec3.div = Vec3.divide;
    Vec3.ONE_R = Vec3.ONE;
    Vec3.ZERO_R = Vec3.ZERO;
    Vec3.UP_R = Vec3.UP;
    Vec3.RIGHT_R = Vec3.RIGHT;
    Vec3.FRONT_R = Vec3.FORWARD;
    var v3_1 = new Vec3();
    var v3_2 = new Vec3();
    _CCClass["default"].fastDefine("cc.Vec3", Vec3, {
      x: 0,
      y: 0,
      z: 0
    });
    cc.v3 = function v3(x, y, z) {
      return new Vec3(x, y, z);
    };
    cc.Vec3 = Vec3;
    module.exports = exports["default"];
  }), {
    "../platform/CCClass": 138,
    "../utils/misc": 209,
    "./utils": 231,
    "./value-type": 232,
    "./vec2": 233
  } ],
  235: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports.v4 = v4;
    exports["default"] = void 0;
    var _CCClass = _interopRequireDefault(require("../platform/CCClass"));
    var _valueType = _interopRequireDefault(require("./value-type"));
    var _utils = require("./utils");
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    function _defineProperties(target, props) {
      for (var i = 0; i < props.length; i++) {
        var descriptor = props[i];
        descriptor.enumerable = descriptor.enumerable || false;
        descriptor.configurable = true;
        "value" in descriptor && (descriptor.writable = true);
        Object.defineProperty(target, descriptor.key, descriptor);
      }
    }
    function _createClass(Constructor, protoProps, staticProps) {
      protoProps && _defineProperties(Constructor.prototype, protoProps);
      staticProps && _defineProperties(Constructor, staticProps);
      return Constructor;
    }
    function _inheritsLoose(subClass, superClass) {
      subClass.prototype = Object.create(superClass.prototype);
      subClass.prototype.constructor = subClass;
      subClass.__proto__ = superClass;
    }
    var _x = 0;
    var _y = 0;
    var _z = 0;
    var _w = 0;
    var Vec4 = (function(_ValueType) {
      _inheritsLoose(Vec4, _ValueType);
      var _proto = Vec4.prototype;
      _proto.sub = function sub(vector, out) {
        return Vec4.subtract(out || new Vec4(), this, vector);
      };
      _proto.mul = function mul(num, out) {
        return Vec4.multiplyScalar(out || new Vec4(), this, num);
      };
      _proto.div = function div(num, out) {
        return Vec4.multiplyScalar(out || new Vec4(), this, 1 / num);
      };
      _proto.scale = function scale(vector, out) {
        return Vec4.multiply(out || new Vec4(), this, vector);
      };
      _proto.neg = function neg(out) {
        return Vec4.negate(out || new Vec4(), this);
      };
      Vec4.clone = function clone(a) {
        return new Vec4(a.x, a.y, a.z, a.w);
      };
      Vec4.copy = function copy(out, a) {
        out.x = a.x;
        out.y = a.y;
        out.z = a.z;
        out.w = a.w;
        return out;
      };
      Vec4.set = function set(out, x, y, z, w) {
        out.x = x;
        out.y = y;
        out.z = z;
        out.w = w;
        return out;
      };
      Vec4.add = function add(out, a, b) {
        out.x = a.x + b.x;
        out.y = a.y + b.y;
        out.z = a.z + b.z;
        out.w = a.w + b.w;
        return out;
      };
      Vec4.subtract = function subtract(out, a, b) {
        out.x = a.x - b.x;
        out.y = a.y - b.y;
        out.z = a.z - b.z;
        out.w = a.w - b.w;
        return out;
      };
      Vec4.multiply = function multiply(out, a, b) {
        out.x = a.x * b.x;
        out.y = a.y * b.y;
        out.z = a.z * b.z;
        out.w = a.w * b.w;
        return out;
      };
      Vec4.divide = function divide(out, a, b) {
        out.x = a.x / b.x;
        out.y = a.y / b.y;
        out.z = a.z / b.z;
        out.w = a.w / b.w;
        return out;
      };
      Vec4.ceil = function ceil(out, a) {
        out.x = Math.ceil(a.x);
        out.y = Math.ceil(a.y);
        out.z = Math.ceil(a.z);
        out.w = Math.ceil(a.w);
        return out;
      };
      Vec4.floor = function floor(out, a) {
        out.x = Math.floor(a.x);
        out.y = Math.floor(a.y);
        out.z = Math.floor(a.z);
        out.w = Math.floor(a.w);
        return out;
      };
      Vec4.min = function min(out, a, b) {
        out.x = Math.min(a.x, b.x);
        out.y = Math.min(a.y, b.y);
        out.z = Math.min(a.z, b.z);
        out.w = Math.min(a.w, b.w);
        return out;
      };
      Vec4.max = function max(out, a, b) {
        out.x = Math.max(a.x, b.x);
        out.y = Math.max(a.y, b.y);
        out.z = Math.max(a.z, b.z);
        out.w = Math.max(a.w, b.w);
        return out;
      };
      Vec4.round = function round(out, a) {
        out.x = Math.round(a.x);
        out.y = Math.round(a.y);
        out.z = Math.round(a.z);
        out.w = Math.round(a.w);
        return out;
      };
      Vec4.multiplyScalar = function multiplyScalar(out, a, b) {
        out.x = a.x * b;
        out.y = a.y * b;
        out.z = a.z * b;
        out.w = a.w * b;
        return out;
      };
      Vec4.scaleAndAdd = function scaleAndAdd(out, a, b, scale) {
        out.x = a.x + b.x * scale;
        out.y = a.y + b.y * scale;
        out.z = a.z + b.z * scale;
        out.w = a.w + b.w * scale;
        return out;
      };
      Vec4.distance = function distance(a, b) {
        var x = b.x - a.x;
        var y = b.y - a.y;
        var z = b.z - a.z;
        var w = b.w - a.w;
        return Math.sqrt(x * x + y * y + z * z + w * w);
      };
      Vec4.squaredDistance = function squaredDistance(a, b) {
        var x = b.x - a.x;
        var y = b.y - a.y;
        var z = b.z - a.z;
        var w = b.w - a.w;
        return x * x + y * y + z * z + w * w;
      };
      Vec4.len = function len(a) {
        _x = a.x;
        _y = a.y;
        _z = a.z;
        _w = a.w;
        return Math.sqrt(_x * _x + _y * _y + _z * _z + _w * _w);
      };
      Vec4.lengthSqr = function lengthSqr(a) {
        _x = a.x;
        _y = a.y;
        _z = a.z;
        _w = a.w;
        return _x * _x + _y * _y + _z * _z + _w * _w;
      };
      Vec4.negate = function negate(out, a) {
        out.x = -a.x;
        out.y = -a.y;
        out.z = -a.z;
        out.w = -a.w;
        return out;
      };
      Vec4.inverse = function inverse(out, a) {
        out.x = 1 / a.x;
        out.y = 1 / a.y;
        out.z = 1 / a.z;
        out.w = 1 / a.w;
        return out;
      };
      Vec4.inverseSafe = function inverseSafe(out, a) {
        _x = a.x;
        _y = a.y;
        _z = a.z;
        _w = a.w;
        Math.abs(_x) < _utils.EPSILON ? out.x = 0 : out.x = 1 / _x;
        Math.abs(_y) < _utils.EPSILON ? out.y = 0 : out.y = 1 / _y;
        Math.abs(_z) < _utils.EPSILON ? out.z = 0 : out.z = 1 / _z;
        Math.abs(_w) < _utils.EPSILON ? out.w = 0 : out.w = 1 / _w;
        return out;
      };
      Vec4.normalize = function normalize(out, a) {
        _x = a.x;
        _y = a.y;
        _z = a.z;
        _w = a.w;
        var len = _x * _x + _y * _y + _z * _z + _w * _w;
        if (len > 0) {
          len = 1 / Math.sqrt(len);
          out.x = _x * len;
          out.y = _y * len;
          out.z = _z * len;
          out.w = _w * len;
        }
        return out;
      };
      Vec4.dot = function dot(a, b) {
        return a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w;
      };
      Vec4.lerp = function lerp(out, a, b, t) {
        out.x = a.x + t * (b.x - a.x);
        out.y = a.y + t * (b.y - a.y);
        out.z = a.z + t * (b.z - a.z);
        out.w = a.w + t * (b.w - a.w);
        return out;
      };
      Vec4.random = function random(out, scale) {
        scale = scale || 1;
        var phi = 2 * (0, _utils.random)() * Math.PI;
        var cosTheta = 2 * (0, _utils.random)() - 1;
        var sinTheta = Math.sqrt(1 - cosTheta * cosTheta);
        out.x = sinTheta * Math.cos(phi) * scale;
        out.y = sinTheta * Math.sin(phi) * scale;
        out.z = cosTheta * scale;
        out.w = 0;
        return out;
      };
      Vec4.transformMat4 = function transformMat4(out, a, mat) {
        _x = a.x;
        _y = a.y;
        _z = a.z;
        _w = a.w;
        var m = mat.m;
        out.x = m[0] * _x + m[4] * _y + m[8] * _z + m[12] * _w;
        out.y = m[1] * _x + m[5] * _y + m[9] * _z + m[13] * _w;
        out.z = m[2] * _x + m[6] * _y + m[10] * _z + m[14] * _w;
        out.w = m[3] * _x + m[7] * _y + m[11] * _z + m[15] * _w;
        return out;
      };
      Vec4.transformAffine = function transformAffine(out, v, mat) {
        _x = v.x;
        _y = v.y;
        _z = v.z;
        _w = v.w;
        var m = mat.m;
        out.x = m[0] * _x + m[1] * _y + m[2] * _z + m[3] * _w;
        out.y = m[4] * _x + m[5] * _y + m[6] * _z + m[7] * _w;
        out.x = m[8] * _x + m[9] * _y + m[10] * _z + m[11] * _w;
        out.w = v.w;
        return out;
      };
      Vec4.transformQuat = function transformQuat(out, a, q) {
        var x = a.x, y = a.y, z = a.z;
        _x = q.x;
        _y = q.y;
        _z = q.z;
        _w = q.w;
        var ix = _w * x + _y * z - _z * y;
        var iy = _w * y + _z * x - _x * z;
        var iz = _w * z + _x * y - _y * x;
        var iw = -_x * x - _y * y - _z * z;
        out.x = ix * _w + iw * -_x + iy * -_z - iz * -_y;
        out.y = iy * _w + iw * -_y + iz * -_x - ix * -_z;
        out.z = iz * _w + iw * -_z + ix * -_y - iy * -_x;
        out.w = a.w;
        return out;
      };
      Vec4.strictEquals = function strictEquals(a, b) {
        return a.x === b.x && a.y === b.y && a.z === b.z && a.w === b.w;
      };
      Vec4.equals = function equals(a, b, epsilon) {
        void 0 === epsilon && (epsilon = _utils.EPSILON);
        return Math.abs(a.x - b.x) <= epsilon * Math.max(1, Math.abs(a.x), Math.abs(b.x)) && Math.abs(a.y - b.y) <= epsilon * Math.max(1, Math.abs(a.y), Math.abs(b.y)) && Math.abs(a.z - b.z) <= epsilon * Math.max(1, Math.abs(a.z), Math.abs(b.z)) && Math.abs(a.w - b.w) <= epsilon * Math.max(1, Math.abs(a.w), Math.abs(b.w));
      };
      Vec4.toArray = function toArray(out, v, ofs) {
        void 0 === ofs && (ofs = 0);
        out[ofs + 0] = v.x;
        out[ofs + 1] = v.y;
        out[ofs + 2] = v.z;
        out[ofs + 3] = v.w;
        return out;
      };
      Vec4.fromArray = function fromArray(out, arr, ofs) {
        void 0 === ofs && (ofs = 0);
        out.x = arr[ofs + 0];
        out.y = arr[ofs + 1];
        out.z = arr[ofs + 2];
        out.w = arr[ofs + 3];
        return out;
      };
      _createClass(Vec4, null, [ {
        key: "ZERO",
        get: function get() {
          return new Vec4(0, 0, 0, 0);
        }
      }, {
        key: "ONE",
        get: function get() {
          return new Vec4(1, 1, 1, 1);
        }
      }, {
        key: "NEG_ONE",
        get: function get() {
          return new Vec4(-1, -1, -1, -1);
        }
      } ]);
      function Vec4(x, y, z, w) {
        var _this;
        void 0 === x && (x = 0);
        void 0 === y && (y = 0);
        void 0 === z && (z = 0);
        void 0 === w && (w = 0);
        _this = _ValueType.call(this) || this;
        _this.mag = Vec4.prototype.len;
        _this.magSqr = Vec4.prototype.lengthSqr;
        _this.subSelf = Vec4.prototype.subtract;
        _this.mulSelf = Vec4.prototype.multiplyScalar;
        _this.divSelf = Vec4.prototype.divide;
        _this.scaleSelf = Vec4.prototype.multiply;
        _this.negSelf = Vec4.prototype.negate;
        _this.x = void 0;
        _this.y = void 0;
        _this.z = void 0;
        _this.w = void 0;
        if (x && "object" === typeof x) {
          _this.x = x.x;
          _this.y = x.y;
          _this.z = x.z;
          _this.w = x.w;
        } else {
          _this.x = x;
          _this.y = y;
          _this.z = z;
          _this.w = w;
        }
        return _this;
      }
      _proto.clone = function clone() {
        return new Vec4(this.x, this.y, this.z, this.w);
      };
      _proto.set = function set(x, y, z, w) {
        if (x && "object" === typeof x) {
          this.x = x.x;
          this.y = x.y;
          this.z = x.z;
          this.w = x.w;
        } else {
          this.x = x || 0;
          this.y = y || 0;
          this.z = z || 0;
          this.w = w || 0;
        }
        return this;
      };
      _proto.equals = function equals(other, epsilon) {
        void 0 === epsilon && (epsilon = _utils.EPSILON);
        return Math.abs(this.x - other.x) <= epsilon * Math.max(1, Math.abs(this.x), Math.abs(other.x)) && Math.abs(this.y - other.y) <= epsilon * Math.max(1, Math.abs(this.y), Math.abs(other.y)) && Math.abs(this.z - other.z) <= epsilon * Math.max(1, Math.abs(this.z), Math.abs(other.z)) && Math.abs(this.w - other.w) <= epsilon * Math.max(1, Math.abs(this.w), Math.abs(other.w));
      };
      _proto.equals4f = function equals4f(x, y, z, w, epsilon) {
        void 0 === epsilon && (epsilon = _utils.EPSILON);
        return Math.abs(this.x - x) <= epsilon * Math.max(1, Math.abs(this.x), Math.abs(x)) && Math.abs(this.y - y) <= epsilon * Math.max(1, Math.abs(this.y), Math.abs(y)) && Math.abs(this.z - z) <= epsilon * Math.max(1, Math.abs(this.z), Math.abs(z)) && Math.abs(this.w - w) <= epsilon * Math.max(1, Math.abs(this.w), Math.abs(w));
      };
      _proto.strictEquals = function strictEquals(other) {
        return this.x === other.x && this.y === other.y && this.z === other.z && this.w === other.w;
      };
      _proto.strictEquals4f = function strictEquals4f(x, y, z, w) {
        return this.x === x && this.y === y && this.z === z && this.w === w;
      };
      _proto.lerp = function lerp(to, ratio) {
        _x = this.x;
        _y = this.y;
        _z = this.z;
        _w = this.w;
        this.x = _x + ratio * (to.x - _x);
        this.y = _y + ratio * (to.y - _y);
        this.z = _z + ratio * (to.z - _z);
        this.w = _w + ratio * (to.w - _w);
        return this;
      };
      _proto.toString = function toString() {
        return "(" + this.x.toFixed(2) + ", " + this.y.toFixed(2) + ", " + this.z.toFixed(2) + ", " + this.w.toFixed(2) + ")";
      };
      _proto.clampf = function clampf(minInclusive, maxInclusive) {
        this.x = (0, _utils.clamp)(this.x, minInclusive.x, maxInclusive.x);
        this.y = (0, _utils.clamp)(this.y, minInclusive.y, maxInclusive.y);
        this.z = (0, _utils.clamp)(this.z, minInclusive.z, maxInclusive.z);
        this.w = (0, _utils.clamp)(this.w, minInclusive.w, maxInclusive.w);
        return this;
      };
      _proto.addSelf = function addSelf(vector) {
        this.x += vector.x;
        this.y += vector.y;
        this.z += vector.z;
        this.w += vector.w;
        return this;
      };
      _proto.add = function add(vector, out) {
        out = out || new Vec4();
        out.x = this.x + vector.x;
        out.y = this.y + vector.y;
        out.z = this.z + vector.z;
        out.w = this.w + vector.w;
        return out;
      };
      _proto.subtract = function subtract(vector, out) {
        out = out || new Vec4();
        out.x = this.x - vector.x;
        out.y = this.y - vector.y;
        out.z = this.z - vector.z;
        out.w = this.w - vector.w;
        return out;
      };
      _proto.multiplyScalar = function multiplyScalar(num) {
        this.x *= num;
        this.y *= num;
        this.z *= num;
        this.w *= num;
        return this;
      };
      _proto.multiply = function multiply(vector) {
        this.x *= vector.x;
        this.y *= vector.y;
        this.z *= vector.z;
        this.w *= vector.w;
        return this;
      };
      _proto.divide = function divide(num) {
        this.x /= num;
        this.y /= num;
        this.z /= num;
        this.w /= num;
        return this;
      };
      _proto.negate = function negate() {
        this.x = -this.x;
        this.y = -this.y;
        this.z = -this.z;
        this.w = -this.w;
        return this;
      };
      _proto.dot = function dot(vector) {
        return this.x * vector.x + this.y * vector.y + this.z * vector.z + this.w * vector.w;
      };
      _proto.cross = function cross(vector, out) {
        out = out || new Vec4();
        var ax = this.x, ay = this.y, az = this.z;
        var bx = vector.x, by = vector.y, bz = vector.z;
        out.x = ay * bz - az * by;
        out.y = az * bx - ax * bz;
        out.z = ax * by - ay * bx;
        return out;
      };
      _proto.len = function len() {
        var x = this.x, y = this.y, z = this.z, w = this.w;
        return Math.sqrt(x * x + y * y + z * z + w * w);
      };
      _proto.lengthSqr = function lengthSqr() {
        var x = this.x, y = this.y, z = this.z, w = this.w;
        return x * x + y * y + z * z + w * w;
      };
      _proto.normalizeSelf = function normalizeSelf() {
        this.normalize(this);
        return this;
      };
      _proto.normalize = function normalize(out) {
        out = out || new Vec4();
        _x = this.x;
        _y = this.y;
        _z = this.z;
        _w = this.w;
        var len = _x * _x + _y * _y + _z * _z + _w * _w;
        if (len > 0) {
          len = 1 / Math.sqrt(len);
          out.x = _x * len;
          out.y = _y * len;
          out.z = _z * len;
          out.w = _w * len;
        }
        return out;
      };
      _proto.transformMat4 = function transformMat4(matrix, out) {
        out = out || new Vec4();
        _x = this.x;
        _y = this.y;
        _z = this.z;
        _w = this.w;
        var m = matrix.m;
        out.x = m[0] * _x + m[4] * _y + m[8] * _z + m[12] * _w;
        out.y = m[1] * _x + m[5] * _y + m[9] * _z + m[13] * _w;
        out.z = m[2] * _x + m[6] * _y + m[10] * _z + m[14] * _w;
        out.w = m[3] * _x + m[7] * _y + m[11] * _z + m[15] * _w;
        return out;
      };
      _proto.maxAxis = function maxAxis() {
        return Math.max(this.x, this.y, this.z, this.w);
      };
      return Vec4;
    })(_valueType["default"]);
    exports["default"] = Vec4;
    Vec4.sub = Vec4.subtract;
    Vec4.mul = Vec4.multiply;
    Vec4.div = Vec4.divide;
    Vec4.scale = Vec4.multiplyScalar;
    Vec4.mag = Vec4.len;
    Vec4.squaredMagnitude = Vec4.lengthSqr;
    Vec4.ZERO_R = Vec4.ZERO;
    Vec4.ONE_R = Vec4.ONE;
    Vec4.NEG_ONE_R = Vec4.NEG_ONE;
    _CCClass["default"].fastDefine("cc.Vec4", Vec4, {
      x: 0,
      y: 0,
      z: 0,
      w: 0
    });
    function v4(x, y, z, w) {
      return new Vec4(x, y, z, w);
    }
    cc.v4 = v4;
    cc.Vec4 = Vec4;
  }), {
    "../platform/CCClass": 138,
    "./utils": 231,
    "./value-type": 232
  } ],
  236: [ (function(require, module, exports) {
    "use strict";
    var js = cc.js;
    true;
    var deprecateEnum = function deprecateEnum(obj, oldPath, newPath, hasTypePrefixBefore) {
      true;
      return;
      var enumDef;
      var entries;
      var delimiter;
      var i;
      var entry;
      var oldPropName;
      var oldTypeName;
    };
    var markAsRemoved = function markAsRemoved(ownerCtor, removedProps, ownerName) {
      if (!ownerCtor) return;
      ownerName = ownerName || js.getClassName(ownerCtor);
      removedProps.forEach((function(prop) {
        function error() {
          cc.errorID(1406, ownerName, prop);
        }
        js.getset(ownerCtor.prototype, prop, error, error);
      }));
    };
    var markAsDeprecated = function markAsDeprecated(ownerCtor, deprecatedProps, ownerName) {
      if (!ownerCtor) return;
      ownerName = ownerName || js.getClassName(ownerCtor);
      var descriptors = Object.getOwnPropertyDescriptors(ownerCtor.prototype);
      deprecatedProps.forEach((function(prop) {
        var deprecatedProp = prop[0];
        var newProp = prop[1];
        var descriptor = descriptors[deprecatedProp];
        js.getset(ownerCtor.prototype, deprecatedProp, (function() {
          cc.warnID(1400, ownerName + "." + deprecatedProp, ownerName + "." + newProp);
          return descriptor.get.call(this);
        }), (function(v) {
          cc.warnID(1400, ownerName + "." + deprecatedProp, ownerName + "." + newProp);
          descriptor.set.call(this, v);
        }));
      }));
    };
    var markAsRemovedInObject = function markAsRemovedInObject(ownerObj, removedProps, ownerName) {
      if (!ownerObj) return;
      removedProps.forEach((function(prop) {
        function error() {
          cc.errorID(1406, ownerName, prop);
        }
        js.getset(ownerObj, prop, error);
      }));
    };
    var provideClearError = function provideClearError(owner, obj, ownerName) {
      if (!owner) return;
      var className = ownerName || cc.js.getClassName(owner);
      var Info = "Sorry, " + className + ".%s is removed, please use %s instead.";
      var _loop = function _loop() {
        function define(prop, getset) {
          function accessor(newProp) {
            cc.error(Info, prop, newProp);
          }
          Array.isArray(getset) || (getset = getset.split(",").map((function(x) {
            return x.trim();
          })));
          try {
            js.getset(owner, prop, accessor.bind(null, getset[0]), getset[1] && accessor.bind(null, getset[1]));
          } catch (e) {}
        }
        getset = obj[prop];
        if ("*" === prop[0]) {
          etProp = prop.slice(1);
          define("g" + etProp, getset);
          define("s" + etProp, getset);
        } else prop.split(",").map((function(x) {
          return x.trim();
        })).forEach((function(x) {
          define(x, getset);
        }));
      };
      for (var prop in obj) {
        var getset;
        var etProp;
        _loop();
      }
    };
    var markFunctionWarning = function markFunctionWarning(ownerCtor, obj, ownerName) {
      if (!ownerCtor) return;
      ownerName = ownerName || js.getClassName(ownerCtor);
      for (var prop in obj) (function() {
        var propName = prop;
        var originFunc = ownerCtor[propName];
        if (!originFunc) return;
        function warn() {
          cc.warn("Sorry, %s.%s is deprecated. Please use %s instead", ownerName, propName, obj[propName]);
          return originFunc.apply(this, arguments);
        }
        ownerCtor[propName] = warn;
      })();
    };
    js.get(cc, "info", (function() {
      cc.errorID(1400, "cc.info", "cc.log");
      return cc.log;
    }));
    js.get(cc, "spriteFrameCache", (function() {
      cc.errorID(1404);
    }));
    js.get(cc, "vmath", (function() {
      cc.warnID(1400, "cc.vmath", "cc.math");
      return cc.math;
    }));
    js.get(cc.math, "vec2", (function() {
      cc.warnID(1400, "cc.vmath.vec2", "cc.Vec2");
      return cc.Vec2;
    }));
    js.get(cc.math, "vec3", (function() {
      cc.warnID(1400, "cc.vmath.vec3", "cc.Vec3");
      return cc.Vec3;
    }));
    js.get(cc.math, "vec4", (function() {
      cc.warnID(1400, "cc.vmath.vec4", "cc.Vec4");
      return cc.Vec4;
    }));
    js.get(cc.math, "mat4", (function() {
      cc.warnID(1400, "cc.vmath.mat4", "cc.Mat4");
      return cc.Mat4;
    }));
    js.get(cc.math, "mat3", (function() {
      cc.warnID(1400, "cc.vmath.mat3", "cc.Mat3");
      return cc.Mat3;
    }));
    js.get(cc.math, "quat", (function() {
      cc.warnID(1400, "cc.vmath.quat", "cc.Quat");
      return cc.Quat;
    }));
    js.get(cc.SpriteFrame.prototype, "_textureLoaded", (function() {
      cc.errorID(1400, "spriteFrame._textureLoaded", "spriteFrame.textureLoaded()");
      return this.textureLoaded();
    }));
    markAsRemoved(cc.SpriteFrame, [ "addLoadedEventListener" ]);
    markFunctionWarning(cc.Sprite.prototype, {
      setState: "cc.Sprite.setMaterial",
      getState: "cc.Sprite.getMaterial"
    }, "cc.Sprite");
    js.get(cc.SpriteFrame.prototype, "clearTexture", (function() {
      cc.errorID(1406, "cc.SpriteFrame", "clearTexture");
      return function() {};
    }));
    js.get(cc, "textureCache", (function() {
      cc.errorID(1406, "cc", "textureCache");
    }));
    var Texture2D = cc.Texture2D;
    js.get(Texture2D.prototype, "releaseTexture", (function() {
      cc.errorID(1400, "texture.releaseTexture()", "texture.destroy()");
      return this.destroy;
    }));
    js.get(Texture2D.prototype, "getName", (function() {
      cc.errorID(1400, "texture.getName()", "texture._glID");
      return function() {
        return this._glID || null;
      };
    }));
    js.get(Texture2D.prototype, "isLoaded", (function() {
      cc.errorID(1400, "texture.isLoaded function", "texture.loaded property");
      return function() {
        return this.loaded;
      };
    }));
    js.get(Texture2D.prototype, "setAntiAliasTexParameters", (function() {
      cc.errorID(1400, "texture.setAntiAliasTexParameters()", "texture.setFilters(cc.Texture2D.Filter.LINEAR, cc.Texture2D.Filter.LINEAR)");
      return function() {
        this.setFilters(Texture2D.Filter.LINEAR, Texture2D.Filter.LINEAR);
      };
    }));
    js.get(Texture2D.prototype, "setAliasTexParameters", (function() {
      cc.errorID(1400, "texture.setAntiAliasTexParameters()", "texture.setFilters(cc.Texture2D.Filter.NEAREST, cc.Texture2D.Filter.NEAREST)");
      return function() {
        this.setFilters(Texture2D.Filter.NEAREST, Texture2D.Filter.NEAREST);
      };
    }));
    markAsRemovedInObject(cc.macro, [ "ENABLE_GL_STATE_CACHE", "FIX_ARTIFACTS_BY_STRECHING_TEXEL" ], "cc.macro");
    provideClearError(cc.macro, {
      PI: "Math.PI",
      PI2: "Math.PI * 2",
      FLT_MAX: "Number.MAX_VALUE",
      FLT_MIN: "Number.MIN_VALUE",
      UINT_MAX: "Number.MAX_SAFE_INTEGER"
    }, "cc.macro");
    markAsRemovedInObject(cc.game, [ "CONFIG_KEY" ], "cc.game");
    markAsRemovedInObject(cc.sys, [ "dumpRoot", "cleanScript" ], "cc.sys");
    provideClearError(cc.Director, {
      EVENT_PROJECTION_CHANGED: "",
      EVENT_BEFORE_VISIT: "EVENT_AFTER_UPDATE",
      EVENT_AFTER_VISIT: "EVENT_BEFORE_DRAW"
    }, "cc.Director");
    markFunctionWarning(cc.Director.prototype, {
      convertToGL: "cc.view.convertToLocationInView",
      convertToUI: "",
      getWinSize: "cc.winSize",
      getWinSizeInPixels: "cc.winSize",
      getVisibleSize: "cc.view.getVisibleSize",
      getVisibleOrigin: "cc.view.getVisibleOrigin",
      purgeCachedData: "cc.assetManager.releaseAll",
      setDepthTest: "cc.Camera.main.depth",
      setClearColor: "cc.Camera.main.backgroundColor",
      getRunningScene: "cc.director.getScene",
      getAnimationInterval: "cc.game.getFrameRate",
      setAnimationInterval: "cc.game.setFrameRate",
      isDisplayStats: "cc.debug.isDisplayStats",
      setDisplayStats: "cc.debug.setDisplayStats",
      stopAnimation: "cc.game.pause",
      startAnimation: "cc.game.resume"
    }, "cc.Director");
    markAsRemoved(cc.Director, [ "pushScene", "popScene", "popToRootScene", "popToSceneStackLevel", "setProjection", "getProjection" ], "cc.Director");
    provideClearError(cc.Scheduler, {
      scheduleCallbackForTarget: "schedule",
      scheduleUpdateForTarget: "scheduleUpdate",
      unscheduleCallbackForTarget: "unschedule",
      unscheduleUpdateForTarget: "unscheduleUpdate",
      unscheduleAllCallbacksForTarget: "unscheduleAllForTarget",
      unscheduleAllCallbacks: "unscheduleAll",
      unscheduleAllCallbacksWithMinPriority: "unscheduleAllWithMinPriority"
    }, "cc.Scheduler");
    provideClearError(cc.view, {
      adjustViewPort: "adjustViewportMeta",
      setViewPortInPoints: "setViewportInPoints",
      getViewPortRect: "getViewportRect"
    }, "cc.view");
    markAsRemovedInObject(cc.view, [ "isViewReady", "setTargetDensityDPI", "getTargetDensityDPI", "setFrameZoomFactor", "canSetContentScaleFactor", "setContentTranslateLeftTop", "getContentTranslateLeftTop", "setViewName", "getViewName" ], "cc.view");
    markAsRemoved(cc.PhysicsManager, [ "attachDebugDrawToCamera", "detachDebugDrawFromCamera" ]);
    markAsRemoved(cc.CollisionManager, [ "attachDebugDrawToCamera", "detachDebugDrawFromCamera" ]);
    provideClearError(cc._BaseNode.prototype, {
      tag: "name",
      getTag: "name",
      setTag: "name",
      getChildByTag: "getChildByName",
      removeChildByTag: "getChildByName(name).destroy()"
    });
    markAsRemoved(cc.Node, [ "_cascadeColorEnabled", "cascadeColor", "isCascadeColorEnabled", "setCascadeColorEnabled", "_cascadeOpacityEnabled", "cascadeOpacity", "isCascadeOpacityEnabled", "setCascadeOpacityEnabled", "opacityModifyRGB", "isOpacityModifyRGB", "setOpacityModifyRGB", "ignoreAnchor", "isIgnoreAnchorPointForPosition", "ignoreAnchorPointForPosition", "isRunning", "_sgNode" ]);
    markFunctionWarning(cc.Node.prototype, {
      getNodeToParentTransform: "getLocalMatrix",
      getNodeToParentTransformAR: "getLocalMatrix",
      getNodeToWorldTransform: "getWorldMatrix",
      getNodeToWorldTransformAR: "getWorldMatrix",
      getParentToNodeTransform: "getLocalMatrix",
      getWorldToNodeTransform: "getWorldMatrix",
      convertTouchToNodeSpace: "convertToNodeSpaceAR",
      convertTouchToNodeSpaceAR: "convertToNodeSpaceAR",
      convertToWorldSpace: "convertToWorldSpaceAR",
      convertToNodeSpace: "convertToNodeSpaceAR"
    });
    provideClearError(cc.Node.prototype, {
      getRotationX: "rotationX",
      setRotationX: "rotationX",
      getRotationY: "rotationY",
      setRotationY: "rotationY",
      getPositionX: "x",
      setPositionX: "x",
      getPositionY: "y",
      setPositionY: "y",
      getSkewX: "skewX",
      setSkewX: "skewX",
      getSkewY: "skewY",
      setSkewY: "skewY",
      getScaleX: "scaleX",
      setScaleX: "scaleX",
      getScaleY: "scaleY",
      setScaleY: "scaleY",
      getOpacity: "opacity",
      setOpacity: "opacity",
      getColor: "color",
      setColor: "color",
      getLocalZOrder: "zIndex",
      setLocalZOrder: "zIndex"
    });
    provideClearError(cc.Sprite.prototype, {
      setInsetLeft: "cc.SpriteFrame insetLeft",
      setInsetRight: "cc.SpriteFrame insetRight",
      setInsetTop: "cc.SpriteFrame insetTop",
      setInsetBottom: "cc.SpriteFrame insetBottom"
    });
    cc.Material.getInstantiatedBuiltinMaterial = cc.MaterialVariant.createWithBuiltin;
    cc.Material.getInstantiatedMaterial = cc.MaterialVariant.create;
    markFunctionWarning(cc.Material, {
      getInstantiatedBuiltinMaterial: "cc.MaterialVariant.createWithBuiltin",
      getInstantiatedMaterial: "cc.MaterialVariant.create"
    });
    cc.js.getset(cc.RenderComponent.prototype, "sharedMaterials", (function() {
      cc.warnID(1400, "sharedMaterials", "getMaterials");
      return this.materials;
    }), (function(v) {
      cc.warnID(1400, "sharedMaterials", "setMaterial");
      this.materials = v;
    }));
    markFunctionWarning(cc.Camera.prototype, {
      getNodeToCameraTransform: "getWorldToScreenMatrix2D",
      getCameraToWorldPoint: "getScreenToWorldPoint",
      getWorldToCameraPoint: "getWorldToScreenPoint",
      getCameraToWorldMatrix: "getScreenToWorldMatrix2D",
      getWorldToCameraMatrix: "getWorldToScreenMatrix2D"
    });
    markAsRemoved(cc.Camera, [ "addTarget", "removeTarget", "getTargets" ]);
    var ERR = '"%s" is not defined in the Scene, it is only defined in normal nodes.';
    false, Object.defineProperties(cc.Scene.prototype, {
      active: {
        get: function get() {
          cc.error(ERR, "active");
          return true;
        },
        set: function set() {
          cc.error(ERR, "active");
        }
      },
      activeInHierarchy: {
        get: function get() {
          cc.error(ERR, "activeInHierarchy");
          return true;
        }
      },
      getComponent: {
        get: function get() {
          cc.error(ERR, "getComponent");
          return function() {
            return null;
          };
        }
      },
      addComponent: {
        get: function get() {
          cc.error(ERR, "addComponent");
          return function() {
            return null;
          };
        }
      }
    });
    markAsRemovedInObject(cc.dynamicAtlasManager, [ "minFrameSize" ], "cc.dynamicAtlasManager");
    cc.Light && markAsRemovedInObject(cc.Light.prototype, [ "shadowDepthScale" ], "cc.Light.prototype");
    provideClearError(cc, {
      affineTransformMake: "cc.AffineTransform.create",
      affineTransformMakeIdentity: "cc.AffineTransform.identity",
      affineTransformClone: "cc.AffineTransform.clone",
      affineTransformConcat: "cc.AffineTransform.concat",
      affineTransformConcatIn: "cc.AffineTransform.concat",
      affineTransformInvert: "cc.AffineTransform.invert",
      affineTransformInvertIn: "cc.AffineTransform.invert",
      affineTransformInvertOut: "cc.AffineTransform.invert",
      affineTransformEqualToTransform: "cc.AffineTransform.equal",
      pointApplyAffineTransform: "cc.AffineTransform.transformVec2",
      sizeApplyAffineTransform: "cc.AffineTransform.transformSize",
      rectApplyAffineTransform: "cc.AffineTransform.transformRect",
      obbApplyAffineTransform: "cc.AffineTransform.transformObb",
      pointEqualToPoint: "cc.Vec2 equals",
      sizeEqualToSize: "cc.Size equals",
      rectEqualToRect: "rectA.equals(rectB)",
      rectContainsRect: "rectA.containsRect(rectB)",
      rectContainsPoint: "rect.contains(vec2)",
      rectOverlapsRect: "rectA.intersects(rectB)",
      rectIntersectsRect: "rectA.intersects(rectB)",
      rectIntersection: "rectA.intersection(intersection, rectB)",
      rectUnion: "rectA.union(union, rectB)",
      rectGetMaxX: "rect.xMax",
      rectGetMidX: "rect.center.x",
      rectGetMinX: "rect.xMin",
      rectGetMaxY: "rect.yMax",
      rectGetMidY: "rect.center.y",
      rectGetMinY: "rect.yMin",
      colorEqual: "colorA.equals(colorB)",
      hexToColor: "color.fromHEX(hexColor)",
      colorToHex: "color.toHEX()",
      TextAlignment: "cc.macro.TextAlignment",
      VerticalTextAlignment: "cc.macro.VerticalTextAlignment",
      pNeg: "p.neg()",
      pAdd: "p1.add(p2)",
      pSub: "p1.sub(p2)",
      pMult: "p.mul(factor)",
      pMidpoint: "p1.add(p2).mul(0.5)",
      pDot: "p1.dot(p2)",
      pCross: "p1.cross(p2)",
      pPerp: "p.rotate(-90 * Math.PI / 180)",
      pRPerp: "p.rotate(90 * Math.PI / 180)",
      pProject: "p1.project(p2)",
      pLengthSQ: "p.magSqr()",
      pDistanceSQ: "p1.sub(p2).magSqr()",
      pLength: "p.mag()",
      pDistance: "p1.sub(p2).mag()",
      pNormalize: "p.normalize()",
      pForAngle: "cc.v2(Math.cos(a), Math.sin(a))",
      pToAngle: "Math.atan2(v.y, v.x)",
      pZeroIn: "p.x = p.y = 0",
      pIn: "p1.set(p2)",
      pMultIn: "p.mulSelf(factor)",
      pSubIn: "p1.subSelf(p2)",
      pAddIn: "p1.addSelf(p2)",
      pNormalizeIn: "p.normalizeSelf()",
      pSameAs: "p1.equals(p2)",
      pAngle: "v1.angle(v2)",
      pAngleSigned: "v1.signAngle(v2)",
      pRotateByAngle: "p.rotate(radians)",
      pCompMult: "v1.dot(v2)",
      pFuzzyEqual: "v1.fuzzyEquals(v2, tolerance)",
      pLerp: "p.lerp(endPoint, ratio)",
      pClamp: "p.clampf(min_inclusive, max_inclusive)",
      rand: "Math.random() * 0xffffff",
      randomMinus1To1: "(Math.random() - 0.5) * 2",
      container: "cc.game.container",
      _canvas: "cc.game.canvas",
      _renderType: "cc.game.renderType",
      _getError: "cc.debug.getError",
      _initDebugSetting: "cc.debug._resetDebugSetting",
      DebugMode: "cc.debug.DebugMode"
    }, "cc");
    markAsRemovedInObject(cc, [ "blendFuncDisable", "pFromSize", "pCompOp", "pIntersectPoint", "pSegmentIntersect", "pLineIntersect", "obbApplyMatrix", "getImageFormatByData", "initEngine" ], "cc");
    markFunctionWarning(cc, {
      p: "cc.v2"
    }, "cc");
    provideClearError(cc.Rect, {
      contain: "rectA.contains(rectB)",
      transformMat4: "rect.transformMat4(out, mat4)"
    });
    provideClearError(cc.Color, {
      rgb2hsv: "color.toHSV()",
      hsv2rgb: "color.fromHSV(h, s, v)"
    });
    markFunctionWarning(cc.Color, {
      fromHex: "cc.Color.fromHEX"
    });
    js.get(cc, "lerp", (function() {
      cc.errorID(1400, "cc.lerp", "cc.misc.lerp");
      return cc.misc.lerp;
    }));
    js.get(cc, "random0To1", (function() {
      cc.errorID(1400, "cc.random0To1", "Math.random");
      return Math.random;
    }));
    js.get(cc, "degreesToRadians", (function() {
      cc.errorID(1400, "cc.degreesToRadians", "cc.misc.degreesToRadians");
      return cc.misc.degreesToRadians;
    }));
    js.get(cc, "radiansToDegrees", (function() {
      cc.errorID(1400, "cc.radiansToDegrees", "cc.misc.radiansToDegrees");
      return cc.misc.radiansToDegrees;
    }));
    js.get(cc, "clampf", (function() {
      cc.errorID(1400, "cc.clampf", "cc.misc.clampf");
      return cc.misc.clampf;
    }));
    js.get(cc, "clamp01", (function() {
      cc.errorID(1400, "cc.clamp01", "cc.misc.clamp01");
      return cc.misc.clamp01;
    }));
    js.get(cc, "ImageFormat", (function() {
      cc.errorID(1400, "cc.ImageFormat", "cc.macro.ImageFormat");
      return cc.macro.ImageFormat;
    }));
    js.get(cc, "KEY", (function() {
      cc.errorID(1400, "cc.KEY", "cc.macro.KEY");
      return cc.macro.KEY;
    }));
    js.get(cc, "Easing", (function() {
      cc.errorID(1400, "cc.Easing", "cc.easing");
      return cc.easing;
    }));
    js.get(cc, "isChildClassOf", (function() {
      cc.errorID(1400, "cc.isChildClassOf", "cc.js.isChildClassOf");
      return cc.js.isChildClassOf;
    }));
    "undefined" !== typeof dragonBones && js.get(dragonBones.CCFactory, "getFactory", (function() {
      cc.errorID(1400, "dragonBones.CCFactory.getFactory", "dragonBones.CCFactory.getInstance");
      return dragonBones.CCFactory.getInstance;
    }));
    cc.renderer.renderEngine = {
      get gfx() {
        cc.warnID(1400, "cc.renderer.renderEngine.gfx", "cc.gfx");
        return cc.gfx;
      },
      get math() {
        cc.warnID(1400, "cc.renderer.renderEngine.math", "cc.math");
        return cc.vmath;
      },
      get InputAssembler() {
        cc.warnID(1400, "cc.renderer.renderEngine.InputAssembler", "cc.renderer.InputAssembler");
        return cc.renderer.InputAssembler;
      }
    };
    markAsRemovedInObject(cc.audioEngine, [ "getProfile", "preload", "setMaxWebAudioSize" ], "cc.audioEngine");
  }), {} ],
  237: [ (function(require, module, exports) {
    "use strict";
    require("./core/CCGame");
    require("./actions");
  }), {
    "./actions": 8,
    "./core/CCGame": 25
  } ],
  238: [ (function(require, module, exports) {
    "use strict";
    var Asset = require("../core/assets/CCAsset");
    var CCSpriteFrame = require("../core/assets/CCSpriteFrame");
    var ParticleAsset = cc.Class({
      name: "cc.ParticleAsset",
      extends: Asset,
      properties: {
        spriteFrame: {
          default: null,
          type: CCSpriteFrame
        }
      }
    });
    cc.ParticleAsset = module.exports = ParticleAsset;
  }), {
    "../core/assets/CCAsset": 59,
    "../core/assets/CCSpriteFrame": 71
  } ],
  239: [ (function(require, module, exports) {
    "use strict";
    var 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
    };
    var RenderQueue = {
      OPAQUE: 0,
      TRANSPARENT: 1,
      OVERLAY: 2
    };
    function murmurhash2_32_gc(str, seed) {
      var l = str.length, h = seed ^ l, i = 0, k;
      while (l >= 4) {
        k = 255 & str.charCodeAt(i) | (255 & str.charCodeAt(++i)) << 8 | (255 & str.charCodeAt(++i)) << 16 | (255 & str.charCodeAt(++i)) << 24;
        k = 1540483477 * (65535 & k) + ((1540483477 * (k >>> 16) & 65535) << 16);
        k ^= k >>> 24;
        k = 1540483477 * (65535 & k) + ((1540483477 * (k >>> 16) & 65535) << 16);
        h = 1540483477 * (65535 & h) + ((1540483477 * (h >>> 16) & 65535) << 16) ^ k;
        l -= 4;
        ++i;
      }
      switch (l) {
       case 3:
        h ^= (255 & str.charCodeAt(i + 2)) << 16;

       case 2:
        h ^= (255 & str.charCodeAt(i + 1)) << 8;

       case 1:
        h ^= 255 & str.charCodeAt(i);
        h = 1540483477 * (65535 & h) + ((1540483477 * (h >>> 16) & 65535) << 16);
      }
      h ^= h >>> 13;
      h = 1540483477 * (65535 & h) + ((1540483477 * (h >>> 16) & 65535) << 16);
      h ^= h >>> 15;
      return h >>> 0;
    }
    var WebGLEXT;
    (function(WebGLEXT) {
      WebGLEXT[WebGLEXT["COMPRESSED_RGB_S3TC_DXT1_EXT"] = 33776] = "COMPRESSED_RGB_S3TC_DXT1_EXT";
      WebGLEXT[WebGLEXT["COMPRESSED_RGBA_S3TC_DXT1_EXT"] = 33777] = "COMPRESSED_RGBA_S3TC_DXT1_EXT";
      WebGLEXT[WebGLEXT["COMPRESSED_RGBA_S3TC_DXT3_EXT"] = 33778] = "COMPRESSED_RGBA_S3TC_DXT3_EXT";
      WebGLEXT[WebGLEXT["COMPRESSED_RGBA_S3TC_DXT5_EXT"] = 33779] = "COMPRESSED_RGBA_S3TC_DXT5_EXT";
      WebGLEXT[WebGLEXT["COMPRESSED_SRGB_S3TC_DXT1_EXT"] = 35916] = "COMPRESSED_SRGB_S3TC_DXT1_EXT";
      WebGLEXT[WebGLEXT["COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT"] = 35917] = "COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT";
      WebGLEXT[WebGLEXT["COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT"] = 35918] = "COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT";
      WebGLEXT[WebGLEXT["COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT"] = 35919] = "COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT";
      WebGLEXT[WebGLEXT["COMPRESSED_RGB_PVRTC_4BPPV1_IMG"] = 35840] = "COMPRESSED_RGB_PVRTC_4BPPV1_IMG";
      WebGLEXT[WebGLEXT["COMPRESSED_RGB_PVRTC_2BPPV1_IMG"] = 35841] = "COMPRESSED_RGB_PVRTC_2BPPV1_IMG";
      WebGLEXT[WebGLEXT["COMPRESSED_RGBA_PVRTC_4BPPV1_IMG"] = 35842] = "COMPRESSED_RGBA_PVRTC_4BPPV1_IMG";
      WebGLEXT[WebGLEXT["COMPRESSED_RGBA_PVRTC_2BPPV1_IMG"] = 35843] = "COMPRESSED_RGBA_PVRTC_2BPPV1_IMG";
      WebGLEXT[WebGLEXT["COMPRESSED_RGB_ETC1_WEBGL"] = 36196] = "COMPRESSED_RGB_ETC1_WEBGL";
    })(WebGLEXT || (WebGLEXT = {}));
    var GFXObjectType;
    (function(GFXObjectType) {
      GFXObjectType[GFXObjectType["UNKNOWN"] = 0] = "UNKNOWN";
      GFXObjectType[GFXObjectType["BUFFER"] = 1] = "BUFFER";
      GFXObjectType[GFXObjectType["TEXTURE"] = 2] = "TEXTURE";
      GFXObjectType[GFXObjectType["TEXTURE_VIEW"] = 3] = "TEXTURE_VIEW";
      GFXObjectType[GFXObjectType["RENDER_PASS"] = 4] = "RENDER_PASS";
      GFXObjectType[GFXObjectType["FRAMEBUFFER"] = 5] = "FRAMEBUFFER";
      GFXObjectType[GFXObjectType["SAMPLER"] = 6] = "SAMPLER";
      GFXObjectType[GFXObjectType["SHADER"] = 7] = "SHADER";
      GFXObjectType[GFXObjectType["PIPELINE_LAYOUT"] = 8] = "PIPELINE_LAYOUT";
      GFXObjectType[GFXObjectType["PIPELINE_STATE"] = 9] = "PIPELINE_STATE";
      GFXObjectType[GFXObjectType["BINDING_LAYOUT"] = 10] = "BINDING_LAYOUT";
      GFXObjectType[GFXObjectType["INPUT_ASSEMBLER"] = 11] = "INPUT_ASSEMBLER";
      GFXObjectType[GFXObjectType["COMMAND_ALLOCATOR"] = 12] = "COMMAND_ALLOCATOR";
      GFXObjectType[GFXObjectType["COMMAND_BUFFER"] = 13] = "COMMAND_BUFFER";
      GFXObjectType[GFXObjectType["QUEUE"] = 14] = "QUEUE";
      GFXObjectType[GFXObjectType["WINDOW"] = 15] = "WINDOW";
    })(GFXObjectType || (GFXObjectType = {}));
    var GFXStatus;
    (function(GFXStatus) {
      GFXStatus[GFXStatus["UNREADY"] = 0] = "UNREADY";
      GFXStatus[GFXStatus["FAILED"] = 1] = "FAILED";
      GFXStatus[GFXStatus["SUCCESS"] = 2] = "SUCCESS";
    })(GFXStatus || (GFXStatus = {}));
    var GFXObject = (function() {
      function GFXObject(gfxType) {
        this._gfxType = GFXObjectType.UNKNOWN;
        this._status = GFXStatus.UNREADY;
        this._gfxType = gfxType;
      }
      Object.defineProperty(GFXObject.prototype, "gfxType", {
        get: function get() {
          return this._gfxType;
        },
        enumerable: true,
        configurable: true
      });
      Object.defineProperty(GFXObject.prototype, "status", {
        get: function get() {
          return this._status;
        },
        enumerable: true,
        configurable: true
      });
      return GFXObject;
    })();
    var GFXAttributeName;
    (function(GFXAttributeName) {
      GFXAttributeName["ATTR_POSITION"] = "a_position";
      GFXAttributeName["ATTR_NORMAL"] = "a_normal";
      GFXAttributeName["ATTR_TANGENT"] = "a_tangent";
      GFXAttributeName["ATTR_BITANGENT"] = "a_bitangent";
      GFXAttributeName["ATTR_WEIGHTS"] = "a_weights";
      GFXAttributeName["ATTR_JOINTS"] = "a_joints";
      GFXAttributeName["ATTR_COLOR"] = "a_color";
      GFXAttributeName["ATTR_COLOR1"] = "a_color1";
      GFXAttributeName["ATTR_COLOR2"] = "a_color2";
      GFXAttributeName["ATTR_TEX_COORD"] = "a_texCoord";
      GFXAttributeName["ATTR_TEX_COORD1"] = "a_texCoord1";
      GFXAttributeName["ATTR_TEX_COORD2"] = "a_texCoord2";
      GFXAttributeName["ATTR_TEX_COORD3"] = "a_texCoord3";
      GFXAttributeName["ATTR_TEX_COORD4"] = "a_texCoord4";
      GFXAttributeName["ATTR_TEX_COORD5"] = "a_texCoord5";
      GFXAttributeName["ATTR_TEX_COORD6"] = "a_texCoord6";
      GFXAttributeName["ATTR_TEX_COORD7"] = "a_texCoord7";
      GFXAttributeName["ATTR_TEX_COORD8"] = "a_texCoord8";
    })(GFXAttributeName || (GFXAttributeName = {}));
    var GFXType;
    (function(GFXType) {
      GFXType[GFXType["UNKNOWN"] = 0] = "UNKNOWN";
      GFXType[GFXType["BOOL"] = 1] = "BOOL";
      GFXType[GFXType["BOOL2"] = 2] = "BOOL2";
      GFXType[GFXType["BOOL3"] = 3] = "BOOL3";
      GFXType[GFXType["BOOL4"] = 4] = "BOOL4";
      GFXType[GFXType["INT"] = 5] = "INT";
      GFXType[GFXType["INT2"] = 6] = "INT2";
      GFXType[GFXType["INT3"] = 7] = "INT3";
      GFXType[GFXType["INT4"] = 8] = "INT4";
      GFXType[GFXType["UINT"] = 9] = "UINT";
      GFXType[GFXType["UINT2"] = 10] = "UINT2";
      GFXType[GFXType["UINT3"] = 11] = "UINT3";
      GFXType[GFXType["UINT4"] = 12] = "UINT4";
      GFXType[GFXType["FLOAT"] = 13] = "FLOAT";
      GFXType[GFXType["FLOAT2"] = 14] = "FLOAT2";
      GFXType[GFXType["FLOAT3"] = 15] = "FLOAT3";
      GFXType[GFXType["FLOAT4"] = 16] = "FLOAT4";
      GFXType[GFXType["COLOR4"] = 17] = "COLOR4";
      GFXType[GFXType["MAT2"] = 18] = "MAT2";
      GFXType[GFXType["MAT2X3"] = 19] = "MAT2X3";
      GFXType[GFXType["MAT2X4"] = 20] = "MAT2X4";
      GFXType[GFXType["MAT3X2"] = 21] = "MAT3X2";
      GFXType[GFXType["MAT3"] = 22] = "MAT3";
      GFXType[GFXType["MAT3X4"] = 23] = "MAT3X4";
      GFXType[GFXType["MAT4X2"] = 24] = "MAT4X2";
      GFXType[GFXType["MAT4X3"] = 25] = "MAT4X3";
      GFXType[GFXType["MAT4"] = 26] = "MAT4";
      GFXType[GFXType["SAMPLER1D"] = 27] = "SAMPLER1D";
      GFXType[GFXType["SAMPLER1D_ARRAY"] = 28] = "SAMPLER1D_ARRAY";
      GFXType[GFXType["SAMPLER2D"] = 29] = "SAMPLER2D";
      GFXType[GFXType["SAMPLER2D_ARRAY"] = 30] = "SAMPLER2D_ARRAY";
      GFXType[GFXType["SAMPLER3D"] = 31] = "SAMPLER3D";
      GFXType[GFXType["SAMPLER_CUBE"] = 32] = "SAMPLER_CUBE";
      GFXType[GFXType["COUNT"] = 33] = "COUNT";
    })(GFXType || (GFXType = {}));
    var GFXFormat;
    (function(GFXFormat) {
      GFXFormat[GFXFormat["UNKNOWN"] = 0] = "UNKNOWN";
      GFXFormat[GFXFormat["A8"] = 1] = "A8";
      GFXFormat[GFXFormat["L8"] = 2] = "L8";
      GFXFormat[GFXFormat["LA8"] = 3] = "LA8";
      GFXFormat[GFXFormat["R8"] = 4] = "R8";
      GFXFormat[GFXFormat["R8SN"] = 5] = "R8SN";
      GFXFormat[GFXFormat["R8UI"] = 6] = "R8UI";
      GFXFormat[GFXFormat["R8I"] = 7] = "R8I";
      GFXFormat[GFXFormat["R16F"] = 8] = "R16F";
      GFXFormat[GFXFormat["R16UI"] = 9] = "R16UI";
      GFXFormat[GFXFormat["R16I"] = 10] = "R16I";
      GFXFormat[GFXFormat["R32F"] = 11] = "R32F";
      GFXFormat[GFXFormat["R32UI"] = 12] = "R32UI";
      GFXFormat[GFXFormat["R32I"] = 13] = "R32I";
      GFXFormat[GFXFormat["RG8"] = 14] = "RG8";
      GFXFormat[GFXFormat["RG8SN"] = 15] = "RG8SN";
      GFXFormat[GFXFormat["RG8UI"] = 16] = "RG8UI";
      GFXFormat[GFXFormat["RG8I"] = 17] = "RG8I";
      GFXFormat[GFXFormat["RG16F"] = 18] = "RG16F";
      GFXFormat[GFXFormat["RG16UI"] = 19] = "RG16UI";
      GFXFormat[GFXFormat["RG16I"] = 20] = "RG16I";
      GFXFormat[GFXFormat["RG32F"] = 21] = "RG32F";
      GFXFormat[GFXFormat["RG32UI"] = 22] = "RG32UI";
      GFXFormat[GFXFormat["RG32I"] = 23] = "RG32I";
      GFXFormat[GFXFormat["RGB8"] = 24] = "RGB8";
      GFXFormat[GFXFormat["SRGB8"] = 25] = "SRGB8";
      GFXFormat[GFXFormat["RGB8SN"] = 26] = "RGB8SN";
      GFXFormat[GFXFormat["RGB8UI"] = 27] = "RGB8UI";
      GFXFormat[GFXFormat["RGB8I"] = 28] = "RGB8I";
      GFXFormat[GFXFormat["RGB16F"] = 29] = "RGB16F";
      GFXFormat[GFXFormat["RGB16UI"] = 30] = "RGB16UI";
      GFXFormat[GFXFormat["RGB16I"] = 31] = "RGB16I";
      GFXFormat[GFXFormat["RGB32F"] = 32] = "RGB32F";
      GFXFormat[GFXFormat["RGB32UI"] = 33] = "RGB32UI";
      GFXFormat[GFXFormat["RGB32I"] = 34] = "RGB32I";
      GFXFormat[GFXFormat["RGBA8"] = 35] = "RGBA8";
      GFXFormat[GFXFormat["SRGB8_A8"] = 36] = "SRGB8_A8";
      GFXFormat[GFXFormat["RGBA8SN"] = 37] = "RGBA8SN";
      GFXFormat[GFXFormat["RGBA8UI"] = 38] = "RGBA8UI";
      GFXFormat[GFXFormat["RGBA8I"] = 39] = "RGBA8I";
      GFXFormat[GFXFormat["RGBA16F"] = 40] = "RGBA16F";
      GFXFormat[GFXFormat["RGBA16UI"] = 41] = "RGBA16UI";
      GFXFormat[GFXFormat["RGBA16I"] = 42] = "RGBA16I";
      GFXFormat[GFXFormat["RGBA32F"] = 43] = "RGBA32F";
      GFXFormat[GFXFormat["RGBA32UI"] = 44] = "RGBA32UI";
      GFXFormat[GFXFormat["RGBA32I"] = 45] = "RGBA32I";
      GFXFormat[GFXFormat["R5G6B5"] = 46] = "R5G6B5";
      GFXFormat[GFXFormat["R11G11B10F"] = 47] = "R11G11B10F";
      GFXFormat[GFXFormat["RGB5A1"] = 48] = "RGB5A1";
      GFXFormat[GFXFormat["RGBA4"] = 49] = "RGBA4";
      GFXFormat[GFXFormat["RGB10A2"] = 50] = "RGB10A2";
      GFXFormat[GFXFormat["RGB10A2UI"] = 51] = "RGB10A2UI";
      GFXFormat[GFXFormat["RGB9E5"] = 52] = "RGB9E5";
      GFXFormat[GFXFormat["D16"] = 53] = "D16";
      GFXFormat[GFXFormat["D16S8"] = 54] = "D16S8";
      GFXFormat[GFXFormat["D24"] = 55] = "D24";
      GFXFormat[GFXFormat["D24S8"] = 56] = "D24S8";
      GFXFormat[GFXFormat["D32F"] = 57] = "D32F";
      GFXFormat[GFXFormat["D32F_S8"] = 58] = "D32F_S8";
      GFXFormat[GFXFormat["BC1"] = 59] = "BC1";
      GFXFormat[GFXFormat["BC1_ALPHA"] = 60] = "BC1_ALPHA";
      GFXFormat[GFXFormat["BC1_SRGB"] = 61] = "BC1_SRGB";
      GFXFormat[GFXFormat["BC1_SRGB_ALPHA"] = 62] = "BC1_SRGB_ALPHA";
      GFXFormat[GFXFormat["BC2"] = 63] = "BC2";
      GFXFormat[GFXFormat["BC2_SRGB"] = 64] = "BC2_SRGB";
      GFXFormat[GFXFormat["BC3"] = 65] = "BC3";
      GFXFormat[GFXFormat["BC3_SRGB"] = 66] = "BC3_SRGB";
      GFXFormat[GFXFormat["BC4"] = 67] = "BC4";
      GFXFormat[GFXFormat["BC4_SNORM"] = 68] = "BC4_SNORM";
      GFXFormat[GFXFormat["BC5"] = 69] = "BC5";
      GFXFormat[GFXFormat["BC5_SNORM"] = 70] = "BC5_SNORM";
      GFXFormat[GFXFormat["BC6H_UF16"] = 71] = "BC6H_UF16";
      GFXFormat[GFXFormat["BC6H_SF16"] = 72] = "BC6H_SF16";
      GFXFormat[GFXFormat["BC7"] = 73] = "BC7";
      GFXFormat[GFXFormat["BC7_SRGB"] = 74] = "BC7_SRGB";
      GFXFormat[GFXFormat["ETC_RGB8"] = 75] = "ETC_RGB8";
      GFXFormat[GFXFormat["ETC2_RGB8"] = 76] = "ETC2_RGB8";
      GFXFormat[GFXFormat["ETC2_SRGB8"] = 77] = "ETC2_SRGB8";
      GFXFormat[GFXFormat["ETC2_RGB8_A1"] = 78] = "ETC2_RGB8_A1";
      GFXFormat[GFXFormat["ETC2_SRGB8_A1"] = 79] = "ETC2_SRGB8_A1";
      GFXFormat[GFXFormat["ETC2_RGBA8"] = 80] = "ETC2_RGBA8";
      GFXFormat[GFXFormat["ETC2_SRGB8_A8"] = 81] = "ETC2_SRGB8_A8";
      GFXFormat[GFXFormat["EAC_R11"] = 82] = "EAC_R11";
      GFXFormat[GFXFormat["EAC_R11SN"] = 83] = "EAC_R11SN";
      GFXFormat[GFXFormat["EAC_RG11"] = 84] = "EAC_RG11";
      GFXFormat[GFXFormat["EAC_RG11SN"] = 85] = "EAC_RG11SN";
      GFXFormat[GFXFormat["PVRTC_RGB2"] = 86] = "PVRTC_RGB2";
      GFXFormat[GFXFormat["PVRTC_RGBA2"] = 87] = "PVRTC_RGBA2";
      GFXFormat[GFXFormat["PVRTC_RGB4"] = 88] = "PVRTC_RGB4";
      GFXFormat[GFXFormat["PVRTC_RGBA4"] = 89] = "PVRTC_RGBA4";
      GFXFormat[GFXFormat["PVRTC2_2BPP"] = 90] = "PVRTC2_2BPP";
      GFXFormat[GFXFormat["PVRTC2_4BPP"] = 91] = "PVRTC2_4BPP";
    })(GFXFormat || (GFXFormat = {}));
    var GFXBufferUsageBit;
    (function(GFXBufferUsageBit) {
      GFXBufferUsageBit[GFXBufferUsageBit["NONE"] = 0] = "NONE";
      GFXBufferUsageBit[GFXBufferUsageBit["TRANSFER_SRC"] = 1] = "TRANSFER_SRC";
      GFXBufferUsageBit[GFXBufferUsageBit["TRANSFER_DST"] = 2] = "TRANSFER_DST";
      GFXBufferUsageBit[GFXBufferUsageBit["INDEX"] = 4] = "INDEX";
      GFXBufferUsageBit[GFXBufferUsageBit["VERTEX"] = 8] = "VERTEX";
      GFXBufferUsageBit[GFXBufferUsageBit["UNIFORM"] = 16] = "UNIFORM";
      GFXBufferUsageBit[GFXBufferUsageBit["STORAGE"] = 32] = "STORAGE";
      GFXBufferUsageBit[GFXBufferUsageBit["INDIRECT"] = 64] = "INDIRECT";
    })(GFXBufferUsageBit || (GFXBufferUsageBit = {}));
    var GFXMemoryUsageBit;
    (function(GFXMemoryUsageBit) {
      GFXMemoryUsageBit[GFXMemoryUsageBit["NONE"] = 0] = "NONE";
      GFXMemoryUsageBit[GFXMemoryUsageBit["DEVICE"] = 1] = "DEVICE";
      GFXMemoryUsageBit[GFXMemoryUsageBit["HOST"] = 2] = "HOST";
    })(GFXMemoryUsageBit || (GFXMemoryUsageBit = {}));
    var GFXBufferAccessBit;
    (function(GFXBufferAccessBit) {
      GFXBufferAccessBit[GFXBufferAccessBit["NONE"] = 0] = "NONE";
      GFXBufferAccessBit[GFXBufferAccessBit["READ"] = 1] = "READ";
      GFXBufferAccessBit[GFXBufferAccessBit["WRITE"] = 2] = "WRITE";
    })(GFXBufferAccessBit || (GFXBufferAccessBit = {}));
    var GFXPrimitiveMode;
    (function(GFXPrimitiveMode) {
      GFXPrimitiveMode[GFXPrimitiveMode["POINT_LIST"] = 0] = "POINT_LIST";
      GFXPrimitiveMode[GFXPrimitiveMode["LINE_LIST"] = 1] = "LINE_LIST";
      GFXPrimitiveMode[GFXPrimitiveMode["LINE_STRIP"] = 2] = "LINE_STRIP";
      GFXPrimitiveMode[GFXPrimitiveMode["LINE_LOOP"] = 3] = "LINE_LOOP";
      GFXPrimitiveMode[GFXPrimitiveMode["LINE_LIST_ADJACENCY"] = 4] = "LINE_LIST_ADJACENCY";
      GFXPrimitiveMode[GFXPrimitiveMode["LINE_STRIP_ADJACENCY"] = 5] = "LINE_STRIP_ADJACENCY";
      GFXPrimitiveMode[GFXPrimitiveMode["ISO_LINE_LIST"] = 6] = "ISO_LINE_LIST";
      GFXPrimitiveMode[GFXPrimitiveMode["TRIANGLE_LIST"] = 7] = "TRIANGLE_LIST";
      GFXPrimitiveMode[GFXPrimitiveMode["TRIANGLE_STRIP"] = 8] = "TRIANGLE_STRIP";
      GFXPrimitiveMode[GFXPrimitiveMode["TRIANGLE_FAN"] = 9] = "TRIANGLE_FAN";
      GFXPrimitiveMode[GFXPrimitiveMode["TRIANGLE_LIST_ADJACENCY"] = 10] = "TRIANGLE_LIST_ADJACENCY";
      GFXPrimitiveMode[GFXPrimitiveMode["TRIANGLE_STRIP_ADJACENCY"] = 11] = "TRIANGLE_STRIP_ADJACENCY";
      GFXPrimitiveMode[GFXPrimitiveMode["TRIANGLE_PATCH_ADJACENCY"] = 12] = "TRIANGLE_PATCH_ADJACENCY";
      GFXPrimitiveMode[GFXPrimitiveMode["QUAD_PATCH_LIST"] = 13] = "QUAD_PATCH_LIST";
    })(GFXPrimitiveMode || (GFXPrimitiveMode = {}));
    var GFXPolygonMode;
    (function(GFXPolygonMode) {
      GFXPolygonMode[GFXPolygonMode["FILL"] = 0] = "FILL";
      GFXPolygonMode[GFXPolygonMode["POINT"] = 1] = "POINT";
      GFXPolygonMode[GFXPolygonMode["LINE"] = 2] = "LINE";
    })(GFXPolygonMode || (GFXPolygonMode = {}));
    var GFXShadeModel;
    (function(GFXShadeModel) {
      GFXShadeModel[GFXShadeModel["GOURAND"] = 0] = "GOURAND";
      GFXShadeModel[GFXShadeModel["FLAT"] = 1] = "FLAT";
    })(GFXShadeModel || (GFXShadeModel = {}));
    var GFXCullMode;
    (function(GFXCullMode) {
      GFXCullMode[GFXCullMode["NONE"] = 0] = "NONE";
      GFXCullMode[GFXCullMode["FRONT"] = 1] = "FRONT";
      GFXCullMode[GFXCullMode["BACK"] = 2] = "BACK";
    })(GFXCullMode || (GFXCullMode = {}));
    var GFXComparisonFunc;
    (function(GFXComparisonFunc) {
      GFXComparisonFunc[GFXComparisonFunc["NEVER"] = 0] = "NEVER";
      GFXComparisonFunc[GFXComparisonFunc["LESS"] = 1] = "LESS";
      GFXComparisonFunc[GFXComparisonFunc["EQUAL"] = 2] = "EQUAL";
      GFXComparisonFunc[GFXComparisonFunc["LESS_EQUAL"] = 3] = "LESS_EQUAL";
      GFXComparisonFunc[GFXComparisonFunc["GREATER"] = 4] = "GREATER";
      GFXComparisonFunc[GFXComparisonFunc["NOT_EQUAL"] = 5] = "NOT_EQUAL";
      GFXComparisonFunc[GFXComparisonFunc["GREATER_EQUAL"] = 6] = "GREATER_EQUAL";
      GFXComparisonFunc[GFXComparisonFunc["ALWAYS"] = 7] = "ALWAYS";
    })(GFXComparisonFunc || (GFXComparisonFunc = {}));
    var GFXStencilOp;
    (function(GFXStencilOp) {
      GFXStencilOp[GFXStencilOp["ZERO"] = 0] = "ZERO";
      GFXStencilOp[GFXStencilOp["KEEP"] = 1] = "KEEP";
      GFXStencilOp[GFXStencilOp["REPLACE"] = 2] = "REPLACE";
      GFXStencilOp[GFXStencilOp["INCR"] = 3] = "INCR";
      GFXStencilOp[GFXStencilOp["DECR"] = 4] = "DECR";
      GFXStencilOp[GFXStencilOp["INVERT"] = 5] = "INVERT";
      GFXStencilOp[GFXStencilOp["INCR_WRAP"] = 6] = "INCR_WRAP";
      GFXStencilOp[GFXStencilOp["DECR_WRAP"] = 7] = "DECR_WRAP";
    })(GFXStencilOp || (GFXStencilOp = {}));
    var GFXBlendOp;
    (function(GFXBlendOp) {
      GFXBlendOp[GFXBlendOp["ADD"] = 0] = "ADD";
      GFXBlendOp[GFXBlendOp["SUB"] = 1] = "SUB";
      GFXBlendOp[GFXBlendOp["REV_SUB"] = 2] = "REV_SUB";
      GFXBlendOp[GFXBlendOp["MIN"] = 3] = "MIN";
      GFXBlendOp[GFXBlendOp["MAX"] = 4] = "MAX";
    })(GFXBlendOp || (GFXBlendOp = {}));
    var GFXBlendFactor;
    (function(GFXBlendFactor) {
      GFXBlendFactor[GFXBlendFactor["ZERO"] = 0] = "ZERO";
      GFXBlendFactor[GFXBlendFactor["ONE"] = 1] = "ONE";
      GFXBlendFactor[GFXBlendFactor["SRC_ALPHA"] = 2] = "SRC_ALPHA";
      GFXBlendFactor[GFXBlendFactor["DST_ALPHA"] = 3] = "DST_ALPHA";
      GFXBlendFactor[GFXBlendFactor["ONE_MINUS_SRC_ALPHA"] = 4] = "ONE_MINUS_SRC_ALPHA";
      GFXBlendFactor[GFXBlendFactor["ONE_MINUS_DST_ALPHA"] = 5] = "ONE_MINUS_DST_ALPHA";
      GFXBlendFactor[GFXBlendFactor["SRC_COLOR"] = 6] = "SRC_COLOR";
      GFXBlendFactor[GFXBlendFactor["DST_COLOR"] = 7] = "DST_COLOR";
      GFXBlendFactor[GFXBlendFactor["ONE_MINUS_SRC_COLOR"] = 8] = "ONE_MINUS_SRC_COLOR";
      GFXBlendFactor[GFXBlendFactor["ONE_MINUS_DST_COLOR"] = 9] = "ONE_MINUS_DST_COLOR";
      GFXBlendFactor[GFXBlendFactor["SRC_ALPHA_SATURATE"] = 10] = "SRC_ALPHA_SATURATE";
      GFXBlendFactor[GFXBlendFactor["CONSTANT_COLOR"] = 11] = "CONSTANT_COLOR";
      GFXBlendFactor[GFXBlendFactor["ONE_MINUS_CONSTANT_COLOR"] = 12] = "ONE_MINUS_CONSTANT_COLOR";
      GFXBlendFactor[GFXBlendFactor["CONSTANT_ALPHA"] = 13] = "CONSTANT_ALPHA";
      GFXBlendFactor[GFXBlendFactor["ONE_MINUS_CONSTANT_ALPHA"] = 14] = "ONE_MINUS_CONSTANT_ALPHA";
    })(GFXBlendFactor || (GFXBlendFactor = {}));
    var GFXColorMask;
    (function(GFXColorMask) {
      GFXColorMask[GFXColorMask["NONE"] = 0] = "NONE";
      GFXColorMask[GFXColorMask["R"] = 1] = "R";
      GFXColorMask[GFXColorMask["G"] = 2] = "G";
      GFXColorMask[GFXColorMask["B"] = 4] = "B";
      GFXColorMask[GFXColorMask["A"] = 8] = "A";
      GFXColorMask[GFXColorMask["ALL"] = 15] = "ALL";
    })(GFXColorMask || (GFXColorMask = {}));
    var GFXFilter;
    (function(GFXFilter) {
      GFXFilter[GFXFilter["NONE"] = 0] = "NONE";
      GFXFilter[GFXFilter["POINT"] = 1] = "POINT";
      GFXFilter[GFXFilter["LINEAR"] = 2] = "LINEAR";
      GFXFilter[GFXFilter["ANISOTROPIC"] = 3] = "ANISOTROPIC";
    })(GFXFilter || (GFXFilter = {}));
    var GFXAddress;
    (function(GFXAddress) {
      GFXAddress[GFXAddress["WRAP"] = 0] = "WRAP";
      GFXAddress[GFXAddress["MIRROR"] = 1] = "MIRROR";
      GFXAddress[GFXAddress["CLAMP"] = 2] = "CLAMP";
      GFXAddress[GFXAddress["BORDER"] = 3] = "BORDER";
    })(GFXAddress || (GFXAddress = {}));
    var GFXTextureType;
    (function(GFXTextureType) {
      GFXTextureType[GFXTextureType["TEX1D"] = 0] = "TEX1D";
      GFXTextureType[GFXTextureType["TEX2D"] = 1] = "TEX2D";
      GFXTextureType[GFXTextureType["TEX3D"] = 2] = "TEX3D";
    })(GFXTextureType || (GFXTextureType = {}));
    var GFXTextureUsageBit;
    (function(GFXTextureUsageBit) {
      GFXTextureUsageBit[GFXTextureUsageBit["NONE"] = 0] = "NONE";
      GFXTextureUsageBit[GFXTextureUsageBit["TRANSFER_SRC"] = 1] = "TRANSFER_SRC";
      GFXTextureUsageBit[GFXTextureUsageBit["TRANSFER_DST"] = 2] = "TRANSFER_DST";
      GFXTextureUsageBit[GFXTextureUsageBit["SAMPLED"] = 4] = "SAMPLED";
      GFXTextureUsageBit[GFXTextureUsageBit["STORAGE"] = 8] = "STORAGE";
      GFXTextureUsageBit[GFXTextureUsageBit["COLOR_ATTACHMENT"] = 16] = "COLOR_ATTACHMENT";
      GFXTextureUsageBit[GFXTextureUsageBit["DEPTH_STENCIL_ATTACHMENT"] = 32] = "DEPTH_STENCIL_ATTACHMENT";
      GFXTextureUsageBit[GFXTextureUsageBit["TRANSIENT_ATTACHMENT"] = 64] = "TRANSIENT_ATTACHMENT";
      GFXTextureUsageBit[GFXTextureUsageBit["INPUT_ATTACHMENT"] = 128] = "INPUT_ATTACHMENT";
    })(GFXTextureUsageBit || (GFXTextureUsageBit = {}));
    var GFXSampleCount;
    (function(GFXSampleCount) {
      GFXSampleCount[GFXSampleCount["X1"] = 0] = "X1";
      GFXSampleCount[GFXSampleCount["X2"] = 1] = "X2";
      GFXSampleCount[GFXSampleCount["X4"] = 2] = "X4";
      GFXSampleCount[GFXSampleCount["X8"] = 3] = "X8";
      GFXSampleCount[GFXSampleCount["X16"] = 4] = "X16";
      GFXSampleCount[GFXSampleCount["X32"] = 5] = "X32";
      GFXSampleCount[GFXSampleCount["X64"] = 6] = "X64";
    })(GFXSampleCount || (GFXSampleCount = {}));
    var GFXTextureFlagBit;
    (function(GFXTextureFlagBit) {
      GFXTextureFlagBit[GFXTextureFlagBit["NONE"] = 0] = "NONE";
      GFXTextureFlagBit[GFXTextureFlagBit["GEN_MIPMAP"] = 1] = "GEN_MIPMAP";
      GFXTextureFlagBit[GFXTextureFlagBit["CUBEMAP"] = 2] = "CUBEMAP";
      GFXTextureFlagBit[GFXTextureFlagBit["BAKUP_BUFFER"] = 4] = "BAKUP_BUFFER";
    })(GFXTextureFlagBit || (GFXTextureFlagBit = {}));
    var GFXTextureViewType;
    (function(GFXTextureViewType) {
      GFXTextureViewType[GFXTextureViewType["TV1D"] = 0] = "TV1D";
      GFXTextureViewType[GFXTextureViewType["TV2D"] = 1] = "TV2D";
      GFXTextureViewType[GFXTextureViewType["TV3D"] = 2] = "TV3D";
      GFXTextureViewType[GFXTextureViewType["CUBE"] = 3] = "CUBE";
      GFXTextureViewType[GFXTextureViewType["TV1D_ARRAY"] = 4] = "TV1D_ARRAY";
      GFXTextureViewType[GFXTextureViewType["TV2D_ARRAY"] = 5] = "TV2D_ARRAY";
    })(GFXTextureViewType || (GFXTextureViewType = {}));
    var GFXShaderType;
    (function(GFXShaderType) {
      GFXShaderType[GFXShaderType["VERTEX"] = 0] = "VERTEX";
      GFXShaderType[GFXShaderType["HULL"] = 1] = "HULL";
      GFXShaderType[GFXShaderType["DOMAIN"] = 2] = "DOMAIN";
      GFXShaderType[GFXShaderType["GEOMETRY"] = 3] = "GEOMETRY";
      GFXShaderType[GFXShaderType["FRAGMENT"] = 4] = "FRAGMENT";
      GFXShaderType[GFXShaderType["COMPUTE"] = 5] = "COMPUTE";
      GFXShaderType[GFXShaderType["COUNT"] = 6] = "COUNT";
    })(GFXShaderType || (GFXShaderType = {}));
    var GFXBindingType;
    (function(GFXBindingType) {
      GFXBindingType[GFXBindingType["UNKNOWN"] = 0] = "UNKNOWN";
      GFXBindingType[GFXBindingType["UNIFORM_BUFFER"] = 1] = "UNIFORM_BUFFER";
      GFXBindingType[GFXBindingType["SAMPLER"] = 2] = "SAMPLER";
      GFXBindingType[GFXBindingType["STORAGE_BUFFER"] = 3] = "STORAGE_BUFFER";
    })(GFXBindingType || (GFXBindingType = {}));
    var GFXCommandBufferType;
    (function(GFXCommandBufferType) {
      GFXCommandBufferType[GFXCommandBufferType["PRIMARY"] = 0] = "PRIMARY";
      GFXCommandBufferType[GFXCommandBufferType["SECONDARY"] = 1] = "SECONDARY";
    })(GFXCommandBufferType || (GFXCommandBufferType = {}));
    var GFXLoadOp;
    (function(GFXLoadOp) {
      GFXLoadOp[GFXLoadOp["LOAD"] = 0] = "LOAD";
      GFXLoadOp[GFXLoadOp["CLEAR"] = 1] = "CLEAR";
      GFXLoadOp[GFXLoadOp["DISCARD"] = 2] = "DISCARD";
    })(GFXLoadOp || (GFXLoadOp = {}));
    var GFXStoreOp;
    (function(GFXStoreOp) {
      GFXStoreOp[GFXStoreOp["STORE"] = 0] = "STORE";
      GFXStoreOp[GFXStoreOp["DISCARD"] = 1] = "DISCARD";
    })(GFXStoreOp || (GFXStoreOp = {}));
    var GFXTextureLayout;
    (function(GFXTextureLayout) {
      GFXTextureLayout[GFXTextureLayout["UNDEFINED"] = 0] = "UNDEFINED";
      GFXTextureLayout[GFXTextureLayout["GENERAL"] = 1] = "GENERAL";
      GFXTextureLayout[GFXTextureLayout["COLOR_ATTACHMENT_OPTIMAL"] = 2] = "COLOR_ATTACHMENT_OPTIMAL";
      GFXTextureLayout[GFXTextureLayout["DEPTH_STENCIL_ATTACHMENT_OPTIMAL"] = 3] = "DEPTH_STENCIL_ATTACHMENT_OPTIMAL";
      GFXTextureLayout[GFXTextureLayout["DEPTH_STENCIL_READONLY_OPTIMAL"] = 4] = "DEPTH_STENCIL_READONLY_OPTIMAL";
      GFXTextureLayout[GFXTextureLayout["SHADER_READONLY_OPTIMAL"] = 5] = "SHADER_READONLY_OPTIMAL";
      GFXTextureLayout[GFXTextureLayout["TRANSFER_SRC_OPTIMAL"] = 6] = "TRANSFER_SRC_OPTIMAL";
      GFXTextureLayout[GFXTextureLayout["TRANSFER_DST_OPTIMAL"] = 7] = "TRANSFER_DST_OPTIMAL";
      GFXTextureLayout[GFXTextureLayout["PREINITIALIZED"] = 8] = "PREINITIALIZED";
      GFXTextureLayout[GFXTextureLayout["PRESENT_SRC"] = 9] = "PRESENT_SRC";
    })(GFXTextureLayout || (GFXTextureLayout = {}));
    var GFXPipelineBindPoint;
    (function(GFXPipelineBindPoint) {
      GFXPipelineBindPoint[GFXPipelineBindPoint["GRAPHICS"] = 0] = "GRAPHICS";
      GFXPipelineBindPoint[GFXPipelineBindPoint["COMPUTE"] = 1] = "COMPUTE";
      GFXPipelineBindPoint[GFXPipelineBindPoint["RAY_TRACING"] = 2] = "RAY_TRACING";
    })(GFXPipelineBindPoint || (GFXPipelineBindPoint = {}));
    var GFXDynamicState;
    (function(GFXDynamicState) {
      GFXDynamicState[GFXDynamicState["VIEWPORT"] = 0] = "VIEWPORT";
      GFXDynamicState[GFXDynamicState["SCISSOR"] = 1] = "SCISSOR";
      GFXDynamicState[GFXDynamicState["LINE_WIDTH"] = 2] = "LINE_WIDTH";
      GFXDynamicState[GFXDynamicState["DEPTH_BIAS"] = 3] = "DEPTH_BIAS";
      GFXDynamicState[GFXDynamicState["BLEND_CONSTANTS"] = 4] = "BLEND_CONSTANTS";
      GFXDynamicState[GFXDynamicState["DEPTH_BOUNDS"] = 5] = "DEPTH_BOUNDS";
      GFXDynamicState[GFXDynamicState["STENCIL_WRITE_MASK"] = 6] = "STENCIL_WRITE_MASK";
      GFXDynamicState[GFXDynamicState["STENCIL_COMPARE_MASK"] = 7] = "STENCIL_COMPARE_MASK";
    })(GFXDynamicState || (GFXDynamicState = {}));
    var GFXStencilFace;
    (function(GFXStencilFace) {
      GFXStencilFace[GFXStencilFace["FRONT"] = 0] = "FRONT";
      GFXStencilFace[GFXStencilFace["BACK"] = 1] = "BACK";
      GFXStencilFace[GFXStencilFace["ALL"] = 2] = "ALL";
    })(GFXStencilFace || (GFXStencilFace = {}));
    var GFXQueueType;
    (function(GFXQueueType) {
      GFXQueueType[GFXQueueType["GRAPHICS"] = 0] = "GRAPHICS";
      GFXQueueType[GFXQueueType["COMPUTE"] = 1] = "COMPUTE";
      GFXQueueType[GFXQueueType["TRANSFER"] = 2] = "TRANSFER";
    })(GFXQueueType || (GFXQueueType = {}));
    var GFXClearFlag;
    (function(GFXClearFlag) {
      GFXClearFlag[GFXClearFlag["NONE"] = 0] = "NONE";
      GFXClearFlag[GFXClearFlag["COLOR"] = 1] = "COLOR";
      GFXClearFlag[GFXClearFlag["DEPTH"] = 2] = "DEPTH";
      GFXClearFlag[GFXClearFlag["STENCIL"] = 4] = "STENCIL";
      GFXClearFlag[GFXClearFlag["DEPTH_STENCIL"] = 6] = "DEPTH_STENCIL";
      GFXClearFlag[GFXClearFlag["ALL"] = 7] = "ALL";
    })(GFXClearFlag || (GFXClearFlag = {}));
    function GFXGetTypeSize(type) {
      switch (type) {
       case GFXType.BOOL:
       case GFXType.INT:
       case GFXType.UINT:
       case GFXType.FLOAT:
        return 4;

       case GFXType.BOOL2:
       case GFXType.INT2:
       case GFXType.UINT2:
       case GFXType.FLOAT2:
        return 8;

       case GFXType.BOOL3:
       case GFXType.INT3:
       case GFXType.UINT3:
       case GFXType.FLOAT3:
        return 12;

       case GFXType.BOOL4:
       case GFXType.INT4:
       case GFXType.UINT4:
       case GFXType.FLOAT4:
       case GFXType.MAT2:
        return 16;

       case GFXType.MAT2X3:
        return 24;

       case GFXType.MAT2X4:
        return 32;

       case GFXType.MAT3X2:
        return 24;

       case GFXType.MAT3:
        return 36;

       case GFXType.MAT3X4:
        return 48;

       case GFXType.MAT4X2:
       case GFXType.MAT4X2:
        return 32;

       case GFXType.MAT4:
        return 64;

       case GFXType.SAMPLER1D:
       case GFXType.SAMPLER1D_ARRAY:
       case GFXType.SAMPLER2D:
       case GFXType.SAMPLER2D_ARRAY:
       case GFXType.SAMPLER3D:
       case GFXType.SAMPLER_CUBE:
        return 4;

       default:
        return 0;
      }
    }
    var RenderPassStage;
    (function(RenderPassStage) {
      RenderPassStage[RenderPassStage["DEFAULT"] = 100] = "DEFAULT";
    })(RenderPassStage || (RenderPassStage = {}));
    var RenderPriority;
    (function(RenderPriority) {
      RenderPriority[RenderPriority["MIN"] = 0] = "MIN";
      RenderPriority[RenderPriority["MAX"] = 255] = "MAX";
      RenderPriority[RenderPriority["DEFAULT"] = 128] = "DEFAULT";
    })(RenderPriority || (RenderPriority = {}));
    var MAX_BINDING_SUPPORTED = 24;
    var UniformBinding;
    (function(UniformBinding) {
      UniformBinding[UniformBinding["UBO_GLOBAL"] = MAX_BINDING_SUPPORTED - 1] = "UBO_GLOBAL";
      UniformBinding[UniformBinding["UBO_SHADOW"] = MAX_BINDING_SUPPORTED - 2] = "UBO_SHADOW";
      UniformBinding[UniformBinding["UBO_LOCAL"] = MAX_BINDING_SUPPORTED - 3] = "UBO_LOCAL";
      UniformBinding[UniformBinding["UBO_FORWARD_LIGHTS"] = MAX_BINDING_SUPPORTED - 4] = "UBO_FORWARD_LIGHTS";
      UniformBinding[UniformBinding["UBO_SKINNING"] = MAX_BINDING_SUPPORTED - 5] = "UBO_SKINNING";
      UniformBinding[UniformBinding["UBO_SKINNING_TEXTURE"] = MAX_BINDING_SUPPORTED - 6] = "UBO_SKINNING_TEXTURE";
      UniformBinding[UniformBinding["UBO_UI"] = MAX_BINDING_SUPPORTED - 7] = "UBO_UI";
      UniformBinding[UniformBinding["SAMPLER_JOINTS"] = MAX_BINDING_SUPPORTED + 1] = "SAMPLER_JOINTS";
      UniformBinding[UniformBinding["SAMPLER_ENVIRONMENT"] = MAX_BINDING_SUPPORTED + 2] = "SAMPLER_ENVIRONMENT";
      UniformBinding[UniformBinding["CUSTUM_UBO_BINDING_END_POINT"] = MAX_BINDING_SUPPORTED - 7] = "CUSTUM_UBO_BINDING_END_POINT";
      UniformBinding[UniformBinding["CUSTOM_SAMPLER_BINDING_START_POINT"] = MAX_BINDING_SUPPORTED + 6] = "CUSTOM_SAMPLER_BINDING_START_POINT";
    })(UniformBinding || (UniformBinding = {}));
    var _a, _b;
    var SamplerInfoIndex;
    (function(SamplerInfoIndex) {
      SamplerInfoIndex[SamplerInfoIndex["minFilter"] = 0] = "minFilter";
      SamplerInfoIndex[SamplerInfoIndex["magFilter"] = 1] = "magFilter";
      SamplerInfoIndex[SamplerInfoIndex["mipFilter"] = 2] = "mipFilter";
      SamplerInfoIndex[SamplerInfoIndex["addressU"] = 3] = "addressU";
      SamplerInfoIndex[SamplerInfoIndex["addressV"] = 4] = "addressV";
      SamplerInfoIndex[SamplerInfoIndex["addressW"] = 5] = "addressW";
      SamplerInfoIndex[SamplerInfoIndex["maxAnisotropy"] = 6] = "maxAnisotropy";
      SamplerInfoIndex[SamplerInfoIndex["cmpFunc"] = 7] = "cmpFunc";
      SamplerInfoIndex[SamplerInfoIndex["minLOD"] = 8] = "minLOD";
      SamplerInfoIndex[SamplerInfoIndex["maxLOD"] = 9] = "maxLOD";
      SamplerInfoIndex[SamplerInfoIndex["mipLODBias"] = 10] = "mipLODBias";
      SamplerInfoIndex[SamplerInfoIndex["borderColor"] = 11] = "borderColor";
      SamplerInfoIndex[SamplerInfoIndex["total"] = 15] = "total";
    })(SamplerInfoIndex || (SamplerInfoIndex = {}));
    var typeMap = {};
    typeMap[typeMap["bool"] = GFXType.BOOL] = "bool";
    typeMap[typeMap["int"] = GFXType.INT] = "int";
    typeMap[typeMap["ivec2"] = GFXType.INT2] = "ivec2invTypeParams";
    typeMap[typeMap["ivec3"] = GFXType.INT3] = "ivec3";
    typeMap[typeMap["ivec4"] = GFXType.INT4] = "ivec4";
    typeMap[typeMap["float"] = GFXType.FLOAT] = "float";
    typeMap[typeMap["vec2"] = GFXType.FLOAT2] = "vec2";
    typeMap[typeMap["vec3"] = GFXType.FLOAT3] = "vec3";
    typeMap[typeMap["vec4"] = GFXType.FLOAT4] = "vec4";
    typeMap[typeMap["mat2"] = GFXType.MAT2] = "mat2";
    typeMap[typeMap["mat3"] = GFXType.MAT3] = "mat3";
    typeMap[typeMap["mat4"] = GFXType.MAT4] = "mat4";
    typeMap[typeMap["sampler2D"] = GFXType.SAMPLER2D] = "sampler2D";
    typeMap[typeMap["samplerCube"] = GFXType.SAMPLER_CUBE] = "samplerCube";
    var sizeMap = (_a = {}, _a[GFXType.BOOL] = 4, _a[GFXType.INT] = 4, _a[GFXType.INT2] = 8, 
    _a[GFXType.INT3] = 12, _a[GFXType.INT4] = 16, _a[GFXType.FLOAT] = 4, _a[GFXType.FLOAT2] = 8, 
    _a[GFXType.FLOAT3] = 12, _a[GFXType.FLOAT4] = 16, _a[GFXType.MAT2] = 16, _a[GFXType.MAT3] = 36, 
    _a[GFXType.MAT4] = 64, _a[GFXType.SAMPLER2D] = 4, _a[GFXType.SAMPLER_CUBE] = 4, 
    _a);
    var formatMap = (_b = {}, _b[GFXType.BOOL] = GFXFormat.R32I, _b[GFXType.INT] = GFXFormat.R32I, 
    _b[GFXType.INT2] = GFXFormat.RG32I, _b[GFXType.INT3] = GFXFormat.RGB32I, _b[GFXType.INT4] = GFXFormat.RGBA32I, 
    _b[GFXType.FLOAT] = GFXFormat.R32F, _b[GFXType.FLOAT2] = GFXFormat.RG32F, _b[GFXType.FLOAT3] = GFXFormat.RGB32F, 
    _b[GFXType.FLOAT4] = GFXFormat.RGBA32F, _b);
    var passParams = {
      BACK: enums.CULL_BACK,
      FRONT: enums.CULL_FRONT,
      NONE: enums.CULL_NONE,
      ADD: enums.BLEND_FUNC_ADD,
      SUB: enums.BLEND_FUNC_SUBTRACT,
      REV_SUB: enums.BLEND_FUNC_REVERSE_SUBTRACT,
      ZERO: enums.BLEND_ZERO,
      ONE: enums.BLEND_ONE,
      SRC_COLOR: enums.BLEND_SRC_COLOR,
      ONE_MINUS_SRC_COLOR: enums.BLEND_ONE_MINUS_SRC_COLOR,
      DST_COLOR: enums.BLEND_DST_COLOR,
      ONE_MINUS_DST_COLOR: enums.BLEND_ONE_MINUS_DST_COLOR,
      SRC_ALPHA: enums.BLEND_SRC_ALPHA,
      ONE_MINUS_SRC_ALPHA: enums.BLEND_ONE_MINUS_SRC_ALPHA,
      DST_ALPHA: enums.BLEND_DST_ALPHA,
      ONE_MINUS_DST_ALPHA: enums.BLEND_ONE_MINUS_DST_ALPHA,
      CONSTANT_COLOR: enums.BLEND_CONSTANT_COLOR,
      ONE_MINUS_CONSTANT_COLOR: enums.BLEND_ONE_MINUS_CONSTANT_COLOR,
      CONSTANT_ALPHA: enums.BLEND_CONSTANT_ALPHA,
      ONE_MINUS_CONSTANT_ALPHA: enums.BLEND_ONE_MINUS_CONSTANT_ALPHA,
      SRC_ALPHA_SATURATE: enums.BLEND_SRC_ALPHA_SATURATE,
      NEVER: enums.DS_FUNC_NEVER,
      LESS: enums.DS_FUNC_LESS,
      EQUAL: enums.DS_FUNC_EQUAL,
      LEQUAL: enums.DS_FUNC_LEQUAL,
      GREATER: enums.DS_FUNC_GREATER,
      NOTEQUAL: enums.DS_FUNC_NOTEQUAL,
      GEQUAL: enums.DS_FUNC_GEQUAL,
      ALWAYS: enums.DS_FUNC_ALWAYS,
      KEEP: enums.STENCIL_OP_KEEP,
      REPLACE: enums.STENCIL_OP_REPLACE,
      INCR: enums.STENCIL_OP_INCR,
      INCR_WRAP: enums.STENCIL_OP_INCR_WRAP,
      DECR: enums.STENCIL_OP_DECR,
      DECR_WRAP: enums.STENCIL_OP_DECR_WRAP,
      INVERT: enums.STENCIL_OP_INVERT
    };
    Object.assign(passParams, RenderPassStage);
    var effectStructure = {
      $techniques: [ {
        $passes: [ {
          depthStencilState: {},
          rasterizerState: {},
          blendState: {
            targets: [ {} ]
          },
          properties: {
            any: {
              sampler: {},
              inspector: {}
            }
          }
        } ]
      } ]
    };
    var mappings = {
      murmurhash2_32_gc: murmurhash2_32_gc,
      SamplerInfoIndex: SamplerInfoIndex,
      effectStructure: effectStructure,
      typeMap: typeMap,
      sizeMap: sizeMap,
      formatMap: formatMap,
      passParams: passParams,
      RenderQueue: RenderQueue,
      RenderPriority: RenderPriority,
      GFXGetTypeSize: GFXGetTypeSize,
      UniformBinding: UniformBinding
    };
    module.exports = mappings;
  }), {} ],
  240: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _memop = require("../memop");
    var _enums = _interopRequireDefault(require("../enums"));
    var _valueTypes = require("../../core/value-types");
    var _programLib = _interopRequireDefault(require("./program-lib"));
    var _view = _interopRequireDefault(require("./view"));
    var _gfx = _interopRequireDefault(require("../gfx"));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    var _m4_tmp = new _valueTypes.Mat4();
    var _stageInfos = new _memop.RecyclePool(function() {
      return {
        stage: null,
        items: null
      };
    }, 8);
    var _float2_pool = new _memop.RecyclePool(function() {
      return new Float32Array(2);
    }, 8);
    var _float3_pool = new _memop.RecyclePool(function() {
      return new Float32Array(3);
    }, 8);
    var _float4_pool = new _memop.RecyclePool(function() {
      return new Float32Array(4);
    }, 8);
    var _float9_pool = new _memop.RecyclePool(function() {
      return new Float32Array(9);
    }, 8);
    var _float16_pool = new _memop.RecyclePool(function() {
      return new Float32Array(16);
    }, 8);
    var _float64_pool = new _memop.RecyclePool(function() {
      return new Float32Array(64);
    }, 8);
    var _int2_pool = new _memop.RecyclePool(function() {
      return new Int32Array(2);
    }, 8);
    var _int3_pool = new _memop.RecyclePool(function() {
      return new Int32Array(3);
    }, 8);
    var _int4_pool = new _memop.RecyclePool(function() {
      return new Int32Array(4);
    }, 8);
    var _int64_pool = new _memop.RecyclePool(function() {
      return new Int32Array(64);
    }, 8);
    var Base = (function() {
      function Base(device, opts) {
        var _this$_type2defaultVa;
        this._device = device;
        this._programLib = new _programLib["default"](device);
        this._opts = opts;
        this._type2defaultValue = (_this$_type2defaultVa = {}, _this$_type2defaultVa[_enums["default"].PARAM_INT] = 0, 
        _this$_type2defaultVa[_enums["default"].PARAM_INT2] = new _valueTypes.Vec2(0, 0), 
        _this$_type2defaultVa[_enums["default"].PARAM_INT3] = new _valueTypes.Vec3(0, 0, 0), 
        _this$_type2defaultVa[_enums["default"].PARAM_INT4] = new _valueTypes.Vec4(0, 0, 0, 0), 
        _this$_type2defaultVa[_enums["default"].PARAM_FLOAT] = 0, _this$_type2defaultVa[_enums["default"].PARAM_FLOAT2] = new _valueTypes.Vec2(0, 0), 
        _this$_type2defaultVa[_enums["default"].PARAM_FLOAT3] = new _valueTypes.Vec3(0, 0, 0), 
        _this$_type2defaultVa[_enums["default"].PARAM_FLOAT4] = new _valueTypes.Vec4(0, 0, 0, 0), 
        _this$_type2defaultVa[_enums["default"].PARAM_COLOR4] = new _valueTypes.Color(0, 0, 0, 1), 
        _this$_type2defaultVa[_enums["default"].PARAM_MAT3] = new _valueTypes.Mat3(), _this$_type2defaultVa[_enums["default"].PARAM_MAT4] = new _valueTypes.Mat4(), 
        _this$_type2defaultVa[_enums["default"].PARAM_TEXTURE_2D] = opts.defaultTexture, 
        _this$_type2defaultVa[_enums["default"].PARAM_TEXTURE_CUBE] = opts.defaultTextureCube, 
        _this$_type2defaultVa);
        this._stage2fn = {};
        this._usedTextureUnits = 0;
        this._viewPools = new _memop.RecyclePool(function() {
          return new _view["default"]();
        }, 8);
        this._drawItemsPools = new _memop.RecyclePool(function() {
          return {
            model: null,
            node: null,
            ia: null,
            effect: null,
            defines: null,
            uniforms: null
          };
        }, 100);
        this._stageItemsPools = new _memop.RecyclePool(function() {
          return new _memop.RecyclePool(function() {
            return {
              model: null,
              node: null,
              ia: null,
              effect: null,
              defines: null,
              passes: [],
              sortKey: -1,
              uniforms: null
            };
          }, 100);
        }, 16);
      }
      var _proto = Base.prototype;
      _proto._resetTextuerUnit = function _resetTextuerUnit() {
        this._usedTextureUnits = 0;
      };
      _proto._allocTextureUnit = function _allocTextureUnit() {
        var device = this._device;
        var unit = this._usedTextureUnits;
        unit >= device._caps.maxTextureUnits && console.warn("Trying to use " + unit + " texture units while this GPU supports only " + device._caps.maxTextureUnits);
        this._usedTextureUnits += 1;
        return unit;
      };
      _proto._registerStage = function _registerStage(name, fn) {
        this._stage2fn[name] = fn;
      };
      _proto.clear = function clear() {
        this._programLib.clear();
        this.reset();
      };
      _proto.reset = function reset() {
        this._viewPools.reset();
        this._stageItemsPools.reset();
      };
      _proto._requestView = function _requestView() {
        return this._viewPools.add();
      };
      _proto._render = function _render(view, scene) {
        var device = this._device;
        device.setFrameBuffer(view._framebuffer);
        device.setViewport(view._rect.x, view._rect.y, view._rect.w, view._rect.h);
        var clearOpts = {};
        view._clearFlags & _enums["default"].CLEAR_COLOR && (clearOpts.color = _valueTypes.Vec4.toArray([], view._color));
        view._clearFlags & _enums["default"].CLEAR_DEPTH && (clearOpts.depth = view._depth);
        view._clearFlags & _enums["default"].CLEAR_STENCIL && (clearOpts.stencil = view._stencil);
        device.clear(clearOpts);
        this._drawItemsPools.reset();
        for (var i = 0; i < scene._models.length; ++i) {
          var model = scene._models.data[i];
          if (0 === (model._cullingMask & view._cullingMask)) continue;
          var drawItem = this._drawItemsPools.add();
          model.extractDrawItem(drawItem);
        }
        _stageInfos.reset();
        for (var _i = 0; _i < view._stages.length; ++_i) {
          var stage = view._stages[_i];
          var stageItems = this._stageItemsPools.add();
          stageItems.reset();
          for (var j = 0; j < this._drawItemsPools.length; ++j) {
            var _drawItem = this._drawItemsPools.data[j];
            var passes = _drawItem.effect.stagePasses[stage];
            if (!passes || 0 === passes.length) continue;
            var stageItem = stageItems.add();
            stageItem.passes = passes;
            stageItem.model = _drawItem.model;
            stageItem.node = _drawItem.node;
            stageItem.ia = _drawItem.ia;
            stageItem.effect = _drawItem.effect;
            stageItem.defines = _drawItem.defines;
            stageItem.sortKey = -1;
            stageItem.uniforms = _drawItem.uniforms;
          }
          var stageInfo = _stageInfos.add();
          stageInfo.stage = stage;
          stageInfo.items = stageItems;
        }
        for (var _i2 = 0; _i2 < _stageInfos.length; ++_i2) {
          var info = _stageInfos.data[_i2];
          var fn = this._stage2fn[info.stage];
          fn(view, info.items);
        }
      };
      _proto._setProperty = function _setProperty(prop) {
        var device = this._device;
        var param = prop.value;
        void 0 === param && (param = prop.val);
        void 0 === param && (param = this._type2defaultValue[prop.type]);
        if (void 0 === param) {
          console.warn("Failed to set technique property " + prop.name + ", value not found.");
          return;
        }
        if (prop.type === _enums["default"].PARAM_TEXTURE_2D || prop.type === _enums["default"].PARAM_TEXTURE_CUBE) if (Array.isArray(param)) {
          if (param.length > prop.count) {
            console.error("Failed to set property [" + prop.name + "] : The length of texture array [" + param.length + "] is bigger than [" + prop.count + "].");
            return;
          }
          var slots = _int64_pool.add();
          for (var index = 0; index < param.length; ++index) slots[index] = this._allocTextureUnit();
          device.setTextureArray(prop.name, param, slots);
        } else device.setTexture(prop.name, param, this._allocTextureUnit()); else prop.directly ? device.setUniformDirectly(prop.name, param) : device.setUniform(prop.name, param);
      };
      _proto._draw = function _draw(item) {
        var device = this._device;
        var programLib = this._programLib;
        var node = item.node, ia = item.ia, passes = item.passes, effect = item.effect;
        _float2_pool.reset();
        _float3_pool.reset();
        _float4_pool.reset();
        _float9_pool.reset();
        _float16_pool.reset();
        _float64_pool.reset();
        _int2_pool.reset();
        _int3_pool.reset();
        _int4_pool.reset();
        _int64_pool.reset();
        node.getWorldMatrix(_m4_tmp);
        device.setUniform("cc_matWorld", _valueTypes.Mat4.toArray(_float16_pool.add(), _m4_tmp));
        _valueTypes.Mat4.invert(_m4_tmp, _m4_tmp);
        _valueTypes.Mat4.transpose(_m4_tmp, _m4_tmp);
        device.setUniform("cc_matWorldIT", _valueTypes.Mat4.toArray(_float16_pool.add(), _m4_tmp));
        var defines = this._defines;
        for (var i = 0; i < passes.length; ++i) {
          var pass = passes[i];
          var count = ia.count;
          ia._vertexBuffer && device.setVertexBuffer(0, ia._vertexBuffer);
          ia._indexBuffer && device.setIndexBuffer(ia._indexBuffer);
          device.setPrimitiveType(ia._primitiveType);
          Object.setPrototypeOf(defines, pass._defines);
          var program = programLib.getProgram(pass._programName, defines, effect.name);
          device.setProgram(program);
          var uniforms = program._uniforms;
          var variants = pass._properties;
          for (var j = 0; j < uniforms.length; j++) {
            var prop = variants[uniforms[j].name];
            void 0 !== prop && this._setProperty(prop);
          }
          device.setCullMode(pass._cullMode);
          if (pass._blend) {
            device.enableBlend();
            device.setBlendFuncSep(pass._blendSrc, pass._blendDst, pass._blendSrcAlpha, pass._blendDstAlpha);
            device.setBlendEqSep(pass._blendEq, pass._blendAlphaEq);
            device.setBlendColor32(pass._blendColor);
          }
          if (pass._depthTest) {
            device.enableDepthTest();
            device.setDepthFunc(pass._depthFunc);
          }
          pass._depthWrite && device.enableDepthWrite();
          device.setStencilTest(pass._stencilTest);
          if (pass._stencilTest === _gfx["default"].STENCIL_ENABLE) {
            device.setStencilFuncFront(pass._stencilFuncFront, pass._stencilRefFront, pass._stencilMaskFront);
            device.setStencilOpFront(pass._stencilFailOpFront, pass._stencilZFailOpFront, pass._stencilZPassOpFront, pass._stencilWriteMaskFront);
            device.setStencilFuncBack(pass._stencilFuncBack, pass._stencilRefBack, pass._stencilMaskBack);
            device.setStencilOpBack(pass._stencilFailOpBack, pass._stencilZFailOpBack, pass._stencilZPassOpBack, pass._stencilWriteMaskBack);
          }
          device.draw(ia._start, count);
          this._resetTextuerUnit();
        }
      };
      return Base;
    })();
    exports["default"] = Base;
    module.exports = exports["default"];
  }), {
    "../../core/value-types": 224,
    "../enums": 246,
    "../gfx": 251,
    "../memop": 263,
    "./program-lib": 243,
    "./view": 245
  } ],
  241: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _gfx = _interopRequireDefault(require("../gfx"));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    function _defineProperties(target, props) {
      for (var i = 0; i < props.length; i++) {
        var descriptor = props[i];
        descriptor.enumerable = descriptor.enumerable || false;
        descriptor.configurable = true;
        "value" in descriptor && (descriptor.writable = true);
        Object.defineProperty(target, descriptor.key, descriptor);
      }
    }
    function _createClass(Constructor, protoProps, staticProps) {
      protoProps && _defineProperties(Constructor.prototype, protoProps);
      staticProps && _defineProperties(Constructor, staticProps);
      return Constructor;
    }
    var InputAssembler = (function() {
      function InputAssembler(vb, ib, pt) {
        void 0 === pt && (pt = _gfx["default"].PT_TRIANGLES);
        this._vertexBuffer = vb;
        this._indexBuffer = ib;
        this._primitiveType = pt;
        this._start = 0;
        this._count = -1;
      }
      _createClass(InputAssembler, [ {
        key: "count",
        get: function get() {
          if (-1 !== this._count) return this._count;
          if (this._indexBuffer) return this._indexBuffer.count;
          if (this._vertexBuffer) return this._vertexBuffer.count;
          return 0;
        }
      } ]);
      return InputAssembler;
    })();
    exports["default"] = InputAssembler;
    module.exports = exports["default"];
  }), {
    "../gfx": 251
  } ],
  242: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _gfx = _interopRequireDefault(require("../gfx"));
    var _enums = _interopRequireDefault(require("../enums"));
    var _valueType = _interopRequireDefault(require("../../core/value-types/value-type"));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    var Pass = (function() {
      function Pass(name, detailName, programName, stage, properties, defines) {
        void 0 === properties && (properties = {});
        void 0 === defines && (defines = {});
        this._name = name;
        this._detailName = detailName;
        this._programName = programName;
        this._stage = stage;
        this._properties = properties;
        this._defines = defines;
        this._cullMode = _gfx["default"].CULL_BACK;
        this._blend = false;
        this._blendEq = _gfx["default"].BLEND_FUNC_ADD;
        this._blendAlphaEq = _gfx["default"].BLEND_FUNC_ADD;
        this._blendSrc = _gfx["default"].BLEND_SRC_ALPHA;
        this._blendDst = _gfx["default"].BLEND_ONE_MINUS_SRC_ALPHA;
        this._blendSrcAlpha = _gfx["default"].BLEND_SRC_ALPHA;
        this._blendDstAlpha = _gfx["default"].BLEND_ONE_MINUS_SRC_ALPHA;
        this._blendColor = 4294967295;
        this._depthTest = false;
        this._depthWrite = false;
        this._depthFunc = _gfx["default"].DS_FUNC_LESS, this._stencilTest = _gfx["default"].STENCIL_INHERIT;
        this._stencilFuncFront = _gfx["default"].DS_FUNC_ALWAYS;
        this._stencilRefFront = 0;
        this._stencilMaskFront = 255;
        this._stencilFailOpFront = _gfx["default"].STENCIL_OP_KEEP;
        this._stencilZFailOpFront = _gfx["default"].STENCIL_OP_KEEP;
        this._stencilZPassOpFront = _gfx["default"].STENCIL_OP_KEEP;
        this._stencilWriteMaskFront = 255;
        this._stencilFuncBack = _gfx["default"].DS_FUNC_ALWAYS;
        this._stencilRefBack = 0;
        this._stencilMaskBack = 255;
        this._stencilFailOpBack = _gfx["default"].STENCIL_OP_KEEP;
        this._stencilZFailOpBack = _gfx["default"].STENCIL_OP_KEEP;
        this._stencilZPassOpBack = _gfx["default"].STENCIL_OP_KEEP;
        this._stencilWriteMaskBack = 255;
      }
      var _proto = Pass.prototype;
      _proto.setCullMode = function setCullMode(cullMode) {
        void 0 === cullMode && (cullMode = _gfx["default"].CULL_BACK);
        this._cullMode = cullMode;
      };
      _proto.setBlend = function setBlend(enabled, blendEq, blendSrc, blendDst, blendAlphaEq, blendSrcAlpha, blendDstAlpha, blendColor) {
        void 0 === enabled && (enabled = false);
        void 0 === blendEq && (blendEq = _gfx["default"].BLEND_FUNC_ADD);
        void 0 === blendSrc && (blendSrc = _gfx["default"].BLEND_SRC_ALPHA);
        void 0 === blendDst && (blendDst = _gfx["default"].BLEND_ONE_MINUS_SRC_ALPHA);
        void 0 === blendAlphaEq && (blendAlphaEq = _gfx["default"].BLEND_FUNC_ADD);
        void 0 === blendSrcAlpha && (blendSrcAlpha = _gfx["default"].BLEND_SRC_ALPHA);
        void 0 === blendDstAlpha && (blendDstAlpha = _gfx["default"].BLEND_ONE_MINUS_SRC_ALPHA);
        void 0 === blendColor && (blendColor = 4294967295);
        this._blend = enabled;
        this._blendEq = blendEq;
        this._blendSrc = blendSrc;
        this._blendDst = blendDst;
        this._blendAlphaEq = blendAlphaEq;
        this._blendSrcAlpha = blendSrcAlpha;
        this._blendDstAlpha = blendDstAlpha;
        this._blendColor = blendColor;
      };
      _proto.setDepth = function setDepth(depthTest, depthWrite, depthFunc) {
        void 0 === depthTest && (depthTest = false);
        void 0 === depthWrite && (depthWrite = false);
        void 0 === depthFunc && (depthFunc = _gfx["default"].DS_FUNC_LESS);
        this._depthTest = depthTest;
        this._depthWrite = depthWrite;
        this._depthFunc = depthFunc;
      };
      _proto.setStencilFront = function setStencilFront(enabled, stencilFunc, stencilRef, stencilMask, stencilFailOp, stencilZFailOp, stencilZPassOp, stencilWriteMask) {
        void 0 === enabled && (enabled = _gfx["default"].STENCIL_INHERIT);
        void 0 === stencilFunc && (stencilFunc = _gfx["default"].DS_FUNC_ALWAYS);
        void 0 === stencilRef && (stencilRef = 0);
        void 0 === stencilMask && (stencilMask = 255);
        void 0 === stencilFailOp && (stencilFailOp = _gfx["default"].STENCIL_OP_KEEP);
        void 0 === stencilZFailOp && (stencilZFailOp = _gfx["default"].STENCIL_OP_KEEP);
        void 0 === stencilZPassOp && (stencilZPassOp = _gfx["default"].STENCIL_OP_KEEP);
        void 0 === stencilWriteMask && (stencilWriteMask = 255);
        this._stencilTest = enabled;
        this._stencilFuncFront = stencilFunc;
        this._stencilRefFront = stencilRef;
        this._stencilMaskFront = stencilMask;
        this._stencilFailOpFront = stencilFailOp;
        this._stencilZFailOpFront = stencilZFailOp;
        this._stencilZPassOpFront = stencilZPassOp;
        this._stencilWriteMaskFront = stencilWriteMask;
      };
      _proto.setStencilEnabled = function setStencilEnabled(stencilTest) {
        void 0 === stencilTest && (stencilTest = _gfx["default"].STENCIL_INHERIT);
        this._stencilTest = stencilTest;
      };
      _proto.setStencilBack = function setStencilBack(stencilTest, stencilFunc, stencilRef, stencilMask, stencilFailOp, stencilZFailOp, stencilZPassOp, stencilWriteMask) {
        void 0 === stencilTest && (stencilTest = _gfx["default"].STENCIL_INHERIT);
        void 0 === stencilFunc && (stencilFunc = _gfx["default"].DS_FUNC_ALWAYS);
        void 0 === stencilRef && (stencilRef = 0);
        void 0 === stencilMask && (stencilMask = 255);
        void 0 === stencilFailOp && (stencilFailOp = _gfx["default"].STENCIL_OP_KEEP);
        void 0 === stencilZFailOp && (stencilZFailOp = _gfx["default"].STENCIL_OP_KEEP);
        void 0 === stencilZPassOp && (stencilZPassOp = _gfx["default"].STENCIL_OP_KEEP);
        void 0 === stencilWriteMask && (stencilWriteMask = 255);
        this._stencilTest = stencilTest;
        this._stencilFuncBack = stencilFunc;
        this._stencilRefBack = stencilRef;
        this._stencilMaskBack = stencilMask;
        this._stencilFailOpBack = stencilFailOp;
        this._stencilZFailOpBack = stencilZFailOp;
        this._stencilZPassOpBack = stencilZPassOp;
        this._stencilWriteMaskBack = stencilWriteMask;
      };
      _proto.setStage = function setStage(stage) {
        this._stage = stage;
      };
      _proto.setProperties = function setProperties(properties) {
        this._properties = properties;
      };
      _proto.getProperty = function getProperty(name) {
        if (!this._properties[name]) return;
        return this._properties[name].value;
      };
      _proto.setProperty = function setProperty(name, value, directly) {
        var prop = this._properties[name];
        if (!prop) return false;
        prop.directly = directly;
        if (Array.isArray(value)) {
          var array = prop.value;
          if (array.length !== value.length) {
            cc.warnID(9105, this._name, name);
            return;
          }
          for (var i = 0; i < value.length; i++) array[i] = value[i];
        } else if (value && !ArrayBuffer.isView(value)) if (prop.type === _enums["default"].PARAM_TEXTURE_2D) prop.value = value.getImpl(); else if (value instanceof _valueType["default"]) value.constructor.toArray(prop.value, value); else {
          "object" === typeof value && cc.warnID(9106, this._name, name);
          prop.value = value;
        } else prop.value = value;
        return true;
      };
      _proto.getDefine = function getDefine(name) {
        return this._defines[name];
      };
      _proto.define = function define(name, value, force) {
        if (!force) {
          var def = this._defines[name];
          if (void 0 === def) return false;
        }
        this._defines[name] = value;
        return true;
      };
      _proto.clone = function clone() {
        var pass = new Pass(this._programName);
        Object.assign(pass, this);
        var newProperties = {};
        var properties = this._properties;
        for (var name in properties) {
          var prop = properties[name];
          var newProp = newProperties[name] = {};
          var value = prop.value;
          Array.isArray(value) ? newProp.value = value.concat() : ArrayBuffer.isView(value) ? newProp.value = new value.__proto__.constructor(value) : newProp.value = value;
          for (var _name in prop) {
            if ("value" === _name) continue;
            newProp[_name] = prop[_name];
          }
        }
        pass._properties = newProperties;
        pass._defines = Object.assign({}, this._defines);
        return pass;
      };
      return Pass;
    })();
    exports["default"] = Pass;
    module.exports = exports["default"];
  }), {
    "../../core/value-types/value-type": 232,
    "../enums": 246,
    "../gfx": 251
  } ],
  243: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _gfx = _interopRequireDefault(require("../gfx"));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    var _shdID = 0;
    function _generateDefines(tmpDefines, defines) {
      var results = [];
      for (var i = 0; i < tmpDefines.length; i++) {
        var name = tmpDefines[i].name;
        var value = defines[name];
        "number" !== typeof value && (value = value ? 1 : 0);
        results.push("#define " + name + " " + value);
      }
      return results.join("\n") + "\n";
    }
    function _replaceMacroNums(string, tmpDefines, defines) {
      var tmp = string;
      for (var i = 0; i < tmpDefines.length; i++) {
        var name = tmpDefines[i].name;
        var value = defines[name];
        if (Number.isInteger(value)) {
          var reg = new RegExp(name, "g");
          tmp = tmp.replace(reg, value);
        }
      }
      return tmp;
    }
    function _unrollLoops(string) {
      var pattern = /#pragma for (\w+) in range\(\s*(\d+)\s*,\s*(\d+)\s*\)([\s\S]+?)#pragma endFor/g;
      function replace(match, index, begin, end, snippet) {
        var unroll = "";
        var parsedBegin = parseInt(begin);
        var parsedEnd = parseInt(end);
        (parsedBegin.isNaN || parsedEnd.isNaN) && console.error("Unroll For Loops Error: begin and end of range must be an int num.");
        for (var i = parsedBegin; i < parsedEnd; ++i) unroll += snippet.replace(new RegExp("{" + index + "}", "g"), i);
        return unroll;
      }
      return string.replace(pattern, replace);
    }
    function _replaceHighp(string) {
      return string.replace(/\bhighp\b/g, "mediump");
    }
    var ProgramLib = (function() {
      function ProgramLib(device) {
        this._device = device;
        this._templates = {};
        this._cache = {};
        this._checkPrecision();
      }
      var _proto = ProgramLib.prototype;
      _proto.clear = function clear() {
        this._templates = {};
        this._cache = {};
      };
      _proto.define = function define(prog) {
        var name = prog.name, defines = prog.defines, glsl1 = prog.glsl1;
        var _ref = glsl1 || prog, vert = _ref.vert, frag = _ref.frag;
        if (this._templates[name]) return;
        var id = ++_shdID;
        var offset = 0;
        for (var i = 0; i < defines.length; ++i) {
          var def = defines[i];
          var cnt = 1;
          if ("number" === def.type) {
            var range = def.range || [];
            def.min = range[0] || 0;
            def.max = range[1] || 4;
            cnt = Math.ceil(Math.log2(def.max - def.min));
            def._map = function(value) {
              return value - this.min << this._offset;
            }.bind(def);
          } else def._map = function(value) {
            if (value) return 1 << this._offset;
            return 0;
          }.bind(def);
          def._offset = offset;
          offset += cnt;
        }
        var uniforms = prog.uniforms || [];
        if (prog.samplers) for (var _i = 0; _i < prog.samplers.length; _i++) uniforms.push(prog.samplers[_i]);
        if (prog.blocks) for (var _i2 = 0; _i2 < prog.blocks.length; _i2++) {
          var _defines = prog.blocks[_i2].defines;
          var members = prog.blocks[_i2].members;
          for (var j = 0; j < members.length; j++) uniforms.push({
            defines: _defines,
            name: members[j].name,
            type: members[j].type
          });
        }
        this._templates[name] = {
          id: id,
          name: name,
          vert: vert,
          frag: frag,
          defines: defines,
          attributes: prog.attributes,
          uniforms: uniforms,
          extensions: prog.extensions
        };
      };
      _proto.getTemplate = function getTemplate(name) {
        return this._templates[name];
      };
      _proto.hasProgram = function hasProgram(name) {
        return void 0 !== this._templates[name];
      };
      _proto.getKey = function getKey(name, defines) {
        var tmpl = this._templates[name];
        var key = 0;
        for (var i = 0; i < tmpl.defines.length; ++i) {
          var tmplDefs = tmpl.defines[i];
          var value = defines[tmplDefs.name];
          if (void 0 === value) continue;
          key |= tmplDefs._map(value);
        }
        return tmpl.id + ":" + key;
      };
      _proto.getProgram = function getProgram(name, defines, errPrefix) {
        var key = this.getKey(name, defines);
        var program = this._cache[key];
        if (program) return program;
        var tmpl = this._templates[name];
        var customDef = _generateDefines(tmpl.defines, defines);
        var vert = _replaceMacroNums(tmpl.vert, tmpl.defines, defines);
        vert = customDef + _unrollLoops(vert);
        this._highpSupported || (vert = _replaceHighp(vert));
        var frag = _replaceMacroNums(tmpl.frag, tmpl.defines, defines);
        frag = customDef + _unrollLoops(frag);
        this._highpSupported || (frag = _replaceHighp(frag));
        program = new _gfx["default"].Program(this._device, {
          vert: vert,
          frag: frag
        });
        var errors = program.link();
        if (errors) {
          var vertLines = vert.split("\n");
          var fragLines = frag.split("\n");
          var defineLength = tmpl.defines.length;
          errors.forEach((function(err) {
            var line = err.line - 1;
            var originLine = err.line - defineLength;
            var lines = "vs" === err.type ? vertLines : fragLines;
            var source = lines[line];
            var info = err.info || "Failed to compile " + err.type + " " + err.fileID + " (ln " + originLine + "): \n " + err.message + ": \n  " + source;
            cc.error(errPrefix + " : " + info);
          }));
        }
        this._cache[key] = program;
        return program;
      };
      _proto._checkPrecision = function _checkPrecision() {
        var gl = this._device._gl;
        var highpSupported = false;
        if (gl.getShaderPrecisionFormat) {
          var vertHighp = gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.HIGH_FLOAT);
          var fragHighp = gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.HIGH_FLOAT);
          highpSupported = vertHighp && vertHighp.precision > 0 && fragHighp && fragHighp.precision > 0;
        }
        highpSupported || cc.warnID(9102);
        this._highpSupported = highpSupported;
      };
      return ProgramLib;
    })();
    exports["default"] = ProgramLib;
    module.exports = exports["default"];
  }), {
    "../gfx": 251
  } ],
  244: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    function _defineProperties(target, props) {
      for (var i = 0; i < props.length; i++) {
        var descriptor = props[i];
        descriptor.enumerable = descriptor.enumerable || false;
        descriptor.configurable = true;
        "value" in descriptor && (descriptor.writable = true);
        Object.defineProperty(target, descriptor.key, descriptor);
      }
    }
    function _createClass(Constructor, protoProps, staticProps) {
      protoProps && _defineProperties(Constructor.prototype, protoProps);
      staticProps && _defineProperties(Constructor, staticProps);
      return Constructor;
    }
    var Technique = (function() {
      function Technique(name, passes) {
        this._name = name;
        this._passes = passes;
      }
      var _proto = Technique.prototype;
      _proto.clone = function clone() {
        var passes = [];
        for (var i = 0; i < this._passes.length; i++) passes.push(this._passes[i].clone());
        return new Technique(this._name, passes);
      };
      _createClass(Technique, [ {
        key: "name",
        get: function get() {
          return this._name;
        }
      }, {
        key: "passes",
        get: function get() {
          return this._passes;
        }
      } ]);
      return Technique;
    })();
    exports["default"] = Technique;
    module.exports = exports["default"];
  }), {} ],
  245: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _valueTypes = require("../../core/value-types");
    var _enums = _interopRequireDefault(require("../enums"));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    var _m4_tmp = new _valueTypes.Mat4();
    var _genID = 0;
    var View = (function() {
      function View() {
        this._id = _genID++;
        this._priority = 0;
        this._rect = {
          x: 0,
          y: 0,
          w: 1,
          h: 1
        };
        this._color = new _valueTypes.Vec4(.3, .3, .3, 1);
        this._depth = 1;
        this._stencil = 0;
        this._clearFlags = _enums["default"].CLEAR_COLOR | _enums["default"].CLEAR_DEPTH;
        this._clearModel = null;
        this._matView = cc.mat4();
        this._matViewInv = cc.mat4();
        this._matProj = cc.mat4();
        this._matViewProj = cc.mat4();
        this._matInvViewProj = cc.mat4();
        this._stages = [];
        this._cullingByID = false;
        this._framebuffer = null;
        this._shadowLight = null;
        this._cullingMask = 4294967295;
      }
      var _proto = View.prototype;
      _proto.getForward = function getForward(out) {
        var m = this._matView.m;
        return _valueTypes.Vec3.set(out, -m[2], -m[6], -m[10]);
      };
      _proto.getPosition = function getPosition(out) {
        _valueTypes.Mat4.invert(_m4_tmp, this._matView);
        return _valueTypes.Mat4.getTranslation(out, _m4_tmp);
      };
      return View;
    })();
    exports["default"] = View;
    module.exports = exports["default"];
  }), {
    "../../core/value-types": 224,
    "../enums": 246
  } ],
  246: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _mappings = require("./build/mappings");
    var _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: _mappings.typeMap["int"],
      PARAM_INT2: _mappings.typeMap.ivec2,
      PARAM_INT3: _mappings.typeMap.ivec3,
      PARAM_INT4: _mappings.typeMap.ivec4,
      PARAM_FLOAT: _mappings.typeMap["float"],
      PARAM_FLOAT2: _mappings.typeMap.vec2,
      PARAM_FLOAT3: _mappings.typeMap.vec3,
      PARAM_FLOAT4: _mappings.typeMap.vec4,
      PARAM_MAT2: _mappings.typeMap.mat2,
      PARAM_MAT3: _mappings.typeMap.mat3,
      PARAM_MAT4: _mappings.typeMap.mat4,
      PARAM_TEXTURE_2D: _mappings.typeMap.sampler2D,
      PARAM_TEXTURE_CUBE: _mappings.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
    };
    exports["default"] = _default;
    module.exports = exports["default"];
  }), {
    "./build/mappings": 239
  } ],
  247: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _state = _interopRequireDefault(require("./state"));
    var _enums = require("./enums");
    var _texture2d = _interopRequireDefault(require("./texture-2d"));
    var _textureCube = _interopRequireDefault(require("./texture-cube"));
    var _type2uniformCommit2, _type2uniformArrayCom;
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    function _defineProperties(target, props) {
      for (var i = 0; i < props.length; i++) {
        var descriptor = props[i];
        descriptor.enumerable = descriptor.enumerable || false;
        descriptor.configurable = true;
        "value" in descriptor && (descriptor.writable = true);
        Object.defineProperty(target, descriptor.key, descriptor);
      }
    }
    function _createClass(Constructor, protoProps, staticProps) {
      protoProps && _defineProperties(Constructor.prototype, protoProps);
      staticProps && _defineProperties(Constructor, staticProps);
      return Constructor;
    }
    var GL_INT = 5124;
    var GL_FLOAT = 5126;
    var GL_FLOAT_VEC2 = 35664;
    var GL_FLOAT_VEC3 = 35665;
    var GL_FLOAT_VEC4 = 35666;
    var GL_INT_VEC2 = 35667;
    var GL_INT_VEC3 = 35668;
    var GL_INT_VEC4 = 35669;
    var GL_BOOL = 35670;
    var GL_BOOL_VEC2 = 35671;
    var GL_BOOL_VEC3 = 35672;
    var GL_BOOL_VEC4 = 35673;
    var GL_FLOAT_MAT2 = 35674;
    var GL_FLOAT_MAT3 = 35675;
    var GL_FLOAT_MAT4 = 35676;
    var GL_SAMPLER_2D = 35678;
    var GL_SAMPLER_CUBE = 35680;
    var _type2uniformCommit = (_type2uniformCommit2 = {}, _type2uniformCommit2[GL_INT] = function(gl, id, value) {
      gl.uniform1i(id, value);
    }, _type2uniformCommit2[GL_FLOAT] = function(gl, id, value) {
      gl.uniform1f(id, value);
    }, _type2uniformCommit2[GL_FLOAT_VEC2] = function(gl, id, value) {
      gl.uniform2fv(id, value);
    }, _type2uniformCommit2[GL_FLOAT_VEC3] = function(gl, id, value) {
      gl.uniform3fv(id, value);
    }, _type2uniformCommit2[GL_FLOAT_VEC4] = function(gl, id, value) {
      gl.uniform4fv(id, value);
    }, _type2uniformCommit2[GL_INT_VEC2] = function(gl, id, value) {
      gl.uniform2iv(id, value);
    }, _type2uniformCommit2[GL_INT_VEC3] = function(gl, id, value) {
      gl.uniform3iv(id, value);
    }, _type2uniformCommit2[GL_INT_VEC4] = function(gl, id, value) {
      gl.uniform4iv(id, value);
    }, _type2uniformCommit2[GL_BOOL] = function(gl, id, value) {
      gl.uniform1i(id, value);
    }, _type2uniformCommit2[GL_BOOL_VEC2] = function(gl, id, value) {
      gl.uniform2iv(id, value);
    }, _type2uniformCommit2[GL_BOOL_VEC3] = function(gl, id, value) {
      gl.uniform3iv(id, value);
    }, _type2uniformCommit2[GL_BOOL_VEC4] = function(gl, id, value) {
      gl.uniform4iv(id, value);
    }, _type2uniformCommit2[GL_FLOAT_MAT2] = function(gl, id, value) {
      gl.uniformMatrix2fv(id, false, value);
    }, _type2uniformCommit2[GL_FLOAT_MAT3] = function(gl, id, value) {
      gl.uniformMatrix3fv(id, false, value);
    }, _type2uniformCommit2[GL_FLOAT_MAT4] = function(gl, id, value) {
      gl.uniformMatrix4fv(id, false, value);
    }, _type2uniformCommit2[GL_SAMPLER_2D] = function(gl, id, value) {
      gl.uniform1i(id, value);
    }, _type2uniformCommit2[GL_SAMPLER_CUBE] = function(gl, id, value) {
      gl.uniform1i(id, value);
    }, _type2uniformCommit2);
    var _type2uniformArrayCommit = (_type2uniformArrayCom = {}, _type2uniformArrayCom[GL_INT] = function(gl, id, value) {
      gl.uniform1iv(id, value);
    }, _type2uniformArrayCom[GL_FLOAT] = function(gl, id, value) {
      gl.uniform1fv(id, value);
    }, _type2uniformArrayCom[GL_FLOAT_VEC2] = function(gl, id, value) {
      gl.uniform2fv(id, value);
    }, _type2uniformArrayCom[GL_FLOAT_VEC3] = function(gl, id, value) {
      gl.uniform3fv(id, value);
    }, _type2uniformArrayCom[GL_FLOAT_VEC4] = function(gl, id, value) {
      gl.uniform4fv(id, value);
    }, _type2uniformArrayCom[GL_INT_VEC2] = function(gl, id, value) {
      gl.uniform2iv(id, value);
    }, _type2uniformArrayCom[GL_INT_VEC3] = function(gl, id, value) {
      gl.uniform3iv(id, value);
    }, _type2uniformArrayCom[GL_INT_VEC4] = function(gl, id, value) {
      gl.uniform4iv(id, value);
    }, _type2uniformArrayCom[GL_BOOL] = function(gl, id, value) {
      gl.uniform1iv(id, value);
    }, _type2uniformArrayCom[GL_BOOL_VEC2] = function(gl, id, value) {
      gl.uniform2iv(id, value);
    }, _type2uniformArrayCom[GL_BOOL_VEC3] = function(gl, id, value) {
      gl.uniform3iv(id, value);
    }, _type2uniformArrayCom[GL_BOOL_VEC4] = function(gl, id, value) {
      gl.uniform4iv(id, value);
    }, _type2uniformArrayCom[GL_FLOAT_MAT2] = function(gl, id, value) {
      gl.uniformMatrix2fv(id, false, value);
    }, _type2uniformArrayCom[GL_FLOAT_MAT3] = function(gl, id, value) {
      gl.uniformMatrix3fv(id, false, value);
    }, _type2uniformArrayCom[GL_FLOAT_MAT4] = function(gl, id, value) {
      gl.uniformMatrix4fv(id, false, value);
    }, _type2uniformArrayCom[GL_SAMPLER_2D] = function(gl, id, value) {
      gl.uniform1iv(id, value);
    }, _type2uniformArrayCom[GL_SAMPLER_CUBE] = function(gl, id, value) {
      gl.uniform1iv(id, value);
    }, _type2uniformArrayCom);
    function _commitBlendStates(gl, cur, next) {
      if (cur.blend !== next.blend) {
        if (!next.blend) {
          gl.disable(gl.BLEND);
          return;
        }
        gl.enable(gl.BLEND);
        next.blendSrc !== _enums.enums.BLEND_CONSTANT_COLOR && next.blendSrc !== _enums.enums.BLEND_ONE_MINUS_CONSTANT_COLOR && next.blendDst !== _enums.enums.BLEND_CONSTANT_COLOR && next.blendDst !== _enums.enums.BLEND_ONE_MINUS_CONSTANT_COLOR || gl.blendColor((next.blendColor >> 24) / 255, (next.blendColor >> 16 & 255) / 255, (next.blendColor >> 8 & 255) / 255, (255 & next.blendColor) / 255);
        if (next.blendSep) {
          gl.blendFuncSeparate(next.blendSrc, next.blendDst, next.blendSrcAlpha, next.blendDstAlpha);
          gl.blendEquationSeparate(next.blendEq, next.blendAlphaEq);
        } else {
          gl.blendFunc(next.blendSrc, next.blendDst);
          gl.blendEquation(next.blendEq);
        }
        return;
      }
      if (false === next.blend) return;
      cur.blendColor !== next.blendColor && gl.blendColor((next.blendColor >> 24) / 255, (next.blendColor >> 16 & 255) / 255, (next.blendColor >> 8 & 255) / 255, (255 & next.blendColor) / 255);
      if (cur.blendSep !== next.blendSep) {
        if (next.blendSep) {
          gl.blendFuncSeparate(next.blendSrc, next.blendDst, next.blendSrcAlpha, next.blendDstAlpha);
          gl.blendEquationSeparate(next.blendEq, next.blendAlphaEq);
        } else {
          gl.blendFunc(next.blendSrc, next.blendDst);
          gl.blendEquation(next.blendEq);
        }
        return;
      }
      if (next.blendSep) {
        cur.blendSrc === next.blendSrc && cur.blendDst === next.blendDst && cur.blendSrcAlpha === next.blendSrcAlpha && cur.blendDstAlpha === next.blendDstAlpha || gl.blendFuncSeparate(next.blendSrc, next.blendDst, next.blendSrcAlpha, next.blendDstAlpha);
        cur.blendEq === next.blendEq && cur.blendAlphaEq === next.blendAlphaEq || gl.blendEquationSeparate(next.blendEq, next.blendAlphaEq);
      } else {
        cur.blendSrc === next.blendSrc && cur.blendDst === next.blendDst || gl.blendFunc(next.blendSrc, next.blendDst);
        cur.blendEq !== next.blendEq && gl.blendEquation(next.blendEq);
      }
    }
    function _commitDepthStates(gl, cur, next) {
      if (cur.depthTest !== next.depthTest) {
        if (!next.depthTest) {
          gl.disable(gl.DEPTH_TEST);
          return;
        }
        gl.enable(gl.DEPTH_TEST);
        gl.depthFunc(next.depthFunc);
        gl.depthMask(next.depthWrite);
        return;
      }
      cur.depthWrite !== next.depthWrite && gl.depthMask(next.depthWrite);
      if (false === next.depthTest) {
        if (next.depthWrite) {
          next.depthTest = true;
          next.depthFunc = _enums.enums.DS_FUNC_ALWAYS;
          gl.enable(gl.DEPTH_TEST);
          gl.depthFunc(next.depthFunc);
        }
        return;
      }
      cur.depthFunc !== next.depthFunc && gl.depthFunc(next.depthFunc);
    }
    function _commitStencilStates(gl, cur, next) {
      if (next.stencilTest === _enums.enums.STENCIL_INHERIT) return;
      if (next.stencilTest !== cur.stencilTest) {
        if (next.stencilTest === _enums.enums.STENCIL_DISABLE) {
          gl.disable(gl.STENCIL_TEST);
          return;
        }
        gl.enable(gl.STENCIL_TEST);
        if (next.stencilSep) {
          gl.stencilFuncSeparate(gl.FRONT, next.stencilFuncFront, next.stencilRefFront, next.stencilMaskFront);
          gl.stencilMaskSeparate(gl.FRONT, next.stencilWriteMaskFront);
          gl.stencilOpSeparate(gl.FRONT, next.stencilFailOpFront, next.stencilZFailOpFront, next.stencilZPassOpFront);
          gl.stencilFuncSeparate(gl.BACK, next.stencilFuncBack, next.stencilRefBack, next.stencilMaskBack);
          gl.stencilMaskSeparate(gl.BACK, next.stencilWriteMaskBack);
          gl.stencilOpSeparate(gl.BACK, next.stencilFailOpBack, next.stencilZFailOpBack, next.stencilZPassOpBack);
        } else {
          gl.stencilFunc(next.stencilFuncFront, next.stencilRefFront, next.stencilMaskFront);
          gl.stencilMask(next.stencilWriteMaskFront);
          gl.stencilOp(next.stencilFailOpFront, next.stencilZFailOpFront, next.stencilZPassOpFront);
        }
        return;
      }
      if (next.stencilTest === _enums.enums.STENCIL_DISABLE) return;
      if (cur.stencilSep !== next.stencilSep) {
        if (next.stencilSep) {
          gl.stencilFuncSeparate(gl.FRONT, next.stencilFuncFront, next.stencilRefFront, next.stencilMaskFront);
          gl.stencilMaskSeparate(gl.FRONT, next.stencilWriteMaskFront);
          gl.stencilOpSeparate(gl.FRONT, next.stencilFailOpFront, next.stencilZFailOpFront, next.stencilZPassOpFront);
          gl.stencilFuncSeparate(gl.BACK, next.stencilFuncBack, next.stencilRefBack, next.stencilMaskBack);
          gl.stencilMaskSeparate(gl.BACK, next.stencilWriteMaskBack);
          gl.stencilOpSeparate(gl.BACK, next.stencilFailOpBack, next.stencilZFailOpBack, next.stencilZPassOpBack);
        } else {
          gl.stencilFunc(next.stencilFuncFront, next.stencilRefFront, next.stencilMaskFront);
          gl.stencilMask(next.stencilWriteMaskFront);
          gl.stencilOp(next.stencilFailOpFront, next.stencilZFailOpFront, next.stencilZPassOpFront);
        }
        return;
      }
      if (next.stencilSep) {
        cur.stencilFuncFront === next.stencilFuncFront && cur.stencilRefFront === next.stencilRefFront && cur.stencilMaskFront === next.stencilMaskFront || gl.stencilFuncSeparate(gl.FRONT, next.stencilFuncFront, next.stencilRefFront, next.stencilMaskFront);
        cur.stencilWriteMaskFront !== next.stencilWriteMaskFront && gl.stencilMaskSeparate(gl.FRONT, next.stencilWriteMaskFront);
        cur.stencilFailOpFront === next.stencilFailOpFront && cur.stencilZFailOpFront === next.stencilZFailOpFront && cur.stencilZPassOpFront === next.stencilZPassOpFront || gl.stencilOpSeparate(gl.FRONT, next.stencilFailOpFront, next.stencilZFailOpFront, next.stencilZPassOpFront);
        cur.stencilFuncBack === next.stencilFuncBack && cur.stencilRefBack === next.stencilRefBack && cur.stencilMaskBack === next.stencilMaskBack || gl.stencilFuncSeparate(gl.BACK, next.stencilFuncBack, next.stencilRefBack, next.stencilMaskBack);
        cur.stencilWriteMaskBack !== next.stencilWriteMaskBack && gl.stencilMaskSeparate(gl.BACK, next.stencilWriteMaskBack);
        cur.stencilFailOpBack === next.stencilFailOpBack && cur.stencilZFailOpBack === next.stencilZFailOpBack && cur.stencilZPassOpBack === next.stencilZPassOpBack || gl.stencilOpSeparate(gl.BACK, next.stencilFailOpBack, next.stencilZFailOpBack, next.stencilZPassOpBack);
      } else {
        cur.stencilFuncFront === next.stencilFuncFront && cur.stencilRefFront === next.stencilRefFront && cur.stencilMaskFront === next.stencilMaskFront || gl.stencilFunc(next.stencilFuncFront, next.stencilRefFront, next.stencilMaskFront);
        cur.stencilWriteMaskFront !== next.stencilWriteMaskFront && gl.stencilMask(next.stencilWriteMaskFront);
        cur.stencilFailOpFront === next.stencilFailOpFront && cur.stencilZFailOpFront === next.stencilZFailOpFront && cur.stencilZPassOpFront === next.stencilZPassOpFront || gl.stencilOp(next.stencilFailOpFront, next.stencilZFailOpFront, next.stencilZPassOpFront);
      }
    }
    function _commitCullMode(gl, cur, next) {
      if (cur.cullMode === next.cullMode) return;
      if (next.cullMode === _enums.enums.CULL_NONE) {
        gl.disable(gl.CULL_FACE);
        return;
      }
      gl.enable(gl.CULL_FACE);
      gl.cullFace(next.cullMode);
    }
    function _commitVertexBuffers(device, gl, cur, next) {
      var attrsDirty = false;
      if (-1 === next.maxStream) return;
      if (cur.maxStream !== next.maxStream) attrsDirty = true; else if (cur.program !== next.program) attrsDirty = true; else for (var i = 0; i < next.maxStream + 1; ++i) if (cur.vertexBuffers[i] !== next.vertexBuffers[i] || cur.vertexBufferOffsets[i] !== next.vertexBufferOffsets[i]) {
        attrsDirty = true;
        break;
      }
      if (attrsDirty) {
        for (var _i = 0; _i < device._caps.maxVertexAttribs; ++_i) device._newAttributes[_i] = 0;
        for (var _i2 = 0; _i2 < next.maxStream + 1; ++_i2) {
          var vb = next.vertexBuffers[_i2];
          var vbOffset = next.vertexBufferOffsets[_i2];
          if (!vb || -1 === vb._glID) continue;
          gl.bindBuffer(gl.ARRAY_BUFFER, vb._glID);
          for (var j = 0; j < next.program._attributes.length; ++j) {
            var attr = next.program._attributes[j];
            var el = vb._format.element(attr.name);
            if (!el) {
              console.warn("Can not find vertex attribute: " + attr.name);
              continue;
            }
            if (0 === device._enabledAttributes[attr.location]) {
              gl.enableVertexAttribArray(attr.location);
              device._enabledAttributes[attr.location] = 1;
            }
            device._newAttributes[attr.location] = 1;
            gl.vertexAttribPointer(attr.location, el.num, el.type, el.normalize, el.stride, el.offset + vbOffset * el.stride);
          }
        }
        for (var _i3 = 0; _i3 < device._caps.maxVertexAttribs; ++_i3) if (device._enabledAttributes[_i3] !== device._newAttributes[_i3]) {
          gl.disableVertexAttribArray(_i3);
          device._enabledAttributes[_i3] = 0;
        }
      }
    }
    function _commitTextures(gl, cur, next) {
      for (var i = 0; i < next.maxTextureSlot + 1; ++i) if (cur.textureUnits[i] !== next.textureUnits[i]) {
        var texture = next.textureUnits[i];
        if (texture && -1 !== texture._glID) {
          gl.activeTexture(gl.TEXTURE0 + i);
          gl.bindTexture(texture._target, texture._glID);
        }
      }
    }
    function _attach(gl, location, attachment, face) {
      void 0 === face && (face = 0);
      attachment instanceof _texture2d["default"] ? gl.framebufferTexture2D(gl.FRAMEBUFFER, location, gl.TEXTURE_2D, attachment._glID, 0) : attachment instanceof _textureCube["default"] ? gl.framebufferTexture2D(gl.FRAMEBUFFER, location, gl.TEXTURE_CUBE_MAP_POSITIVE_X + face, attachment._glID, 0) : gl.framebufferRenderbuffer(gl.FRAMEBUFFER, location, gl.RENDERBUFFER, attachment._glID);
    }
    var Device = (function() {
      _createClass(Device, [ {
        key: "caps",
        get: function get() {
          return this._caps;
        }
      } ]);
      function Device(canvasEL, opts) {
        var gl;
        opts = opts || {};
        void 0 === opts.alpha && (opts.alpha = false);
        void 0 === opts.stencil && (opts.stencil = true);
        void 0 === opts.depth && (opts.depth = true);
        void 0 === opts.antialias && (opts.antialias = false);
        void 0 === opts.preserveDrawingBuffer && (opts.preserveDrawingBuffer = false);
        try {
          gl = canvasEL.getContext("webgl", opts) || canvasEL.getContext("experimental-webgl", opts) || canvasEL.getContext("webkit-3d", opts) || canvasEL.getContext("moz-webgl", opts);
        } catch (err) {
          console.error(err);
          return;
        }
        gl || console.error("This device does not support webgl");
        this._gl = gl;
        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();
        _state["default"].initDefault(this);
        this._current = new _state["default"](this);
        this._next = new _state["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 i = 0; i < this._caps.maxVertexAttribs; ++i) {
          this._enabledAttributes[i] = 0;
          this._newAttributes[i] = 0;
        }
      }
      var _proto = Device.prototype;
      _proto._initExtensions = function _initExtensions(extensions) {
        var gl = this._gl;
        for (var i = 0; i < extensions.length; ++i) {
          var name = extensions[i];
          var vendorPrefixes = [ "", "WEBKIT_", "MOZ_" ];
          for (var j = 0; j < vendorPrefixes.length; j++) try {
            var ext = gl.getExtension(vendorPrefixes[j] + name);
            if (ext) {
              this._extensions[name] = ext;
              break;
            }
          } catch (e) {
            console.error(e);
          }
        }
      };
      _proto._initCaps = function _initCaps() {
        var gl = this._gl;
        var extDrawBuffers = this.ext("WEBGL_draw_buffers");
        this._caps.maxVertexStreams = 4;
        this._caps.maxVertexTextures = gl.getParameter(gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS);
        this._caps.maxFragUniforms = gl.getParameter(gl.MAX_FRAGMENT_UNIFORM_VECTORS);
        this._caps.maxTextureUnits = gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS);
        this._caps.maxVertexAttribs = gl.getParameter(gl.MAX_VERTEX_ATTRIBS);
        this._caps.maxTextureSize = gl.getParameter(gl.MAX_TEXTURE_SIZE);
        this._caps.maxDrawBuffers = extDrawBuffers ? gl.getParameter(extDrawBuffers.MAX_DRAW_BUFFERS_WEBGL) : 1;
        this._caps.maxColorAttachments = extDrawBuffers ? gl.getParameter(extDrawBuffers.MAX_COLOR_ATTACHMENTS_WEBGL) : 1;
      };
      _proto._initStates = function _initStates() {
        var gl = this._gl;
        gl.disable(gl.BLEND);
        gl.blendFunc(gl.ONE, gl.ZERO);
        gl.blendEquation(gl.FUNC_ADD);
        gl.blendColor(1, 1, 1, 1);
        gl.colorMask(true, true, true, true);
        gl.enable(gl.CULL_FACE);
        gl.cullFace(gl.BACK);
        gl.disable(gl.DEPTH_TEST);
        gl.depthFunc(gl.LESS);
        gl.depthMask(false);
        gl.disable(gl.POLYGON_OFFSET_FILL);
        gl.depthRange(0, 1);
        gl.disable(gl.STENCIL_TEST);
        gl.stencilFunc(gl.ALWAYS, 0, 255);
        gl.stencilMask(255);
        gl.stencilOp(gl.KEEP, gl.KEEP, gl.KEEP);
        gl.clearDepth(1);
        gl.clearColor(0, 0, 0, 0);
        gl.clearStencil(0);
        gl.disable(gl.SCISSOR_TEST);
      };
      _proto._restoreTexture = function _restoreTexture(unit) {
        var gl = this._gl;
        var texture = this._current.textureUnits[unit];
        texture && -1 !== texture._glID ? gl.bindTexture(texture._target, texture._glID) : gl.bindTexture(gl.TEXTURE_2D, null);
      };
      _proto._restoreIndexBuffer = function _restoreIndexBuffer() {
        var gl = this._gl;
        var ib = this._current.indexBuffer;
        ib && -1 !== ib._glID ? gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, ib._glID) : gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null);
      };
      _proto.ext = function ext(name) {
        return this._extensions[name];
      };
      _proto.allowFloatTexture = function allowFloatTexture() {
        return null != this.ext("OES_texture_float");
      };
      _proto.setFrameBuffer = function setFrameBuffer(fb) {
        if (this._framebuffer === fb) return;
        this._framebuffer = fb;
        var gl = this._gl;
        if (!fb) {
          gl.bindFramebuffer(gl.FRAMEBUFFER, null);
          return;
        }
        gl.bindFramebuffer(gl.FRAMEBUFFER, fb._glID);
        var numColors = fb._colors.length;
        for (var i = 0; i < numColors; ++i) {
          var colorBuffer = fb._colors[i];
          _attach(gl, gl.COLOR_ATTACHMENT0 + i, colorBuffer);
        }
        for (var _i4 = numColors; _i4 < this._caps.maxColorAttachments; ++_i4) gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0 + _i4, gl.TEXTURE_2D, null, 0);
        fb._depth && _attach(gl, gl.DEPTH_ATTACHMENT, fb._depth);
        fb._stencil && _attach(gl, gl.STENCIL_ATTACHMENT, fb._stencil);
        fb._depthStencil && _attach(gl, gl.DEPTH_STENCIL_ATTACHMENT, fb._depthStencil);
      };
      _proto.setViewport = function setViewport(x, y, w, h) {
        if (this._vx !== x || this._vy !== y || this._vw !== w || this._vh !== h) {
          this._gl.viewport(x, y, w, h);
          this._vx = x;
          this._vy = y;
          this._vw = w;
          this._vh = h;
        }
      };
      _proto.setScissor = function setScissor(x, y, w, h) {
        if (this._sx !== x || this._sy !== y || this._sw !== w || this._sh !== h) {
          this._gl.scissor(x, y, w, h);
          this._sx = x;
          this._sy = y;
          this._sw = w;
          this._sh = h;
        }
      };
      _proto.clear = function clear(opts) {
        if (void 0 === opts.color && void 0 === opts.depth && void 0 === opts.stencil) return;
        var gl = this._gl;
        var flags = 0;
        if (void 0 !== opts.color) {
          flags |= gl.COLOR_BUFFER_BIT;
          gl.clearColor(opts.color[0], opts.color[1], opts.color[2], opts.color[3]);
        }
        if (void 0 !== opts.depth) {
          flags |= gl.DEPTH_BUFFER_BIT;
          gl.clearDepth(opts.depth);
          gl.enable(gl.DEPTH_TEST);
          gl.depthMask(true);
          gl.depthFunc(gl.ALWAYS);
        }
        if (void 0 !== opts.stencil) {
          flags |= gl.STENCIL_BUFFER_BIT;
          gl.clearStencil(opts.stencil);
        }
        gl.clear(flags);
        if (void 0 !== opts.depth) if (false === this._current.depthTest) gl.disable(gl.DEPTH_TEST); else {
          false === this._current.depthWrite && gl.depthMask(false);
          this._current.depthFunc !== _enums.enums.DS_FUNC_ALWAYS && gl.depthFunc(this._current.depthFunc);
        }
      };
      _proto.enableBlend = function enableBlend() {
        this._next.blend = true;
      };
      _proto.enableDepthTest = function enableDepthTest() {
        this._next.depthTest = true;
      };
      _proto.enableDepthWrite = function enableDepthWrite() {
        this._next.depthWrite = true;
      };
      _proto.setStencilTest = function setStencilTest(stencilTest) {
        this._next.stencilTest = stencilTest;
      };
      _proto.setStencilFunc = function setStencilFunc(func, ref, mask) {
        this._next.stencilSep = false;
        this._next.stencilFuncFront = this._next.stencilFuncBack = func;
        this._next.stencilRefFront = this._next.stencilRefBack = ref;
        this._next.stencilMaskFront = this._next.stencilMaskBack = mask;
      };
      _proto.setStencilFuncFront = function setStencilFuncFront(func, ref, mask) {
        this._next.stencilSep = true;
        this._next.stencilFuncFront = func;
        this._next.stencilRefFront = ref;
        this._next.stencilMaskFront = mask;
      };
      _proto.setStencilFuncBack = function setStencilFuncBack(func, ref, mask) {
        this._next.stencilSep = true;
        this._next.stencilFuncBack = func;
        this._next.stencilRefBack = ref;
        this._next.stencilMaskBack = mask;
      };
      _proto.setStencilOp = function setStencilOp(failOp, zFailOp, zPassOp, writeMask) {
        this._next.stencilFailOpFront = this._next.stencilFailOpBack = failOp;
        this._next.stencilZFailOpFront = this._next.stencilZFailOpBack = zFailOp;
        this._next.stencilZPassOpFront = this._next.stencilZPassOpBack = zPassOp;
        this._next.stencilWriteMaskFront = this._next.stencilWriteMaskBack = writeMask;
      };
      _proto.setStencilOpFront = function setStencilOpFront(failOp, zFailOp, zPassOp, writeMask) {
        this._next.stencilSep = true;
        this._next.stencilFailOpFront = failOp;
        this._next.stencilZFailOpFront = zFailOp;
        this._next.stencilZPassOpFront = zPassOp;
        this._next.stencilWriteMaskFront = writeMask;
      };
      _proto.setStencilOpBack = function setStencilOpBack(failOp, zFailOp, zPassOp, writeMask) {
        this._next.stencilSep = true;
        this._next.stencilFailOpBack = failOp;
        this._next.stencilZFailOpBack = zFailOp;
        this._next.stencilZPassOpBack = zPassOp;
        this._next.stencilWriteMaskBack = writeMask;
      };
      _proto.setDepthFunc = function setDepthFunc(depthFunc) {
        this._next.depthFunc = depthFunc;
      };
      _proto.setBlendColor32 = function setBlendColor32(rgba) {
        this._next.blendColor = rgba;
      };
      _proto.setBlendColor = function setBlendColor(r, g, b, a) {
        this._next.blendColor = (255 * r << 24 | 255 * g << 16 | 255 * b << 8 | 255 * a) >>> 0;
      };
      _proto.setBlendFunc = function setBlendFunc(src, dst) {
        this._next.blendSep = false;
        this._next.blendSrc = src;
        this._next.blendDst = dst;
      };
      _proto.setBlendFuncSep = function setBlendFuncSep(src, dst, srcAlpha, dstAlpha) {
        this._next.blendSep = true;
        this._next.blendSrc = src;
        this._next.blendDst = dst;
        this._next.blendSrcAlpha = srcAlpha;
        this._next.blendDstAlpha = dstAlpha;
      };
      _proto.setBlendEq = function setBlendEq(eq) {
        this._next.blendSep = false;
        this._next.blendEq = eq;
      };
      _proto.setBlendEqSep = function setBlendEqSep(eq, alphaEq) {
        this._next.blendSep = true;
        this._next.blendEq = eq;
        this._next.blendAlphaEq = alphaEq;
      };
      _proto.setCullMode = function setCullMode(mode) {
        this._next.cullMode = mode;
      };
      _proto.setVertexBuffer = function setVertexBuffer(stream, buffer, start) {
        void 0 === start && (start = 0);
        this._next.vertexBuffers[stream] = buffer;
        this._next.vertexBufferOffsets[stream] = start;
        this._next.maxStream < stream && (this._next.maxStream = stream);
      };
      _proto.setIndexBuffer = function setIndexBuffer(buffer) {
        this._next.indexBuffer = buffer;
      };
      _proto.setProgram = function setProgram(program) {
        this._next.program = program;
      };
      _proto.setTexture = function setTexture(name, texture, slot) {
        if (slot >= this._caps.maxTextureUnits) {
          console.warn("Can not set texture " + name + " at stage " + slot + ", max texture exceed: " + this._caps.maxTextureUnits);
          return;
        }
        this._next.textureUnits[slot] = texture;
        this.setUniform(name, slot);
        this._next.maxTextureSlot < slot && (this._next.maxTextureSlot = slot);
      };
      _proto.setTextureArray = function setTextureArray(name, textures, slots) {
        var len = textures.length;
        if (len >= this._caps.maxTextureUnits) {
          console.warn("Can not set " + len + " textures for " + name + ", max texture exceed: " + this._caps.maxTextureUnits);
          return;
        }
        for (var i = 0; i < len; ++i) {
          var slot = slots[i];
          this._next.textureUnits[slot] = textures[i];
          this._next.maxTextureSlot < slot && (this._next.maxTextureSlot = slot);
        }
        this.setUniform(name, slots);
      };
      _proto.setUniform = function setUniform(name, value) {
        var uniform = this._uniforms[name];
        var sameType = false;
        var isArray = false, isFloat32Array = false, isInt32Array = false;
        do {
          if (!uniform) break;
          isFloat32Array = Array.isArray(value) || value instanceof Float32Array;
          isInt32Array = value instanceof Int32Array;
          isArray = isFloat32Array || isInt32Array;
          if (uniform.isArray !== isArray) break;
          if (uniform.isArray && uniform.value.length !== value.length) break;
          sameType = true;
        } while (false);
        if (sameType) {
          var oldValue = uniform.value;
          var dirty = false;
          if (uniform.isArray) {
            for (var i = 0, l = oldValue.length; i < l; i++) if (oldValue[i] !== value[i]) {
              dirty = true;
              oldValue[i] = value[i];
            }
          } else if (oldValue !== value) {
            dirty = true;
            uniform.value = value;
          }
          dirty && (uniform.dirty = true);
        } else {
          var newValue = value;
          isFloat32Array ? newValue = new Float32Array(value) : isInt32Array && (newValue = new Int32Array(value));
          uniform = {
            dirty: true,
            value: newValue,
            isArray: isArray
          };
        }
        this._uniforms[name] = uniform;
      };
      _proto.setUniformDirectly = function setUniformDirectly(name, value) {
        var uniform = this._uniforms[name];
        uniform || (this._uniforms[name] = uniform = {});
        uniform.dirty = true;
        uniform.value = value;
      };
      _proto.setPrimitiveType = function setPrimitiveType(type) {
        this._next.primitiveType = type;
      };
      _proto.resetDrawCalls = function resetDrawCalls() {
        this._stats.drawcalls = 0;
      };
      _proto.getDrawCalls = function getDrawCalls() {
        return this._stats.drawcalls;
      };
      _proto.draw = function draw(base, count) {
        var gl = this._gl;
        var cur = this._current;
        var next = this._next;
        _commitBlendStates(gl, cur, next);
        _commitDepthStates(gl, cur, next);
        _commitStencilStates(gl, cur, next);
        _commitCullMode(gl, cur, next);
        _commitVertexBuffers(this, gl, cur, next);
        cur.indexBuffer !== next.indexBuffer && gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, next.indexBuffer && -1 !== next.indexBuffer._glID ? next.indexBuffer._glID : null);
        var programDirty = false;
        if (cur.program !== next.program) {
          next.program._linked ? gl.useProgram(next.program._glID) : console.warn("Failed to use program: has not linked yet.");
          programDirty = true;
        }
        _commitTextures(gl, cur, next);
        for (var i = 0; i < next.program._uniforms.length; ++i) {
          var uniformInfo = next.program._uniforms[i];
          var uniform = this._uniforms[uniformInfo.name];
          if (!uniform) continue;
          if (!programDirty && !uniform.dirty) continue;
          uniform.dirty = false;
          var commitFunc = void 0 === uniformInfo.size ? _type2uniformCommit[uniformInfo.type] : _type2uniformArrayCommit[uniformInfo.type];
          if (!commitFunc) {
            console.warn("Can not find commit function for uniform " + uniformInfo.name);
            continue;
          }
          commitFunc(gl, uniformInfo.location, uniform.value);
        }
        if (count) {
          next.indexBuffer ? gl.drawElements(this._next.primitiveType, count, next.indexBuffer._format, base * next.indexBuffer._bytesPerIndex) : gl.drawArrays(this._next.primitiveType, base, count);
          this._stats.drawcalls++;
        }
        cur.set(next);
        next.reset();
      };
      return Device;
    })();
    exports["default"] = Device;
    module.exports = exports["default"];
  }), {
    "./enums": 248,
    "./state": 255,
    "./texture-2d": 256,
    "./texture-cube": 257
  } ],
  248: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports.attrTypeBytes = attrTypeBytes;
    exports.glFilter = glFilter;
    exports.glTextureFmt = glTextureFmt;
    exports.enums = void 0;
    var GL_NEAREST = 9728;
    var GL_LINEAR = 9729;
    var GL_NEAREST_MIPMAP_NEAREST = 9984;
    var GL_LINEAR_MIPMAP_NEAREST = 9985;
    var GL_NEAREST_MIPMAP_LINEAR = 9986;
    var GL_LINEAR_MIPMAP_LINEAR = 9987;
    var GL_UNSIGNED_BYTE = 5121;
    var GL_UNSIGNED_SHORT = 5123;
    var GL_UNSIGNED_INT = 5125;
    var GL_FLOAT = 5126;
    var GL_UNSIGNED_SHORT_5_6_5 = 33635;
    var GL_UNSIGNED_SHORT_4_4_4_4 = 32819;
    var GL_UNSIGNED_SHORT_5_5_5_1 = 32820;
    var GL_HALF_FLOAT_OES = 36193;
    var GL_DEPTH_COMPONENT = 6402;
    var GL_ALPHA = 6406;
    var GL_RGB = 6407;
    var GL_RGBA = 6408;
    var GL_LUMINANCE = 6409;
    var GL_LUMINANCE_ALPHA = 6410;
    var GL_COMPRESSED_RGB_S3TC_DXT1_EXT = 33776;
    var GL_COMPRESSED_RGBA_S3TC_DXT1_EXT = 33777;
    var GL_COMPRESSED_RGBA_S3TC_DXT3_EXT = 33778;
    var GL_COMPRESSED_RGBA_S3TC_DXT5_EXT = 33779;
    var GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG = 35840;
    var GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG = 35841;
    var GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG = 35842;
    var GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG = 35843;
    var GL_COMPRESSED_RGB_ETC1_WEBGL = 36196;
    var GL_COMPRESSED_RGB8_ETC2 = 37492;
    var GL_COMPRESSED_RGBA8_ETC2_EAC = 37496;
    var _filterGL = [ [ GL_NEAREST, GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST_MIPMAP_LINEAR ], [ GL_LINEAR, GL_LINEAR_MIPMAP_NEAREST, GL_LINEAR_MIPMAP_LINEAR ] ];
    var _textureFmtGL = [ {
      format: GL_RGB,
      internalFormat: GL_COMPRESSED_RGB_S3TC_DXT1_EXT,
      pixelType: null
    }, {
      format: GL_RGBA,
      internalFormat: GL_COMPRESSED_RGBA_S3TC_DXT1_EXT,
      pixelType: null
    }, {
      format: GL_RGBA,
      internalFormat: GL_COMPRESSED_RGBA_S3TC_DXT3_EXT,
      pixelType: null
    }, {
      format: GL_RGBA,
      internalFormat: GL_COMPRESSED_RGBA_S3TC_DXT5_EXT,
      pixelType: null
    }, {
      format: GL_RGB,
      internalFormat: GL_COMPRESSED_RGB_ETC1_WEBGL,
      pixelType: null
    }, {
      format: GL_RGB,
      internalFormat: GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG,
      pixelType: null
    }, {
      format: GL_RGBA,
      internalFormat: GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG,
      pixelType: null
    }, {
      format: GL_RGB,
      internalFormat: GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG,
      pixelType: null
    }, {
      format: GL_RGBA,
      internalFormat: GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG,
      pixelType: null
    }, {
      format: GL_ALPHA,
      internalFormat: GL_ALPHA,
      pixelType: GL_UNSIGNED_BYTE
    }, {
      format: GL_LUMINANCE,
      internalFormat: GL_LUMINANCE,
      pixelType: GL_UNSIGNED_BYTE
    }, {
      format: GL_LUMINANCE_ALPHA,
      internalFormat: GL_LUMINANCE_ALPHA,
      pixelType: GL_UNSIGNED_BYTE
    }, {
      format: GL_RGB,
      internalFormat: GL_RGB,
      pixelType: GL_UNSIGNED_SHORT_5_6_5
    }, {
      format: GL_RGBA,
      internalFormat: GL_RGBA,
      pixelType: GL_UNSIGNED_SHORT_5_5_5_1
    }, {
      format: GL_RGBA,
      internalFormat: GL_RGBA,
      pixelType: GL_UNSIGNED_SHORT_4_4_4_4
    }, {
      format: GL_RGB,
      internalFormat: GL_RGB,
      pixelType: GL_UNSIGNED_BYTE
    }, {
      format: GL_RGBA,
      internalFormat: GL_RGBA,
      pixelType: GL_UNSIGNED_BYTE
    }, {
      format: GL_RGB,
      internalFormat: GL_RGB,
      pixelType: GL_HALF_FLOAT_OES
    }, {
      format: GL_RGBA,
      internalFormat: GL_RGBA,
      pixelType: GL_HALF_FLOAT_OES
    }, {
      format: GL_RGB,
      internalFormat: GL_RGB,
      pixelType: GL_FLOAT
    }, {
      format: GL_RGBA,
      internalFormat: GL_RGBA,
      pixelType: GL_FLOAT
    }, {
      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: GL_DEPTH_COMPONENT,
      internalFormat: GL_DEPTH_COMPONENT,
      pixelType: GL_UNSIGNED_SHORT
    }, {
      format: GL_DEPTH_COMPONENT,
      internalFormat: GL_DEPTH_COMPONENT,
      pixelType: GL_UNSIGNED_INT
    }, {
      format: GL_DEPTH_COMPONENT,
      internalFormat: GL_DEPTH_COMPONENT,
      pixelType: GL_UNSIGNED_INT
    }, {
      format: GL_RGB,
      internalFormat: GL_COMPRESSED_RGB8_ETC2,
      pixelType: null
    }, {
      format: GL_RGBA,
      internalFormat: GL_COMPRESSED_RGBA8_ETC2_EAC,
      pixelType: null
    } ];
    var 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_TEX_COORD: "a_texCoord",
      ATTR_TEX_COORD1: "a_texCoord1",
      ATTR_TEX_COORD2: "a_texCoord2",
      ATTR_TEX_COORD3: "a_texCoord3",
      ATTR_TEX_COORD4: "a_texCoord4",
      ATTR_TEX_COORD5: "a_texCoord5",
      ATTR_TEX_COORD6: "a_texCoord6",
      ATTR_TEX_COORD7: "a_texCoord7",
      ATTR_TEX_COORD8: "a_texCoord8",
      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
    };
    exports.enums = enums;
    function attrTypeBytes(attrType) {
      if (attrType === enums.ATTR_TYPE_INT8) return 1;
      if (attrType === enums.ATTR_TYPE_UINT8) return 1;
      if (attrType === enums.ATTR_TYPE_INT16) return 2;
      if (attrType === enums.ATTR_TYPE_UINT16) return 2;
      if (attrType === enums.ATTR_TYPE_INT32) return 4;
      if (attrType === enums.ATTR_TYPE_UINT32) return 4;
      if (attrType === enums.ATTR_TYPE_FLOAT32) return 4;
      console.warn("Unknown ATTR_TYPE: " + attrType);
      return 0;
    }
    function glFilter(gl, filter, mipFilter) {
      void 0 === mipFilter && (mipFilter = -1);
      var result = _filterGL[filter][mipFilter + 1];
      if (void 0 === result) {
        console.warn("Unknown FILTER: " + filter);
        return -1 === mipFilter ? gl.LINEAR : gl.LINEAR_MIPMAP_LINEAR;
      }
      return result;
    }
    function glTextureFmt(fmt) {
      var result = _textureFmtGL[fmt];
      if (void 0 === result) {
        console.warn("Unknown TEXTURE_FMT: " + fmt);
        return _textureFmtGL[enums.TEXTURE_FMT_RGBA8];
      }
      return result;
    }
  }), {} ],
  249: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var FrameBuffer = (function() {
      function FrameBuffer(device, width, height, options) {
        this._device = device;
        this._width = width;
        this._height = height;
        this._colors = options.colors || [];
        this._depth = options.depth || null;
        this._stencil = options.stencil || null;
        this._depthStencil = options.depthStencil || null;
        this._glID = device._gl.createFramebuffer();
      }
      var _proto = FrameBuffer.prototype;
      _proto.destroy = function destroy() {
        if (null === this._glID) {
          console.error("The frame-buffer already destroyed");
          return;
        }
        var gl = this._device._gl;
        gl.deleteFramebuffer(this._glID);
        this._glID = null;
      };
      _proto.getHandle = function getHandle() {
        return this._glID;
      };
      return FrameBuffer;
    })();
    exports["default"] = FrameBuffer;
    module.exports = exports["default"];
  }), {} ],
  250: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _enums = require("./enums");
    var _BYTES_PER_INDEX;
    function _defineProperties(target, props) {
      for (var i = 0; i < props.length; i++) {
        var descriptor = props[i];
        descriptor.enumerable = descriptor.enumerable || false;
        descriptor.configurable = true;
        "value" in descriptor && (descriptor.writable = true);
        Object.defineProperty(target, descriptor.key, descriptor);
      }
    }
    function _createClass(Constructor, protoProps, staticProps) {
      protoProps && _defineProperties(Constructor.prototype, protoProps);
      staticProps && _defineProperties(Constructor, staticProps);
      return Constructor;
    }
    var BYTES_PER_INDEX = (_BYTES_PER_INDEX = {}, _BYTES_PER_INDEX[_enums.enums.INDEX_FMT_UINT8] = 1, 
    _BYTES_PER_INDEX[_enums.enums.INDEX_FMT_UINT16] = 2, _BYTES_PER_INDEX[_enums.enums.INDEX_FMT_UINT32] = 4, 
    _BYTES_PER_INDEX);
    var IndexBuffer = (function() {
      function IndexBuffer(device, format, usage, data) {
        this._device = device;
        this._format = format;
        this._usage = usage;
        this._bytesPerIndex = BYTES_PER_INDEX[format];
        this._bytes = data.byteLength;
        this._numIndices = this._bytes / this._bytesPerIndex;
        this._needExpandDataStore = true;
        this._glID = device._gl.createBuffer();
        this.update(0, data);
        device._stats.ib += this._bytes;
      }
      var _proto = IndexBuffer.prototype;
      _proto.destroy = function destroy() {
        if (-1 === this._glID) {
          console.error("The buffer already destroyed");
          return;
        }
        var gl = this._device._gl;
        gl.deleteBuffer(this._glID);
        this._device._stats.ib -= this.bytes;
        this._glID = -1;
      };
      _proto.update = function update(byteOffset, data) {
        if (-1 === this._glID) {
          console.error("The buffer is destroyed");
          return;
        }
        if (0 === data.byteLength) return;
        if (byteOffset + data.byteLength > this._bytes) {
          if (byteOffset) {
            console.error("Failed to update data, bytes exceed.");
            return;
          }
          this._needExpandDataStore = true;
          this._bytes = byteOffset + data.byteLength;
          this._numIndices = this._bytes / this._bytesPerIndex;
        }
        var gl = this._device._gl;
        var glUsage = this._usage;
        gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this._glID);
        if (this._needExpandDataStore) {
          gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, data, glUsage);
          this._needExpandDataStore = false;
        } else gl.bufferSubData(gl.ELEMENT_ARRAY_BUFFER, byteOffset, data);
        this._device._restoreIndexBuffer();
      };
      _proto.setUsage = function setUsage(usage) {
        this._usage = usage;
      };
      _createClass(IndexBuffer, [ {
        key: "count",
        get: function get() {
          return this._numIndices;
        }
      } ]);
      return IndexBuffer;
    })();
    IndexBuffer.BYTES_PER_INDEX = BYTES_PER_INDEX;
    var _default = IndexBuffer;
    exports["default"] = _default;
    module.exports = exports["default"];
  }), {
    "./enums": 248
  } ],
  251: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _enums = require("./enums");
    var gfx = null;
    false;
    var VertexFormat = require("./vertex-format");
    var IndexBuffer = require("./index-buffer");
    var VertexBuffer = require("./vertex-buffer");
    var Program = require("./program");
    var Texture = require("./texture");
    var Texture2D = require("./texture-2d");
    var TextureCube = require("./texture-cube");
    var RenderBuffer = require("./render-buffer");
    var FrameBuffer = require("./frame-buffer");
    var Device = require("./device");
    gfx = {
      VertexFormat: VertexFormat,
      IndexBuffer: IndexBuffer,
      VertexBuffer: VertexBuffer,
      Program: Program,
      Texture: Texture,
      Texture2D: Texture2D,
      TextureCube: TextureCube,
      RenderBuffer: RenderBuffer,
      FrameBuffer: FrameBuffer,
      Device: Device,
      attrTypeBytes: _enums.attrTypeBytes,
      glFilter: _enums.glFilter,
      glTextureFmt: _enums.glTextureFmt
    };
    Object.assign(gfx, _enums.enums);
    var _default = gfx;
    exports["default"] = _default;
    cc.gfx = gfx;
    module.exports = exports["default"];
  }), {
    "./device": 247,
    "./enums": 248,
    "./frame-buffer": 249,
    "./index-buffer": 250,
    "./program": 253,
    "./render-buffer": 254,
    "./texture": 258,
    "./texture-2d": 256,
    "./texture-cube": 257,
    "./vertex-buffer": 259,
    "./vertex-format": 260
  } ],
  252: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports.isPow2 = isPow2;
    function isPow2(v) {
      return !(v & v - 1) && !!v;
    }
  }), {} ],
  253: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    function _defineProperties(target, props) {
      for (var i = 0; i < props.length; i++) {
        var descriptor = props[i];
        descriptor.enumerable = descriptor.enumerable || false;
        descriptor.configurable = true;
        "value" in descriptor && (descriptor.writable = true);
        Object.defineProperty(target, descriptor.key, descriptor);
      }
    }
    function _createClass(Constructor, protoProps, staticProps) {
      protoProps && _defineProperties(Constructor.prototype, protoProps);
      staticProps && _defineProperties(Constructor, staticProps);
      return Constructor;
    }
    var _genID = 0;
    function _parseError(out, type, errorLog) {
      errorLog.split("\n").forEach((function(msg) {
        if (msg.length < 5) return;
        var parts = /^ERROR:\s+(\d+):(\d+):\s*(.*)$/.exec(msg);
        parts ? out.push({
          type: type,
          fileID: 0 | parts[1],
          line: 0 | parts[2],
          message: parts[3].trim()
        }) : msg.length > 0 && out.push({
          type: type,
          fileID: -1,
          line: 0,
          message: msg
        });
      }));
    }
    var Program = (function() {
      function Program(device, options) {
        this._device = device;
        this._attributes = [];
        this._uniforms = [];
        this._samplers = [];
        this._errors = [];
        this._linked = false;
        this._vertSource = options.vert;
        this._fragSource = options.frag;
        this._glID = null;
        this._id = _genID++;
      }
      var _proto = Program.prototype;
      _proto.link = function link() {
        if (this._linked) return;
        var gl = this._device._gl;
        var vertShader = _createShader(gl, gl.VERTEX_SHADER, this._vertSource);
        var fragShader = _createShader(gl, gl.FRAGMENT_SHADER, this._fragSource);
        var program = gl.createProgram();
        gl.attachShader(program, vertShader);
        gl.attachShader(program, fragShader);
        gl.linkProgram(program);
        var failed = false;
        var errors = this._errors;
        if (!gl.getShaderParameter(vertShader, gl.COMPILE_STATUS)) {
          _parseError(errors, "vs", gl.getShaderInfoLog(vertShader));
          failed = true;
        }
        if (!gl.getShaderParameter(fragShader, gl.COMPILE_STATUS)) {
          _parseError(errors, "fs", gl.getShaderInfoLog(fragShader));
          failed = true;
        }
        gl.deleteShader(vertShader);
        gl.deleteShader(fragShader);
        if (failed) return errors;
        if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
          errors.push({
            info: "Failed to link shader program: " + gl.getProgramInfoLog(program)
          });
          return errors;
        }
        this._glID = program;
        var numAttributes = gl.getProgramParameter(program, gl.ACTIVE_ATTRIBUTES);
        for (var i = 0; i < numAttributes; ++i) {
          var info = gl.getActiveAttrib(program, i);
          var location = gl.getAttribLocation(program, info.name);
          this._attributes.push({
            name: info.name,
            location: location,
            type: info.type
          });
        }
        var numUniforms = gl.getProgramParameter(program, gl.ACTIVE_UNIFORMS);
        for (var _i = 0; _i < numUniforms; ++_i) {
          var _info = gl.getActiveUniform(program, _i);
          var name = _info.name;
          var _location = gl.getUniformLocation(program, name);
          var isArray = "[0]" === name.substr(name.length - 3);
          isArray && (name = name.substr(0, name.length - 3));
          var uniform = {
            name: name,
            location: _location,
            type: _info.type,
            size: isArray ? _info.size : void 0
          };
          this._uniforms.push(uniform);
        }
        this._linked = true;
      };
      _proto.destroy = function destroy() {
        var gl = this._device._gl;
        gl.deleteProgram(this._glID);
        this._linked = false;
        this._glID = null;
        this._attributes = [];
        this._uniforms = [];
        this._samplers = [];
      };
      _createClass(Program, [ {
        key: "id",
        get: function get() {
          return this._id;
        }
      } ]);
      return Program;
    })();
    exports["default"] = Program;
    function _createShader(gl, type, src) {
      var shader = gl.createShader(type);
      gl.shaderSource(shader, src);
      gl.compileShader(shader);
      return shader;
    }
    module.exports = exports["default"];
  }), {} ],
  254: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var RenderBuffer = (function() {
      function RenderBuffer(device, format, width, height) {
        this._device = device;
        this._format = format;
        this._glID = device._gl.createRenderbuffer();
        this.update(width, height);
      }
      var _proto = RenderBuffer.prototype;
      _proto.update = function update(width, height) {
        this._width = width;
        this._height = height;
        var gl = this._device._gl;
        gl.bindRenderbuffer(gl.RENDERBUFFER, this._glID);
        gl.renderbufferStorage(gl.RENDERBUFFER, this._format, width, height);
        gl.bindRenderbuffer(gl.RENDERBUFFER, null);
      };
      _proto.destroy = function destroy() {
        if (null === this._glID) {
          console.error("The render-buffer already destroyed");
          return;
        }
        var gl = this._device._gl;
        gl.bindRenderbuffer(gl.RENDERBUFFER, null);
        gl.deleteRenderbuffer(this._glID);
        this._glID = null;
      };
      return RenderBuffer;
    })();
    exports["default"] = RenderBuffer;
    module.exports = exports["default"];
  }), {} ],
  255: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _enums = require("./enums");
    var _default = {
      blend: false,
      blendSep: false,
      blendColor: 4294967295,
      blendEq: _enums.enums.BLEND_FUNC_ADD,
      blendAlphaEq: _enums.enums.BLEND_FUNC_ADD,
      blendSrc: _enums.enums.BLEND_ONE,
      blendDst: _enums.enums.BLEND_ZERO,
      blendSrcAlpha: _enums.enums.BLEND_ONE,
      blendDstAlpha: _enums.enums.BLEND_ZERO,
      depthTest: false,
      depthWrite: false,
      depthFunc: _enums.enums.DS_FUNC_LESS,
      stencilTest: false,
      stencilSep: false,
      stencilFuncFront: _enums.enums.DS_FUNC_ALWAYS,
      stencilRefFront: 0,
      stencilMaskFront: 255,
      stencilFailOpFront: _enums.enums.STENCIL_OP_KEEP,
      stencilZFailOpFront: _enums.enums.STENCIL_OP_KEEP,
      stencilZPassOpFront: _enums.enums.STENCIL_OP_KEEP,
      stencilWriteMaskFront: 255,
      stencilFuncBack: _enums.enums.DS_FUNC_ALWAYS,
      stencilRefBack: 0,
      stencilMaskBack: 255,
      stencilFailOpBack: _enums.enums.STENCIL_OP_KEEP,
      stencilZFailOpBack: _enums.enums.STENCIL_OP_KEEP,
      stencilZPassOpBack: _enums.enums.STENCIL_OP_KEEP,
      stencilWriteMaskBack: 255,
      cullMode: _enums.enums.CULL_BACK,
      primitiveType: _enums.enums.PT_TRIANGLES,
      maxStream: -1,
      vertexBuffers: [],
      vertexBufferOffsets: [],
      indexBuffer: null,
      maxTextureSlot: -1,
      textureUnits: [],
      program: null
    };
    var State = (function() {
      function State(device) {
        this.vertexBuffers = new Array(device._caps.maxVertexStreams);
        this.vertexBufferOffsets = new Array(device._caps.maxVertexStreams);
        this.textureUnits = new Array(device._caps.maxTextureUnits);
        this.set(_default);
      }
      State.initDefault = function initDefault(device) {
        _default.vertexBuffers = new Array(device._caps.maxVertexStreams);
        _default.vertexBufferOffsets = new Array(device._caps.maxVertexStreams);
        _default.textureUnits = new Array(device._caps.maxTextureUnits);
      };
      var _proto = State.prototype;
      _proto.reset = function reset() {
        this.set(_default);
      };
      _proto.set = function set(cpy) {
        this.blend = cpy.blend;
        this.blendSep = cpy.blendSep;
        this.blendColor = cpy.blendColor;
        this.blendEq = cpy.blendEq;
        this.blendAlphaEq = cpy.blendAlphaEq;
        this.blendSrc = cpy.blendSrc;
        this.blendDst = cpy.blendDst;
        this.blendSrcAlpha = cpy.blendSrcAlpha;
        this.blendDstAlpha = cpy.blendDstAlpha;
        this.depthTest = cpy.depthTest;
        this.depthWrite = cpy.depthWrite;
        this.depthFunc = cpy.depthFunc;
        this.stencilTest = cpy.stencilTest;
        this.stencilSep = cpy.stencilSep;
        this.stencilFuncFront = cpy.stencilFuncFront;
        this.stencilRefFront = cpy.stencilRefFront;
        this.stencilMaskFront = cpy.stencilMaskFront;
        this.stencilFailOpFront = cpy.stencilFailOpFront;
        this.stencilZFailOpFront = cpy.stencilZFailOpFront;
        this.stencilZPassOpFront = cpy.stencilZPassOpFront;
        this.stencilWriteMaskFront = cpy.stencilWriteMaskFront;
        this.stencilFuncBack = cpy.stencilFuncBack;
        this.stencilRefBack = cpy.stencilRefBack;
        this.stencilMaskBack = cpy.stencilMaskBack;
        this.stencilFailOpBack = cpy.stencilFailOpBack;
        this.stencilZFailOpBack = cpy.stencilZFailOpBack;
        this.stencilZPassOpBack = cpy.stencilZPassOpBack;
        this.stencilWriteMaskBack = cpy.stencilWriteMaskBack;
        this.cullMode = cpy.cullMode;
        this.primitiveType = cpy.primitiveType;
        this.maxStream = cpy.maxStream;
        for (var i = 0; i < cpy.vertexBuffers.length; ++i) this.vertexBuffers[i] = cpy.vertexBuffers[i];
        for (var _i = 0; _i < cpy.vertexBufferOffsets.length; ++_i) this.vertexBufferOffsets[_i] = cpy.vertexBufferOffsets[_i];
        this.indexBuffer = cpy.indexBuffer;
        this.maxTextureSlot = cpy.maxTextureSlot;
        for (var _i2 = 0; _i2 < cpy.textureUnits.length; ++_i2) this.textureUnits[_i2] = cpy.textureUnits[_i2];
        this.program = cpy.program;
      };
      return State;
    })();
    exports["default"] = State;
    module.exports = exports["default"];
  }), {
    "./enums": 248
  } ],
  256: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _texture = _interopRequireDefault(require("./texture"));
    var _enums = require("./enums");
    var _misc = require("./misc");
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    function _inheritsLoose(subClass, superClass) {
      subClass.prototype = Object.create(superClass.prototype);
      subClass.prototype.constructor = subClass;
      subClass.__proto__ = superClass;
    }
    var Texture2D = (function(_Texture) {
      _inheritsLoose(Texture2D, _Texture);
      function Texture2D(device, options) {
        var _this;
        _this = _Texture.call(this, device) || this;
        var gl = _this._device._gl;
        _this._target = gl.TEXTURE_2D;
        _this._glID = gl.createTexture();
        options.images = options.images || [ null ];
        _this.update(options);
        return _this;
      }
      var _proto = Texture2D.prototype;
      _proto.update = function update(options) {
        var gl = this._device._gl;
        var genMipmaps = this._genMipmap;
        if (options) {
          void 0 !== options.width && (this._width = options.width);
          void 0 !== options.height && (this._height = options.height);
          void 0 !== options.anisotropy && (this._anisotropy = options.anisotropy);
          void 0 !== options.minFilter && (this._minFilter = options.minFilter);
          void 0 !== options.magFilter && (this._magFilter = options.magFilter);
          void 0 !== options.mipFilter && (this._mipFilter = options.mipFilter);
          void 0 !== options.wrapS && (this._wrapS = options.wrapS);
          void 0 !== options.wrapT && (this._wrapT = options.wrapT);
          if (void 0 !== options.format) {
            this._format = options.format;
            this._compressed = this._format >= _enums.enums.TEXTURE_FMT_RGB_DXT1 && this._format <= _enums.enums.TEXTURE_FMT_RGBA_PVRTC_4BPPV1 || this._format >= _enums.enums.TEXTURE_FMT_RGB_ETC2 && this._format <= _enums.enums.TEXTURE_FMT_RGBA_ETC2;
          }
          if (void 0 !== options.genMipmaps) {
            this._genMipmap = options.genMipmaps;
            genMipmaps = options.genMipmaps;
          }
          var maxSize = this._device.caps.maxTextureSize || Number.MAX_VALUE;
          var textureMaxSize = Math.max(options.width || 0, options.height || 0);
          maxSize < textureMaxSize && console.warn("The current texture size " + textureMaxSize + " exceeds the maximum size [" + maxSize + "] supported on the device.");
          if (void 0 !== options.images && options.images.length > 1) {
            genMipmaps = false;
            var maxLength = options.width > options.height ? options.width : options.height;
            maxLength >> options.images.length - 1 !== 1 && console.error("texture-2d mipmap is invalid, should have a 1x1 mipmap.");
          }
        }
        var pot = (0, _misc.isPow2)(this._width) && (0, _misc.isPow2)(this._height);
        pot || (genMipmaps = false);
        gl.activeTexture(gl.TEXTURE0);
        gl.bindTexture(gl.TEXTURE_2D, this._glID);
        if (void 0 !== options.images && options.images.length > 0) {
          this._setMipmap(options.images, options.flipY, options.premultiplyAlpha);
          options.images.length > 1 && (this._genMipmap = true);
        }
        if (genMipmaps) {
          gl.hint(gl.GENERATE_MIPMAP_HINT, gl.NICEST);
          gl.generateMipmap(gl.TEXTURE_2D);
          this._genMipmap = true;
        }
        this._setTexInfo();
        this._device._restoreTexture(0);
      };
      _proto.updateSubImage = function updateSubImage(options) {
        var gl = this._device._gl;
        var glFmt = (0, _enums.glTextureFmt)(this._format);
        gl.activeTexture(gl.TEXTURE0);
        gl.bindTexture(gl.TEXTURE_2D, this._glID);
        this._setSubImage(glFmt, options);
        this._device._restoreTexture(0);
      };
      _proto.updateImage = function updateImage(options) {
        var gl = this._device._gl;
        var glFmt = (0, _enums.glTextureFmt)(this._format);
        gl.activeTexture(gl.TEXTURE0);
        gl.bindTexture(gl.TEXTURE_2D, this._glID);
        this._setImage(glFmt, options);
        this._device._restoreTexture(0);
      };
      _proto._setSubImage = function _setSubImage(glFmt, options) {
        var gl = this._device._gl;
        var flipY = options.flipY;
        var premultiplyAlpha = options.premultiplyAlpha;
        var img = options.image;
        if (!img || ArrayBuffer.isView(img) || img instanceof ArrayBuffer) {
          void 0 === flipY ? gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false) : gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY);
          void 0 === premultiplyAlpha ? gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false) : gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, premultiplyAlpha);
          this._compressed ? gl.compressedTexSubImage2D(gl.TEXTURE_2D, options.level, options.x, options.y, options.width, options.height, glFmt.format, img) : gl.texSubImage2D(gl.TEXTURE_2D, options.level, options.x, options.y, options.width, options.height, glFmt.format, glFmt.pixelType, img);
        } else {
          void 0 === flipY ? gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true) : gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY);
          void 0 === premultiplyAlpha ? gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false) : gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, premultiplyAlpha);
          gl.texSubImage2D(gl.TEXTURE_2D, options.level, options.x, options.y, glFmt.format, glFmt.pixelType, img);
        }
      };
      _proto._setImage = function _setImage(glFmt, options) {
        var gl = this._device._gl;
        var flipY = options.flipY;
        var premultiplyAlpha = options.premultiplyAlpha;
        var img = options.image;
        if (!img || ArrayBuffer.isView(img) || img instanceof ArrayBuffer) {
          void 0 === flipY ? gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false) : gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY);
          void 0 === premultiplyAlpha ? gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false) : gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, premultiplyAlpha);
          this._compressed ? gl.compressedTexImage2D(gl.TEXTURE_2D, options.level, glFmt.internalFormat, options.width, options.height, 0, img) : gl.texImage2D(gl.TEXTURE_2D, options.level, glFmt.internalFormat, options.width, options.height, 0, glFmt.format, glFmt.pixelType, img);
        } else {
          void 0 === flipY ? gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true) : gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY);
          void 0 === premultiplyAlpha ? gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false) : gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, premultiplyAlpha);
          gl.texImage2D(gl.TEXTURE_2D, options.level, glFmt.internalFormat, glFmt.format, glFmt.pixelType, img);
        }
      };
      _proto._setMipmap = function _setMipmap(images, flipY, premultiplyAlpha) {
        var glFmt = (0, _enums.glTextureFmt)(this._format);
        var options = {
          width: this._width,
          height: this._height,
          flipY: flipY,
          premultiplyAlpha: premultiplyAlpha,
          level: 0,
          image: null
        };
        for (var i = 0; i < images.length; ++i) {
          options.level = i;
          options.width = this._width >> i;
          options.height = this._height >> i;
          options.image = images[i];
          this._setImage(glFmt, options);
        }
      };
      _proto._setTexInfo = function _setTexInfo() {
        var gl = this._device._gl;
        var pot = (0, _misc.isPow2)(this._width) && (0, _misc.isPow2)(this._height);
        if (!pot && (this._wrapS !== _enums.enums.WRAP_CLAMP || this._wrapT !== _enums.enums.WRAP_CLAMP)) {
          console.warn("WebGL1 doesn't support all wrap modes with NPOT textures");
          this._wrapS = _enums.enums.WRAP_CLAMP;
          this._wrapT = _enums.enums.WRAP_CLAMP;
        }
        var mipFilter = this._genMipmap ? this._mipFilter : -1;
        if (!pot && -1 !== mipFilter) {
          console.warn("NPOT textures do not support mipmap filter");
          mipFilter = -1;
        }
        gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, (0, _enums.glFilter)(gl, this._minFilter, mipFilter));
        gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, (0, _enums.glFilter)(gl, this._magFilter, -1));
        gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, this._wrapS);
        gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, this._wrapT);
        var ext = this._device.ext("EXT_texture_filter_anisotropic");
        ext && gl.texParameteri(gl.TEXTURE_2D, ext.TEXTURE_MAX_ANISOTROPY_EXT, this._anisotropy);
      };
      return Texture2D;
    })(_texture["default"]);
    exports["default"] = Texture2D;
    module.exports = exports["default"];
  }), {
    "./enums": 248,
    "./misc": 252,
    "./texture": 258
  } ],
  257: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _texture = _interopRequireDefault(require("./texture"));
    var _enums = require("./enums");
    var _misc = require("./misc");
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    function _inheritsLoose(subClass, superClass) {
      subClass.prototype = Object.create(superClass.prototype);
      subClass.prototype.constructor = subClass;
      subClass.__proto__ = superClass;
    }
    var TextureCube = (function(_Texture) {
      _inheritsLoose(TextureCube, _Texture);
      function TextureCube(device, options) {
        var _this;
        _this = _Texture.call(this, device) || this;
        var gl = _this._device._gl;
        _this._target = gl.TEXTURE_CUBE_MAP;
        _this._glID = gl.createTexture();
        _this.update(options);
        return _this;
      }
      var _proto = TextureCube.prototype;
      _proto.update = function update(options) {
        var gl = this._device._gl;
        var genMipmaps = this._genMipmaps;
        if (options) {
          void 0 !== options.width && (this._width = options.width);
          void 0 !== options.height && (this._height = options.height);
          void 0 !== options.anisotropy && (this._anisotropy = options.anisotropy);
          void 0 !== options.minFilter && (this._minFilter = options.minFilter);
          void 0 !== options.magFilter && (this._magFilter = options.magFilter);
          void 0 !== options.mipFilter && (this._mipFilter = options.mipFilter);
          void 0 !== options.wrapS && (this._wrapS = options.wrapS);
          void 0 !== options.wrapT && (this._wrapT = options.wrapT);
          if (void 0 !== options.format) {
            this._format = options.format;
            this._compressed = this._format >= _enums.enums.TEXTURE_FMT_RGB_DXT1 && this._format <= _enums.enums.TEXTURE_FMT_RGBA_PVRTC_4BPPV1 || this._format >= _enums.enums.TEXTURE_FMT_RGB_ETC2 && this._format <= _enums.enums.TEXTURE_FMT_RGBA_ETC2;
          }
          if (void 0 !== options.genMipmaps) {
            this._genMipmaps = options.genMipmaps;
            genMipmaps = options.genMipmaps;
          }
          if (void 0 !== options.images && options.images.length > 1) {
            genMipmaps = false;
            options.width !== options.height && console.warn("texture-cube width and height should be identical.");
            options.width >> options.images.length - 1 !== 1 && console.error("texture-cube mipmap is invalid. please set mipmap as 1x1, 2x2, 4x4 ... nxn");
          }
        }
        var pot = (0, _misc.isPow2)(this._width) && (0, _misc.isPow2)(this._height);
        pot || (genMipmaps = false);
        gl.activeTexture(gl.TEXTURE0);
        gl.bindTexture(gl.TEXTURE_CUBE_MAP, this._glID);
        if (void 0 !== options.images && options.images.length > 0) {
          this._setMipmap(options.images, options.flipY, options.premultiplyAlpha);
          options.images.length > 1 && (this._genMipmaps = true);
        }
        if (genMipmaps) {
          gl.hint(gl.GENERATE_MIPMAP_HINT, gl.NICEST);
          gl.generateMipmap(gl.TEXTURE_CUBE_MAP);
          this._genMipmaps = true;
        }
        this._setTexInfo();
        this._device._restoreTexture(0);
      };
      _proto.updateSubImage = function updateSubImage(options) {
        var gl = this._device._gl;
        var glFmt = (0, _enums.glTextureFmt)(this._format);
        gl.activeTexture(gl.TEXTURE0);
        gl.bindTexture(gl.TEXTURE_CUBE_MAP, this._glID);
        this._setSubImage(glFmt, options);
        this._device._restoreTexture(0);
      };
      _proto.updateImage = function updateImage(options) {
        var gl = this._device._gl;
        var glFmt = (0, _enums.glTextureFmt)(this._format);
        gl.activeTexture(gl.TEXTURE0);
        gl.bindTexture(gl.TEXTURE_CUBE_MAP, this._glID);
        this._setImage(glFmt, options);
        this._device._restoreTexture(0);
      };
      _proto._setSubImage = function _setSubImage(glFmt, options) {
        var gl = this._device._gl;
        var flipY = options.flipY;
        var premultiplyAlpha = options.premultiplyAlpha;
        var faceIndex = options.faceIndex;
        var img = options.image;
        void 0 === flipY ? gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false) : gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY);
        void 0 === premultiplyAlpha ? gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false) : gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, premultiplyAlpha);
        !img || ArrayBuffer.isView(img) || img instanceof ArrayBuffer ? this._compressed ? gl.compressedTexSubImage2D(gl.TEXTURE_CUBE_MAP_POSITIVE_X + faceIndex, options.level, options.x, options.y, options.width, options.height, glFmt.format, img) : gl.texSubImage2D(gl.TEXTURE_CUBE_MAP_POSITIVE_X + faceIndex, options.level, options.x, options.y, options.width, options.height, glFmt.format, glFmt.pixelType, img) : gl.texSubImage2D(gl.TEXTURE_CUBE_MAP_POSITIVE_X + faceIndex, options.level, options.x, options.y, glFmt.format, glFmt.pixelType, img);
      };
      _proto._setImage = function _setImage(glFmt, options) {
        var gl = this._device._gl;
        var flipY = options.flipY;
        var premultiplyAlpha = options.premultiplyAlpha;
        var faceIndex = options.faceIndex;
        var img = options.image;
        void 0 === flipY ? gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false) : gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY);
        void 0 === premultiplyAlpha ? gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false) : gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, premultiplyAlpha);
        !img || ArrayBuffer.isView(img) || img instanceof ArrayBuffer ? this._compressed ? gl.compressedTexImage2D(gl.TEXTURE_CUBE_MAP_POSITIVE_X + faceIndex, options.level, glFmt.internalFormat, options.width, options.height, 0, img) : gl.texImage2D(gl.TEXTURE_CUBE_MAP_POSITIVE_X + faceIndex, options.level, glFmt.internalFormat, options.width, options.height, 0, glFmt.format, glFmt.pixelType, img) : gl.texImage2D(gl.TEXTURE_CUBE_MAP_POSITIVE_X + faceIndex, options.level, glFmt.internalFormat, glFmt.format, glFmt.pixelType, img);
      };
      _proto._setMipmap = function _setMipmap(images, flipY, premultiplyAlpha) {
        var glFmt = (0, _enums.glTextureFmt)(this._format);
        var options = {
          width: this._width,
          height: this._height,
          faceIndex: 0,
          flipY: flipY,
          premultiplyAlpha: premultiplyAlpha,
          level: 0,
          image: null
        };
        for (var i = 0; i < images.length; ++i) {
          var levelImages = images[i];
          options.level = i;
          options.width = this._width >> i;
          options.height = this._height >> i;
          for (var face = 0; face < 6; ++face) {
            options.faceIndex = face;
            options.image = levelImages[face];
            this._setImage(glFmt, options);
          }
        }
      };
      _proto._setTexInfo = function _setTexInfo() {
        var gl = this._device._gl;
        var pot = (0, _misc.isPow2)(this._width) && (0, _misc.isPow2)(this._height);
        if (!pot && (this._wrapS !== _enums.enums.WRAP_CLAMP || this._wrapT !== _enums.enums.WRAP_CLAMP)) {
          console.warn("WebGL1 doesn't support all wrap modes with NPOT textures");
          this._wrapS = _enums.enums.WRAP_CLAMP;
          this._wrapT = _enums.enums.WRAP_CLAMP;
        }
        var mipFilter = this._genMipmaps ? this._mipFilter : -1;
        if (!pot && -1 !== mipFilter) {
          console.warn("NPOT textures do not support mipmap filter");
          mipFilter = -1;
        }
        gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_MIN_FILTER, (0, _enums.glFilter)(gl, this._minFilter, mipFilter));
        gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_MAG_FILTER, (0, _enums.glFilter)(gl, this._magFilter, -1));
        gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_WRAP_S, this._wrapS);
        gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_WRAP_T, this._wrapT);
        var ext = this._device.ext("EXT_texture_filter_anisotropic");
        ext && gl.texParameteri(gl.TEXTURE_CUBE_MAP, ext.TEXTURE_MAX_ANISOTROPY_EXT, this._anisotropy);
      };
      return TextureCube;
    })(_texture["default"]);
    exports["default"] = TextureCube;
    module.exports = exports["default"];
  }), {
    "./enums": 248,
    "./misc": 252,
    "./texture": 258
  } ],
  258: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _enums = require("./enums");
    var _nullWebGLTexture = null;
    var _textureID = 0;
    var Texture = (function() {
      function Texture(device) {
        this._device = device;
        this._width = 4;
        this._height = 4;
        this._genMipmaps = false;
        this._compressed = false;
        this._anisotropy = 1;
        this._minFilter = _enums.enums.FILTER_LINEAR;
        this._magFilter = _enums.enums.FILTER_LINEAR;
        this._mipFilter = _enums.enums.FILTER_LINEAR;
        this._wrapS = _enums.enums.WRAP_REPEAT;
        this._wrapT = _enums.enums.WRAP_REPEAT;
        this._format = _enums.enums.TEXTURE_FMT_RGBA8;
        this._target = -1;
        this._id = _textureID++;
      }
      var _proto = Texture.prototype;
      _proto.destroy = function destroy() {
        if (this._glID === _nullWebGLTexture) {
          console.error("The texture already destroyed");
          return;
        }
        var gl = this._device._gl;
        gl.deleteTexture(this._glID);
        this._device._stats.tex -= this.bytes;
        this._glID = _nullWebGLTexture;
      };
      return Texture;
    })();
    exports["default"] = Texture;
    module.exports = exports["default"];
  }), {
    "./enums": 248
  } ],
  259: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _enums = require("./enums");
    function _defineProperties(target, props) {
      for (var i = 0; i < props.length; i++) {
        var descriptor = props[i];
        descriptor.enumerable = descriptor.enumerable || false;
        descriptor.configurable = true;
        "value" in descriptor && (descriptor.writable = true);
        Object.defineProperty(target, descriptor.key, descriptor);
      }
    }
    function _createClass(Constructor, protoProps, staticProps) {
      protoProps && _defineProperties(Constructor.prototype, protoProps);
      staticProps && _defineProperties(Constructor, staticProps);
      return Constructor;
    }
    var VertexBuffer = (function() {
      function VertexBuffer(device, format, usage, data) {
        this._device = device;
        this._format = format;
        this._usage = usage;
        this._bytesPerVertex = this._format._bytes;
        this._bytes = data.byteLength;
        this._numVertices = this._bytes / this._bytesPerVertex;
        this._needExpandDataStore = true;
        this._glID = device._gl.createBuffer();
        this.update(0, data);
        device._stats.vb += this._bytes;
      }
      var _proto = VertexBuffer.prototype;
      _proto.destroy = function destroy() {
        if (-1 === this._glID) {
          console.error("The buffer already destroyed");
          return;
        }
        var gl = this._device._gl;
        gl.deleteBuffer(this._glID);
        this._device._stats.vb -= this.bytes;
        this._glID = -1;
      };
      _proto.update = function update(byteOffset, data) {
        if (-1 === this._glID) {
          console.error("The buffer is destroyed");
          return;
        }
        if (0 === data.byteLength) return;
        if (byteOffset + data.byteLength > this._bytes) {
          if (byteOffset) {
            console.error("Failed to update data, bytes exceed.");
            return;
          }
          this._needExpandDataStore = true;
          this._bytes = byteOffset + data.byteLength;
          this._numVertices = this._bytes / this._bytesPerVertex;
        }
        var gl = this._device._gl;
        var glUsage = this._usage;
        gl.bindBuffer(gl.ARRAY_BUFFER, this._glID);
        if (this._needExpandDataStore) {
          gl.bufferData(gl.ARRAY_BUFFER, data, glUsage);
          this._needExpandDataStore = false;
        } else gl.bufferSubData(gl.ARRAY_BUFFER, byteOffset, data);
        gl.bindBuffer(gl.ARRAY_BUFFER, null);
      };
      _proto.getFormat = function getFormat(name) {
        return this._format.element(name);
      };
      _proto.setUsage = function setUsage(usage) {
        this._usage = usage;
      };
      _createClass(VertexBuffer, [ {
        key: "count",
        get: function get() {
          return this._numVertices;
        }
      } ]);
      return VertexBuffer;
    })();
    var _default = VertexBuffer;
    exports["default"] = _default;
    module.exports = exports["default"];
  }), {
    "./enums": 248
  } ],
  260: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _enums = require("./enums");
    var _murmurhash2_gc = _interopRequireDefault(require("../murmurhash2_gc"));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    var VertexFormat = (function() {
      function VertexFormat(infos) {
        this._attr2el = {};
        this._elements = [];
        this._bytes = 0;
        var hash = "";
        for (var i = 0, len = infos.length; i < len; ++i) {
          var info = infos[i];
          var el = {
            name: info.name,
            offset: this._bytes,
            stride: 0,
            stream: -1,
            type: info.type,
            num: info.num,
            normalize: void 0 !== info.normalize && info.normalize,
            bytes: info.num * (0, _enums.attrTypeBytes)(info.type)
          };
          this._attr2el[el.name] = el;
          this._elements.push(el);
          this._bytes += el.bytes;
          hash += el.name + ":" + el.num + ":" + el.type + ":" + el.normalize;
        }
        for (var _i = 0, _len = this._elements.length; _i < _len; ++_i) {
          var _el = this._elements[_i];
          _el.stride = this._bytes;
        }
        this._hash = (0, _murmurhash2_gc["default"])(hash, 666);
      }
      var _proto = VertexFormat.prototype;
      _proto.element = function element(attrName) {
        return this._attr2el[attrName];
      };
      _proto.getHash = function getHash() {
        return this._hash;
      };
      return VertexFormat;
    })();
    exports["default"] = VertexFormat;
    module.exports = exports["default"];
  }), {
    "../murmurhash2_gc": 269,
    "./enums": 248
  } ],
  261: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var CircularPool = (function() {
      function CircularPool(fn, size) {
        this._cursor = 0;
        this._data = new Array(size);
        for (var i = 0; i < size; ++i) this._data[i] = fn();
      }
      var _proto = CircularPool.prototype;
      _proto.request = function request() {
        var item = this._data[this._cursor];
        this._cursor = (this._cursor + 1) % this._data.length;
        return item;
      };
      return CircularPool;
    })();
    exports["default"] = CircularPool;
    module.exports = exports["default"];
  }), {} ],
  262: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _timsort = _interopRequireDefault(require("./timsort"));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    function _defineProperties(target, props) {
      for (var i = 0; i < props.length; i++) {
        var descriptor = props[i];
        descriptor.enumerable = descriptor.enumerable || false;
        descriptor.configurable = true;
        "value" in descriptor && (descriptor.writable = true);
        Object.defineProperty(target, descriptor.key, descriptor);
      }
    }
    function _createClass(Constructor, protoProps, staticProps) {
      protoProps && _defineProperties(Constructor.prototype, protoProps);
      staticProps && _defineProperties(Constructor, staticProps);
      return Constructor;
    }
    var FixedArray = (function() {
      function FixedArray(size) {
        this._count = 0;
        this._data = new Array(size);
      }
      var _proto = FixedArray.prototype;
      _proto._resize = function _resize(size) {
        if (size > this._data.length) for (var i = this._data.length; i < size; ++i) this._data[i] = void 0;
      };
      _proto.reset = function reset() {
        for (var i = 0; i < this._count; ++i) this._data[i] = void 0;
        this._count = 0;
      };
      _proto.push = function push(val) {
        this._count >= this._data.length && this._resize(2 * this._data.length);
        this._data[this._count] = val;
        ++this._count;
      };
      _proto.pop = function pop() {
        --this._count;
        this._count < 0 && (this._count = 0);
        var ret = this._data[this._count];
        this._data[this._count] = void 0;
        return ret;
      };
      _proto.fastRemove = function fastRemove(idx) {
        if (idx >= this._count || idx < 0) return;
        var last = this._count - 1;
        this._data[idx] = this._data[last];
        this._data[last] = void 0;
        this._count -= 1;
      };
      _proto.indexOf = function indexOf(val) {
        return this._data.indexOf(val);
      };
      _proto.sort = function sort(cmp) {
        return (0, _timsort["default"])(this._data, 0, this._count, cmp);
      };
      _createClass(FixedArray, [ {
        key: "length",
        get: function get() {
          return this._count;
        }
      }, {
        key: "data",
        get: function get() {
          return this._data;
        }
      } ]);
      return FixedArray;
    })();
    exports["default"] = FixedArray;
    module.exports = exports["default"];
  }), {
    "./timsort": 267
  } ],
  263: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports.TypedArrayPool = exports.RecyclePool = exports.Pool = exports.LinkedArray = exports.FixedArray = exports.CircularPool = void 0;
    var _circularPool = _interopRequireDefault(require("./circular-pool"));
    exports.CircularPool = _circularPool["default"];
    var _fixedArray = _interopRequireDefault(require("./fixed-array"));
    exports.FixedArray = _fixedArray["default"];
    var _linkedArray = _interopRequireDefault(require("./linked-array"));
    exports.LinkedArray = _linkedArray["default"];
    var _pool = _interopRequireDefault(require("./pool"));
    exports.Pool = _pool["default"];
    var _recyclePool = _interopRequireDefault(require("./recycle-pool"));
    exports.RecyclePool = _recyclePool["default"];
    var _typedArrayPool = _interopRequireDefault(require("./typed-array-pool"));
    exports.TypedArrayPool = _typedArrayPool["default"];
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
  }), {
    "./circular-pool": 261,
    "./fixed-array": 262,
    "./linked-array": 264,
    "./pool": 265,
    "./recycle-pool": 266,
    "./typed-array-pool": 268
  } ],
  264: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _pool = _interopRequireDefault(require("./pool"));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    function _defineProperties(target, props) {
      for (var i = 0; i < props.length; i++) {
        var descriptor = props[i];
        descriptor.enumerable = descriptor.enumerable || false;
        descriptor.configurable = true;
        "value" in descriptor && (descriptor.writable = true);
        Object.defineProperty(target, descriptor.key, descriptor);
      }
    }
    function _createClass(Constructor, protoProps, staticProps) {
      protoProps && _defineProperties(Constructor.prototype, protoProps);
      staticProps && _defineProperties(Constructor, staticProps);
      return Constructor;
    }
    var LinkedArray = (function() {
      function LinkedArray(fn, size) {
        this._fn = fn;
        this._count = 0;
        this._head = null;
        this._tail = null;
        this._pool = new _pool["default"](fn, size);
      }
      var _proto = LinkedArray.prototype;
      _proto.add = function add() {
        var node = this._pool.alloc();
        if (this._tail) {
          this._tail._next = node;
          node._prev = this._tail;
        } else this._head = node;
        this._tail = node;
        this._count += 1;
        return node;
      };
      _proto.remove = function remove(node) {
        node._prev ? node._prev._next = node._next : this._head = node._next;
        node._next ? node._next._prev = node._prev : this._tail = node._prev;
        node._next = null;
        node._prev = null;
        this._pool.free(node);
        this._count -= 1;
      };
      _proto.forEach = function forEach(fn, binder) {
        var cursor = this._head;
        if (!cursor) return;
        binder && (fn = fn.bind(binder));
        var idx = 0;
        var next = cursor;
        while (cursor) {
          next = cursor._next;
          fn(cursor, idx, this);
          cursor = next;
          ++idx;
        }
      };
      _createClass(LinkedArray, [ {
        key: "head",
        get: function get() {
          return this._head;
        }
      }, {
        key: "tail",
        get: function get() {
          return this._tail;
        }
      }, {
        key: "length",
        get: function get() {
          return this._count;
        }
      } ]);
      return LinkedArray;
    })();
    exports["default"] = LinkedArray;
    module.exports = exports["default"];
  }), {
    "./pool": 265
  } ],
  265: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var Pool = (function() {
      function Pool(fn, size) {
        this._fn = fn;
        this._idx = size - 1;
        this._frees = new Array(size);
        for (var i = 0; i < size; ++i) this._frees[i] = fn();
      }
      var _proto = Pool.prototype;
      _proto._expand = function _expand(size) {
        var old = this._frees;
        this._frees = new Array(size);
        var len = size - old.length;
        for (var i = 0; i < len; ++i) this._frees[i] = this._fn();
        for (var _i = len, j = 0; _i < size; ++_i, ++j) this._frees[_i] = old[j];
        this._idx += len;
      };
      _proto.alloc = function alloc() {
        this._idx < 0 && this._expand(Math.round(1.2 * this._frees.length) + 1);
        var ret = this._frees[this._idx];
        this._frees[this._idx] = null;
        --this._idx;
        return ret;
      };
      _proto.free = function free(obj) {
        ++this._idx;
        this._frees[this._idx] = obj;
      };
      _proto.clear = function clear(fn) {
        for (var i = 0; i <= this._idx; i++) fn && fn(this._frees[i]);
        this._frees.length = 0;
        this._idx = -1;
      };
      return Pool;
    })();
    exports["default"] = Pool;
    module.exports = exports["default"];
  }), {} ],
  266: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _timsort = _interopRequireDefault(require("./timsort"));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    function _defineProperties(target, props) {
      for (var i = 0; i < props.length; i++) {
        var descriptor = props[i];
        descriptor.enumerable = descriptor.enumerable || false;
        descriptor.configurable = true;
        "value" in descriptor && (descriptor.writable = true);
        Object.defineProperty(target, descriptor.key, descriptor);
      }
    }
    function _createClass(Constructor, protoProps, staticProps) {
      protoProps && _defineProperties(Constructor.prototype, protoProps);
      staticProps && _defineProperties(Constructor, staticProps);
      return Constructor;
    }
    var RecyclePool = (function() {
      function RecyclePool(fn, size) {
        this._fn = fn;
        this._count = 0;
        this._data = new Array(size);
        for (var i = 0; i < size; ++i) this._data[i] = fn();
      }
      var _proto = RecyclePool.prototype;
      _proto.reset = function reset() {
        this._count = 0;
      };
      _proto.resize = function resize(size) {
        if (size > this._data.length) for (var i = this._data.length; i < size; ++i) this._data[i] = this._fn();
      };
      _proto.add = function add() {
        this._count >= this._data.length && this.resize(2 * this._data.length);
        return this._data[this._count++];
      };
      _proto.remove = function remove(idx) {
        if (idx >= this._count) return;
        var last = this._count - 1;
        var tmp = this._data[idx];
        this._data[idx] = this._data[last];
        this._data[last] = tmp;
        this._count -= 1;
      };
      _proto.sort = function sort(cmp) {
        return (0, _timsort["default"])(this._data, 0, this._count, cmp);
      };
      _createClass(RecyclePool, [ {
        key: "length",
        get: function get() {
          return this._count;
        }
      }, {
        key: "data",
        get: function get() {
          return this._data;
        }
      } ]);
      return RecyclePool;
    })();
    exports["default"] = RecyclePool;
    cc.RecyclePool = RecyclePool;
    module.exports = exports["default"];
  }), {
    "./timsort": 267
  } ],
  267: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = _default;
    var DEFAULT_MIN_MERGE = 32;
    var DEFAULT_MIN_GALLOPING = 7;
    var DEFAULT_TMP_STORAGE_LENGTH = 256;
    var POWERS_OF_TEN = [ 1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9 ];
    function log10(x) {
      if (x < 1e5) {
        if (x < 100) return x < 10 ? 0 : 1;
        if (x < 1e4) return x < 1e3 ? 2 : 3;
        return 4;
      }
      if (x < 1e7) return x < 1e6 ? 5 : 6;
      if (x < 1e9) return x < 1e8 ? 7 : 8;
      return 9;
    }
    function alphabeticalCompare(a, b) {
      if (a === b) return 0;
      if (~~a === a && ~~b === b) {
        if (0 === a || 0 === b) return a < b ? -1 : 1;
        if (a < 0 || b < 0) {
          if (b >= 0) return -1;
          if (a >= 0) return 1;
          a = -a;
          b = -b;
        }
        var al = log10(a);
        var bl = log10(b);
        var t = 0;
        if (al < bl) {
          a *= POWERS_OF_TEN[bl - al - 1];
          b /= 10;
          t = -1;
        } else if (al > bl) {
          b *= POWERS_OF_TEN[al - bl - 1];
          a /= 10;
          t = 1;
        }
        if (a === b) return t;
        return a < b ? -1 : 1;
      }
      var aStr = String(a);
      var bStr = String(b);
      if (aStr === bStr) return 0;
      return aStr < bStr ? -1 : 1;
    }
    function minRunLength(n) {
      var r = 0;
      while (n >= DEFAULT_MIN_MERGE) {
        r |= 1 & n;
        n >>= 1;
      }
      return n + r;
    }
    function makeAscendingRun(array, lo, hi, compare) {
      var runHi = lo + 1;
      if (runHi === hi) return 1;
      if (compare(array[runHi++], array[lo]) < 0) {
        while (runHi < hi && compare(array[runHi], array[runHi - 1]) < 0) runHi++;
        reverseRun(array, lo, runHi);
      } else while (runHi < hi && compare(array[runHi], array[runHi - 1]) >= 0) runHi++;
      return runHi - lo;
    }
    function reverseRun(array, lo, hi) {
      hi--;
      while (lo < hi) {
        var t = array[lo];
        array[lo++] = array[hi];
        array[hi--] = t;
      }
    }
    function binaryInsertionSort(array, lo, hi, start, compare) {
      start === lo && start++;
      for (;start < hi; start++) {
        var pivot = array[start];
        var left = lo;
        var right = start;
        while (left < right) {
          var mid = left + right >>> 1;
          compare(pivot, array[mid]) < 0 ? right = mid : left = mid + 1;
        }
        var n = start - left;
        switch (n) {
         case 3:
          array[left + 3] = array[left + 2];

         case 2:
          array[left + 2] = array[left + 1];

         case 1:
          array[left + 1] = array[left];
          break;

         default:
          while (n > 0) {
            array[left + n] = array[left + n - 1];
            n--;
          }
        }
        array[left] = pivot;
      }
    }
    function gallopLeft(value, array, start, length, hint, compare) {
      var lastOffset = 0;
      var maxOffset = 0;
      var offset = 1;
      if (compare(value, array[start + hint]) > 0) {
        maxOffset = length - hint;
        while (offset < maxOffset && compare(value, array[start + hint + offset]) > 0) {
          lastOffset = offset;
          offset = 1 + (offset << 1);
          offset <= 0 && (offset = maxOffset);
        }
        offset > maxOffset && (offset = maxOffset);
        lastOffset += hint;
        offset += hint;
      } else {
        maxOffset = hint + 1;
        while (offset < maxOffset && compare(value, array[start + hint - offset]) <= 0) {
          lastOffset = offset;
          offset = 1 + (offset << 1);
          offset <= 0 && (offset = maxOffset);
        }
        offset > maxOffset && (offset = maxOffset);
        var tmp = lastOffset;
        lastOffset = hint - offset;
        offset = hint - tmp;
      }
      lastOffset++;
      while (lastOffset < offset) {
        var m = lastOffset + (offset - lastOffset >>> 1);
        compare(value, array[start + m]) > 0 ? lastOffset = m + 1 : offset = m;
      }
      return offset;
    }
    function gallopRight(value, array, start, length, hint, compare) {
      var lastOffset = 0;
      var maxOffset = 0;
      var offset = 1;
      if (compare(value, array[start + hint]) < 0) {
        maxOffset = hint + 1;
        while (offset < maxOffset && compare(value, array[start + hint - offset]) < 0) {
          lastOffset = offset;
          offset = 1 + (offset << 1);
          offset <= 0 && (offset = maxOffset);
        }
        offset > maxOffset && (offset = maxOffset);
        var tmp = lastOffset;
        lastOffset = hint - offset;
        offset = hint - tmp;
      } else {
        maxOffset = length - hint;
        while (offset < maxOffset && compare(value, array[start + hint + offset]) >= 0) {
          lastOffset = offset;
          offset = 1 + (offset << 1);
          offset <= 0 && (offset = maxOffset);
        }
        offset > maxOffset && (offset = maxOffset);
        lastOffset += hint;
        offset += hint;
      }
      lastOffset++;
      while (lastOffset < offset) {
        var m = lastOffset + (offset - lastOffset >>> 1);
        compare(value, array[start + m]) < 0 ? offset = m : lastOffset = m + 1;
      }
      return offset;
    }
    var TimSort = (function() {
      function TimSort(array, compare) {
        this.array = array;
        this.compare = compare;
        this.minGallop = DEFAULT_MIN_GALLOPING;
        this.length = array.length;
        this.tmpStorageLength = DEFAULT_TMP_STORAGE_LENGTH;
        this.length < 2 * DEFAULT_TMP_STORAGE_LENGTH && (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;
      }
      var _proto = TimSort.prototype;
      _proto.pushRun = function pushRun(runStart, runLength) {
        this.runStart[this.stackSize] = runStart;
        this.runLength[this.stackSize] = runLength;
        this.stackSize += 1;
      };
      _proto.mergeRuns = function mergeRuns() {
        while (this.stackSize > 1) {
          var n = this.stackSize - 2;
          if (n >= 1 && this.runLength[n - 1] <= this.runLength[n] + this.runLength[n + 1] || n >= 2 && this.runLength[n - 2] <= this.runLength[n] + this.runLength[n - 1]) this.runLength[n - 1] < this.runLength[n + 1] && n--; else if (this.runLength[n] > this.runLength[n + 1]) break;
          this.mergeAt(n);
        }
      };
      _proto.forceMergeRuns = function forceMergeRuns() {
        while (this.stackSize > 1) {
          var n = this.stackSize - 2;
          n > 0 && this.runLength[n - 1] < this.runLength[n + 1] && n--;
          this.mergeAt(n);
        }
      };
      _proto.mergeAt = function mergeAt(i) {
        var compare = this.compare;
        var array = this.array;
        var start1 = this.runStart[i];
        var length1 = this.runLength[i];
        var start2 = this.runStart[i + 1];
        var length2 = this.runLength[i + 1];
        this.runLength[i] = length1 + length2;
        if (i === this.stackSize - 3) {
          this.runStart[i + 1] = this.runStart[i + 2];
          this.runLength[i + 1] = this.runLength[i + 2];
        }
        this.stackSize--;
        var k = gallopRight(array[start2], array, start1, length1, 0, compare);
        start1 += k;
        length1 -= k;
        if (0 === length1) return;
        length2 = gallopLeft(array[start1 + length1 - 1], array, start2, length2, length2 - 1, compare);
        if (0 === length2) return;
        length1 <= length2 ? this.mergeLow(start1, length1, start2, length2) : this.mergeHigh(start1, length1, start2, length2);
      };
      _proto.mergeLow = function mergeLow(start1, length1, start2, length2) {
        var compare = this.compare;
        var array = this.array;
        var tmp = this.tmp;
        var i = 0;
        for (i = 0; i < length1; i++) tmp[i] = array[start1 + i];
        var cursor1 = 0;
        var cursor2 = start2;
        var dest = start1;
        array[dest++] = array[cursor2++];
        if (0 === --length2) {
          for (i = 0; i < length1; i++) array[dest + i] = tmp[cursor1 + i];
          return;
        }
        if (1 === length1) {
          for (i = 0; i < length2; i++) array[dest + i] = array[cursor2 + i];
          array[dest + length2] = tmp[cursor1];
          return;
        }
        var minGallop = this.minGallop;
        while (true) {
          var count1 = 0;
          var count2 = 0;
          var exit = false;
          do {
            if (compare(array[cursor2], tmp[cursor1]) < 0) {
              array[dest++] = array[cursor2++];
              count2++;
              count1 = 0;
              if (0 === --length2) {
                exit = true;
                break;
              }
            } else {
              array[dest++] = tmp[cursor1++];
              count1++;
              count2 = 0;
              if (1 === --length1) {
                exit = true;
                break;
              }
            }
          } while ((count1 | count2) < minGallop);
          if (exit) break;
          do {
            count1 = gallopRight(array[cursor2], tmp, cursor1, length1, 0, compare);
            if (0 !== count1) {
              for (i = 0; i < count1; i++) array[dest + i] = tmp[cursor1 + i];
              dest += count1;
              cursor1 += count1;
              length1 -= count1;
              if (length1 <= 1) {
                exit = true;
                break;
              }
            }
            array[dest++] = array[cursor2++];
            if (0 === --length2) {
              exit = true;
              break;
            }
            count2 = gallopLeft(tmp[cursor1], array, cursor2, length2, 0, compare);
            if (0 !== count2) {
              for (i = 0; i < count2; i++) array[dest + i] = array[cursor2 + i];
              dest += count2;
              cursor2 += count2;
              length2 -= count2;
              if (0 === length2) {
                exit = true;
                break;
              }
            }
            array[dest++] = tmp[cursor1++];
            if (1 === --length1) {
              exit = true;
              break;
            }
            minGallop--;
          } while (count1 >= DEFAULT_MIN_GALLOPING || count2 >= DEFAULT_MIN_GALLOPING);
          if (exit) break;
          minGallop < 0 && (minGallop = 0);
          minGallop += 2;
        }
        this.minGallop = minGallop;
        minGallop < 1 && (this.minGallop = 1);
        if (1 === length1) {
          for (i = 0; i < length2; i++) array[dest + i] = array[cursor2 + i];
          array[dest + length2] = tmp[cursor1];
        } else {
          if (0 === length1) throw new Error("mergeLow preconditions were not respected");
          for (i = 0; i < length1; i++) array[dest + i] = tmp[cursor1 + i];
        }
      };
      _proto.mergeHigh = function mergeHigh(start1, length1, start2, length2) {
        var compare = this.compare;
        var array = this.array;
        var tmp = this.tmp;
        var i = 0;
        for (i = 0; i < length2; i++) tmp[i] = array[start2 + i];
        var cursor1 = start1 + length1 - 1;
        var cursor2 = length2 - 1;
        var dest = start2 + length2 - 1;
        var customCursor = 0;
        var customDest = 0;
        array[dest--] = array[cursor1--];
        if (0 === --length1) {
          customCursor = dest - (length2 - 1);
          for (i = 0; i < length2; i++) array[customCursor + i] = tmp[i];
          return;
        }
        if (1 === length2) {
          dest -= length1;
          cursor1 -= length1;
          customDest = dest + 1;
          customCursor = cursor1 + 1;
          for (i = length1 - 1; i >= 0; i--) array[customDest + i] = array[customCursor + i];
          array[dest] = tmp[cursor2];
          return;
        }
        var minGallop = this.minGallop;
        while (true) {
          var count1 = 0;
          var count2 = 0;
          var exit = false;
          do {
            if (compare(tmp[cursor2], array[cursor1]) < 0) {
              array[dest--] = array[cursor1--];
              count1++;
              count2 = 0;
              if (0 === --length1) {
                exit = true;
                break;
              }
            } else {
              array[dest--] = tmp[cursor2--];
              count2++;
              count1 = 0;
              if (1 === --length2) {
                exit = true;
                break;
              }
            }
          } while ((count1 | count2) < minGallop);
          if (exit) break;
          do {
            count1 = length1 - gallopRight(tmp[cursor2], array, start1, length1, length1 - 1, compare);
            if (0 !== count1) {
              dest -= count1;
              cursor1 -= count1;
              length1 -= count1;
              customDest = dest + 1;
              customCursor = cursor1 + 1;
              for (i = count1 - 1; i >= 0; i--) array[customDest + i] = array[customCursor + i];
              if (0 === length1) {
                exit = true;
                break;
              }
            }
            array[dest--] = tmp[cursor2--];
            if (1 === --length2) {
              exit = true;
              break;
            }
            count2 = length2 - gallopLeft(array[cursor1], tmp, 0, length2, length2 - 1, compare);
            if (0 !== count2) {
              dest -= count2;
              cursor2 -= count2;
              length2 -= count2;
              customDest = dest + 1;
              customCursor = cursor2 + 1;
              for (i = 0; i < count2; i++) array[customDest + i] = tmp[customCursor + i];
              if (length2 <= 1) {
                exit = true;
                break;
              }
            }
            array[dest--] = array[cursor1--];
            if (0 === --length1) {
              exit = true;
              break;
            }
            minGallop--;
          } while (count1 >= DEFAULT_MIN_GALLOPING || count2 >= DEFAULT_MIN_GALLOPING);
          if (exit) break;
          minGallop < 0 && (minGallop = 0);
          minGallop += 2;
        }
        this.minGallop = minGallop;
        minGallop < 1 && (this.minGallop = 1);
        if (1 === length2) {
          dest -= length1;
          cursor1 -= length1;
          customDest = dest + 1;
          customCursor = cursor1 + 1;
          for (i = length1 - 1; i >= 0; i--) array[customDest + i] = array[customCursor + i];
          array[dest] = tmp[cursor2];
        } else {
          if (0 === length2) throw new Error("mergeHigh preconditions were not respected");
          customCursor = dest - (length2 - 1);
          for (i = 0; i < length2; i++) array[customCursor + i] = tmp[i];
        }
      };
      return TimSort;
    })();
    function _default(array, lo, hi, compare) {
      if (!Array.isArray(array)) throw new TypeError("Can only sort arrays");
      void 0 === lo && (lo = 0);
      void 0 === hi && (hi = array.length);
      void 0 === compare && (compare = alphabeticalCompare);
      var remaining = hi - lo;
      if (remaining < 2) return;
      var runLength = 0;
      if (remaining < DEFAULT_MIN_MERGE) {
        runLength = makeAscendingRun(array, lo, hi, compare);
        binaryInsertionSort(array, lo, hi, lo + runLength, compare);
        return;
      }
      var ts = new TimSort(array, compare);
      var minRun = minRunLength(remaining);
      do {
        runLength = makeAscendingRun(array, lo, hi, compare);
        if (runLength < minRun) {
          var force = remaining;
          force > minRun && (force = minRun);
          binaryInsertionSort(array, lo, lo + force, lo + runLength, compare);
          runLength = force;
        }
        ts.pushRun(lo, runLength);
        ts.mergeRuns();
        remaining -= runLength;
        lo += runLength;
      } while (0 !== remaining);
      ts.forceMergeRuns();
    }
    module.exports = exports["default"];
  }), {} ],
  268: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _bufferPools = Array(8);
    for (var i = 0; i < 8; ++i) _bufferPools[i] = [];
    function _nextPow16(v) {
      for (var _i = 16; _i <= 1 << 28; _i *= 16) if (v <= _i) return _i;
      return 0;
    }
    function _log2(v) {
      var r, shift;
      r = (v > 65535) << 4;
      v >>>= r;
      shift = (v > 255) << 3;
      v >>>= shift;
      r |= shift;
      shift = (v > 15) << 2;
      v >>>= shift;
      r |= shift;
      shift = (v > 3) << 1;
      v >>>= shift;
      r |= shift;
      return r | v >> 1;
    }
    function _alloc(n) {
      var sz = _nextPow16(n);
      var bin = _bufferPools[_log2(sz) >> 2];
      if (bin.length > 0) return bin.pop();
      return new ArrayBuffer(sz);
    }
    function _free(buf) {
      _bufferPools[_log2(buf.byteLength) >> 2].push(buf);
    }
    var _default = {
      alloc_int8: function alloc_int8(n) {
        var result = new Int8Array(_alloc(n), 0, n);
        if (result.length !== n) return result.subarray(0, n);
        return result;
      },
      alloc_uint8: function alloc_uint8(n) {
        var result = new Uint8Array(_alloc(n), 0, n);
        if (result.length !== n) return result.subarray(0, n);
        return result;
      },
      alloc_int16: function alloc_int16(n) {
        var result = new Int16Array(_alloc(2 * n), 0, n);
        if (result.length !== n) return result.subarray(0, n);
        return result;
      },
      alloc_uint16: function alloc_uint16(n) {
        var result = new Uint16Array(_alloc(2 * n), 0, n);
        if (result.length !== n) return result.subarray(0, n);
        return result;
      },
      alloc_int32: function alloc_int32(n) {
        var result = new Int32Array(_alloc(4 * n), 0, n);
        if (result.length !== n) return result.subarray(0, n);
        return result;
      },
      alloc_uint32: function alloc_uint32(n) {
        var result = new Uint32Array(_alloc(4 * n), 0, n);
        if (result.length !== n) return result.subarray(0, n);
        return result;
      },
      alloc_float32: function alloc_float32(n) {
        var result = new Float32Array(_alloc(4 * n), 0, n);
        if (result.length !== n) return result.subarray(0, n);
        return result;
      },
      alloc_float64: function alloc_float64(n) {
        var result = new Float64Array(_alloc(8 * n), 0, n);
        if (result.length !== n) return result.subarray(0, n);
        return result;
      },
      alloc_dataview: function alloc_dataview(n) {
        var result = new DataView(_alloc(n), 0, n);
        if (result.length !== n) return result.subarray(0, n);
        return result;
      },
      free: function free(array) {
        _free(array.buffer);
      },
      reset: function reset() {
        var _bufferPools = Array(8);
        for (var _i2 = 0; _i2 < 8; ++_i2) _bufferPools[_i2] = [];
      }
    };
    exports["default"] = _default;
    module.exports = exports["default"];
  }), {} ],
  269: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = murmurhash2_32_gc;
    function murmurhash2_32_gc(str, seed) {
      var l = str.length, h = seed ^ l, i = 0, k;
      while (l >= 4) {
        k = 255 & str.charCodeAt(i) | (255 & str.charCodeAt(++i)) << 8 | (255 & str.charCodeAt(++i)) << 16 | (255 & str.charCodeAt(++i)) << 24;
        k = 1540483477 * (65535 & k) + ((1540483477 * (k >>> 16) & 65535) << 16);
        k ^= k >>> 24;
        k = 1540483477 * (65535 & k) + ((1540483477 * (k >>> 16) & 65535) << 16);
        h = 1540483477 * (65535 & h) + ((1540483477 * (h >>> 16) & 65535) << 16) ^ k;
        l -= 4;
        ++i;
      }
      switch (l) {
       case 3:
        h ^= (255 & str.charCodeAt(i + 2)) << 16;

       case 2:
        h ^= (255 & str.charCodeAt(i + 1)) << 8;

       case 1:
        h ^= 255 & str.charCodeAt(i);
        h = 1540483477 * (65535 & h) + ((1540483477 * (h >>> 16) & 65535) << 16);
      }
      h ^= h >>> 13;
      h = 1540483477 * (65535 & h) + ((1540483477 * (h >>> 16) & 65535) << 16);
      h ^= h >>> 15;
      return h >>> 0;
    }
    module.exports = exports["default"];
  }), {} ],
  270: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _valueTypes = require("../../core/value-types");
    var _baseRenderer = _interopRequireDefault(require("../core/base-renderer"));
    var _enums = _interopRequireDefault(require("../enums"));
    var _memop = require("../memop");
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    function _assertThisInitialized(self) {
      if (void 0 === self) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
      return self;
    }
    function _inheritsLoose(subClass, superClass) {
      subClass.prototype = Object.create(superClass.prototype);
      subClass.prototype.constructor = subClass;
      subClass.__proto__ = superClass;
    }
    var _a16_view = new Float32Array(16);
    var _a16_view_inv = new Float32Array(16);
    var _a16_proj = new Float32Array(16);
    var _a16_viewProj = new Float32Array(16);
    var _a4_camPos = new Float32Array(4);
    var _a64_shadow_lightViewProj = new Float32Array(64);
    var _a16_shadow_lightViewProjs = [];
    var _a4_shadow_info = new Float32Array(4);
    var _camPos = new _valueTypes.Vec4(0, 0, 0, 0);
    var _camFwd = new _valueTypes.Vec3(0, 0, 0);
    var _v3_tmp1 = new _valueTypes.Vec3(0, 0, 0);
    var CC_MAX_LIGHTS = 4;
    var CC_MAX_SHADOW_LIGHTS = 2;
    var _float16_pool = new _memop.RecyclePool(function() {
      return new Float32Array(16);
    }, 8);
    function sortView(a, b) {
      return a._priority - b._priority;
    }
    var ForwardRenderer = (function(_BaseRenderer) {
      _inheritsLoose(ForwardRenderer, _BaseRenderer);
      function ForwardRenderer(device, builtin) {
        var _this;
        _this = _BaseRenderer.call(this, device, builtin) || this;
        _this._time = new Float32Array(4);
        _this._lights = [];
        _this._shadowLights = [];
        _this._numLights = 0;
        _this._defines = {};
        _this._registerStage("shadowcast", _this._shadowStage.bind(_assertThisInitialized(_this)));
        _this._registerStage("opaque", _this._opaqueStage.bind(_assertThisInitialized(_this)));
        _this._registerStage("transparent", _this._transparentStage.bind(_assertThisInitialized(_this)));
        return _this;
      }
      var _proto = ForwardRenderer.prototype;
      _proto.reset = function reset() {
        _float16_pool.reset();
        _BaseRenderer.prototype.reset.call(this);
      };
      _proto.render = function render(scene, dt) {
        this.reset();
        true;
        if (dt) {
          this._time[0] += dt;
          this._time[1] = dt;
          this._time[2]++;
        }
        this._device.setUniform("cc_time", this._time);
        this._updateLights(scene);
        var canvas = this._device._gl.canvas;
        for (var i = 0; i < scene._cameras.length; ++i) {
          var view = this._requestView();
          var width = canvas.width;
          var height = canvas.height;
          var camera = scene._cameras.data[i];
          camera.extractView(view, width, height);
        }
        this._viewPools.sort(sortView);
        for (var _i = 0; _i < this._viewPools.length; ++_i) {
          var _view = this._viewPools.data[_i];
          this._render(_view, scene);
        }
      };
      _proto.renderCamera = function renderCamera(camera, scene) {
        this.reset();
        this._updateLights(scene);
        var canvas = this._device._gl.canvas;
        var width = canvas.width;
        var height = canvas.height;
        var view = this._requestView();
        camera.extractView(view, width, height);
        this._viewPools.sort(sortView);
        for (var i = 0; i < this._viewPools.length; ++i) {
          var _view2 = this._viewPools.data[i];
          this._render(_view2, scene);
        }
      };
      _proto._updateLights = function _updateLights(scene) {
        this._lights.length = 0;
        this._shadowLights.length = 0;
        var lights = scene._lights;
        for (var i = 0; i < lights.length; ++i) {
          var light = lights.data[i];
          light.update(this._device);
          if (light.shadowType !== _enums["default"].SHADOW_NONE) {
            this._shadowLights.length < CC_MAX_SHADOW_LIGHTS && this._shadowLights.splice(0, 0, light);
            var view = this._requestView();
            light.extractView(view, [ "shadowcast" ]);
            this._lights.splice(0, 0, light);
          } else this._lights.push(light);
        }
        this._updateLightDefines();
        this._numLights = lights._count;
      };
      _proto._updateLightDefines = function _updateLightDefines() {
        var defines = this._defines;
        for (var i = 0; i < this._lights.length; ++i) {
          var light = this._lights[i];
          defines["CC_LIGHT_" + i + "_TYPE"] = light._type;
          defines["CC_SHADOW_" + i + "_TYPE"] = light._shadowType;
        }
        defines.CC_NUM_LIGHTS = Math.min(CC_MAX_LIGHTS, this._lights.length);
        defines.CC_NUM_SHADOW_LIGHTS = Math.min(CC_MAX_LIGHTS, this._shadowLights.length);
      };
      _proto._submitLightsUniforms = function _submitLightsUniforms() {
        var device = this._device;
        if (this._lights.length > 0) {
          var positionAndRanges = _float16_pool.add();
          var directions = _float16_pool.add();
          var colors = _float16_pool.add();
          var lightNum = Math.min(CC_MAX_LIGHTS, this._lights.length);
          for (var i = 0; i < lightNum; ++i) {
            var light = this._lights[i];
            var index = 4 * i;
            colors.set(light._colorUniform, index);
            directions.set(light._directionUniform, index);
            positionAndRanges.set(light._positionUniform, index);
            positionAndRanges[index + 3] = light._range;
            if (light._type === _enums["default"].LIGHT_SPOT) {
              directions[index + 3] = light._spotUniform[0];
              colors[index + 3] = light._spotUniform[1];
            } else {
              directions[index + 3] = 0;
              colors[index + 3] = 0;
            }
          }
          device.setUniform("cc_lightDirection", directions);
          device.setUniform("cc_lightColor", colors);
          device.setUniform("cc_lightPositionAndRange", positionAndRanges);
        }
      };
      _proto._submitShadowStageUniforms = function _submitShadowStageUniforms(view) {
        var light = view._shadowLight;
        var shadowInfo = _a4_shadow_info;
        shadowInfo[0] = light.shadowMinDepth;
        shadowInfo[1] = light.shadowMaxDepth;
        shadowInfo[2] = light.shadowDepthScale;
        shadowInfo[3] = light.shadowDarkness;
        this._device.setUniform("cc_shadow_map_lightViewProjMatrix", _valueTypes.Mat4.toArray(_a16_viewProj, view._matViewProj));
        this._device.setUniform("cc_shadow_map_info", shadowInfo);
        this._device.setUniform("cc_shadow_map_bias", light.shadowBias);
        this._defines.CC_SHADOW_TYPE = light._shadowType;
      };
      _proto._submitOtherStagesUniforms = function _submitOtherStagesUniforms() {
        var shadowInfo = _float16_pool.add();
        for (var i = 0; i < this._shadowLights.length; ++i) {
          var light = this._shadowLights[i];
          var view = _a16_shadow_lightViewProjs[i];
          view || (view = _a16_shadow_lightViewProjs[i] = new Float32Array(_a64_shadow_lightViewProj.buffer, 64 * i, 16));
          _valueTypes.Mat4.toArray(view, light.viewProjMatrix);
          var index = 4 * i;
          shadowInfo[index] = light.shadowMinDepth;
          shadowInfo[index + 1] = light.shadowMaxDepth;
          shadowInfo[index + 2] = light._shadowResolution;
          shadowInfo[index + 3] = light.shadowDarkness;
        }
        this._device.setUniform("cc_shadow_lightViewProjMatrix", _a64_shadow_lightViewProj);
        this._device.setUniform("cc_shadow_info", shadowInfo);
      };
      _proto._sortItems = function _sortItems(items) {
        items.sort((function(a, b) {
          if (a.passes.length !== b.passes.length) return a.passes.length - b.passes.length;
          return a.sortKey - b.sortKey;
        }));
      };
      _proto._shadowStage = function _shadowStage(view, items) {
        this._submitShadowStageUniforms(view);
        for (var i = 0; i < items.length; ++i) {
          var item = items.data[i];
          item.effect.getDefine("CC_CASTING_SHADOW") && this._draw(item);
        }
      };
      _proto._drawItems = function _drawItems(view, items) {
        var shadowLights = this._shadowLights;
        if (0 === shadowLights.length && 0 === this._numLights) for (var i = 0; i < items.length; ++i) {
          var item = items.data[i];
          this._draw(item);
        } else for (var _i2 = 0; _i2 < items.length; ++_i2) {
          var _item = items.data[_i2];
          for (var shadowIdx = 0; shadowIdx < shadowLights.length; ++shadowIdx) this._device.setTexture("cc_shadow_map_" + shadowIdx, shadowLights[shadowIdx].shadowMap, this._allocTextureUnit());
          this._draw(_item);
        }
      };
      _proto._opaqueStage = function _opaqueStage(view, items) {
        view.getPosition(_camPos);
        this._device.setUniform("cc_matView", _valueTypes.Mat4.toArray(_a16_view, view._matView));
        this._device.setUniform("cc_matViewInv", _valueTypes.Mat4.toArray(_a16_view_inv, view._matViewInv));
        this._device.setUniform("cc_matProj", _valueTypes.Mat4.toArray(_a16_proj, view._matProj));
        this._device.setUniform("cc_matViewProj", _valueTypes.Mat4.toArray(_a16_viewProj, view._matViewProj));
        this._device.setUniform("cc_cameraPos", _valueTypes.Vec4.toArray(_a4_camPos, _camPos));
        this._submitLightsUniforms();
        this._submitOtherStagesUniforms();
        this._drawItems(view, items);
      };
      _proto._transparentStage = function _transparentStage(view, items) {
        view.getPosition(_camPos);
        view.getForward(_camFwd);
        this._device.setUniform("cc_matView", _valueTypes.Mat4.toArray(_a16_view, view._matView));
        this._device.setUniform("cc_matViewInv", _valueTypes.Mat4.toArray(_a16_view_inv, view._matViewInv));
        this._device.setUniform("cc_matProj", _valueTypes.Mat4.toArray(_a16_proj, view._matProj));
        this._device.setUniform("cc_matViewProj", _valueTypes.Mat4.toArray(_a16_viewProj, view._matViewProj));
        this._device.setUniform("cc_cameraPos", _valueTypes.Vec4.toArray(_a4_camPos, _camPos));
        this._submitLightsUniforms();
        this._submitOtherStagesUniforms();
        for (var i = 0; i < items.length; ++i) {
          var item = items.data[i];
          item.node.getWorldPosition(_v3_tmp1);
          _valueTypes.Vec3.sub(_v3_tmp1, _v3_tmp1, _camPos);
          item.sortKey = -_valueTypes.Vec3.dot(_v3_tmp1, _camFwd);
        }
        this._sortItems(items);
        this._drawItems(view, items);
      };
      return ForwardRenderer;
    })(_baseRenderer["default"]);
    exports["default"] = ForwardRenderer;
    module.exports = exports["default"];
  }), {
    "../../core/value-types": 224,
    "../core/base-renderer": 240,
    "../enums": 246,
    "../memop": 263
  } ],
  271: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _valueTypes = require("../../core/value-types");
    var _geomUtils = require("../../core/geom-utils");
    var _enums = _interopRequireDefault(require("../enums"));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    function _defineProperties(target, props) {
      for (var i = 0; i < props.length; i++) {
        var descriptor = props[i];
        descriptor.enumerable = descriptor.enumerable || false;
        descriptor.configurable = true;
        "value" in descriptor && (descriptor.writable = true);
        Object.defineProperty(target, descriptor.key, descriptor);
      }
    }
    function _createClass(Constructor, protoProps, staticProps) {
      protoProps && _defineProperties(Constructor.prototype, protoProps);
      staticProps && _defineProperties(Constructor, staticProps);
      return Constructor;
    }
    var _tmp_mat4 = new _valueTypes.Mat4();
    var _matView = new _valueTypes.Mat4();
    var _matViewInv = new _valueTypes.Mat4();
    var _matProj = new _valueTypes.Mat4();
    var _matViewProj = new _valueTypes.Mat4();
    var _matInvViewProj = new _valueTypes.Mat4();
    var _tmp_v3 = new _valueTypes.Vec3();
    var _tmp2_v3 = new _valueTypes.Vec3();
    var Camera = (function() {
      function Camera() {
        this._poolID = -1;
        this._node = null;
        this._projection = _enums["default"].PROJ_PERSPECTIVE;
        this._priority = 0;
        this._color = new _valueTypes.Vec4(.2, .3, .47, 1);
        this._depth = 1;
        this._stencil = 0;
        this._clearFlags = _enums["default"].CLEAR_COLOR | _enums["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;
      }
      var _proto = Camera.prototype;
      _proto.setCullingMask = function setCullingMask(mask) {
        this._cullingMask = mask;
      };
      _proto.getNode = function getNode() {
        return this._node;
      };
      _proto.setNode = function setNode(node) {
        this._node = node;
      };
      _proto.getType = function getType() {
        return this._projection;
      };
      _proto.setType = function setType(type) {
        this._projection = type;
      };
      _proto.getPriority = function getPriority() {
        return this._priority;
      };
      _proto.setPriority = function setPriority(priority) {
        this._priority = priority;
      };
      _proto.getOrthoHeight = function getOrthoHeight() {
        return this._orthoHeight;
      };
      _proto.setOrthoHeight = function setOrthoHeight(val) {
        this._orthoHeight = val;
      };
      _proto.getFov = function getFov() {
        return this._fov;
      };
      _proto.setFov = function setFov(fov) {
        this._fov = fov;
      };
      _proto.getNear = function getNear() {
        return this._near;
      };
      _proto.setNear = function setNear(near) {
        this._near = near;
      };
      _proto.getFar = function getFar() {
        return this._far;
      };
      _proto.setFar = function setFar(far) {
        this._far = far;
      };
      _proto.getColor = function getColor(out) {
        return _valueTypes.Vec4.copy(out, this._color);
      };
      _proto.setColor = function setColor(r, g, b, a) {
        _valueTypes.Vec4.set(this._color, r, g, b, a);
      };
      _proto.getDepth = function getDepth() {
        return this._depth;
      };
      _proto.setDepth = function setDepth(depth) {
        this._depth = depth;
      };
      _proto.getStencil = function getStencil() {
        return this._stencil;
      };
      _proto.setStencil = function setStencil(stencil) {
        this._stencil = stencil;
      };
      _proto.getClearFlags = function getClearFlags() {
        return this._clearFlags;
      };
      _proto.setClearFlags = function setClearFlags(flags) {
        this._clearFlags = flags;
      };
      _proto.getRect = function getRect(out) {
        out.x = this._rect.x;
        out.y = this._rect.y;
        out.w = this._rect.w;
        out.h = this._rect.h;
        return out;
      };
      _proto.setRect = function setRect(x, y, w, h) {
        this._rect.x = x;
        this._rect.y = y;
        this._rect.w = w;
        this._rect.h = h;
      };
      _proto.getStages = function getStages() {
        return this._stages;
      };
      _proto.setStages = function setStages(stages) {
        this._stages = stages;
      };
      _proto.getFramebuffer = function getFramebuffer() {
        return this._framebuffer;
      };
      _proto.setFrameBuffer = function setFrameBuffer(framebuffer) {
        this._framebuffer = framebuffer;
      };
      _proto._calcMatrices = function _calcMatrices(width, height) {
        this._node.getWorldRT(_matViewInv);
        _valueTypes.Mat4.invert(_matView, _matViewInv);
        var aspect = width / height;
        if (this._projection === _enums["default"].PROJ_PERSPECTIVE) _valueTypes.Mat4.perspective(_matProj, this._fov, aspect, this._near, this._far); else {
          var x = this._orthoHeight * aspect;
          var y = this._orthoHeight;
          _valueTypes.Mat4.ortho(_matProj, -x, x, -y, y, this._near, this._far);
        }
        _valueTypes.Mat4.mul(_matViewProj, _matProj, _matView);
        _valueTypes.Mat4.invert(_matInvViewProj, _matViewProj);
      };
      _proto.extractView = function extractView(out, width, height) {
        if (this._framebuffer) {
          width = this._framebuffer._width;
          height = this._framebuffer._height;
        }
        out._priority = this._priority;
        out._rect.x = this._rect.x * width;
        out._rect.y = this._rect.y * height;
        out._rect.w = this._rect.w * width;
        out._rect.h = this._rect.h * height;
        this.getColor(out._color);
        out._depth = this._depth;
        out._stencil = this._stencil;
        out._clearFlags = this._clearFlags;
        out._clearModel = this._clearModel;
        out._stages = this._stages;
        out._framebuffer = this._framebuffer;
        this._calcMatrices(width, height);
        _valueTypes.Mat4.copy(out._matView, _matView);
        _valueTypes.Mat4.copy(out._matViewInv, _matViewInv);
        _valueTypes.Mat4.copy(out._matProj, _matProj);
        _valueTypes.Mat4.copy(out._matViewProj, _matViewProj);
        _valueTypes.Mat4.copy(out._matInvViewProj, _matInvViewProj);
        out._cullingMask = this._cullingMask;
      };
      _proto.screenPointToRay = function screenPointToRay(x, y, width, height, out) {
        if (!cc.geomUtils) return out;
        out = out || new _geomUtils.Ray();
        this._calcMatrices(width, height);
        var cx = this._rect.x * width;
        var cy = this._rect.y * height;
        var cw = this._rect.w * width;
        var ch = this._rect.h * height;
        _valueTypes.Vec3.set(_tmp2_v3, (x - cx) / cw * 2 - 1, (y - cy) / ch * 2 - 1, 1);
        _valueTypes.Vec3.transformMat4(_tmp2_v3, _tmp2_v3, _matInvViewProj);
        if (this._projection === _enums["default"].PROJ_PERSPECTIVE) this._node.getWorldPosition(_tmp_v3); else {
          _valueTypes.Vec3.set(_tmp_v3, (x - cx) / cw * 2 - 1, (y - cy) / ch * 2 - 1, -1);
          _valueTypes.Vec3.transformMat4(_tmp_v3, _tmp_v3, _matInvViewProj);
        }
        return _geomUtils.Ray.fromPoints(out, _tmp_v3, _tmp2_v3);
      };
      _proto.screenToWorld = function screenToWorld(out, screenPos, width, height) {
        this._calcMatrices(width, height);
        var cx = this._rect.x * width;
        var cy = this._rect.y * height;
        var cw = this._rect.w * width;
        var ch = this._rect.h * height;
        if (this._projection === _enums["default"].PROJ_PERSPECTIVE) {
          _valueTypes.Vec3.set(out, (screenPos.x - cx) / cw * 2 - 1, (screenPos.y - cy) / ch * 2 - 1, .9999);
          _valueTypes.Vec3.transformMat4(out, out, _matInvViewProj);
          this._node.getWorldPosition(_tmp_v3);
          _valueTypes.Vec3.lerp(out, _tmp_v3, out, (0, _valueTypes.lerp)(this._near / this._far, 1, screenPos.z));
        } else {
          _valueTypes.Vec3.set(out, (screenPos.x - cx) / cw * 2 - 1, (screenPos.y - cy) / ch * 2 - 1, 2 * screenPos.z - 1);
          _valueTypes.Vec3.transformMat4(out, out, _matInvViewProj);
        }
        return out;
      };
      _proto.worldToScreen = function worldToScreen(out, worldPos, width, height) {
        this._calcMatrices(width, height);
        var cx = this._rect.x * width;
        var cy = this._rect.y * height;
        var cw = this._rect.w * width;
        var ch = this._rect.h * height;
        _valueTypes.Vec3.transformMat4(out, worldPos, _matViewProj);
        out.x = cx + .5 * (out.x + 1) * cw;
        out.y = cy + .5 * (out.y + 1) * ch;
        out.z = .5 * out.z + .5;
        return out;
      };
      _proto.worldMatrixToScreen = function worldMatrixToScreen(out, worldMatrix, width, height) {
        this._calcMatrices(width, height);
        _valueTypes.Mat4.mul(out, _matViewProj, worldMatrix);
        var halfWidth = width / 2;
        var halfHeight = height / 2;
        _valueTypes.Mat4.identity(_tmp_mat4);
        _valueTypes.Mat4.transform(_tmp_mat4, _tmp_mat4, _valueTypes.Vec3.set(_tmp_v3, halfWidth, halfHeight, 0));
        _valueTypes.Mat4.scale(_tmp_mat4, _tmp_mat4, _valueTypes.Vec3.set(_tmp_v3, halfWidth, halfHeight, 1));
        _valueTypes.Mat4.mul(out, _tmp_mat4, out);
        return out;
      };
      _createClass(Camera, [ {
        key: "cullingMask",
        get: function get() {
          return this._cullingMask;
        },
        set: function set(mask) {
          this._cullingMask = mask;
        }
      } ]);
      return Camera;
    })();
    exports["default"] = Camera;
    module.exports = exports["default"];
  }), {
    "../../core/geom-utils": void 0,
    "../../core/value-types": 224,
    "../enums": 246
  } ],
  272: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var Model = (function() {
      function Model() {
        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 = false;
        this._boundingShape = null;
      }
      var _proto = Model.prototype;
      _proto.setNode = function setNode(node) {
        this._node = node;
      };
      _proto.setInputAssembler = function setInputAssembler(ia) {
        this._inputAssembler = ia;
      };
      _proto.setEffect = function setEffect(effect) {
        this._effect = effect;
      };
      _proto.setUserKey = function setUserKey(key) {
        this._userKey = key;
      };
      _proto.extractDrawItem = function extractDrawItem(out) {
        out.model = this;
        out.node = this._node;
        out.ia = this._inputAssembler;
        out.effect = this._effect;
      };
      return Model;
    })();
    exports["default"] = Model;
    module.exports = exports["default"];
  }), {} ],
  273: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _memop = require("../memop");
    var Scene = (function() {
      function Scene(app) {
        this._lights = new _memop.FixedArray(16);
        this._models = new _memop.FixedArray(16);
        this._cameras = new _memop.FixedArray(16);
        this._debugCamera = null;
        this._app = app;
        this._views = [];
      }
      var _proto = Scene.prototype;
      _proto._add = function _add(pool, item) {
        if (-1 !== item._poolID) return;
        pool.push(item);
        item._poolID = pool.length - 1;
      };
      _proto._remove = function _remove(pool, item) {
        if (-1 === item._poolID) return;
        pool.data[pool.length - 1]._poolID = item._poolID;
        pool.fastRemove(item._poolID);
        item._poolID = -1;
      };
      _proto.reset = function reset() {
        for (var i = 0; i < this._models.length; ++i) {
          var model = this._models.data[i];
          model._viewID = -1;
        }
      };
      _proto.setDebugCamera = function setDebugCamera(cam) {
        this._debugCamera = cam;
      };
      _proto.getCameraCount = function getCameraCount() {
        return this._cameras.length;
      };
      _proto.getCamera = function getCamera(idx) {
        return this._cameras.data[idx];
      };
      _proto.addCamera = function addCamera(camera) {
        this._add(this._cameras, camera);
      };
      _proto.removeCamera = function removeCamera(camera) {
        this._remove(this._cameras, camera);
      };
      _proto.getModelCount = function getModelCount() {
        return this._models.length;
      };
      _proto.getModel = function getModel(idx) {
        return this._models.data[idx];
      };
      _proto.addModel = function addModel(model) {
        this._add(this._models, model);
      };
      _proto.removeModel = function removeModel(model) {
        this._remove(this._models, model);
      };
      _proto.getLightCount = function getLightCount() {
        return this._lights.length;
      };
      _proto.getLight = function getLight(idx) {
        return this._lights.data[idx];
      };
      _proto.addLight = function addLight(light) {
        this._add(this._lights, light);
      };
      _proto.removeLight = function removeLight(light) {
        this._remove(this._lights, light);
      };
      _proto.addView = function addView(view) {
        -1 === this._views.indexOf(view) && this._views.push(view);
      };
      _proto.removeView = function removeView(view) {
        var idx = this._views.indexOf(view);
        -1 !== idx && this._views.splice(idx, 1);
      };
      return Scene;
    })();
    var _default = Scene;
    exports["default"] = _default;
    module.exports = exports["default"];
  }), {
    "../memop": 263
  } ],
  274: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports.getInspectorProps = getInspectorProps;
    exports.getClassName = exports.getInstanceCtor = exports.getInstanceType = exports.enums2default = exports.ctor2enums = void 0;
    var _enums = _interopRequireDefault(require("./enums"));
    var _valueTypes = require("../core/value-types");
    var _CCTexture2D = _interopRequireDefault(require("../core/assets/CCTexture2D"));
    var _ctor2default, _enums2ctor, _ctor2enums, _enums2default;
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    var gfxTexture2D = null, gfxTextureCube = null;
    false;
    gfxTexture2D = require("./gfx/texture-2d");
    var CCObject = cc.Object;
    var ctor2default = (_ctor2default = {}, _ctor2default[Boolean] = function(v) {
      return v || false;
    }, _ctor2default[Number] = function(v) {
      return v ? ArrayBuffer.isView(v) ? v[0] : v : 0;
    }, _ctor2default[_valueTypes.Vec2] = function(v) {
      return v ? cc.v2(v[0], v[1]) : cc.v2();
    }, _ctor2default[_valueTypes.Vec3] = function(v) {
      return v ? cc.v3(v[0], v[1], v[2]) : cc.v3();
    }, _ctor2default[_valueTypes.Vec4] = function(v) {
      return v ? cc.v4(v[0], v[1], v[2], v[3]) : cc.v4();
    }, _ctor2default[_valueTypes.Color] = function(v) {
      return v ? cc.color(255 * v[0], 255 * v[1], 255 * v[2], 255 * (v[3] || 1)) : cc.color();
    }, _ctor2default[_valueTypes.Mat4] = function(v) {
      return v ? cc.mat4(v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7], v[8], v[9], v[10], v[11], v[12], v[13], v[14], v[15]) : cc.mat4();
    }, _ctor2default[_CCTexture2D["default"]] = function() {
      return null;
    }, _ctor2default[CCObject] = function() {
      return null;
    }, _ctor2default);
    var enums2ctor = (_enums2ctor = {}, _enums2ctor[_enums["default"].PARAM_INT] = Number, 
    _enums2ctor[_enums["default"].PARAM_INT2] = _valueTypes.Vec2, _enums2ctor[_enums["default"].PARAM_INT3] = _valueTypes.Vec3, 
    _enums2ctor[_enums["default"].PARAM_INT4] = _valueTypes.Vec4, _enums2ctor[_enums["default"].PARAM_FLOAT] = Number, 
    _enums2ctor[_enums["default"].PARAM_FLOAT2] = _valueTypes.Vec2, _enums2ctor[_enums["default"].PARAM_FLOAT3] = _valueTypes.Vec3, 
    _enums2ctor[_enums["default"].PARAM_FLOAT4] = _valueTypes.Vec4, _enums2ctor[_enums["default"].PARAM_MAT4] = _valueTypes.Mat4, 
    _enums2ctor[_enums["default"].PARAM_TEXTURE_2D] = _CCTexture2D["default"], _enums2ctor.color = _valueTypes.Color, 
    _enums2ctor.number = Number, _enums2ctor["boolean"] = Boolean, _enums2ctor["default"] = CCObject, 
    _enums2ctor);
    var ctor2enums = (_ctor2enums = {}, _ctor2enums[Number] = _enums["default"].PARAM_FLOAT, 
    _ctor2enums[_valueTypes.Vec2] = _enums["default"].PARAM_FLOAT2, _ctor2enums[_valueTypes.Vec3] = _enums["default"].PARAM_FLOAT3, 
    _ctor2enums[_valueTypes.Vec4] = _enums["default"].PARAM_FLOAT4, _ctor2enums[_valueTypes.Color] = _enums["default"].PARAM_COLOR3, 
    _ctor2enums[_valueTypes.Color] = _enums["default"].PARAM_COLOR4, _ctor2enums[_valueTypes.Mat4] = _enums["default"].PARAM_MAT4, 
    _ctor2enums[_CCTexture2D["default"]] = _enums["default"].PARAM_TEXTURE_2D, _ctor2enums[gfxTexture2D] = _enums["default"].PARAM_TEXTURE_2D, 
    _ctor2enums);
    exports.ctor2enums = ctor2enums;
    var enums2default = (_enums2default = {}, _enums2default[_enums["default"].PARAM_INT] = new Uint32Array([ 0 ]), 
    _enums2default[_enums["default"].PARAM_INT2] = new Uint32Array([ 0, 0 ]), _enums2default[_enums["default"].PARAM_INT3] = new Uint32Array([ 0, 0, 0 ]), 
    _enums2default[_enums["default"].PARAM_INT4] = new Uint32Array([ 0, 0, 0, 0 ]), 
    _enums2default[_enums["default"].PARAM_FLOAT] = new Float32Array([ 0 ]), _enums2default[_enums["default"].PARAM_FLOAT2] = new Float32Array([ 0, 0 ]), 
    _enums2default[_enums["default"].PARAM_FLOAT3] = new Float32Array([ 0, 0, 0 ]), 
    _enums2default[_enums["default"].PARAM_FLOAT4] = new Float32Array([ 0, 0, 0, 0 ]), 
    _enums2default[_enums["default"].PARAM_MAT4] = cc.mat4().m, _enums2default[_enums["default"].PARAM_TEXTURE_2D] = null, 
    _enums2default.number = 0, _enums2default["boolean"] = false, _enums2default);
    exports.enums2default = enums2default;
    var getInstanceType = function getInstanceType(t) {
      return enums2ctor[t] || enums2ctor["default"];
    };
    exports.getInstanceType = getInstanceType;
    var getInstanceCtor = function getInstanceCtor(t) {
      return ctor2default[getInstanceType(t)];
    };
    exports.getInstanceCtor = getInstanceCtor;
    var getClassName = function getClassName(t) {
      return cc.js.getClassName(getInstanceType(t));
    };
    exports.getClassName = getClassName;
    var className2InspectorName = {
      Number: "number",
      Boolean: "boolean"
    };
    function getInspectorProps(prop) {
      var editor = {
        type: prop.type
      };
      Object.assign(editor, prop.editor || prop.inspector);
      editor.defines = prop.defines;
      editor.value = getInstanceCtor(editor.type)(prop.value);
      prop.range && (editor.range = prop.range);
      var className = getClassName(editor.type);
      editor.typeName = className2InspectorName[className] || className;
      editor.valueCtor = enums2ctor[editor.type];
      if ("cc.Texture2D" == editor.typeName) {
        editor.typeName = "cc.Asset";
        editor.assetType = "cc.Texture2D";
      }
      return editor;
    }
  }), {
    "../core/assets/CCTexture2D": 74,
    "../core/value-types": 224,
    "./enums": 246,
    "./gfx/texture-2d": 256
  } ],
  275: [ (function(require, module, exports) {
    "use strict";
    var TiledMapAsset = cc.Class({
      name: "cc.TiledMapAsset",
      extends: cc.Asset,
      properties: {
        tmxXmlStr: "",
        textures: {
          default: [],
          type: [ cc.Texture2D ]
        },
        textureNames: [ cc.String ],
        textureSizes: {
          default: [],
          type: [ cc.Size ]
        },
        imageLayerTextures: {
          default: [],
          type: [ cc.Texture2D ]
        },
        imageLayerTextureNames: [ cc.String ],
        tsxFiles: [ cc.TextAsset ],
        tsxFileNames: [ cc.String ]
      },
      statics: {
        preventDeferredLoadDependents: true
      },
      createNode: false
    });
    cc.TiledMapAsset = TiledMapAsset;
    module.exports = TiledMapAsset;
  }), {} ],
  276: [ (function(require, module, exports) {
    "use strict";
    require("./cocos2d/core");
    require("./cocos2d/animation");
    false;
    require("./cocos2d/particle");
    require("./cocos2d/tilemap");
    require("./cocos2d/videoplayer/CCVideoPlayer");
    require("./cocos2d/webview/CCWebView");
    require("./cocos2d/core/components/CCStudioComponent");
    require("./extensions/ccpool/CCNodePool");
    require("./cocos2d/actions");
    require("./extensions/spine");
    require("./extensions/dragonbones");
    true;
    require("./cocos2d/deprecated");
  }), {
    "./cocos2d/actions": 8,
    "./cocos2d/animation": 17,
    "./cocos2d/core": 131,
    "./cocos2d/core/components/CCStudioComponent": void 0,
    "./cocos2d/deprecated": 236,
    "./cocos2d/particle": void 0,
    "./cocos2d/particle/CCParticleAsset": 238,
    "./cocos2d/tilemap": void 0,
    "./cocos2d/tilemap/CCTiledMapAsset": 275,
    "./cocos2d/videoplayer/CCVideoPlayer": void 0,
    "./cocos2d/webview/CCWebView": void 0,
    "./extensions/ccpool/CCNodePool": 277,
    "./extensions/dragonbones": 287,
    "./extensions/spine": 292
  } ],
  277: [ (function(require, module, exports) {
    "use strict";
    cc.NodePool = function(poolHandlerComp) {
      this.poolHandlerComp = poolHandlerComp;
      this._pool = [];
    };
    cc.NodePool.prototype = {
      constructor: cc.NodePool,
      size: function size() {
        return this._pool.length;
      },
      clear: function clear() {
        var count = this._pool.length;
        for (var i = 0; i < count; ++i) this._pool[i].destroy();
        this._pool.length = 0;
      },
      put: function put(obj) {
        if (obj && -1 === this._pool.indexOf(obj)) {
          obj.removeFromParent(false);
          var handler = this.poolHandlerComp ? obj.getComponent(this.poolHandlerComp) : null;
          handler && handler.unuse && handler.unuse();
          this._pool.push(obj);
        }
      },
      get: function get() {
        var last = this._pool.length - 1;
        if (last < 0) return null;
        var obj = this._pool[last];
        this._pool.length = last;
        var handler = this.poolHandlerComp ? obj.getComponent(this.poolHandlerComp) : null;
        handler && handler.reuse && handler.reuse.apply(handler, arguments);
        return obj;
      }
    };
    module.exports = cc.NodePool;
  }), {} ],
  278: [ (function(require, module, exports) {
    "use strict";
    var MaxCacheTime = 30;
    var FrameTime = 1 / 60;
    var _vertices = [];
    var _indices = [];
    var _boneInfoOffset = 0;
    var _vertexOffset = 0;
    var _indexOffset = 0;
    var _vfOffset = 0;
    var _preTexUrl = null;
    var _preBlendMode = null;
    var _segVCount = 0;
    var _segICount = 0;
    var _segOffset = 0;
    var _colorOffset = 0;
    var _preColor = null;
    var _x, _y;
    var AnimationCache = cc.Class({
      ctor: function ctor() {
        this._privateMode = false;
        this._inited = false;
        this._invalid = true;
        this._enableCacheAttachedInfo = false;
        this.frames = [];
        this.totalTime = 0;
        this.isCompleted = false;
        this._frameIdx = -1;
        this._armatureInfo = null;
        this._animationName = null;
        this._tempSegments = null;
        this._tempColors = null;
        this._tempBoneInfos = null;
      },
      init: function init(armatureInfo, animationName) {
        this._inited = true;
        this._armatureInfo = armatureInfo;
        this._animationName = animationName;
      },
      clear: function clear() {
        this._inited = false;
        for (var i = 0, n = this.frames.length; i < n; i++) {
          var frame = this.frames[i];
          frame.segments.length = 0;
        }
        this.invalidAllFrame();
      },
      begin: function begin() {
        if (!this._invalid) return;
        var armatureInfo = this._armatureInfo;
        var curAnimationCache = armatureInfo.curAnimationCache;
        curAnimationCache && curAnimationCache != this && (this._privateMode ? curAnimationCache.invalidAllFrame() : curAnimationCache.updateToFrame());
        var armature = armatureInfo.armature;
        var animation = armature.animation;
        animation.play(this._animationName, 1);
        armatureInfo.curAnimationCache = this;
        this._invalid = false;
        this._frameIdx = -1;
        this.totalTime = 0;
        this.isCompleted = false;
      },
      end: function end() {
        if (!this._needToUpdate()) {
          this._armatureInfo.curAnimationCache = null;
          this.frames.length = this._frameIdx + 1;
          this.isCompleted = true;
        }
      },
      _needToUpdate: function _needToUpdate(toFrameIdx) {
        var armatureInfo = this._armatureInfo;
        var armature = armatureInfo.armature;
        var animation = armature.animation;
        return !animation.isCompleted && this.totalTime < MaxCacheTime && (void 0 == toFrameIdx || this._frameIdx < toFrameIdx);
      },
      updateToFrame: function updateToFrame(toFrameIdx) {
        if (!this._inited) return;
        this.begin();
        if (!this._needToUpdate(toFrameIdx)) return;
        var armatureInfo = this._armatureInfo;
        var armature = armatureInfo.armature;
        do {
          armature.advanceTime(FrameTime);
          this._frameIdx++;
          this._updateFrame(armature, this._frameIdx);
          this.totalTime += FrameTime;
        } while (this._needToUpdate(toFrameIdx));
        this.end();
      },
      isInited: function isInited() {
        return this._inited;
      },
      isInvalid: function isInvalid() {
        return this._invalid;
      },
      invalidAllFrame: function invalidAllFrame() {
        this.isCompleted = false;
        this._invalid = true;
      },
      updateAllFrame: function updateAllFrame() {
        this.invalidAllFrame();
        this.updateToFrame();
      },
      enableCacheAttachedInfo: function enableCacheAttachedInfo() {
        if (!this._enableCacheAttachedInfo) {
          this._enableCacheAttachedInfo = true;
          this.invalidAllFrame();
        }
      },
      _updateFrame: function _updateFrame(armature, index) {
        _vfOffset = 0;
        _boneInfoOffset = 0;
        _indexOffset = 0;
        _vertexOffset = 0;
        _preTexUrl = null;
        _preBlendMode = null;
        _segVCount = 0;
        _segICount = 0;
        _segOffset = 0;
        _colorOffset = 0;
        _preColor = null;
        this.frames[index] = this.frames[index] || {
          segments: [],
          colors: [],
          boneInfos: [],
          vertices: null,
          uintVert: null,
          indices: null
        };
        var frame = this.frames[index];
        var segments = this._tempSegments = frame.segments;
        var colors = this._tempColors = frame.colors;
        var boneInfos = this._tempBoneInfos = frame.boneInfos;
        this._traverseArmature(armature, 1);
        _colorOffset > 0 && (colors[_colorOffset - 1].vfOffset = _vfOffset);
        colors.length = _colorOffset;
        boneInfos.length = _boneInfoOffset;
        var preSegOffset = _segOffset - 1;
        if (preSegOffset >= 0) if (_segICount > 0) {
          var preSegInfo = segments[preSegOffset];
          preSegInfo.indexCount = _segICount;
          preSegInfo.vfCount = 5 * _segVCount;
          preSegInfo.vertexCount = _segVCount;
          segments.length = _segOffset;
        } else segments.length = _segOffset - 1;
        if (0 === segments.length) return;
        var vertices = frame.vertices;
        var uintVert = frame.uintVert;
        if (!vertices || vertices.length < _vfOffset) {
          vertices = frame.vertices = new Float32Array(_vfOffset);
          uintVert = frame.uintVert = new Uint32Array(vertices.buffer);
        }
        for (var i = 0, j = 0; i < _vfOffset; ) {
          vertices[i++] = _vertices[j++];
          vertices[i++] = _vertices[j++];
          vertices[i++] = _vertices[j++];
          vertices[i++] = _vertices[j++];
          uintVert[i++] = _vertices[j++];
        }
        var indices = frame.indices;
        (!indices || indices.length < _indexOffset) && (indices = frame.indices = new Uint16Array(_indexOffset));
        for (var _i = 0; _i < _indexOffset; _i++) indices[_i] = _indices[_i];
        frame.vertices = vertices;
        frame.uintVert = uintVert;
        frame.indices = indices;
      },
      _traverseArmature: function _traverseArmature(armature, parentOpacity) {
        var colors = this._tempColors;
        var segments = this._tempSegments;
        var boneInfos = this._tempBoneInfos;
        var gVertices = _vertices;
        var gIndices = _indices;
        var slotVertices, slotIndices;
        var slots = armature._slots, slot, slotMatrix, slotMatrixm, slotColor, colorVal;
        var texture;
        var preSegOffset, preSegInfo;
        var bones = armature._bones;
        if (this._enableCacheAttachedInfo) for (var i = 0, l = bones.length; i < l; i++, 
        _boneInfoOffset++) {
          var bone = bones[i];
          var boneInfo = boneInfos[_boneInfoOffset];
          boneInfo || (boneInfo = boneInfos[_boneInfoOffset] = {
            globalTransformMatrix: new dragonBones.Matrix()
          });
          var boneMat = bone.globalTransformMatrix;
          var cacheBoneMat = boneInfo.globalTransformMatrix;
          cacheBoneMat.copyFrom(boneMat);
        }
        for (var _i2 = 0, _l = slots.length; _i2 < _l; _i2++) {
          slot = slots[_i2];
          if (!slot._visible || !slot._displayData) continue;
          slot.updateWorldMatrix();
          slotColor = slot._color;
          if (slot.childArmature) {
            this._traverseArmature(slot.childArmature, parentOpacity * slotColor.a / 255);
            continue;
          }
          texture = slot.getTexture();
          if (!texture) continue;
          if (_preTexUrl !== texture.nativeUrl || _preBlendMode !== slot._blendMode) {
            _preTexUrl = texture.nativeUrl;
            _preBlendMode = slot._blendMode;
            preSegOffset = _segOffset - 1;
            if (preSegOffset >= 0) if (_segICount > 0) {
              preSegInfo = segments[preSegOffset];
              preSegInfo.indexCount = _segICount;
              preSegInfo.vertexCount = _segVCount;
              preSegInfo.vfCount = 5 * _segVCount;
            } else _segOffset--;
            segments[_segOffset] = {
              tex: texture,
              blendMode: slot._blendMode,
              indexCount: 0,
              vertexCount: 0,
              vfCount: 0
            };
            _segOffset++;
            _segICount = 0;
            _segVCount = 0;
          }
          colorVal = (slotColor.a * parentOpacity << 24 >>> 0) + (slotColor.b << 16) + (slotColor.g << 8) + slotColor.r;
          if (_preColor !== colorVal) {
            _preColor = colorVal;
            _colorOffset > 0 && (colors[_colorOffset - 1].vfOffset = _vfOffset);
            colors[_colorOffset++] = {
              r: slotColor.r,
              g: slotColor.g,
              b: slotColor.b,
              a: slotColor.a * parentOpacity,
              vfOffset: 0
            };
          }
          slotVertices = slot._localVertices;
          slotIndices = slot._indices;
          slotMatrix = slot._worldMatrix;
          slotMatrixm = slotMatrix.m;
          for (var j = 0, vl = slotVertices.length; j < vl; ) {
            _x = slotVertices[j++];
            _y = slotVertices[j++];
            gVertices[_vfOffset++] = _x * slotMatrixm[0] + _y * slotMatrixm[4] + slotMatrixm[12];
            gVertices[_vfOffset++] = _x * slotMatrixm[1] + _y * slotMatrixm[5] + slotMatrixm[13];
            gVertices[_vfOffset++] = slotVertices[j++];
            gVertices[_vfOffset++] = slotVertices[j++];
            gVertices[_vfOffset++] = colorVal;
          }
          for (var ii = 0, il = slotIndices.length; ii < il; ii++) gIndices[_indexOffset++] = _segVCount + slotIndices[ii];
          _vertexOffset = _vfOffset / 5;
          _segICount += slotIndices.length;
          _segVCount += slotVertices.length / 4;
        }
      }
    });
    var ArmatureCache = cc.Class({
      ctor: function ctor() {
        this._privateMode = false;
        this._animationPool = {};
        this._armatureCache = {};
      },
      enablePrivateMode: function enablePrivateMode() {
        this._privateMode = true;
      },
      dispose: function dispose() {
        for (var key in this._armatureCache) {
          var armatureInfo = this._armatureCache[key];
          if (armatureInfo) {
            var armature = armatureInfo.armature;
            armature && armature.dispose();
          }
        }
        this._armatureCache = null;
        this._animationPool = null;
      },
      _removeArmature: function _removeArmature(armatureKey) {
        var armatureInfo = this._armatureCache[armatureKey];
        var animationsCache = armatureInfo.animationsCache;
        for (var aniKey in animationsCache) {
          var animationCache = animationsCache[aniKey];
          if (!animationCache) continue;
          this._animationPool[armatureKey + "#" + aniKey] = animationCache;
          animationCache.clear();
        }
        var armature = armatureInfo.armature;
        armature && armature.dispose();
        delete this._armatureCache[armatureKey];
      },
      resetArmature: function resetArmature(uuid) {
        for (var armatureKey in this._armatureCache) {
          if (-1 == armatureKey.indexOf(uuid)) continue;
          this._removeArmature(armatureKey);
        }
      },
      getArmatureCache: function getArmatureCache(armatureName, armatureKey, atlasUUID) {
        var armatureInfo = this._armatureCache[armatureKey];
        var armature;
        if (armatureInfo) armature = armatureInfo.armature; else {
          var factory = dragonBones.CCFactory.getInstance();
          var proxy = factory.buildArmatureDisplay(armatureName, armatureKey, "", atlasUUID);
          if (!proxy || !proxy._armature) return;
          armature = proxy._armature;
          if (!ArmatureCache.canCache(armature)) {
            armature.dispose();
            return;
          }
          this._armatureCache[armatureKey] = {
            armature: armature,
            animationsCache: {},
            curAnimationCache: null
          };
        }
        return armature;
      },
      getAnimationCache: function getAnimationCache(armatureKey, animationName) {
        var armatureInfo = this._armatureCache[armatureKey];
        if (!armatureInfo) return null;
        var animationsCache = armatureInfo.animationsCache;
        return animationsCache[animationName];
      },
      initAnimationCache: function initAnimationCache(armatureKey, animationName) {
        if (!animationName) return null;
        var armatureInfo = this._armatureCache[armatureKey];
        var armature = armatureInfo && armatureInfo.armature;
        if (!armature) return null;
        var animation = armature.animation;
        var hasAni = animation.hasAnimation(animationName);
        if (!hasAni) return null;
        var animationsCache = armatureInfo.animationsCache;
        var animationCache = animationsCache[animationName];
        if (!animationCache) {
          var poolKey = armatureKey + "#" + animationName;
          animationCache = this._animationPool[poolKey];
          if (animationCache) delete this._animationPool[poolKey]; else {
            animationCache = new AnimationCache();
            animationCache._privateMode = this._privateMode;
          }
          animationCache.init(armatureInfo, animationName);
          animationsCache[animationName] = animationCache;
        }
        return animationCache;
      },
      invalidAnimationCache: function invalidAnimationCache(armatureKey) {
        var armatureInfo = this._armatureCache[armatureKey];
        var armature = armatureInfo && armatureInfo.armature;
        if (!armature) return null;
        var animationsCache = armatureInfo.animationsCache;
        for (var aniKey in animationsCache) {
          var animationCache = animationsCache[aniKey];
          animationCache.invalidAllFrame();
        }
      },
      updateAnimationCache: function updateAnimationCache(armatureKey, animationName) {
        if (animationName) {
          var animationCache = this.initAnimationCache(armatureKey, animationName);
          if (!animationCache) return;
          animationCache.updateAllFrame();
        } else {
          var armatureInfo = this._armatureCache[armatureKey];
          var armature = armatureInfo && armatureInfo.armature;
          if (!armature) return null;
          var animationsCache = armatureInfo.animationsCache;
          for (var aniKey in animationsCache) {
            var _animationCache = animationsCache[aniKey];
            _animationCache.updateAllFrame();
          }
        }
      }
    });
    ArmatureCache.FrameTime = FrameTime;
    ArmatureCache.sharedCache = new ArmatureCache();
    ArmatureCache.canCache = function(armature) {
      var slots = armature._slots;
      for (var i = 0, l = slots.length; i < l; i++) {
        var slot = slots[i];
        if (slot.childArmature) return false;
      }
      return true;
    }, module.exports = ArmatureCache;
  }), {} ],
  279: [ (function(require, module, exports) {
    "use strict";
    var RenderComponent = require("../../cocos2d/core/components/CCRenderComponent");
    var EventTarget = require("../../cocos2d/core/event/event-target");
    var Graphics = require("../../cocos2d/core/graphics/graphics");
    var RenderFlow = require("../../cocos2d/core/renderer/render-flow");
    var FLAG_POST_RENDER = RenderFlow.FLAG_POST_RENDER;
    var ArmatureCache = require("./ArmatureCache");
    var AttachUtil = require("./AttachUtil");
    var DefaultArmaturesEnum = cc.Enum({
      default: -1
    });
    var DefaultAnimsEnum = cc.Enum({
      "<None>": 0
    });
    var DefaultCacheMode = cc.Enum({
      REALTIME: 0
    });
    var AnimationCacheMode = cc.Enum({
      REALTIME: 0,
      SHARED_CACHE: 1,
      PRIVATE_CACHE: 2
    });
    function setEnumAttr(obj, propName, enumDef) {
      cc.Class.Attr.setClassAttr(obj, propName, "type", "Enum");
      cc.Class.Attr.setClassAttr(obj, propName, "enumList", cc.Enum.getList(enumDef));
    }
    var ArmatureDisplay = cc.Class({
      name: "dragonBones.ArmatureDisplay",
      extends: RenderComponent,
      editor: false,
      statics: {
        AnimationCacheMode: AnimationCacheMode
      },
      properties: {
        _factory: {
          default: null,
          type: dragonBones.CCFactory,
          serializable: false
        },
        dragonAsset: {
          default: null,
          type: dragonBones.DragonBonesAsset,
          notify: function notify() {
            this._refresh();
            false;
          },
          tooltip: false
        },
        dragonAtlasAsset: {
          default: null,
          type: dragonBones.DragonBonesAtlasAsset,
          notify: function notify() {
            this._parseDragonAtlasAsset();
            this._refresh();
          },
          tooltip: false
        },
        _armatureName: "",
        armatureName: {
          get: function get() {
            return this._armatureName;
          },
          set: function set(value) {
            this._armatureName = value;
            var animNames = this.getAnimationNames(this._armatureName);
            if (!this.animationName || animNames.indexOf(this.animationName) < 0) {
              false;
              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: false
        },
        _animationName: "",
        animationName: {
          get: function get() {
            return this._animationName;
          },
          set: function set(value) {
            this._animationName = value;
          },
          visible: false
        },
        _defaultArmatureIndex: {
          default: 0,
          notify: function notify() {
            var armatureName = "";
            if (this.dragonAsset) {
              var armaturesEnum;
              this.dragonAsset && (armaturesEnum = this.dragonAsset.getArmatureEnum());
              if (!armaturesEnum) return cc.errorID(7400, this.name);
              armatureName = armaturesEnum[this._defaultArmatureIndex];
            }
            void 0 !== armatureName ? this.armatureName = armatureName : cc.errorID(7401, this.name);
          },
          type: DefaultArmaturesEnum,
          visible: true,
          editorOnly: true,
          animatable: false,
          displayName: "Armature",
          tooltip: false
        },
        _animationIndex: {
          default: 0,
          notify: function notify() {
            if (0 === this._animationIndex) {
              this.animationName = "";
              return;
            }
            var animsEnum;
            this.dragonAsset && (animsEnum = this.dragonAsset.getAnimsEnum(this.armatureName));
            if (!animsEnum) return;
            var animName = animsEnum[this._animationIndex];
            void 0 !== animName ? this.playAnimation(animName, this.playTimes) : cc.errorID(7402, this.name);
          },
          type: DefaultAnimsEnum,
          visible: true,
          editorOnly: true,
          displayName: "Animation",
          tooltip: false
        },
        _preCacheMode: -1,
        _cacheMode: AnimationCacheMode.REALTIME,
        _defaultCacheMode: {
          default: 0,
          type: AnimationCacheMode,
          notify: function notify() {
            if (this._defaultCacheMode !== AnimationCacheMode.REALTIME && this._armature && !ArmatureCache.canCache(this._armature)) {
              this._defaultCacheMode = AnimationCacheMode.REALTIME;
              cc.warn("Animation cache mode doesn't support skeletal nesting");
              return;
            }
            this.setAnimationCacheMode(this._defaultCacheMode);
          },
          editorOnly: true,
          visible: true,
          animatable: false,
          displayName: "Animation Cache Mode",
          tooltip: false
        },
        timeScale: {
          default: 1,
          notify: function notify() {
            this._armature && !this.isAnimationCached() && (this._armature.animation.timeScale = this.timeScale);
          },
          tooltip: false
        },
        playTimes: {
          default: -1,
          tooltip: false
        },
        premultipliedAlpha: {
          default: false,
          tooltip: false
        },
        debugBones: {
          default: false,
          notify: function notify() {
            this._updateDebugDraw();
          },
          tooltip: false
        },
        enableBatch: {
          default: false,
          notify: function notify() {
            this._updateBatch();
          },
          tooltip: false
        },
        _armatureKey: "",
        _accTime: 0,
        _playCount: 0,
        _frameCache: null,
        _curFrame: null,
        _playing: false,
        _armatureCache: null
      },
      ctor: function ctor() {
        this._eventTarget = new EventTarget();
        this._materialCache = {};
        this._inited = false;
        this.attachUtil = new AttachUtil();
        this._factory = dragonBones.CCFactory.getInstance();
      },
      onLoad: function onLoad() {
        var children = this.node.children;
        for (var i = 0, n = children.length; i < n; i++) {
          var child = children[i];
          var pos = child._name && child._name.search("CHILD_ARMATURE-");
          0 === pos && child.destroy();
        }
      },
      _updateBatch: function _updateBatch() {
        var baseMaterial = this.getMaterial(0);
        baseMaterial && baseMaterial.define("CC_USE_MODEL", !this.enableBatch);
        this._materialCache = {};
      },
      _updateMaterial: function _updateMaterial() {
        var baseMaterial = this.getMaterial(0);
        if (baseMaterial) {
          baseMaterial.define("CC_USE_MODEL", !this.enableBatch);
          baseMaterial.define("USE_TEXTURE", true);
          var srcBlendFactor = this.premultipliedAlpha ? cc.gfx.BLEND_ONE : cc.gfx.BLEND_SRC_ALPHA;
          var dstBlendFactor = cc.gfx.BLEND_ONE_MINUS_SRC_ALPHA;
          baseMaterial.setBlend(true, cc.gfx.BLEND_FUNC_ADD, srcBlendFactor, srcBlendFactor, cc.gfx.BLEND_FUNC_ADD, dstBlendFactor, dstBlendFactor);
        }
        this._materialCache = {};
      },
      disableRender: function disableRender() {
        this._super();
        this.node._renderFlag &= ~FLAG_POST_RENDER;
      },
      markForRender: function markForRender(enable) {
        this._super(enable);
        enable ? this.node._renderFlag |= FLAG_POST_RENDER : this.node._renderFlag &= ~FLAG_POST_RENDER;
      },
      _validateRender: function _validateRender() {
        var texture = this.dragonAtlasAsset && this.dragonAtlasAsset.texture;
        if (!texture || !texture.loaded) {
          this.disableRender();
          return;
        }
        this._super();
      },
      __preload: function __preload() {
        this._init();
      },
      _init: function _init() {
        if (this._inited) return;
        this._inited = true;
        this._resetAssembler();
        this._activateMaterial();
        this._parseDragonAtlasAsset();
        this._refresh();
        var children = this.node.children;
        for (var i = 0, n = children.length; i < n; i++) {
          var child = children[i];
          child && "DEBUG_DRAW_NODE" === child._name && child.destroy();
        }
        this._updateDebugDraw();
      },
      getArmatureKey: function getArmatureKey() {
        return this._armatureKey;
      },
      setAnimationCacheMode: function setAnimationCacheMode(cacheMode) {
        if (this._preCacheMode !== cacheMode) {
          this._cacheMode = cacheMode;
          this._buildArmature();
          this._armature && !this.isAnimationCached() && this._factory._dragonBones.clock.add(this._armature);
        }
      },
      isAnimationCached: function isAnimationCached() {
        false;
        return this._cacheMode !== AnimationCacheMode.REALTIME;
      },
      onEnable: function onEnable() {
        this._super();
        this._armature && !this.isAnimationCached() && this._factory._dragonBones.clock.add(this._armature);
      },
      onDisable: function onDisable() {
        this._super();
        this._armature && !this.isAnimationCached() && this._factory._dragonBones.clock.remove(this._armature);
      },
      _emitCacheCompleteEvent: function _emitCacheCompleteEvent() {
        this._eventTarget.emit(dragonBones.EventObject.LOOP_COMPLETE);
        this._eventTarget.emit(dragonBones.EventObject.COMPLETE);
      },
      update: function update(dt) {
        if (!this.isAnimationCached()) return;
        if (!this._frameCache) return;
        var frameCache = this._frameCache;
        if (!frameCache.isInited()) return;
        var frames = frameCache.frames;
        if (!this._playing) {
          if (frameCache.isInvalid()) {
            frameCache.updateToFrame();
            this._curFrame = frames[frames.length - 1];
          }
          return;
        }
        var frameTime = ArmatureCache.FrameTime;
        0 == this._accTime && 0 == this._playCount && this._eventTarget.emit(dragonBones.EventObject.START);
        var globalTimeScale = dragonBones.timeScale;
        this._accTime += dt * this.timeScale * globalTimeScale;
        var frameIdx = Math.floor(this._accTime / frameTime);
        frameCache.isCompleted || frameCache.updateToFrame(frameIdx);
        if (frameCache.isCompleted && frameIdx >= frames.length) {
          this._playCount++;
          if (this.playTimes > 0 && this._playCount >= this.playTimes) {
            this._curFrame = frames[frames.length - 1];
            this._accTime = 0;
            this._playing = false;
            this._playCount = 0;
            this._emitCacheCompleteEvent();
            return;
          }
          this._accTime = 0;
          frameIdx = 0;
          this._emitCacheCompleteEvent();
        }
        this._curFrame = frames[frameIdx];
      },
      onDestroy: function onDestroy() {
        this._super();
        this._inited = false;
        true;
        if (this._cacheMode === AnimationCacheMode.PRIVATE_CACHE) {
          this._armatureCache.dispose();
          this._armatureCache = null;
          this._armature = null;
        } else if (this._cacheMode === AnimationCacheMode.SHARED_CACHE) {
          this._armatureCache = null;
          this._armature = null;
        } else if (this._armature) {
          this._armature.dispose();
          this._armature = null;
        }
      },
      _updateDebugDraw: function _updateDebugDraw() {
        if (this.debugBones) {
          if (!this._debugDraw) {
            var debugDrawNode = new cc.PrivateNode();
            debugDrawNode.name = "DEBUG_DRAW_NODE";
            var debugDraw = debugDrawNode.addComponent(Graphics);
            debugDraw.lineWidth = 1;
            debugDraw.strokeColor = cc.color(255, 0, 0, 255);
            this._debugDraw = debugDraw;
          }
          this._debugDraw.node.parent = this.node;
        } else this._debugDraw && (this._debugDraw.node.parent = null);
      },
      _buildArmature: function _buildArmature() {
        if (!this.dragonAsset || !this.dragonAtlasAsset || !this.armatureName) return;
        if (this._armature) {
          true;
          this._preCacheMode === AnimationCacheMode.PRIVATE_CACHE ? this._armatureCache.dispose() : this._preCacheMode === AnimationCacheMode.REALTIME && this._armature.dispose();
          this._armatureCache = null;
          this._armature = null;
          this._displayProxy = null;
          this._frameCache = null;
          this._curFrame = null;
          this._playing = false;
          this._preCacheMode = null;
        }
        true;
        if (this._cacheMode === AnimationCacheMode.SHARED_CACHE) this._armatureCache = ArmatureCache.sharedCache; else if (this._cacheMode === AnimationCacheMode.PRIVATE_CACHE) {
          this._armatureCache = new ArmatureCache();
          this._armatureCache.enablePrivateMode();
        }
        var atlasUUID = this.dragonAtlasAsset._uuid;
        this._armatureKey = this.dragonAsset.init(this._factory, atlasUUID);
        if (this.isAnimationCached()) {
          this._armature = this._armatureCache.getArmatureCache(this.armatureName, this._armatureKey, atlasUUID);
          this._armature || (this._cacheMode = AnimationCacheMode.REALTIME);
        }
        this._preCacheMode = this._cacheMode;
        if (false, this._cacheMode === AnimationCacheMode.REALTIME) {
          this._displayProxy = this._factory.buildArmatureDisplay(this.armatureName, this._armatureKey, "", atlasUUID);
          if (!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 !== AnimationCacheMode.REALTIME && this.debugBones && cc.warn("Debug bones is invalid in cached mode");
        if (this._armature) {
          var armatureData = this._armature.armatureData;
          var aabb = armatureData.aabb;
          this.node.setContentSize(aabb.width, aabb.height);
        }
        this._updateBatch();
        this.attachUtil.init(this);
        this.attachUtil._associateAttachedNode();
        this.animationName && this.playAnimation(this.animationName, this.playTimes);
        this.markForRender(true);
      },
      _parseDragonAtlasAsset: function _parseDragonAtlasAsset() {
        this.dragonAtlasAsset && this.dragonAtlasAsset.init(this._factory);
      },
      _refresh: function _refresh() {
        this._buildArmature();
        false;
      },
      _updateCacheModeEnum: false,
      _updateAnimEnum: false,
      _updateArmatureEnum: false,
      playAnimation: function playAnimation(animName, playTimes) {
        this.playTimes = void 0 === playTimes ? -1 : playTimes;
        this.animationName = animName;
        if (this.isAnimationCached()) {
          var cache = this._armatureCache.getAnimationCache(this._armatureKey, animName);
          cache || (cache = this._armatureCache.initAnimationCache(this._armatureKey, animName));
          if (cache) {
            this._accTime = 0;
            this._playCount = 0;
            this._frameCache = cache;
            this.attachUtil._hasAttachedNode() && this._frameCache.enableCacheAttachedInfo();
            this._frameCache.updateToFrame(0);
            this._playing = true;
            this._curFrame = this._frameCache.frames[0];
          }
        } else if (this._armature) return this._armature.animation.play(animName, this.playTimes);
      },
      updateAnimationCache: function updateAnimationCache(animName) {
        if (!this.isAnimationCached()) return;
        this._armatureCache.updateAnimationCache(this._armatureKey, animName);
      },
      invalidAnimationCache: function invalidAnimationCache() {
        if (!this.isAnimationCached()) return;
        this._armatureCache.invalidAnimationCache(this._armatureKey);
      },
      getArmatureNames: function getArmatureNames() {
        var dragonBonesData = this._factory.getDragonBonesData(this._armatureKey);
        return dragonBonesData && dragonBonesData.armatureNames || [];
      },
      getAnimationNames: function getAnimationNames(armatureName) {
        var ret = [];
        var dragonBonesData = this._factory.getDragonBonesData(this._armatureKey);
        if (dragonBonesData) {
          var armatureData = dragonBonesData.getArmature(armatureName);
          if (armatureData) for (var animName in armatureData.animations) armatureData.animations.hasOwnProperty(animName) && ret.push(animName);
        }
        return ret;
      },
      on: function on(eventType, listener, target) {
        this.addEventListener(eventType, listener, target);
      },
      off: function off(eventType, listener, target) {
        this.removeEventListener(eventType, listener, target);
      },
      once: function once(eventType, listener, target) {
        this._eventTarget.once(eventType, listener, target);
      },
      addEventListener: function addEventListener(eventType, listener, target) {
        this._eventTarget.on(eventType, listener, target);
      },
      removeEventListener: function removeEventListener(eventType, listener, target) {
        this._eventTarget.off(eventType, listener, target);
      },
      buildArmature: function buildArmature(armatureName, node) {
        return this._factory.createArmatureNode(this, armatureName, node);
      },
      armature: function armature() {
        return this._armature;
      }
    });
    module.exports = dragonBones.ArmatureDisplay = ArmatureDisplay;
  }), {
    "../../cocos2d/core/components/CCRenderComponent": 100,
    "../../cocos2d/core/event/event-target": 121,
    "../../cocos2d/core/graphics/graphics": 127,
    "../../cocos2d/core/renderer/render-flow": 169,
    "./ArmatureCache": 278,
    "./AttachUtil": 280
  } ],
  280: [ (function(require, module, exports) {
    "use strict";
    var _mat = _interopRequireDefault(require("../../cocos2d/core/value-types/mat4"));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    var RenderFlow = require("../../cocos2d/core/renderer/render-flow");
    var FLAG_TRANSFORM = RenderFlow.FLAG_TRANSFORM;
    var EmptyHandle = function EmptyHandle() {};
    var ATTACHED_ROOT_NAME = "ATTACHED_NODE_TREE";
    var ATTACHED_PRE_NAME = "ATTACHED_NODE:";
    var limitNode = function limitNode(node) {
      Object.defineProperty(node, "_worldMatDirty", {
        get: function get() {
          return true;
        },
        set: function set(value) {}
      });
      node._calculWorldMatrix = EmptyHandle;
      node._mulMat = EmptyHandle;
    };
    var _tempMat4 = new _mat["default"]();
    var AttachUtil = cc.Class({
      name: "dragonBones.AttachUtil",
      ctor: function ctor() {
        this._inited = false;
        this._armature = null;
        this._armatureNode = null;
        this._armatureDisplay = null;
        this._attachedRootNode = null;
        this._attachedNodeArray = [];
        this._boneIndexToNode = {};
      },
      init: function init(armatureDisplay) {
        this._inited = true;
        this._armature = armatureDisplay._armature;
        this._armatureNode = armatureDisplay.node;
        this._armatureDisplay = armatureDisplay;
      },
      reset: function reset() {
        this._inited = false;
        this._armature = null;
        this._armatureNode = null;
        this._armatureDisplay = null;
      },
      _prepareAttachNode: function _prepareAttachNode() {
        var armature = this._armature;
        if (!armature) return;
        var rootNode = this._armatureNode.getChildByName(ATTACHED_ROOT_NAME);
        if (!rootNode || !rootNode.isValid) {
          rootNode = new cc.Node(ATTACHED_ROOT_NAME);
          limitNode(rootNode);
          this._armatureNode.addChild(rootNode);
        }
        var isCached = this._armatureDisplay.isAnimationCached();
        isCached && this._armatureDisplay._frameCache && this._armatureDisplay._frameCache.enableCacheAttachedInfo();
        this._attachedRootNode = rootNode;
        return rootNode;
      },
      _buildBoneAttachedNode: function _buildBoneAttachedNode(bone, boneIndex) {
        var boneNodeName = ATTACHED_PRE_NAME + bone.name;
        var boneNode = new cc.Node(boneNodeName);
        this._buildBoneRelation(boneNode, bone, boneIndex);
        return boneNode;
      },
      _buildBoneRelation: function _buildBoneRelation(boneNode, bone, boneIndex) {
        limitNode(boneNode);
        boneNode._bone = bone;
        boneNode._boneIndex = boneIndex;
        this._attachedNodeArray.push(boneNode);
        this._boneIndexToNode[boneIndex] = boneNode;
      },
      getAttachedRootNode: function getAttachedRootNode() {
        return this._attachedRootNode;
      },
      getAttachedNodes: function getAttachedNodes(boneName) {
        var nodeArray = this._attachedNodeArray;
        var res = [];
        if (!this._inited) return res;
        for (var i = 0, n = nodeArray.length; i < n; i++) {
          var boneNode = nodeArray[i];
          if (!boneNode || !boneNode.isValid) continue;
          boneNode.name === ATTACHED_PRE_NAME + boneName && res.push(boneNode);
        }
        return res;
      },
      _rebuildNodeArray: function _rebuildNodeArray() {
        var findMap = this._boneIndexToNode = {};
        var oldNodeArray = this._attachedNodeArray;
        var nodeArray = this._attachedNodeArray = [];
        for (var i = 0, n = oldNodeArray.length; i < n; i++) {
          var boneNode = oldNodeArray[i];
          if (!boneNode || !boneNode.isValid || boneNode._toRemove) continue;
          nodeArray.push(boneNode);
          findMap[boneNode._boneIndex] = boneNode;
        }
      },
      _sortNodeArray: function _sortNodeArray() {
        var nodeArray = this._attachedNodeArray;
        nodeArray.sort((function(a, b) {
          return a._boneIndex < b._boneIndex ? -1 : 1;
        }));
      },
      _getNodeByBoneIndex: function _getNodeByBoneIndex(boneIndex) {
        var findMap = this._boneIndexToNode;
        var boneNode = findMap[boneIndex];
        if (!boneNode || !boneNode.isValid) return null;
        return boneNode;
      },
      destroyAttachedNodes: function destroyAttachedNodes(boneName) {
        if (!this._inited) return;
        var nodeArray = this._attachedNodeArray;
        var markTree = function markTree(rootNode) {
          var children = rootNode.children;
          for (var i = 0, n = children.length; i < n; i++) {
            var c = children[i];
            c && markTree(c);
          }
          rootNode._toRemove = true;
        };
        for (var i = 0, n = nodeArray.length; i < n; i++) {
          var boneNode = nodeArray[i];
          if (!boneNode || !boneNode.isValid) continue;
          var delName = boneNode.name.split(ATTACHED_PRE_NAME)[1];
          if (delName === boneName) {
            markTree(boneNode);
            boneNode.removeFromParent(true);
            boneNode.destroy();
            nodeArray[i] = null;
          }
        }
        this._rebuildNodeArray();
      },
      generateAttachedNodes: function generateAttachedNodes(boneName) {
        var targetNodes = [];
        if (!this._inited) return targetNodes;
        var rootNode = this._prepareAttachNode();
        if (!rootNode) return targetNodes;
        var boneIndex = 0;
        var res = [];
        var attachedTraverse = function(armature) {
          if (!armature) return;
          var bones = armature.getBones(), bone;
          for (var i = 0, l = bones.length; i < l; i++) {
            bone = bones[i];
            bone._boneIndex = boneIndex++;
            boneName === bone.name && res.push(bone);
          }
          var slots = armature.getSlots(), slot;
          for (var _i = 0, _l = slots.length; _i < _l; _i++) {
            slot = slots[_i];
            slot.childArmature && attachedTraverse(slot.childArmature);
          }
        }.bind(this);
        attachedTraverse(this._armature);
        var buildBoneTree = function(bone) {
          if (!bone) return;
          var boneNode = this._getNodeByBoneIndex(bone._boneIndex);
          if (boneNode) return boneNode;
          boneNode = this._buildBoneAttachedNode(bone, bone._boneIndex);
          var subArmatureParentBone = null;
          if (bone.armature.parent) {
            var parentSlot = bone.armature.parent;
            subArmatureParentBone = parentSlot.parent;
          }
          var parentBoneNode = buildBoneTree(bone.parent || subArmatureParentBone) || rootNode;
          boneNode.parent = parentBoneNode;
          bone.parent ? boneNode._rootNode = parentBoneNode._rootNode : boneNode._rootNode = parentBoneNode;
          return boneNode;
        }.bind(this);
        for (var i = 0, n = res.length; i < n; i++) {
          var targetNode = buildBoneTree(res[i]);
          targetNode && targetNodes.push(targetNode);
        }
        this._sortNodeArray();
        return targetNodes;
      },
      destroyAllAttachedNodes: function destroyAllAttachedNodes() {
        this._attachedRootNode = null;
        this._attachedNodeArray.length = 0;
        this._boneIndexToNode = {};
        if (!this._inited) return;
        var rootNode = this._armatureNode.getChildByName(ATTACHED_ROOT_NAME);
        if (rootNode) {
          rootNode.removeFromParent(true);
          rootNode.destroy();
          rootNode = null;
        }
      },
      generateAllAttachedNodes: function generateAllAttachedNodes() {
        if (!this._inited) return;
        this._boneIndexToNode = {};
        this._attachedNodeArray.length = 0;
        var rootNode = this._prepareAttachNode();
        if (!rootNode) return;
        var boneIndex = 0;
        var attachedTraverse = function(armature) {
          if (!armature) return;
          var subArmatureParentNode = rootNode;
          if (armature.parent) {
            var parentSlot = armature.parent;
            var parentBone = parentSlot.parent;
            subArmatureParentNode = parentBone._attachedNode;
          }
          var bones = armature.getBones(), bone;
          for (var i = 0, l = bones.length; i < l; i++) {
            var curBoneIndex = boneIndex++;
            bone = bones[i];
            bone._attachedNode = null;
            var parentNode = null;
            parentNode = bone.parent ? bone.parent._attachedNode : subArmatureParentNode;
            if (parentNode) {
              var boneNode = parentNode.getChildByName(ATTACHED_PRE_NAME + bone.name);
              if (boneNode && boneNode.isValid) this._buildBoneRelation(boneNode, bone, curBoneIndex); else {
                boneNode = this._buildBoneAttachedNode(bone, curBoneIndex);
                parentNode.addChild(boneNode);
              }
              boneNode._rootNode = subArmatureParentNode;
              bone._attachedNode = boneNode;
            }
          }
          var slots = armature.getSlots(), slot;
          for (var _i2 = 0, _l2 = slots.length; _i2 < _l2; _i2++) {
            slot = slots[_i2];
            slot.childArmature && attachedTraverse(slot.childArmature);
          }
        }.bind(this);
        attachedTraverse(this._armature);
        return rootNode;
      },
      _hasAttachedNode: function _hasAttachedNode() {
        if (!this._inited) return false;
        var attachedRootNode = this._armatureNode.getChildByName(ATTACHED_ROOT_NAME);
        return !!attachedRootNode;
      },
      _associateAttachedNode: function _associateAttachedNode() {
        if (!this._inited) return;
        var rootNode = this._armatureNode.getChildByName(ATTACHED_ROOT_NAME);
        if (!rootNode || !rootNode.isValid) return;
        this._attachedRootNode = rootNode;
        this._boneIndexToNode = {};
        var nodeArray = this._attachedNodeArray;
        nodeArray.length = 0;
        var armature = this._armature;
        if (!armature) return;
        limitNode(rootNode);
        true;
        var isCached = this._armatureDisplay.isAnimationCached();
        isCached && this._armatureDisplay._frameCache && this._armatureDisplay._frameCache.enableCacheAttachedInfo();
        var boneIndex = 0;
        var attachedTraverse = function(armature) {
          if (!armature) return;
          var subArmatureParentNode = rootNode;
          if (armature.parent) {
            var parentSlot = armature.parent;
            var parentBone = parentSlot.parent;
            subArmatureParentNode = parentBone._attachedNode;
          }
          var bones = armature.getBones(), bone;
          for (var i = 0, l = bones.length; i < l; i++) {
            var curBoneIndex = boneIndex++;
            bone = bones[i];
            bone._attachedNode = null;
            var parentNode = null;
            parentNode = bone.parent ? bone.parent._attachedNode : subArmatureParentNode;
            if (parentNode) {
              var boneNode = parentNode.getChildByName(ATTACHED_PRE_NAME + bone.name);
              if (boneNode && boneNode.isValid) {
                this._buildBoneRelation(boneNode, bone, curBoneIndex);
                boneNode._rootNode = subArmatureParentNode;
                bone._attachedNode = boneNode;
              }
            }
          }
          var slots = armature.getSlots(), slot;
          for (var _i3 = 0, _l3 = slots.length; _i3 < _l3; _i3++) {
            slot = slots[_i3];
            slot.childArmature && attachedTraverse(slot.childArmature);
          }
        }.bind(this);
        attachedTraverse(armature);
      },
      _syncAttachedNode: function _syncAttachedNode() {
        if (!this._inited) return;
        var rootNode = this._attachedRootNode;
        var nodeArray = this._attachedNodeArray;
        if (!rootNode || !rootNode.isValid) {
          this._attachedRootNode = null;
          nodeArray.length = 0;
          return;
        }
        var rootMatrix = this._armatureNode._worldMatrix;
        _mat["default"].copy(rootNode._worldMatrix, rootMatrix);
        rootNode._renderFlag &= ~FLAG_TRANSFORM;
        var boneInfos = null;
        var isCached = this._armatureDisplay.isAnimationCached();
        if (isCached) {
          boneInfos = this._armatureDisplay._curFrame && this._armatureDisplay._curFrame.boneInfos;
          if (!boneInfos) return;
        }
        var mulMat = this._armatureNode._mulMat;
        var matrixHandle = function matrixHandle(nodeMat, parentMat, boneMat) {
          var tm = _tempMat4.m;
          tm[0] = boneMat.a;
          tm[1] = boneMat.b;
          tm[4] = -boneMat.c;
          tm[5] = -boneMat.d;
          tm[12] = boneMat.tx;
          tm[13] = boneMat.ty;
          mulMat(nodeMat, parentMat, _tempMat4);
        };
        var nodeArrayDirty = false;
        for (var i = 0, n = nodeArray.length; i < n; i++) {
          var boneNode = nodeArray[i];
          if (!boneNode || !boneNode.isValid) {
            nodeArray[i] = null;
            nodeArrayDirty = true;
            continue;
          }
          var bone = isCached ? boneInfos[boneNode._boneIndex] : boneNode._bone;
          if (!bone || bone._isInPool) {
            boneNode.removeFromParent(true);
            boneNode.destroy();
            nodeArray[i] = null;
            nodeArrayDirty = true;
            continue;
          }
          matrixHandle(boneNode._worldMatrix, boneNode._rootNode._worldMatrix, bone.globalTransformMatrix);
          boneNode._renderFlag &= ~FLAG_TRANSFORM;
        }
        nodeArrayDirty && this._rebuildNodeArray();
      }
    });
    module.exports = dragonBones.AttachUtil = AttachUtil;
  }), {
    "../../cocos2d/core/renderer/render-flow": 169,
    "../../cocos2d/core/value-types/mat4": 226
  } ],
  281: [ (function(require, module, exports) {
    "use strict";
    var EventTarget = require("../../cocos2d/core/event/event-target");
    dragonBones.CCArmatureDisplay = cc.Class({
      name: "dragonBones.CCArmatureDisplay",
      properties: {
        node: {
          get: function get() {
            return this;
          }
        }
      },
      ctor: function ctor() {
        this._eventTarget = new EventTarget();
      },
      setEventTarget: function setEventTarget(eventTarget) {
        this._eventTarget = eventTarget;
      },
      getRootDisplay: function getRootDisplay() {
        var parentSlot = this._armature._parent;
        if (!parentSlot) return this;
        var slot;
        while (parentSlot) {
          slot = parentSlot;
          parentSlot = parentSlot._armature._parent;
        }
        return slot._armature.getDisplay();
      },
      convertToRootSpace: function convertToRootSpace(pos) {
        var slot = this._armature._parent;
        if (!slot) return pos;
        slot.updateWorldMatrix();
        var worldMatrix = slot._worldMatrix;
        var worldMatrixm = worldMatrix.m;
        var newPos = cc.v2(0, 0);
        newPos.x = pos.x * worldMatrixm[0] + pos.y * worldMatrixm[4] + worldMatrixm[12];
        newPos.y = pos.x * worldMatrixm[1] + pos.y * worldMatrixm[5] + worldMatrixm[13];
        return newPos;
      },
      convertToWorldSpace: function convertToWorldSpace(point) {
        var newPos = this.convertToRootSpace(point);
        var ccNode = this.getRootNode();
        var finalPos = ccNode.convertToWorldSpaceAR(newPos);
        return finalPos;
      },
      getRootNode: function getRootNode() {
        var rootDisplay = this.getRootDisplay();
        return rootDisplay && rootDisplay._ccNode;
      },
      dbInit: function dbInit(armature) {
        this._armature = armature;
      },
      dbClear: function dbClear() {
        this._armature = null;
      },
      dbUpdate: function dbUpdate() {},
      advanceTimeBySelf: function advanceTimeBySelf(on) {
        this.shouldAdvanced = !!on;
      },
      hasDBEventListener: function hasDBEventListener(type) {
        return this._eventTarget.hasEventListener(type);
      },
      addDBEventListener: function addDBEventListener(type, listener, target) {
        this._eventTarget.on(type, listener, target);
      },
      removeDBEventListener: function removeDBEventListener(type, listener, target) {
        this._eventTarget.off(type, listener, target);
      },
      dispatchDBEvent: function dispatchDBEvent(type, eventObject) {
        this._eventTarget.emit(type, eventObject);
      }
    });
  }), {
    "../../cocos2d/core/event/event-target": 121
  } ],
  282: [ (function(require, module, exports) {
    "use strict";
    var BaseObject = dragonBones.BaseObject, BaseFactory = dragonBones.BaseFactory;
    var CCFactory = dragonBones.CCFactory = cc.Class({
      name: "dragonBones.CCFactory",
      extends: BaseFactory,
      statics: {
        _factory: null,
        getInstance: function getInstance() {
          CCFactory._factory || (CCFactory._factory = new CCFactory());
          return CCFactory._factory;
        }
      },
      ctor: function ctor() {
        var eventManager = new dragonBones.CCArmatureDisplay();
        this._dragonBones = new dragonBones.DragonBones(eventManager);
        if ((true, true) && cc.director._scheduler) {
          cc.game.on(cc.game.EVENT_RESTART, this.initUpdate, this);
          this.initUpdate();
        }
      },
      initUpdate: function initUpdate(dt) {
        cc.director._scheduler.enableForTarget(this);
        cc.director._scheduler.scheduleUpdate(this, cc.Scheduler.PRIORITY_SYSTEM, false);
      },
      update: function update(dt) {
        this._dragonBones.advanceTime(dt);
      },
      getDragonBonesDataByRawData: function getDragonBonesDataByRawData(rawData) {
        var dataParser = rawData instanceof ArrayBuffer ? BaseFactory._binaryParser : this._dataParser;
        return dataParser.parseDragonBonesData(rawData, 1);
      },
      buildArmatureDisplay: function buildArmatureDisplay(armatureName, dragonBonesName, skinName, textureAtlasName) {
        var armature = this.buildArmature(armatureName, dragonBonesName, skinName, textureAtlasName);
        return armature && armature._display;
      },
      createArmatureNode: function createArmatureNode(comp, armatureName, node) {
        node = node || new cc.Node();
        var display = node.getComponent(dragonBones.ArmatureDisplay);
        display || (display = node.addComponent(dragonBones.ArmatureDisplay));
        node.name = armatureName;
        display._armatureName = armatureName;
        display._N$dragonAsset = comp.dragonAsset;
        display._N$dragonAtlasAsset = comp.dragonAtlasAsset;
        display._init();
        return display;
      },
      _buildTextureAtlasData: function _buildTextureAtlasData(textureAtlasData, textureAtlas) {
        textureAtlasData ? textureAtlasData.renderTexture = textureAtlas : textureAtlasData = BaseObject.borrowObject(dragonBones.CCTextureAtlasData);
        return textureAtlasData;
      },
      _sortSlots: function _sortSlots() {
        var slots = this._slots;
        var sortedSlots = [];
        for (var i = 0, l = slots.length; i < l; i++) {
          var slot = slots[i];
          var zOrder = slot._zOrder;
          var inserted = false;
          for (var j = sortedSlots.length - 1; j >= 0; j--) if (zOrder >= sortedSlots[j]._zOrder) {
            sortedSlots.splice(j + 1, 0, slot);
            inserted = true;
            break;
          }
          inserted || sortedSlots.splice(0, 0, slot);
        }
        this._slots = sortedSlots;
      },
      _buildArmature: function _buildArmature(dataPackage) {
        var armature = BaseObject.borrowObject(dragonBones.Armature);
        armature._skinData = dataPackage.skin;
        armature._animation = BaseObject.borrowObject(dragonBones.Animation);
        armature._animation._armature = armature;
        armature._animation.animations = dataPackage.armature.animations;
        armature._isChildArmature = false;
        var display = new dragonBones.CCArmatureDisplay();
        armature.init(dataPackage.armature, display, display, this._dragonBones);
        return armature;
      },
      _buildSlot: function _buildSlot(dataPackage, slotData, displays) {
        var slot = BaseObject.borrowObject(dragonBones.CCSlot);
        var display = slot;
        slot.init(slotData, displays, display, display);
        return slot;
      },
      getDragonBonesDataByUUID: function getDragonBonesDataByUUID(uuid) {
        for (var name in this._dragonBonesDataMap) if (-1 != name.indexOf(uuid)) return this._dragonBonesDataMap[name];
        return null;
      },
      removeDragonBonesDataByUUID: function removeDragonBonesDataByUUID(uuid, disposeData) {
        void 0 === disposeData && (disposeData = true);
        for (var name in this._dragonBonesDataMap) {
          if (-1 === name.indexOf(uuid)) continue;
          disposeData && this._dragonBones.bufferObject(this._dragonBonesDataMap[name]);
          delete this._dragonBonesDataMap[name];
        }
      }
    });
  }), {} ],
  283: [ (function(require, module, exports) {
    "use strict";
    var _mat = _interopRequireDefault(require("../../cocos2d/core/value-types/mat4"));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    var BinaryOffset = dragonBones.BinaryOffset;
    var BoneType = dragonBones.BoneType;
    dragonBones.CCSlot = cc.Class({
      name: "dragonBones.CCSlot",
      extends: dragonBones.Slot,
      ctor: function ctor() {
        this._localVertices = [];
        this._indices = [];
        this._matrix = cc.mat4();
        this._worldMatrix = cc.mat4();
        this._worldMatrixDirty = true;
        this._visible = false;
        this._color = cc.color();
      },
      _onClear: function _onClear() {
        this._super();
        this._localVertices.length = 0;
        this._indices.length = 0;
        _mat["default"].identity(this._matrix);
        _mat["default"].identity(this._worldMatrix);
        this._worldMatrixDirty = true;
        this._color = cc.color();
        this._visible = false;
      },
      statics: {
        toString: function toString() {
          return "[class dragonBones.CCSlot]";
        }
      },
      _onUpdateDisplay: function _onUpdateDisplay() {},
      _initDisplay: function _initDisplay(value) {},
      _addDisplay: function _addDisplay() {
        this._visible = true;
      },
      _replaceDisplay: function _replaceDisplay(value) {},
      _removeDisplay: function _removeDisplay() {
        this._visible = false;
      },
      _disposeDisplay: function _disposeDisplay(object) {},
      _updateVisible: function _updateVisible() {
        this._visible = this.parent._visible;
      },
      _updateZOrder: function _updateZOrder() {},
      _updateBlendMode: function _updateBlendMode() {
        if (this._childArmature) {
          var childSlots = this._childArmature.getSlots();
          for (var i = 0, l = childSlots.length; i < l; i++) {
            var slot = childSlots[i];
            slot._blendMode = this._blendMode;
            slot._updateBlendMode();
          }
        }
      },
      _updateColor: function _updateColor() {
        var c = this._color;
        c.r = 255 * this._colorTransform.redMultiplier;
        c.g = 255 * this._colorTransform.greenMultiplier;
        c.b = 255 * this._colorTransform.blueMultiplier;
        c.a = 255 * this._colorTransform.alphaMultiplier;
      },
      getTexture: function getTexture() {
        return this._textureData && this._textureData.spriteFrame && this._textureData.spriteFrame.getTexture();
      },
      _updateFrame: function _updateFrame() {
        this._indices.length = 0;
        var indices = this._indices, localVertices = this._localVertices;
        var indexOffset = 0, vfOffset = 0;
        var currentTextureData = this._textureData;
        if (!this._display || this._displayIndex < 0 || !currentTextureData || !currentTextureData.spriteFrame) return;
        var texture = currentTextureData.spriteFrame.getTexture();
        var textureAtlasWidth = texture.width;
        var textureAtlasHeight = texture.height;
        var region = currentTextureData.region;
        var currentVerticesData = null !== this._deformVertices && this._display === this._meshDisplay ? this._deformVertices.verticesData : null;
        if (currentVerticesData) {
          var data = currentVerticesData.data;
          var intArray = data.intArray;
          var floatArray = data.floatArray;
          var vertexCount = intArray[currentVerticesData.offset + BinaryOffset.MeshVertexCount];
          var triangleCount = intArray[currentVerticesData.offset + BinaryOffset.MeshTriangleCount];
          var vertexOffset = intArray[currentVerticesData.offset + BinaryOffset.MeshFloatOffset];
          vertexOffset < 0 && (vertexOffset += 65536);
          var uvOffset = vertexOffset + 2 * vertexCount;
          var scale = this._armature._armatureData.scale;
          for (var i = 0, l = 2 * vertexCount; i < l; i += 2) {
            localVertices[vfOffset++] = floatArray[vertexOffset + i] * scale;
            localVertices[vfOffset++] = -floatArray[vertexOffset + i + 1] * scale;
            if (currentVerticesData.rotated) {
              localVertices[vfOffset++] = (region.x + (1 - floatArray[uvOffset + i]) * region.width) / textureAtlasWidth;
              localVertices[vfOffset++] = (region.y + floatArray[uvOffset + i + 1] * region.height) / textureAtlasHeight;
            } else {
              localVertices[vfOffset++] = (region.x + floatArray[uvOffset + i] * region.width) / textureAtlasWidth;
              localVertices[vfOffset++] = (region.y + floatArray[uvOffset + i + 1] * region.height) / textureAtlasHeight;
            }
          }
          for (var _i = 0; _i < 3 * triangleCount; ++_i) indices[indexOffset++] = intArray[currentVerticesData.offset + BinaryOffset.MeshVertexIndices + _i];
          localVertices.length = vfOffset;
          indices.length = indexOffset;
          var isSkinned = !!currentVerticesData.weight;
          isSkinned && this._identityTransform();
        } else {
          var _l = region.x / textureAtlasWidth;
          var b = (region.y + region.height) / textureAtlasHeight;
          var r = (region.x + region.width) / textureAtlasWidth;
          var t = region.y / textureAtlasHeight;
          localVertices[vfOffset++] = 0;
          localVertices[vfOffset++] = 0;
          localVertices[vfOffset++] = _l;
          localVertices[vfOffset++] = b;
          localVertices[vfOffset++] = region.width;
          localVertices[vfOffset++] = 0;
          localVertices[vfOffset++] = r;
          localVertices[vfOffset++] = b;
          localVertices[vfOffset++] = 0;
          localVertices[vfOffset++] = region.height;
          localVertices[vfOffset++] = _l;
          localVertices[vfOffset++] = t;
          localVertices[vfOffset++] = region.width;
          localVertices[vfOffset++] = region.height;
          localVertices[vfOffset++] = r;
          localVertices[vfOffset++] = t;
          indices[0] = 0;
          indices[1] = 1;
          indices[2] = 2;
          indices[3] = 1;
          indices[4] = 3;
          indices[5] = 2;
          localVertices.length = vfOffset;
          indices.length = 6;
        }
        this._visibleDirty = true;
        this._blendModeDirty = true;
        this._colorDirty = true;
      },
      _updateMesh: function _updateMesh() {
        var scale = this._armature._armatureData.scale;
        var deformVertices = this._deformVertices.vertices;
        var bones = this._deformVertices.bones;
        var verticesData = this._deformVertices.verticesData;
        var weightData = verticesData.weight;
        var hasDeform = deformVertices.length > 0 && verticesData.inheritDeform;
        var localVertices = this._localVertices;
        if (weightData) {
          var data = verticesData.data;
          var intArray = data.intArray;
          var floatArray = data.floatArray;
          var vertexCount = intArray[verticesData.offset + BinaryOffset.MeshVertexCount];
          var weightFloatOffset = intArray[weightData.offset + BinaryOffset.WeigthFloatOffset];
          weightFloatOffset < 0 && (weightFloatOffset += 65536);
          for (var i = 0, iB = weightData.offset + BinaryOffset.WeigthBoneIndices + bones.length, iV = weightFloatOffset, iF = 0, lvi = 0; i < vertexCount; i++, 
          lvi += 4) {
            var boneCount = intArray[iB++];
            var xG = 0, yG = 0;
            for (var j = 0; j < boneCount; ++j) {
              var boneIndex = intArray[iB++];
              var bone = bones[boneIndex];
              if (null !== bone) {
                var matrix = bone.globalTransformMatrix;
                var weight = floatArray[iV++];
                var xL = floatArray[iV++] * scale;
                var yL = floatArray[iV++] * scale;
                if (hasDeform) {
                  xL += deformVertices[iF++];
                  yL += deformVertices[iF++];
                }
                xG += (matrix.a * xL + matrix.c * yL + matrix.tx) * weight;
                yG += (matrix.b * xL + matrix.d * yL + matrix.ty) * weight;
              }
            }
            localVertices[lvi] = xG;
            localVertices[lvi + 1] = -yG;
          }
        } else if (hasDeform) {
          var isSurface = this._parent._boneData.type !== BoneType.Bone;
          var _data = verticesData.data;
          var _intArray = _data.intArray;
          var _floatArray = _data.floatArray;
          var _vertexCount = _intArray[verticesData.offset + BinaryOffset.MeshVertexCount];
          var vertexOffset = _intArray[verticesData.offset + BinaryOffset.MeshFloatOffset];
          vertexOffset < 0 && (vertexOffset += 65536);
          for (var _i2 = 0, l = _vertexCount, _lvi = 0; _i2 < l; _i2++, _lvi += 4) {
            var x = _floatArray[vertexOffset + 2 * _i2] * scale + deformVertices[2 * _i2];
            var y = _floatArray[vertexOffset + 2 * _i2 + 1] * scale + deformVertices[2 * _i2 + 1];
            if (isSurface) {
              var _matrix = this._parent._getGlobalTransformMatrix(x, y);
              localVertices[_lvi] = _matrix.a * x + _matrix.c * y + _matrix.tx;
              localVertices[_lvi + 1] = -_matrix.b * x + _matrix.d * y + _matrix.ty;
            } else {
              localVertices[_lvi] = x;
              localVertices[_lvi + 1] = -y;
            }
          }
        }
        weightData && this._identityTransform();
      },
      _identityTransform: function _identityTransform() {
        var m = this._matrix.m;
        m[0] = 1;
        m[1] = 0;
        m[4] = -0;
        m[5] = -1;
        m[12] = 0;
        m[13] = 0;
        this._worldMatrixDirty = true;
      },
      _updateTransform: function _updateTransform() {
        var t = this._matrix;
        var tm = t.m;
        tm[0] = this.globalTransformMatrix.a;
        tm[1] = this.globalTransformMatrix.b;
        tm[4] = -this.globalTransformMatrix.c;
        tm[5] = -this.globalTransformMatrix.d;
        if (this._childArmature) {
          tm[12] = this.globalTransformMatrix.tx;
          tm[13] = this.globalTransformMatrix.ty;
        } else {
          tm[12] = this.globalTransformMatrix.tx - (this.globalTransformMatrix.a * this._pivotX - this.globalTransformMatrix.c * this._pivotY);
          tm[13] = this.globalTransformMatrix.ty - (this.globalTransformMatrix.b * this._pivotX - this.globalTransformMatrix.d * this._pivotY);
        }
        this._worldMatrixDirty = true;
      },
      updateWorldMatrix: function updateWorldMatrix() {
        if (!this._armature) return;
        var parentSlot = this._armature._parent;
        parentSlot && parentSlot.updateWorldMatrix();
        if (this._worldMatrixDirty) {
          this.calculWorldMatrix();
          var childArmature = this.childArmature;
          if (!childArmature) return;
          var slots = childArmature.getSlots();
          for (var i = 0, n = slots.length; i < n; i++) {
            var slot = slots[i];
            slot && (slot._worldMatrixDirty = true);
          }
        }
      },
      _mulMat: function _mulMat(out, a, b) {
        var am = a.m, bm = b.m, outm = out.m;
        var aa = am[0], ab = am[1], ac = am[4], ad = am[5], atx = am[12], aty = am[13];
        var ba = bm[0], bb = bm[1], bc = bm[4], bd = bm[5], btx = bm[12], bty = bm[13];
        if (0 !== ab || 0 !== ac) {
          outm[0] = ba * aa + bb * ac;
          outm[1] = ba * ab + bb * ad;
          outm[4] = bc * aa + bd * ac;
          outm[5] = bc * ab + bd * ad;
          outm[12] = aa * btx + ac * bty + atx;
          outm[13] = ab * btx + ad * bty + aty;
        } else {
          outm[0] = ba * aa;
          outm[1] = bb * ad;
          outm[4] = bc * aa;
          outm[5] = bd * ad;
          outm[12] = aa * btx + atx;
          outm[13] = ad * bty + aty;
        }
      },
      calculWorldMatrix: function calculWorldMatrix() {
        var parent = this._armature._parent;
        parent ? this._mulMat(this._worldMatrix, parent._worldMatrix, this._matrix) : _mat["default"].copy(this._worldMatrix, this._matrix);
        this._worldMatrixDirty = false;
      }
    });
  }), {
    "../../cocos2d/core/value-types/mat4": 226
  } ],
  284: [ (function(require, module, exports) {
    "use strict";
    dragonBones.CCTextureAtlasData = cc.Class({
      extends: dragonBones.TextureAtlasData,
      name: "dragonBones.CCTextureAtlasData",
      properties: {
        _renderTexture: {
          default: null,
          serializable: false
        },
        renderTexture: {
          get: function get() {
            return this._renderTexture;
          },
          set: function set(value) {
            this._renderTexture = value;
            if (value) for (var k in this.textures) {
              var textureData = this.textures[k];
              if (!textureData.spriteFrame) {
                var rect = null;
                rect = textureData.rotated ? cc.rect(textureData.region.x, textureData.region.y, textureData.region.height, textureData.region.width) : cc.rect(textureData.region.x, textureData.region.y, textureData.region.width, textureData.region.height);
                var offset = cc.v2(0, 0);
                var size = cc.size(rect.width, rect.height);
                textureData.spriteFrame = new cc.SpriteFrame();
                textureData.spriteFrame.setTexture(value, rect, false, offset, size);
              }
            } else for (var _k in this.textures) {
              var _textureData = this.textures[_k];
              _textureData.spriteFrame = null;
            }
          }
        }
      },
      statics: {
        toString: function toString() {
          return "[class dragonBones.CCTextureAtlasData]";
        }
      },
      _onClear: function _onClear() {
        dragonBones.TextureAtlasData.prototype._onClear.call(this);
        this.renderTexture = null;
      },
      createTexture: function createTexture() {
        return dragonBones.BaseObject.borrowObject(dragonBones.CCTextureData);
      }
    });
    dragonBones.CCTextureData = cc.Class({
      extends: dragonBones.TextureData,
      name: "dragonBones.CCTextureData",
      properties: {
        spriteFrame: {
          default: null,
          serializable: false
        }
      },
      statics: {
        toString: function toString() {
          return "[class dragonBones.CCTextureData]";
        }
      },
      _onClear: function _onClear() {
        dragonBones.TextureData.prototype._onClear.call(this);
        this.spriteFrame = null;
      }
    });
  }), {} ],
  285: [ (function(require, module, exports) {
    "use strict";
    var ArmatureCache = (true, require("./ArmatureCache").sharedCache);
    var DragonBonesAsset = cc.Class({
      name: "dragonBones.DragonBonesAsset",
      extends: cc.Asset,
      ctor: function ctor() {
        this.reset();
      },
      properties: {
        _dragonBonesJson: "",
        dragonBonesJson: {
          get: function get() {
            return this._dragonBonesJson;
          },
          set: function set(value) {
            this._dragonBonesJson = value;
            this._dragonBonesJsonData = JSON.parse(value);
            this.reset();
          }
        },
        _nativeAsset: {
          get: function get() {
            return this._buffer;
          },
          set: function set(bin) {
            this._buffer = bin.buffer || bin;
            this.reset();
          },
          override: true
        }
      },
      statics: {
        preventDeferredLoadDependents: true
      },
      createNode: false,
      reset: function reset() {
        this._clear();
        false;
      },
      init: function init(factory, atlasUUID) {
        false;
        this._factory = factory;
        !this._dragonBonesJsonData && this.dragonBonesJson && (this._dragonBonesJsonData = JSON.parse(this.dragonBonesJson));
        var rawData = null;
        rawData = this._dragonBonesJsonData ? this._dragonBonesJsonData : this._nativeAsset;
        if (!this._uuid) {
          var dbData = this._factory.getDragonBonesDataByRawData(rawData);
          dbData ? this._uuid = dbData.name : cc.warn("dragonbones name is empty");
        }
        var armatureKey = this._uuid + "#" + atlasUUID;
        var dragonBonesData = this._factory.getDragonBonesData(armatureKey);
        if (dragonBonesData) return armatureKey;
        this._factory.parseDragonBonesData(rawData, armatureKey);
        return armatureKey;
      },
      getArmatureEnum: false,
      getAnimsEnum: false,
      _clear: function _clear() {
        if (this._factory) {
          ArmatureCache.resetArmature(this._uuid);
          this._factory.removeDragonBonesDataByUUID(this._uuid, true);
        }
      },
      destroy: function destroy() {
        this._clear();
        this._super();
      }
    });
    dragonBones.DragonBonesAsset = module.exports = DragonBonesAsset;
  }), {
    "./ArmatureCache": 278
  } ],
  286: [ (function(require, module, exports) {
    "use strict";
    var ArmatureCache = (true, require("./ArmatureCache").sharedCache);
    var DragonBonesAtlasAsset = cc.Class({
      name: "dragonBones.DragonBonesAtlasAsset",
      extends: cc.Asset,
      ctor: function ctor() {
        this._clear();
      },
      properties: {
        _atlasJson: "",
        atlasJson: {
          get: function get() {
            return this._atlasJson;
          },
          set: function set(value) {
            this._atlasJson = value;
            this._atlasJsonData = JSON.parse(this.atlasJson);
            this._clear();
          }
        },
        _texture: {
          default: null,
          type: cc.Texture2D,
          formerlySerializedAs: "texture"
        },
        texture: {
          get: function get() {
            return this._texture;
          },
          set: function set(value) {
            this._texture = value;
            this._clear();
          }
        },
        _textureAtlasData: null
      },
      statics: {
        preventDeferredLoadDependents: true
      },
      createNode: false,
      init: function init(factory) {
        this._factory = factory;
        this._atlasJsonData || (this._atlasJsonData = JSON.parse(this.atlasJson));
        var atlasJsonObj = this._atlasJsonData;
        this._uuid = this._uuid || atlasJsonObj.name;
        this._textureAtlasData ? factory.addTextureAtlasData(this._textureAtlasData, this._uuid) : this._textureAtlasData = factory.parseTextureAtlasData(atlasJsonObj, this.texture, this._uuid);
      },
      _clear: function _clear() {
        false;
        if (this._factory) {
          ArmatureCache.resetArmature(this._uuid);
          this._factory.removeTextureAtlasData(this._uuid, true);
          this._factory.removeDragonBonesDataByUUID(this._uuid, true);
        }
        this._textureAtlasData = null;
      },
      destroy: function destroy() {
        this._clear();
        this._super();
      }
    });
    dragonBones.DragonBonesAtlasAsset = module.exports = DragonBonesAtlasAsset;
  }), {
    "./ArmatureCache": 278
  } ],
  287: [ (function(require, module, exports) {
    "use strict";
    var _global = "undefined" === typeof window ? global : window;
    true;
    _global.dragonBones = require("./lib/dragonBones");
    if (void 0 !== _global.dragonBones) {
      dragonBones._timeScale = 1;
      Object.defineProperty(dragonBones, "timeScale", {
        get: function get() {
          return this._timeScale;
        },
        set: function set(value) {
          this._timeScale = value;
          var factory = this.CCFactory.getInstance();
          factory._dragonBones.clock.timeScale = value;
        },
        configurable: true
      });
      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
      };
      true;
      true;
      require("./CCFactory");
      require("./CCSlot");
      require("./CCTextureData");
      require("./CCArmatureDisplay");
      require("./ArmatureCache");
      require("./DragonBonesAsset");
      require("./DragonBonesAtlasAsset");
      require("./ArmatureDisplay");
      require("./webgl-assembler");
    }
  }), {
    "./ArmatureCache": 278,
    "./ArmatureDisplay": 279,
    "./CCArmatureDisplay": 281,
    "./CCFactory": 282,
    "./CCSlot": 283,
    "./CCTextureData": 284,
    "./DragonBonesAsset": 285,
    "./DragonBonesAtlasAsset": 286,
    "./lib/dragonBones": 288,
    "./webgl-assembler": 289
  } ],
  288: [ (function(require, module, exports) {
    "use strict";
    var __extends = (void 0, (function() {
      var extendStatics = Object.setPrototypeOf || {
        __proto__: []
      } instanceof Array && function(d, b) {
        d.__proto__ = b;
      } || function(d, b) {
        for (var p in b) b.hasOwnProperty(p) && (d[p] = b[p]);
      };
      return function(d, b) {
        extendStatics(d, b);
        function __() {
          this.constructor = d;
        }
        d.prototype = null === b ? Object.create(b) : (__.prototype = b.prototype, new __());
      };
    })());
    var dragonBones;
    (function(dragonBones) {})(dragonBones || (dragonBones = {}));
    var dragonBones;
    (function(dragonBones) {
      var DragonBones = (function() {
        function DragonBones(eventManager) {
          this._clock = new dragonBones.WorldClock();
          this._events = [];
          this._objects = [];
          this._eventManager = null;
          this._eventManager = eventManager;
          console.info("DragonBones: " + DragonBones.VERSION + "\nWebsite: http://dragonbones.com/\nSource and Demo: https://github.com/DragonBones/");
        }
        DragonBones.prototype.advanceTime = function(passedTime) {
          if (this._objects.length > 0) {
            for (var _i = 0, _a = this._objects; _i < _a.length; _i++) {
              var object = _a[_i];
              object.returnToPool();
            }
            this._objects.length = 0;
          }
          this._clock.advanceTime(passedTime);
          if (this._events.length > 0) {
            for (var i = 0; i < this._events.length; ++i) {
              var eventObject = this._events[i];
              var armature = eventObject.armature;
              if (null !== armature._armatureData) {
                armature.eventDispatcher.dispatchDBEvent(eventObject.type, eventObject);
                eventObject.type === dragonBones.EventObject.SOUND_EVENT && this._eventManager.dispatchDBEvent(eventObject.type, eventObject);
              }
              this.bufferObject(eventObject);
            }
            this._events.length = 0;
          }
        };
        DragonBones.prototype.bufferEvent = function(value) {
          this._events.indexOf(value) < 0 && this._events.push(value);
        };
        DragonBones.prototype.bufferObject = function(object) {
          this._objects.indexOf(object) < 0 && this._objects.push(object);
        };
        Object.defineProperty(DragonBones.prototype, "clock", {
          get: function get() {
            return this._clock;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(DragonBones.prototype, "eventManager", {
          get: function get() {
            return this._eventManager;
          },
          enumerable: true,
          configurable: true
        });
        DragonBones.VERSION = "5.6.300";
        DragonBones.yDown = false;
        DragonBones.debug = false;
        DragonBones.debugDraw = false;
        DragonBones.webAssembly = false;
        return DragonBones;
      })();
      dragonBones.DragonBones = DragonBones;
    })(dragonBones || (dragonBones = {}));
    console.warn || (console.warn = function() {});
    console.assert || (console.assert = function() {});
    Date.now || (Date.now = function now() {
      return new Date().getTime();
    });
    var __extends = function __extends(t, e) {
      function r() {
        this.constructor = t;
      }
      for (var i in e) e.hasOwnProperty(i) && (t[i] = e[i]);
      r.prototype = e.prototype, t.prototype = new r();
    };
    var dragonBones;
    (function(dragonBones) {
      var BaseObject = (function() {
        function BaseObject() {
          this.hashCode = BaseObject._hashCode++;
          this._isInPool = false;
        }
        BaseObject._returnObject = function(object) {
          var classType = String(object.constructor);
          var maxCount = classType in BaseObject._maxCountMap ? BaseObject._maxCountMap[classType] : BaseObject._defaultMaxCount;
          var pool = BaseObject._poolsMap[classType] = BaseObject._poolsMap[classType] || [];
          if (pool.length < maxCount) if (object._isInPool) console.warn("The object is already in the pool."); else {
            object._isInPool = true;
            pool.push(object);
          }
        };
        BaseObject.toString = function() {
          throw new Error();
        };
        BaseObject.setMaxCount = function(objectConstructor, maxCount) {
          (maxCount < 0 || maxCount !== maxCount) && (maxCount = 0);
          if (null !== objectConstructor) {
            var classType = String(objectConstructor);
            var pool = classType in BaseObject._poolsMap ? BaseObject._poolsMap[classType] : null;
            null !== pool && pool.length > maxCount && (pool.length = maxCount);
            BaseObject._maxCountMap[classType] = maxCount;
          } else {
            BaseObject._defaultMaxCount = maxCount;
            for (var classType in BaseObject._poolsMap) {
              var pool = BaseObject._poolsMap[classType];
              pool.length > maxCount && (pool.length = maxCount);
              classType in BaseObject._maxCountMap && (BaseObject._maxCountMap[classType] = maxCount);
            }
          }
        };
        BaseObject.clearPool = function(objectConstructor) {
          void 0 === objectConstructor && (objectConstructor = null);
          if (null !== objectConstructor) {
            var classType = String(objectConstructor);
            var pool = classType in BaseObject._poolsMap ? BaseObject._poolsMap[classType] : null;
            null !== pool && pool.length > 0 && (pool.length = 0);
          } else for (var k in BaseObject._poolsMap) {
            var pool = BaseObject._poolsMap[k];
            pool.length = 0;
          }
        };
        BaseObject.borrowObject = function(objectConstructor) {
          var classType = String(objectConstructor);
          var pool = classType in BaseObject._poolsMap ? BaseObject._poolsMap[classType] : null;
          if (null !== pool && pool.length > 0) {
            var object_1 = pool.pop();
            object_1._isInPool = false;
            return object_1;
          }
          var object = new objectConstructor();
          object._onClear();
          return object;
        };
        BaseObject.prototype.returnToPool = function() {
          this._onClear();
          BaseObject._returnObject(this);
        };
        BaseObject._hashCode = 0;
        BaseObject._defaultMaxCount = 3e3;
        BaseObject._maxCountMap = {};
        BaseObject._poolsMap = {};
        return BaseObject;
      })();
      dragonBones.BaseObject = BaseObject;
    })(dragonBones || (dragonBones = {}));
    var dragonBones;
    (function(dragonBones) {
      var Matrix = (function() {
        function Matrix(a, b, c, d, tx, ty) {
          void 0 === a && (a = 1);
          void 0 === b && (b = 0);
          void 0 === c && (c = 0);
          void 0 === d && (d = 1);
          void 0 === tx && (tx = 0);
          void 0 === ty && (ty = 0);
          this.a = a;
          this.b = b;
          this.c = c;
          this.d = d;
          this.tx = tx;
          this.ty = ty;
        }
        Matrix.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;
        };
        Matrix.prototype.copyFrom = function(value) {
          this.a = value.a;
          this.b = value.b;
          this.c = value.c;
          this.d = value.d;
          this.tx = value.tx;
          this.ty = value.ty;
          return this;
        };
        Matrix.prototype.copyFromArray = function(value, offset) {
          void 0 === offset && (offset = 0);
          this.a = value[offset];
          this.b = value[offset + 1];
          this.c = value[offset + 2];
          this.d = value[offset + 3];
          this.tx = value[offset + 4];
          this.ty = value[offset + 5];
          return this;
        };
        Matrix.prototype.identity = function() {
          this.a = this.d = 1;
          this.b = this.c = 0;
          this.tx = this.ty = 0;
          return this;
        };
        Matrix.prototype.concat = function(value) {
          var aA = this.a * value.a;
          var bA = 0;
          var cA = 0;
          var dA = this.d * value.d;
          var txA = this.tx * value.a + value.tx;
          var tyA = this.ty * value.d + value.ty;
          if (0 !== this.b || 0 !== this.c) {
            aA += this.b * value.c;
            bA += this.b * value.d;
            cA += this.c * value.a;
            dA += this.c * value.b;
          }
          if (0 !== value.b || 0 !== value.c) {
            bA += this.a * value.b;
            cA += this.d * value.c;
            txA += this.ty * value.c;
            tyA += this.tx * value.b;
          }
          this.a = aA;
          this.b = bA;
          this.c = cA;
          this.d = dA;
          this.tx = txA;
          this.ty = tyA;
          return this;
        };
        Matrix.prototype.invert = function() {
          var aA = this.a;
          var bA = this.b;
          var cA = this.c;
          var dA = this.d;
          var txA = this.tx;
          var tyA = this.ty;
          if (0 === bA && 0 === cA) {
            this.b = this.c = 0;
            if (0 === aA || 0 === dA) this.a = this.b = this.tx = this.ty = 0; else {
              aA = this.a = 1 / aA;
              dA = this.d = 1 / dA;
              this.tx = -aA * txA;
              this.ty = -dA * tyA;
            }
            return this;
          }
          var determinant = aA * dA - bA * cA;
          if (0 === determinant) {
            this.a = this.d = 1;
            this.b = this.c = 0;
            this.tx = this.ty = 0;
            return this;
          }
          determinant = 1 / determinant;
          var k = this.a = dA * determinant;
          bA = this.b = -bA * determinant;
          cA = this.c = -cA * determinant;
          dA = this.d = aA * determinant;
          this.tx = -(k * txA + cA * tyA);
          this.ty = -(bA * txA + dA * tyA);
          return this;
        };
        Matrix.prototype.transformPoint = function(x, y, result, delta) {
          void 0 === delta && (delta = false);
          result.x = this.a * x + this.c * y;
          result.y = this.b * x + this.d * y;
          if (!delta) {
            result.x += this.tx;
            result.y += this.ty;
          }
        };
        Matrix.prototype.transformRectangle = function(rectangle, delta) {
          void 0 === delta && (delta = false);
          var a = this.a;
          var b = this.b;
          var c = this.c;
          var d = this.d;
          var tx = delta ? 0 : this.tx;
          var ty = delta ? 0 : this.ty;
          var x = rectangle.x;
          var y = rectangle.y;
          var xMax = x + rectangle.width;
          var yMax = y + rectangle.height;
          var x0 = a * x + c * y + tx;
          var y0 = b * x + d * y + ty;
          var x1 = a * xMax + c * y + tx;
          var y1 = b * xMax + d * y + ty;
          var x2 = a * xMax + c * yMax + tx;
          var y2 = b * xMax + d * yMax + ty;
          var x3 = a * x + c * yMax + tx;
          var y3 = b * x + d * yMax + ty;
          var tmp = 0;
          if (x0 > x1) {
            tmp = x0;
            x0 = x1;
            x1 = tmp;
          }
          if (x2 > x3) {
            tmp = x2;
            x2 = x3;
            x3 = tmp;
          }
          rectangle.x = Math.floor(x0 < x2 ? x0 : x2);
          rectangle.width = Math.ceil((x1 > x3 ? x1 : x3) - rectangle.x);
          if (y0 > y1) {
            tmp = y0;
            y0 = y1;
            y1 = tmp;
          }
          if (y2 > y3) {
            tmp = y2;
            y2 = y3;
            y3 = tmp;
          }
          rectangle.y = Math.floor(y0 < y2 ? y0 : y2);
          rectangle.height = Math.ceil((y1 > y3 ? y1 : y3) - rectangle.y);
        };
        return Matrix;
      })();
      dragonBones.Matrix = Matrix;
    })(dragonBones || (dragonBones = {}));
    var dragonBones;
    (function(dragonBones) {
      var Transform = (function() {
        function Transform(x, y, skew, rotation, scaleX, scaleY) {
          void 0 === x && (x = 0);
          void 0 === y && (y = 0);
          void 0 === skew && (skew = 0);
          void 0 === rotation && (rotation = 0);
          void 0 === scaleX && (scaleX = 1);
          void 0 === scaleY && (scaleY = 1);
          this.x = x;
          this.y = y;
          this.skew = skew;
          this.rotation = rotation;
          this.scaleX = scaleX;
          this.scaleY = scaleY;
        }
        Transform.normalizeRadian = function(value) {
          value = (value + Math.PI) % (2 * Math.PI);
          value += value > 0 ? -Math.PI : Math.PI;
          return value;
        };
        Transform.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;
        };
        Transform.prototype.copyFrom = function(value) {
          this.x = value.x;
          this.y = value.y;
          this.skew = value.skew;
          this.rotation = value.rotation;
          this.scaleX = value.scaleX;
          this.scaleY = value.scaleY;
          return this;
        };
        Transform.prototype.identity = function() {
          this.x = this.y = 0;
          this.skew = this.rotation = 0;
          this.scaleX = this.scaleY = 1;
          return this;
        };
        Transform.prototype.add = function(value) {
          this.x += value.x;
          this.y += value.y;
          this.skew += value.skew;
          this.rotation += value.rotation;
          this.scaleX *= value.scaleX;
          this.scaleY *= value.scaleY;
          return this;
        };
        Transform.prototype.minus = function(value) {
          this.x -= value.x;
          this.y -= value.y;
          this.skew -= value.skew;
          this.rotation -= value.rotation;
          this.scaleX /= value.scaleX;
          this.scaleY /= value.scaleY;
          return this;
        };
        Transform.prototype.fromMatrix = function(matrix) {
          var backupScaleX = this.scaleX, backupScaleY = this.scaleY;
          var PI_Q = Transform.PI_Q;
          this.x = matrix.tx;
          this.y = matrix.ty;
          this.rotation = Math.atan(matrix.b / matrix.a);
          var skewX = Math.atan(-matrix.c / matrix.d);
          this.scaleX = this.rotation > -PI_Q && this.rotation < PI_Q ? matrix.a / Math.cos(this.rotation) : matrix.b / Math.sin(this.rotation);
          this.scaleY = skewX > -PI_Q && skewX < PI_Q ? matrix.d / Math.cos(skewX) : -matrix.c / Math.sin(skewX);
          if (backupScaleX >= 0 && this.scaleX < 0) {
            this.scaleX = -this.scaleX;
            this.rotation = this.rotation - Math.PI;
          }
          if (backupScaleY >= 0 && this.scaleY < 0) {
            this.scaleY = -this.scaleY;
            skewX -= Math.PI;
          }
          this.skew = skewX - this.rotation;
          return this;
        };
        Transform.prototype.toMatrix = function(matrix) {
          if (0 === this.rotation) {
            matrix.a = 1;
            matrix.b = 0;
          } else {
            matrix.a = Math.cos(this.rotation);
            matrix.b = Math.sin(this.rotation);
          }
          if (0 === this.skew) {
            matrix.c = -matrix.b;
            matrix.d = matrix.a;
          } else {
            matrix.c = -Math.sin(this.skew + this.rotation);
            matrix.d = Math.cos(this.skew + this.rotation);
          }
          if (1 !== this.scaleX) {
            matrix.a *= this.scaleX;
            matrix.b *= this.scaleX;
          }
          if (1 !== this.scaleY) {
            matrix.c *= this.scaleY;
            matrix.d *= this.scaleY;
          }
          matrix.tx = this.x;
          matrix.ty = this.y;
          return this;
        };
        Transform.PI = Math.PI;
        Transform.PI_D = 2 * Math.PI;
        Transform.PI_H = Math.PI / 2;
        Transform.PI_Q = Math.PI / 4;
        Transform.RAD_DEG = 180 / Math.PI;
        Transform.DEG_RAD = Math.PI / 180;
        return Transform;
      })();
      dragonBones.Transform = Transform;
    })(dragonBones || (dragonBones = {}));
    var dragonBones;
    (function(dragonBones) {
      var ColorTransform = (function() {
        function ColorTransform(alphaMultiplier, redMultiplier, greenMultiplier, blueMultiplier, alphaOffset, redOffset, greenOffset, blueOffset) {
          void 0 === alphaMultiplier && (alphaMultiplier = 1);
          void 0 === redMultiplier && (redMultiplier = 1);
          void 0 === greenMultiplier && (greenMultiplier = 1);
          void 0 === blueMultiplier && (blueMultiplier = 1);
          void 0 === alphaOffset && (alphaOffset = 0);
          void 0 === redOffset && (redOffset = 0);
          void 0 === greenOffset && (greenOffset = 0);
          void 0 === blueOffset && (blueOffset = 0);
          this.alphaMultiplier = alphaMultiplier;
          this.redMultiplier = redMultiplier;
          this.greenMultiplier = greenMultiplier;
          this.blueMultiplier = blueMultiplier;
          this.alphaOffset = alphaOffset;
          this.redOffset = redOffset;
          this.greenOffset = greenOffset;
          this.blueOffset = blueOffset;
        }
        ColorTransform.prototype.copyFrom = function(value) {
          this.alphaMultiplier = value.alphaMultiplier;
          this.redMultiplier = value.redMultiplier;
          this.greenMultiplier = value.greenMultiplier;
          this.blueMultiplier = value.blueMultiplier;
          this.alphaOffset = value.alphaOffset;
          this.redOffset = value.redOffset;
          this.greenOffset = value.greenOffset;
          this.blueOffset = value.blueOffset;
        };
        ColorTransform.prototype.identity = function() {
          this.alphaMultiplier = this.redMultiplier = this.greenMultiplier = this.blueMultiplier = 1;
          this.alphaOffset = this.redOffset = this.greenOffset = this.blueOffset = 0;
        };
        return ColorTransform;
      })();
      dragonBones.ColorTransform = ColorTransform;
    })(dragonBones || (dragonBones = {}));
    var dragonBones;
    (function(dragonBones) {
      var Point = (function() {
        function Point(x, y) {
          void 0 === x && (x = 0);
          void 0 === y && (y = 0);
          this.x = x;
          this.y = y;
        }
        Point.prototype.copyFrom = function(value) {
          this.x = value.x;
          this.y = value.y;
        };
        Point.prototype.clear = function() {
          this.x = this.y = 0;
        };
        return Point;
      })();
      dragonBones.Point = Point;
    })(dragonBones || (dragonBones = {}));
    var dragonBones;
    (function(dragonBones) {
      var Rectangle = (function() {
        function Rectangle(x, y, width, height) {
          void 0 === x && (x = 0);
          void 0 === y && (y = 0);
          void 0 === width && (width = 0);
          void 0 === height && (height = 0);
          this.x = x;
          this.y = y;
          this.width = width;
          this.height = height;
        }
        Rectangle.prototype.copyFrom = function(value) {
          this.x = value.x;
          this.y = value.y;
          this.width = value.width;
          this.height = value.height;
        };
        Rectangle.prototype.clear = function() {
          this.x = this.y = 0;
          this.width = this.height = 0;
        };
        return Rectangle;
      })();
      dragonBones.Rectangle = Rectangle;
    })(dragonBones || (dragonBones = {}));
    var dragonBones;
    (function(dragonBones) {
      var UserData = (function(_super) {
        __extends(UserData, _super);
        function UserData() {
          var _this = null !== _super && _super.apply(this, arguments) || this;
          _this.ints = [];
          _this.floats = [];
          _this.strings = [];
          return _this;
        }
        UserData.toString = function() {
          return "[class dragonBones.UserData]";
        };
        UserData.prototype._onClear = function() {
          this.ints.length = 0;
          this.floats.length = 0;
          this.strings.length = 0;
        };
        UserData.prototype.addInt = function(value) {
          this.ints.push(value);
        };
        UserData.prototype.addFloat = function(value) {
          this.floats.push(value);
        };
        UserData.prototype.addString = function(value) {
          this.strings.push(value);
        };
        UserData.prototype.getInt = function(index) {
          void 0 === index && (index = 0);
          return index >= 0 && index < this.ints.length ? this.ints[index] : 0;
        };
        UserData.prototype.getFloat = function(index) {
          void 0 === index && (index = 0);
          return index >= 0 && index < this.floats.length ? this.floats[index] : 0;
        };
        UserData.prototype.getString = function(index) {
          void 0 === index && (index = 0);
          return index >= 0 && index < this.strings.length ? this.strings[index] : "";
        };
        return UserData;
      })(dragonBones.BaseObject);
      dragonBones.UserData = UserData;
      var ActionData = (function(_super) {
        __extends(ActionData, _super);
        function ActionData() {
          var _this = null !== _super && _super.apply(this, arguments) || this;
          _this.data = null;
          return _this;
        }
        ActionData.toString = function() {
          return "[class dragonBones.ActionData]";
        };
        ActionData.prototype._onClear = function() {
          null !== this.data && this.data.returnToPool();
          this.type = 0;
          this.name = "";
          this.bone = null;
          this.slot = null;
          this.data = null;
        };
        return ActionData;
      })(dragonBones.BaseObject);
      dragonBones.ActionData = ActionData;
    })(dragonBones || (dragonBones = {}));
    var dragonBones;
    (function(dragonBones) {
      var DragonBonesData = (function(_super) {
        __extends(DragonBonesData, _super);
        function DragonBonesData() {
          var _this = null !== _super && _super.apply(this, arguments) || this;
          _this.frameIndices = [];
          _this.cachedFrames = [];
          _this.armatureNames = [];
          _this.armatures = {};
          _this.userData = null;
          return _this;
        }
        DragonBonesData.toString = function() {
          return "[class dragonBones.DragonBonesData]";
        };
        DragonBonesData.prototype._onClear = function() {
          for (var k in this.armatures) {
            this.armatures[k].returnToPool();
            delete this.armatures[k];
          }
          null !== this.userData && this.userData.returnToPool();
          this.autoSearch = false;
          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;
        };
        DragonBonesData.prototype.addArmature = function(value) {
          if (value.name in this.armatures) {
            console.warn("Same armature: " + value.name);
            return;
          }
          value.parent = this;
          this.armatures[value.name] = value;
          this.armatureNames.push(value.name);
        };
        DragonBonesData.prototype.getArmature = function(armatureName) {
          return armatureName in this.armatures ? this.armatures[armatureName] : null;
        };
        DragonBonesData.prototype.dispose = function() {
          console.warn("\u5df2\u5e9f\u5f03");
          this.returnToPool();
        };
        return DragonBonesData;
      })(dragonBones.BaseObject);
      dragonBones.DragonBonesData = DragonBonesData;
    })(dragonBones || (dragonBones = {}));
    var dragonBones;
    (function(dragonBones) {
      var ArmatureData = (function(_super) {
        __extends(ArmatureData, _super);
        function ArmatureData() {
          var _this = null !== _super && _super.apply(this, arguments) || this;
          _this.aabb = new dragonBones.Rectangle();
          _this.animationNames = [];
          _this.sortedBones = [];
          _this.sortedSlots = [];
          _this.defaultActions = [];
          _this.actions = [];
          _this.bones = {};
          _this.slots = {};
          _this.constraints = {};
          _this.skins = {};
          _this.animations = {};
          _this.canvas = null;
          _this.userData = null;
          return _this;
        }
        ArmatureData.toString = function() {
          return "[class dragonBones.ArmatureData]";
        };
        ArmatureData.prototype._onClear = function() {
          for (var _i = 0, _a = this.defaultActions; _i < _a.length; _i++) {
            var action = _a[_i];
            action.returnToPool();
          }
          for (var _b = 0, _c = this.actions; _b < _c.length; _b++) {
            var action = _c[_b];
            action.returnToPool();
          }
          for (var k in this.bones) {
            this.bones[k].returnToPool();
            delete this.bones[k];
          }
          for (var k in this.slots) {
            this.slots[k].returnToPool();
            delete this.slots[k];
          }
          for (var k in this.constraints) {
            this.constraints[k].returnToPool();
            delete this.constraints[k];
          }
          for (var k in this.skins) {
            this.skins[k].returnToPool();
            delete this.skins[k];
          }
          for (var k in this.animations) {
            this.animations[k].returnToPool();
            delete this.animations[k];
          }
          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;
        };
        ArmatureData.prototype.sortBones = function() {
          var total = this.sortedBones.length;
          if (total <= 0) return;
          var sortHelper = this.sortedBones.concat();
          var index = 0;
          var count = 0;
          this.sortedBones.length = 0;
          while (count < total) {
            var bone = sortHelper[index++];
            index >= total && (index = 0);
            if (this.sortedBones.indexOf(bone) >= 0) continue;
            var flag = false;
            for (var k in this.constraints) {
              var constraint = this.constraints[k];
              if (constraint.root === bone && this.sortedBones.indexOf(constraint.target) < 0) {
                flag = true;
                break;
              }
            }
            if (flag) continue;
            if (null !== bone.parent && this.sortedBones.indexOf(bone.parent) < 0) continue;
            this.sortedBones.push(bone);
            count++;
          }
        };
        ArmatureData.prototype.cacheFrames = function(frameRate) {
          if (this.cacheFrameRate > 0) return;
          this.cacheFrameRate = frameRate;
          for (var k in this.animations) this.animations[k].cacheFrames(this.cacheFrameRate);
        };
        ArmatureData.prototype.setCacheFrame = function(globalTransformMatrix, transform) {
          var dataArray = this.parent.cachedFrames;
          var arrayOffset = dataArray.length;
          dataArray.length += 10;
          dataArray[arrayOffset] = globalTransformMatrix.a;
          dataArray[arrayOffset + 1] = globalTransformMatrix.b;
          dataArray[arrayOffset + 2] = globalTransformMatrix.c;
          dataArray[arrayOffset + 3] = globalTransformMatrix.d;
          dataArray[arrayOffset + 4] = globalTransformMatrix.tx;
          dataArray[arrayOffset + 5] = globalTransformMatrix.ty;
          dataArray[arrayOffset + 6] = transform.rotation;
          dataArray[arrayOffset + 7] = transform.skew;
          dataArray[arrayOffset + 8] = transform.scaleX;
          dataArray[arrayOffset + 9] = transform.scaleY;
          return arrayOffset;
        };
        ArmatureData.prototype.getCacheFrame = function(globalTransformMatrix, transform, arrayOffset) {
          var dataArray = this.parent.cachedFrames;
          globalTransformMatrix.a = dataArray[arrayOffset];
          globalTransformMatrix.b = dataArray[arrayOffset + 1];
          globalTransformMatrix.c = dataArray[arrayOffset + 2];
          globalTransformMatrix.d = dataArray[arrayOffset + 3];
          globalTransformMatrix.tx = dataArray[arrayOffset + 4];
          globalTransformMatrix.ty = dataArray[arrayOffset + 5];
          transform.rotation = dataArray[arrayOffset + 6];
          transform.skew = dataArray[arrayOffset + 7];
          transform.scaleX = dataArray[arrayOffset + 8];
          transform.scaleY = dataArray[arrayOffset + 9];
          transform.x = globalTransformMatrix.tx;
          transform.y = globalTransformMatrix.ty;
        };
        ArmatureData.prototype.addBone = function(value) {
          if (value.name in this.bones) {
            console.warn("Same bone: " + value.name);
            return;
          }
          this.bones[value.name] = value;
          this.sortedBones.push(value);
        };
        ArmatureData.prototype.addSlot = function(value) {
          if (value.name in this.slots) {
            console.warn("Same slot: " + value.name);
            return;
          }
          this.slots[value.name] = value;
          this.sortedSlots.push(value);
        };
        ArmatureData.prototype.addConstraint = function(value) {
          if (value.name in this.constraints) {
            console.warn("Same constraint: " + value.name);
            return;
          }
          this.constraints[value.name] = value;
        };
        ArmatureData.prototype.addSkin = function(value) {
          if (value.name in this.skins) {
            console.warn("Same skin: " + value.name);
            return;
          }
          value.parent = this;
          this.skins[value.name] = value;
          null === this.defaultSkin && (this.defaultSkin = value);
          "default" === value.name && (this.defaultSkin = value);
        };
        ArmatureData.prototype.addAnimation = function(value) {
          if (value.name in this.animations) {
            console.warn("Same animation: " + value.name);
            return;
          }
          value.parent = this;
          this.animations[value.name] = value;
          this.animationNames.push(value.name);
          null === this.defaultAnimation && (this.defaultAnimation = value);
        };
        ArmatureData.prototype.addAction = function(value, isDefault) {
          isDefault ? this.defaultActions.push(value) : this.actions.push(value);
        };
        ArmatureData.prototype.getBone = function(boneName) {
          return boneName in this.bones ? this.bones[boneName] : null;
        };
        ArmatureData.prototype.getSlot = function(slotName) {
          return slotName in this.slots ? this.slots[slotName] : null;
        };
        ArmatureData.prototype.getConstraint = function(constraintName) {
          return constraintName in this.constraints ? this.constraints[constraintName] : null;
        };
        ArmatureData.prototype.getSkin = function(skinName) {
          return skinName in this.skins ? this.skins[skinName] : null;
        };
        ArmatureData.prototype.getMesh = function(skinName, slotName, meshName) {
          var skin = this.getSkin(skinName);
          if (null === skin) return null;
          return skin.getDisplay(slotName, meshName);
        };
        ArmatureData.prototype.getAnimation = function(animationName) {
          return animationName in this.animations ? this.animations[animationName] : null;
        };
        return ArmatureData;
      })(dragonBones.BaseObject);
      dragonBones.ArmatureData = ArmatureData;
      var BoneData = (function(_super) {
        __extends(BoneData, _super);
        function BoneData() {
          var _this = null !== _super && _super.apply(this, arguments) || this;
          _this.transform = new dragonBones.Transform();
          _this.userData = null;
          return _this;
        }
        BoneData.toString = function() {
          return "[class dragonBones.BoneData]";
        };
        BoneData.prototype._onClear = function() {
          null !== this.userData && this.userData.returnToPool();
          this.inheritTranslation = false;
          this.inheritRotation = false;
          this.inheritScale = false;
          this.inheritReflection = false;
          this.type = 0;
          this.length = 0;
          this.name = "";
          this.transform.identity();
          this.userData = null;
          this.parent = null;
        };
        return BoneData;
      })(dragonBones.BaseObject);
      dragonBones.BoneData = BoneData;
      var SurfaceData = (function(_super) {
        __extends(SurfaceData, _super);
        function SurfaceData() {
          var _this = null !== _super && _super.apply(this, arguments) || this;
          _this.vertices = [];
          return _this;
        }
        SurfaceData.toString = function() {
          return "[class dragonBones.SurfaceData]";
        };
        SurfaceData.prototype._onClear = function() {
          _super.prototype._onClear.call(this);
          this.type = 1;
          this.segmentX = 0;
          this.segmentY = 0;
          this.vertices.length = 0;
        };
        return SurfaceData;
      })(BoneData);
      dragonBones.SurfaceData = SurfaceData;
      var SlotData = (function(_super) {
        __extends(SlotData, _super);
        function SlotData() {
          var _this = null !== _super && _super.apply(this, arguments) || this;
          _this.color = null;
          _this.userData = null;
          return _this;
        }
        SlotData.createColor = function() {
          return new dragonBones.ColorTransform();
        };
        SlotData.toString = function() {
          return "[class dragonBones.SlotData]";
        };
        SlotData.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;
        };
        SlotData.DEFAULT_COLOR = new dragonBones.ColorTransform();
        return SlotData;
      })(dragonBones.BaseObject);
      dragonBones.SlotData = SlotData;
    })(dragonBones || (dragonBones = {}));
    var dragonBones;
    (function(dragonBones) {
      var ConstraintData = (function(_super) {
        __extends(ConstraintData, _super);
        function ConstraintData() {
          return null !== _super && _super.apply(this, arguments) || this;
        }
        ConstraintData.prototype._onClear = function() {
          this.order = 0;
          this.name = "";
          this.type = 0;
          this.target = null;
          this.root = null;
          this.bone = null;
        };
        return ConstraintData;
      })(dragonBones.BaseObject);
      dragonBones.ConstraintData = ConstraintData;
      var IKConstraintData = (function(_super) {
        __extends(IKConstraintData, _super);
        function IKConstraintData() {
          return null !== _super && _super.apply(this, arguments) || this;
        }
        IKConstraintData.toString = function() {
          return "[class dragonBones.IKConstraintData]";
        };
        IKConstraintData.prototype._onClear = function() {
          _super.prototype._onClear.call(this);
          this.scaleEnabled = false;
          this.bendPositive = false;
          this.weight = 1;
        };
        return IKConstraintData;
      })(ConstraintData);
      dragonBones.IKConstraintData = IKConstraintData;
      var PathConstraintData = (function(_super) {
        __extends(PathConstraintData, _super);
        function PathConstraintData() {
          var _this = null !== _super && _super.apply(this, arguments) || this;
          _this.bones = [];
          return _this;
        }
        PathConstraintData.toString = function() {
          return "[class dragonBones.PathConstraintData]";
        };
        PathConstraintData.prototype._onClear = function() {
          _super.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;
        };
        PathConstraintData.prototype.AddBone = function(value) {
          this.bones.push(value);
        };
        return PathConstraintData;
      })(ConstraintData);
      dragonBones.PathConstraintData = PathConstraintData;
    })(dragonBones || (dragonBones = {}));
    var dragonBones;
    (function(dragonBones) {
      var CanvasData = (function(_super) {
        __extends(CanvasData, _super);
        function CanvasData() {
          return null !== _super && _super.apply(this, arguments) || this;
        }
        CanvasData.toString = function() {
          return "[class dragonBones.CanvasData]";
        };
        CanvasData.prototype._onClear = function() {
          this.hasBackground = false;
          this.color = 0;
          this.x = 0;
          this.y = 0;
          this.width = 0;
          this.height = 0;
        };
        return CanvasData;
      })(dragonBones.BaseObject);
      dragonBones.CanvasData = CanvasData;
    })(dragonBones || (dragonBones = {}));
    var dragonBones;
    (function(dragonBones) {
      var SkinData = (function(_super) {
        __extends(SkinData, _super);
        function SkinData() {
          var _this = null !== _super && _super.apply(this, arguments) || this;
          _this.displays = {};
          return _this;
        }
        SkinData.toString = function() {
          return "[class dragonBones.SkinData]";
        };
        SkinData.prototype._onClear = function() {
          for (var k in this.displays) {
            var slotDisplays = this.displays[k];
            for (var _i = 0, slotDisplays_1 = slotDisplays; _i < slotDisplays_1.length; _i++) {
              var display = slotDisplays_1[_i];
              null !== display && display.returnToPool();
            }
            delete this.displays[k];
          }
          this.name = "";
          this.parent = null;
        };
        SkinData.prototype.addDisplay = function(slotName, value) {
          slotName in this.displays || (this.displays[slotName] = []);
          null !== value && (value.parent = this);
          var slotDisplays = this.displays[slotName];
          slotDisplays.push(value);
        };
        SkinData.prototype.getDisplay = function(slotName, displayName) {
          var slotDisplays = this.getDisplays(slotName);
          if (null !== slotDisplays) for (var _i = 0, slotDisplays_2 = slotDisplays; _i < slotDisplays_2.length; _i++) {
            var display = slotDisplays_2[_i];
            if (null !== display && display.name === displayName) return display;
          }
          return null;
        };
        SkinData.prototype.getDisplays = function(slotName) {
          if (!(slotName in this.displays)) return null;
          return this.displays[slotName];
        };
        return SkinData;
      })(dragonBones.BaseObject);
      dragonBones.SkinData = SkinData;
    })(dragonBones || (dragonBones = {}));
    var dragonBones;
    (function(dragonBones) {
      var VerticesData = (function() {
        function VerticesData() {
          this.weight = null;
        }
        VerticesData.prototype.clear = function() {
          this.isShared || null === this.weight || this.weight.returnToPool();
          this.isShared = false;
          this.inheritDeform = false;
          this.offset = 0;
          this.data = null;
          this.weight = null;
        };
        VerticesData.prototype.shareFrom = function(value) {
          this.isShared = true;
          this.offset = value.offset;
          this.weight = value.weight;
        };
        return VerticesData;
      })();
      dragonBones.VerticesData = VerticesData;
      var DisplayData = (function(_super) {
        __extends(DisplayData, _super);
        function DisplayData() {
          var _this = null !== _super && _super.apply(this, arguments) || this;
          _this.transform = new dragonBones.Transform();
          return _this;
        }
        DisplayData.prototype._onClear = function() {
          this.name = "";
          this.path = "";
          this.transform.identity();
          this.parent = null;
        };
        return DisplayData;
      })(dragonBones.BaseObject);
      dragonBones.DisplayData = DisplayData;
      var ImageDisplayData = (function(_super) {
        __extends(ImageDisplayData, _super);
        function ImageDisplayData() {
          var _this = null !== _super && _super.apply(this, arguments) || this;
          _this.pivot = new dragonBones.Point();
          return _this;
        }
        ImageDisplayData.toString = function() {
          return "[class dragonBones.ImageDisplayData]";
        };
        ImageDisplayData.prototype._onClear = function() {
          _super.prototype._onClear.call(this);
          this.type = 0;
          this.pivot.clear();
          this.texture = null;
        };
        return ImageDisplayData;
      })(DisplayData);
      dragonBones.ImageDisplayData = ImageDisplayData;
      var ArmatureDisplayData = (function(_super) {
        __extends(ArmatureDisplayData, _super);
        function ArmatureDisplayData() {
          var _this = null !== _super && _super.apply(this, arguments) || this;
          _this.actions = [];
          return _this;
        }
        ArmatureDisplayData.toString = function() {
          return "[class dragonBones.ArmatureDisplayData]";
        };
        ArmatureDisplayData.prototype._onClear = function() {
          _super.prototype._onClear.call(this);
          for (var _i = 0, _a = this.actions; _i < _a.length; _i++) {
            var action = _a[_i];
            action.returnToPool();
          }
          this.type = 1;
          this.inheritAnimation = false;
          this.actions.length = 0;
          this.armature = null;
        };
        ArmatureDisplayData.prototype.addAction = function(value) {
          this.actions.push(value);
        };
        return ArmatureDisplayData;
      })(DisplayData);
      dragonBones.ArmatureDisplayData = ArmatureDisplayData;
      var MeshDisplayData = (function(_super) {
        __extends(MeshDisplayData, _super);
        function MeshDisplayData() {
          var _this = null !== _super && _super.apply(this, arguments) || this;
          _this.vertices = new VerticesData();
          return _this;
        }
        MeshDisplayData.toString = function() {
          return "[class dragonBones.MeshDisplayData]";
        };
        MeshDisplayData.prototype._onClear = function() {
          _super.prototype._onClear.call(this);
          this.type = 2;
          this.vertices.clear();
          this.texture = null;
        };
        return MeshDisplayData;
      })(DisplayData);
      dragonBones.MeshDisplayData = MeshDisplayData;
      var BoundingBoxDisplayData = (function(_super) {
        __extends(BoundingBoxDisplayData, _super);
        function BoundingBoxDisplayData() {
          var _this = null !== _super && _super.apply(this, arguments) || this;
          _this.boundingBox = null;
          return _this;
        }
        BoundingBoxDisplayData.toString = function() {
          return "[class dragonBones.BoundingBoxDisplayData]";
        };
        BoundingBoxDisplayData.prototype._onClear = function() {
          _super.prototype._onClear.call(this);
          null !== this.boundingBox && this.boundingBox.returnToPool();
          this.type = 3;
          this.boundingBox = null;
        };
        return BoundingBoxDisplayData;
      })(DisplayData);
      dragonBones.BoundingBoxDisplayData = BoundingBoxDisplayData;
      var PathDisplayData = (function(_super) {
        __extends(PathDisplayData, _super);
        function PathDisplayData() {
          var _this = null !== _super && _super.apply(this, arguments) || this;
          _this.vertices = new VerticesData();
          _this.curveLengths = [];
          return _this;
        }
        PathDisplayData.toString = function() {
          return "[class dragonBones.PathDisplayData]";
        };
        PathDisplayData.prototype._onClear = function() {
          _super.prototype._onClear.call(this);
          this.type = 4;
          this.closed = false;
          this.constantSpeed = false;
          this.vertices.clear();
          this.curveLengths.length = 0;
        };
        return PathDisplayData;
      })(DisplayData);
      dragonBones.PathDisplayData = PathDisplayData;
      var WeightData = (function(_super) {
        __extends(WeightData, _super);
        function WeightData() {
          var _this = null !== _super && _super.apply(this, arguments) || this;
          _this.bones = [];
          return _this;
        }
        WeightData.toString = function() {
          return "[class dragonBones.WeightData]";
        };
        WeightData.prototype._onClear = function() {
          this.count = 0;
          this.offset = 0;
          this.bones.length = 0;
        };
        WeightData.prototype.addBone = function(value) {
          this.bones.push(value);
        };
        return WeightData;
      })(dragonBones.BaseObject);
      dragonBones.WeightData = WeightData;
    })(dragonBones || (dragonBones = {}));
    var dragonBones;
    (function(dragonBones) {
      var BoundingBoxData = (function(_super) {
        __extends(BoundingBoxData, _super);
        function BoundingBoxData() {
          return null !== _super && _super.apply(this, arguments) || this;
        }
        BoundingBoxData.prototype._onClear = function() {
          this.color = 0;
          this.width = 0;
          this.height = 0;
        };
        return BoundingBoxData;
      })(dragonBones.BaseObject);
      dragonBones.BoundingBoxData = BoundingBoxData;
      var RectangleBoundingBoxData = (function(_super) {
        __extends(RectangleBoundingBoxData, _super);
        function RectangleBoundingBoxData() {
          return null !== _super && _super.apply(this, arguments) || this;
        }
        RectangleBoundingBoxData.toString = function() {
          return "[class dragonBones.RectangleBoundingBoxData]";
        };
        RectangleBoundingBoxData._computeOutCode = function(x, y, xMin, yMin, xMax, yMax) {
          var code = 0;
          x < xMin ? code |= 1 : x > xMax && (code |= 2);
          y < yMin ? code |= 4 : y > yMax && (code |= 8);
          return code;
        };
        RectangleBoundingBoxData.rectangleIntersectsSegment = function(xA, yA, xB, yB, xMin, yMin, xMax, yMax, intersectionPointA, intersectionPointB, normalRadians) {
          void 0 === intersectionPointA && (intersectionPointA = null);
          void 0 === intersectionPointB && (intersectionPointB = null);
          void 0 === normalRadians && (normalRadians = null);
          var inSideA = xA > xMin && xA < xMax && yA > yMin && yA < yMax;
          var inSideB = xB > xMin && xB < xMax && yB > yMin && yB < yMax;
          if (inSideA && inSideB) return -1;
          var intersectionCount = 0;
          var outcode0 = RectangleBoundingBoxData._computeOutCode(xA, yA, xMin, yMin, xMax, yMax);
          var outcode1 = RectangleBoundingBoxData._computeOutCode(xB, yB, xMin, yMin, xMax, yMax);
          while (true) {
            if (0 === (outcode0 | outcode1)) {
              intersectionCount = 2;
              break;
            }
            if (0 !== (outcode0 & outcode1)) break;
            var x = 0;
            var y = 0;
            var normalRadian = 0;
            var outcodeOut = 0 !== outcode0 ? outcode0 : outcode1;
            if (0 !== (4 & outcodeOut)) {
              x = xA + (xB - xA) * (yMin - yA) / (yB - yA);
              y = yMin;
              null !== normalRadians && (normalRadian = .5 * -Math.PI);
            } else if (0 !== (8 & outcodeOut)) {
              x = xA + (xB - xA) * (yMax - yA) / (yB - yA);
              y = yMax;
              null !== normalRadians && (normalRadian = .5 * Math.PI);
            } else if (0 !== (2 & outcodeOut)) {
              y = yA + (yB - yA) * (xMax - xA) / (xB - xA);
              x = xMax;
              null !== normalRadians && (normalRadian = 0);
            } else if (0 !== (1 & outcodeOut)) {
              y = yA + (yB - yA) * (xMin - xA) / (xB - xA);
              x = xMin;
              null !== normalRadians && (normalRadian = Math.PI);
            }
            if (outcodeOut === outcode0) {
              xA = x;
              yA = y;
              outcode0 = RectangleBoundingBoxData._computeOutCode(xA, yA, xMin, yMin, xMax, yMax);
              null !== normalRadians && (normalRadians.x = normalRadian);
            } else {
              xB = x;
              yB = y;
              outcode1 = RectangleBoundingBoxData._computeOutCode(xB, yB, xMin, yMin, xMax, yMax);
              null !== normalRadians && (normalRadians.y = normalRadian);
            }
          }
          if (intersectionCount) if (inSideA) {
            intersectionCount = 2;
            if (null !== intersectionPointA) {
              intersectionPointA.x = xB;
              intersectionPointA.y = yB;
            }
            if (null !== intersectionPointB) {
              intersectionPointB.x = xB;
              intersectionPointB.y = xB;
            }
            null !== normalRadians && (normalRadians.x = normalRadians.y + Math.PI);
          } else if (inSideB) {
            intersectionCount = 1;
            if (null !== intersectionPointA) {
              intersectionPointA.x = xA;
              intersectionPointA.y = yA;
            }
            if (null !== intersectionPointB) {
              intersectionPointB.x = xA;
              intersectionPointB.y = yA;
            }
            null !== normalRadians && (normalRadians.y = normalRadians.x + Math.PI);
          } else {
            intersectionCount = 3;
            if (null !== intersectionPointA) {
              intersectionPointA.x = xA;
              intersectionPointA.y = yA;
            }
            if (null !== intersectionPointB) {
              intersectionPointB.x = xB;
              intersectionPointB.y = yB;
            }
          }
          return intersectionCount;
        };
        RectangleBoundingBoxData.prototype._onClear = function() {
          _super.prototype._onClear.call(this);
          this.type = 0;
        };
        RectangleBoundingBoxData.prototype.containsPoint = function(pX, pY) {
          var widthH = .5 * this.width;
          if (pX >= -widthH && pX <= widthH) {
            var heightH = .5 * this.height;
            if (pY >= -heightH && pY <= heightH) return true;
          }
          return false;
        };
        RectangleBoundingBoxData.prototype.intersectsSegment = function(xA, yA, xB, yB, intersectionPointA, intersectionPointB, normalRadians) {
          void 0 === intersectionPointA && (intersectionPointA = null);
          void 0 === intersectionPointB && (intersectionPointB = null);
          void 0 === normalRadians && (normalRadians = null);
          var widthH = .5 * this.width;
          var heightH = .5 * this.height;
          var intersectionCount = RectangleBoundingBoxData.rectangleIntersectsSegment(xA, yA, xB, yB, -widthH, -heightH, widthH, heightH, intersectionPointA, intersectionPointB, normalRadians);
          return intersectionCount;
        };
        return RectangleBoundingBoxData;
      })(BoundingBoxData);
      dragonBones.RectangleBoundingBoxData = RectangleBoundingBoxData;
      var EllipseBoundingBoxData = (function(_super) {
        __extends(EllipseBoundingBoxData, _super);
        function EllipseBoundingBoxData() {
          return null !== _super && _super.apply(this, arguments) || this;
        }
        EllipseBoundingBoxData.toString = function() {
          return "[class dragonBones.EllipseData]";
        };
        EllipseBoundingBoxData.ellipseIntersectsSegment = function(xA, yA, xB, yB, xC, yC, widthH, heightH, intersectionPointA, intersectionPointB, normalRadians) {
          void 0 === intersectionPointA && (intersectionPointA = null);
          void 0 === intersectionPointB && (intersectionPointB = null);
          void 0 === normalRadians && (normalRadians = null);
          var d = widthH / heightH;
          var dd = d * d;
          yA *= d;
          yB *= d;
          var dX = xB - xA;
          var dY = yB - yA;
          var lAB = Math.sqrt(dX * dX + dY * dY);
          var xD = dX / lAB;
          var yD = dY / lAB;
          var a = (xC - xA) * xD + (yC - yA) * yD;
          var aa = a * a;
          var ee = xA * xA + yA * yA;
          var rr = widthH * widthH;
          var dR = rr - ee + aa;
          var intersectionCount = 0;
          if (dR >= 0) {
            var dT = Math.sqrt(dR);
            var sA = a - dT;
            var sB = a + dT;
            var inSideA = sA < 0 ? -1 : sA <= lAB ? 0 : 1;
            var inSideB = sB < 0 ? -1 : sB <= lAB ? 0 : 1;
            var sideAB = inSideA * inSideB;
            if (sideAB < 0) return -1;
            if (0 === sideAB) if (-1 === inSideA) {
              intersectionCount = 2;
              xB = xA + sB * xD;
              yB = (yA + sB * yD) / d;
              if (null !== intersectionPointA) {
                intersectionPointA.x = xB;
                intersectionPointA.y = yB;
              }
              if (null !== intersectionPointB) {
                intersectionPointB.x = xB;
                intersectionPointB.y = yB;
              }
              if (null !== normalRadians) {
                normalRadians.x = Math.atan2(yB / rr * dd, xB / rr);
                normalRadians.y = normalRadians.x + Math.PI;
              }
            } else if (1 === inSideB) {
              intersectionCount = 1;
              xA += sA * xD;
              yA = (yA + sA * yD) / d;
              if (null !== intersectionPointA) {
                intersectionPointA.x = xA;
                intersectionPointA.y = yA;
              }
              if (null !== intersectionPointB) {
                intersectionPointB.x = xA;
                intersectionPointB.y = yA;
              }
              if (null !== normalRadians) {
                normalRadians.x = Math.atan2(yA / rr * dd, xA / rr);
                normalRadians.y = normalRadians.x + Math.PI;
              }
            } else {
              intersectionCount = 3;
              if (null !== intersectionPointA) {
                intersectionPointA.x = xA + sA * xD;
                intersectionPointA.y = (yA + sA * yD) / d;
                null !== normalRadians && (normalRadians.x = Math.atan2(intersectionPointA.y / rr * dd, intersectionPointA.x / rr));
              }
              if (null !== intersectionPointB) {
                intersectionPointB.x = xA + sB * xD;
                intersectionPointB.y = (yA + sB * yD) / d;
                null !== normalRadians && (normalRadians.y = Math.atan2(intersectionPointB.y / rr * dd, intersectionPointB.x / rr));
              }
            }
          }
          return intersectionCount;
        };
        EllipseBoundingBoxData.prototype._onClear = function() {
          _super.prototype._onClear.call(this);
          this.type = 1;
        };
        EllipseBoundingBoxData.prototype.containsPoint = function(pX, pY) {
          var widthH = .5 * this.width;
          if (pX >= -widthH && pX <= widthH) {
            var heightH = .5 * this.height;
            if (pY >= -heightH && pY <= heightH) {
              pY *= widthH / heightH;
              return Math.sqrt(pX * pX + pY * pY) <= widthH;
            }
          }
          return false;
        };
        EllipseBoundingBoxData.prototype.intersectsSegment = function(xA, yA, xB, yB, intersectionPointA, intersectionPointB, normalRadians) {
          void 0 === intersectionPointA && (intersectionPointA = null);
          void 0 === intersectionPointB && (intersectionPointB = null);
          void 0 === normalRadians && (normalRadians = null);
          var intersectionCount = EllipseBoundingBoxData.ellipseIntersectsSegment(xA, yA, xB, yB, 0, 0, .5 * this.width, .5 * this.height, intersectionPointA, intersectionPointB, normalRadians);
          return intersectionCount;
        };
        return EllipseBoundingBoxData;
      })(BoundingBoxData);
      dragonBones.EllipseBoundingBoxData = EllipseBoundingBoxData;
      var PolygonBoundingBoxData = (function(_super) {
        __extends(PolygonBoundingBoxData, _super);
        function PolygonBoundingBoxData() {
          var _this = null !== _super && _super.apply(this, arguments) || this;
          _this.vertices = [];
          return _this;
        }
        PolygonBoundingBoxData.toString = function() {
          return "[class dragonBones.PolygonBoundingBoxData]";
        };
        PolygonBoundingBoxData.polygonIntersectsSegment = function(xA, yA, xB, yB, vertices, intersectionPointA, intersectionPointB, normalRadians) {
          void 0 === intersectionPointA && (intersectionPointA = null);
          void 0 === intersectionPointB && (intersectionPointB = null);
          void 0 === normalRadians && (normalRadians = null);
          xA === xB && (xA = xB + 1e-6);
          yA === yB && (yA = yB + 1e-6);
          var count = vertices.length;
          var dXAB = xA - xB;
          var dYAB = yA - yB;
          var llAB = xA * yB - yA * xB;
          var intersectionCount = 0;
          var xC = vertices[count - 2];
          var yC = vertices[count - 1];
          var dMin = 0;
          var dMax = 0;
          var xMin = 0;
          var yMin = 0;
          var xMax = 0;
          var yMax = 0;
          for (var i = 0; i < count; i += 2) {
            var xD = vertices[i];
            var yD = vertices[i + 1];
            xC === xD && (xC = xD + 1e-4);
            yC === yD && (yC = yD + 1e-4);
            var dXCD = xC - xD;
            var dYCD = yC - yD;
            var llCD = xC * yD - yC * xD;
            var ll = dXAB * dYCD - dYAB * dXCD;
            var x = (llAB * dXCD - dXAB * llCD) / ll;
            if ((x >= xC && x <= xD || x >= xD && x <= xC) && (0 === dXAB || x >= xA && x <= xB || x >= xB && x <= xA)) {
              var y = (llAB * dYCD - dYAB * llCD) / ll;
              if ((y >= yC && y <= yD || y >= yD && y <= yC) && (0 === dYAB || y >= yA && y <= yB || y >= yB && y <= yA)) {
                if (null === intersectionPointB) {
                  xMin = x;
                  yMin = y;
                  xMax = x;
                  yMax = y;
                  intersectionCount++;
                  if (null !== normalRadians) {
                    normalRadians.x = Math.atan2(yD - yC, xD - xC) - .5 * Math.PI;
                    normalRadians.y = normalRadians.x;
                  }
                  break;
                }
                var d = x - xA;
                d < 0 && (d = -d);
                if (0 === intersectionCount) {
                  dMin = d;
                  dMax = d;
                  xMin = x;
                  yMin = y;
                  xMax = x;
                  yMax = y;
                  if (null !== normalRadians) {
                    normalRadians.x = Math.atan2(yD - yC, xD - xC) - .5 * Math.PI;
                    normalRadians.y = normalRadians.x;
                  }
                } else {
                  if (d < dMin) {
                    dMin = d;
                    xMin = x;
                    yMin = y;
                    null !== normalRadians && (normalRadians.x = Math.atan2(yD - yC, xD - xC) - .5 * Math.PI);
                  }
                  if (d > dMax) {
                    dMax = d;
                    xMax = x;
                    yMax = y;
                    null !== normalRadians && (normalRadians.y = Math.atan2(yD - yC, xD - xC) - .5 * Math.PI);
                  }
                }
                intersectionCount++;
              }
            }
            xC = xD;
            yC = yD;
          }
          if (1 === intersectionCount) {
            if (null !== intersectionPointA) {
              intersectionPointA.x = xMin;
              intersectionPointA.y = yMin;
            }
            if (null !== intersectionPointB) {
              intersectionPointB.x = xMin;
              intersectionPointB.y = yMin;
            }
            null !== normalRadians && (normalRadians.y = normalRadians.x + Math.PI);
          } else if (intersectionCount > 1) {
            intersectionCount++;
            if (null !== intersectionPointA) {
              intersectionPointA.x = xMin;
              intersectionPointA.y = yMin;
            }
            if (null !== intersectionPointB) {
              intersectionPointB.x = xMax;
              intersectionPointB.y = yMax;
            }
          }
          return intersectionCount;
        };
        PolygonBoundingBoxData.prototype._onClear = function() {
          _super.prototype._onClear.call(this);
          this.type = 2;
          this.x = 0;
          this.y = 0;
          this.vertices.length = 0;
        };
        PolygonBoundingBoxData.prototype.containsPoint = function(pX, pY) {
          var isInSide = false;
          if (pX >= this.x && pX <= this.width && pY >= this.y && pY <= this.height) for (var i = 0, l = this.vertices.length, iP = l - 2; i < l; i += 2) {
            var yA = this.vertices[iP + 1];
            var yB = this.vertices[i + 1];
            if (yB < pY && yA >= pY || yA < pY && yB >= pY) {
              var xA = this.vertices[iP];
              var xB = this.vertices[i];
              (pY - yB) * (xA - xB) / (yA - yB) + xB < pX && (isInSide = !isInSide);
            }
            iP = i;
          }
          return isInSide;
        };
        PolygonBoundingBoxData.prototype.intersectsSegment = function(xA, yA, xB, yB, intersectionPointA, intersectionPointB, normalRadians) {
          void 0 === intersectionPointA && (intersectionPointA = null);
          void 0 === intersectionPointB && (intersectionPointB = null);
          void 0 === normalRadians && (normalRadians = null);
          var intersectionCount = 0;
          0 !== RectangleBoundingBoxData.rectangleIntersectsSegment(xA, yA, xB, yB, this.x, this.y, this.x + this.width, this.y + this.height, null, null, null) && (intersectionCount = PolygonBoundingBoxData.polygonIntersectsSegment(xA, yA, xB, yB, this.vertices, intersectionPointA, intersectionPointB, normalRadians));
          return intersectionCount;
        };
        return PolygonBoundingBoxData;
      })(BoundingBoxData);
      dragonBones.PolygonBoundingBoxData = PolygonBoundingBoxData;
    })(dragonBones || (dragonBones = {}));
    var dragonBones;
    (function(dragonBones) {
      var AnimationData = (function(_super) {
        __extends(AnimationData, _super);
        function AnimationData() {
          var _this = null !== _super && _super.apply(this, arguments) || this;
          _this.cachedFrames = [];
          _this.boneTimelines = {};
          _this.surfaceTimelines = {};
          _this.slotTimelines = {};
          _this.constraintTimelines = {};
          _this.animationTimelines = {};
          _this.boneCachedFrameIndices = {};
          _this.slotCachedFrameIndices = {};
          _this.actionTimeline = null;
          _this.zOrderTimeline = null;
          return _this;
        }
        AnimationData.toString = function() {
          return "[class dragonBones.AnimationData]";
        };
        AnimationData.prototype._onClear = function() {
          for (var k in this.boneTimelines) {
            for (var _i = 0, _a = this.boneTimelines[k]; _i < _a.length; _i++) {
              var timeline = _a[_i];
              timeline.returnToPool();
            }
            delete this.boneTimelines[k];
          }
          for (var k in this.surfaceTimelines) {
            for (var _b = 0, _c = this.surfaceTimelines[k]; _b < _c.length; _b++) {
              var timeline = _c[_b];
              timeline.returnToPool();
            }
            delete this.surfaceTimelines[k];
          }
          for (var k in this.slotTimelines) {
            for (var _d = 0, _e = this.slotTimelines[k]; _d < _e.length; _d++) {
              var timeline = _e[_d];
              timeline.returnToPool();
            }
            delete this.slotTimelines[k];
          }
          for (var k in this.constraintTimelines) {
            for (var _f = 0, _g = this.constraintTimelines[k]; _f < _g.length; _f++) {
              var timeline = _g[_f];
              timeline.returnToPool();
            }
            delete this.constraintTimelines[k];
          }
          for (var k in this.animationTimelines) {
            for (var _h = 0, _j = this.animationTimelines[k]; _h < _j.length; _h++) {
              var timeline = _j[_h];
              timeline.returnToPool();
            }
            delete this.animationTimelines[k];
          }
          for (var k in this.boneCachedFrameIndices) delete this.boneCachedFrameIndices[k];
          for (var k in this.slotCachedFrameIndices) delete this.slotCachedFrameIndices[k];
          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;
        };
        AnimationData.prototype.cacheFrames = function(frameRate) {
          if (this.cacheFrameRate > 0) return;
          this.cacheFrameRate = Math.max(Math.ceil(frameRate * this.scale), 1);
          var cacheFrameCount = Math.ceil(this.cacheFrameRate * this.duration) + 1;
          this.cachedFrames.length = cacheFrameCount;
          for (var i = 0, l = this.cacheFrames.length; i < l; ++i) this.cachedFrames[i] = false;
          for (var _i = 0, _a = this.parent.sortedBones; _i < _a.length; _i++) {
            var bone = _a[_i];
            var indices = new Array(cacheFrameCount);
            for (var i = 0, l = indices.length; i < l; ++i) indices[i] = -1;
            this.boneCachedFrameIndices[bone.name] = indices;
          }
          for (var _b = 0, _c = this.parent.sortedSlots; _b < _c.length; _b++) {
            var slot = _c[_b];
            var indices = new Array(cacheFrameCount);
            for (var i = 0, l = indices.length; i < l; ++i) indices[i] = -1;
            this.slotCachedFrameIndices[slot.name] = indices;
          }
        };
        AnimationData.prototype.addBoneTimeline = function(bone, timeline) {
          var timelines = bone.name in this.boneTimelines ? this.boneTimelines[bone.name] : this.boneTimelines[bone.name] = [];
          timelines.indexOf(timeline) < 0 && timelines.push(timeline);
        };
        AnimationData.prototype.addSurfaceTimeline = function(surface, timeline) {
          var timelines = surface.name in this.surfaceTimelines ? this.surfaceTimelines[surface.name] : this.surfaceTimelines[surface.name] = [];
          timelines.indexOf(timeline) < 0 && timelines.push(timeline);
        };
        AnimationData.prototype.addSlotTimeline = function(slot, timeline) {
          var timelines = slot.name in this.slotTimelines ? this.slotTimelines[slot.name] : this.slotTimelines[slot.name] = [];
          timelines.indexOf(timeline) < 0 && timelines.push(timeline);
        };
        AnimationData.prototype.addConstraintTimeline = function(constraint, timeline) {
          var timelines = constraint.name in this.constraintTimelines ? this.constraintTimelines[constraint.name] : this.constraintTimelines[constraint.name] = [];
          timelines.indexOf(timeline) < 0 && timelines.push(timeline);
        };
        AnimationData.prototype.addAnimationTimeline = function(timelineName, timeline) {
          var timelines = timelineName in this.animationTimelines ? this.animationTimelines[timelineName] : this.animationTimelines[timelineName] = [];
          timelines.indexOf(timeline) < 0 && timelines.push(timeline);
        };
        AnimationData.prototype.getBoneTimelines = function(timelineName) {
          return timelineName in this.boneTimelines ? this.boneTimelines[timelineName] : null;
        };
        AnimationData.prototype.getSurfaceTimelines = function(timelineName) {
          return timelineName in this.surfaceTimelines ? this.surfaceTimelines[timelineName] : null;
        };
        AnimationData.prototype.getSlotTimelines = function(timelineName) {
          return timelineName in this.slotTimelines ? this.slotTimelines[timelineName] : null;
        };
        AnimationData.prototype.getConstraintTimelines = function(timelineName) {
          return timelineName in this.constraintTimelines ? this.constraintTimelines[timelineName] : null;
        };
        AnimationData.prototype.getAnimationTimelines = function(timelineName) {
          return timelineName in this.animationTimelines ? this.animationTimelines[timelineName] : null;
        };
        AnimationData.prototype.getBoneCachedFrameIndices = function(boneName) {
          return boneName in this.boneCachedFrameIndices ? this.boneCachedFrameIndices[boneName] : null;
        };
        AnimationData.prototype.getSlotCachedFrameIndices = function(slotName) {
          return slotName in this.slotCachedFrameIndices ? this.slotCachedFrameIndices[slotName] : null;
        };
        return AnimationData;
      })(dragonBones.BaseObject);
      dragonBones.AnimationData = AnimationData;
      var TimelineData = (function(_super) {
        __extends(TimelineData, _super);
        function TimelineData() {
          return null !== _super && _super.apply(this, arguments) || this;
        }
        TimelineData.toString = function() {
          return "[class dragonBones.TimelineData]";
        };
        TimelineData.prototype._onClear = function() {
          this.type = 10;
          this.offset = 0;
          this.frameIndicesOffset = -1;
        };
        return TimelineData;
      })(dragonBones.BaseObject);
      dragonBones.TimelineData = TimelineData;
    })(dragonBones || (dragonBones = {}));
    var dragonBones;
    (function(dragonBones) {
      var AnimationConfig = (function(_super) {
        __extends(AnimationConfig, _super);
        function AnimationConfig() {
          var _this = null !== _super && _super.apply(this, arguments) || this;
          _this.boneMask = [];
          return _this;
        }
        AnimationConfig.toString = function() {
          return "[class dragonBones.AnimationConfig]";
        };
        AnimationConfig.prototype._onClear = function() {
          this.pauseFadeOut = true;
          this.fadeOutMode = 4;
          this.fadeOutTweenType = 1;
          this.fadeOutTime = -1;
          this.actionEnabled = true;
          this.additiveBlending = false;
          this.displayControl = true;
          this.pauseFadeIn = true;
          this.resetToPose = true;
          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;
        };
        AnimationConfig.prototype.clear = function() {
          this._onClear();
        };
        AnimationConfig.prototype.copyFrom = function(value) {
          this.pauseFadeOut = value.pauseFadeOut;
          this.fadeOutMode = value.fadeOutMode;
          this.autoFadeOutTime = value.autoFadeOutTime;
          this.fadeOutTweenType = value.fadeOutTweenType;
          this.actionEnabled = value.actionEnabled;
          this.additiveBlending = value.additiveBlending;
          this.displayControl = value.displayControl;
          this.pauseFadeIn = value.pauseFadeIn;
          this.resetToPose = value.resetToPose;
          this.playTimes = value.playTimes;
          this.layer = value.layer;
          this.position = value.position;
          this.duration = value.duration;
          this.timeScale = value.timeScale;
          this.fadeInTime = value.fadeInTime;
          this.fadeOutTime = value.fadeOutTime;
          this.fadeInTweenType = value.fadeInTweenType;
          this.weight = value.weight;
          this.name = value.name;
          this.animation = value.animation;
          this.group = value.group;
          this.boneMask.length = value.boneMask.length;
          for (var i = 0, l = this.boneMask.length; i < l; ++i) this.boneMask[i] = value.boneMask[i];
        };
        AnimationConfig.prototype.containsBoneMask = function(boneName) {
          return 0 === this.boneMask.length || this.boneMask.indexOf(boneName) >= 0;
        };
        AnimationConfig.prototype.addBoneMask = function(armature, boneName, recursive) {
          void 0 === recursive && (recursive = true);
          var currentBone = armature.getBone(boneName);
          if (null === currentBone) return;
          this.boneMask.indexOf(boneName) < 0 && this.boneMask.push(boneName);
          if (recursive) for (var _i = 0, _a = armature.getBones(); _i < _a.length; _i++) {
            var bone = _a[_i];
            this.boneMask.indexOf(bone.name) < 0 && currentBone.contains(bone) && this.boneMask.push(bone.name);
          }
        };
        AnimationConfig.prototype.removeBoneMask = function(armature, boneName, recursive) {
          void 0 === recursive && (recursive = true);
          var index = this.boneMask.indexOf(boneName);
          index >= 0 && this.boneMask.splice(index, 1);
          if (recursive) {
            var currentBone = armature.getBone(boneName);
            if (null !== currentBone) if (this.boneMask.length > 0) for (var _i = 0, _a = armature.getBones(); _i < _a.length; _i++) {
              var bone = _a[_i];
              var index_1 = this.boneMask.indexOf(bone.name);
              index_1 >= 0 && currentBone.contains(bone) && this.boneMask.splice(index_1, 1);
            } else for (var _b = 0, _c = armature.getBones(); _b < _c.length; _b++) {
              var bone = _c[_b];
              if (bone === currentBone) continue;
              currentBone.contains(bone) || this.boneMask.push(bone.name);
            }
          }
        };
        return AnimationConfig;
      })(dragonBones.BaseObject);
      dragonBones.AnimationConfig = AnimationConfig;
    })(dragonBones || (dragonBones = {}));
    var dragonBones;
    (function(dragonBones) {
      var TextureAtlasData = (function(_super) {
        __extends(TextureAtlasData, _super);
        function TextureAtlasData() {
          var _this = null !== _super && _super.apply(this, arguments) || this;
          _this.textures = {};
          return _this;
        }
        TextureAtlasData.prototype._onClear = function() {
          for (var k in this.textures) {
            this.textures[k].returnToPool();
            delete this.textures[k];
          }
          this.autoSearch = false;
          this.width = 0;
          this.height = 0;
          this.scale = 1;
          this.name = "";
          this.imagePath = "";
        };
        TextureAtlasData.prototype.copyFrom = function(value) {
          this.autoSearch = value.autoSearch;
          this.scale = value.scale;
          this.width = value.width;
          this.height = value.height;
          this.name = value.name;
          this.imagePath = value.imagePath;
          for (var k in this.textures) {
            this.textures[k].returnToPool();
            delete this.textures[k];
          }
          for (var k in value.textures) {
            var texture = this.createTexture();
            texture.copyFrom(value.textures[k]);
            this.textures[k] = texture;
          }
        };
        TextureAtlasData.prototype.addTexture = function(value) {
          if (value.name in this.textures) {
            console.warn("Same texture: " + value.name);
            return;
          }
          value.parent = this;
          this.textures[value.name] = value;
        };
        TextureAtlasData.prototype.getTexture = function(textureName) {
          return textureName in this.textures ? this.textures[textureName] : null;
        };
        return TextureAtlasData;
      })(dragonBones.BaseObject);
      dragonBones.TextureAtlasData = TextureAtlasData;
      var TextureData = (function(_super) {
        __extends(TextureData, _super);
        function TextureData() {
          var _this = null !== _super && _super.apply(this, arguments) || this;
          _this.region = new dragonBones.Rectangle();
          _this.frame = null;
          return _this;
        }
        TextureData.createRectangle = function() {
          return new dragonBones.Rectangle();
        };
        TextureData.prototype._onClear = function() {
          this.rotated = false;
          this.name = "";
          this.region.clear();
          this.parent = null;
          this.frame = null;
        };
        TextureData.prototype.copyFrom = function(value) {
          this.rotated = value.rotated;
          this.name = value.name;
          this.region.copyFrom(value.region);
          this.parent = value.parent;
          null === this.frame && null !== value.frame ? this.frame = TextureData.createRectangle() : null !== this.frame && null === value.frame && (this.frame = null);
          null !== this.frame && null !== value.frame && this.frame.copyFrom(value.frame);
        };
        return TextureData;
      })(dragonBones.BaseObject);
      dragonBones.TextureData = TextureData;
    })(dragonBones || (dragonBones = {}));
    var dragonBones;
    (function(dragonBones) {
      var DeformVertices = (function(_super) {
        __extends(DeformVertices, _super);
        function DeformVertices() {
          var _this = null !== _super && _super.apply(this, arguments) || this;
          _this.vertices = [];
          _this.bones = [];
          return _this;
        }
        DeformVertices.toString = function() {
          return "[class dragonBones.DeformVertices]";
        };
        DeformVertices.prototype._onClear = function() {
          this.verticesDirty = false;
          this.vertices.length = 0;
          this.bones.length = 0;
          this.verticesData = null;
        };
        DeformVertices.prototype.init = function(verticesDataValue, armature) {
          this.verticesData = verticesDataValue;
          if (null !== this.verticesData) {
            var vertexCount = 0;
            vertexCount = null !== this.verticesData.weight ? 2 * this.verticesData.weight.count : 2 * this.verticesData.data.intArray[this.verticesData.offset + 0];
            this.verticesDirty = true;
            this.vertices.length = vertexCount;
            this.bones.length = 0;
            for (var i = 0, l = this.vertices.length; i < l; ++i) this.vertices[i] = 0;
            if (null !== this.verticesData.weight) for (var i = 0, l = this.verticesData.weight.bones.length; i < l; ++i) {
              var bone = armature.getBone(this.verticesData.weight.bones[i].name);
              this.bones.push(bone);
            }
          } else {
            this.verticesDirty = false;
            this.vertices.length = 0;
            this.bones.length = 0;
            this.verticesData = null;
          }
        };
        DeformVertices.prototype.isBonesUpdate = function() {
          for (var _i = 0, _a = this.bones; _i < _a.length; _i++) {
            var bone = _a[_i];
            if (null !== bone && bone._childrenTransformDirty) return true;
          }
          return false;
        };
        return DeformVertices;
      })(dragonBones.BaseObject);
      dragonBones.DeformVertices = DeformVertices;
    })(dragonBones || (dragonBones = {}));
    var dragonBones;
    (function(dragonBones_1) {
      var Armature = (function(_super) {
        __extends(Armature, _super);
        function Armature() {
          var _this = null !== _super && _super.apply(this, arguments) || this;
          _this._bones = [];
          _this._slots = [];
          _this._constraints = [];
          _this._actions = [];
          _this._animation = null;
          _this._proxy = null;
          _this._replaceTextureAtlasData = null;
          _this._clock = null;
          return _this;
        }
        Armature.toString = function() {
          return "[class dragonBones.Armature]";
        };
        Armature._onSortSlots = function(a, b) {
          return a._zOrder > b._zOrder ? 1 : -1;
        };
        Armature.prototype._onClear = function() {
          null !== this._clock && this._clock.remove(this);
          for (var _i = 0, _a = this._bones; _i < _a.length; _i++) {
            var bone = _a[_i];
            bone.returnToPool();
          }
          for (var _b = 0, _c = this._slots; _b < _c.length; _b++) {
            var slot = _c[_b];
            slot.returnToPool();
          }
          for (var _d = 0, _e = this._constraints; _d < _e.length; _d++) {
            var constraint = _e[_d];
            constraint.returnToPool();
          }
          for (var _f = 0, _g = this._actions; _f < _g.length; _f++) {
            var action = _g[_f];
            action.returnToPool();
          }
          null !== this._animation && this._animation.returnToPool();
          null !== this._proxy && this._proxy.dbClear();
          null !== this._replaceTextureAtlasData && this._replaceTextureAtlasData.returnToPool();
          this.inheritAnimation = true;
          this.userData = null;
          this._lockUpdate = false;
          this._slotsDirty = true;
          this._zOrderDirty = false;
          this._flipX = false;
          this._flipY = false;
          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;
        };
        Armature.prototype._sortZOrder = function(slotIndices, offset) {
          var slotDatas = this._armatureData.sortedSlots;
          var isOriginal = null === slotIndices;
          if (this._zOrderDirty || !isOriginal) {
            for (var i = 0, l = slotDatas.length; i < l; ++i) {
              var slotIndex = isOriginal ? i : slotIndices[offset + i];
              if (slotIndex < 0 || slotIndex >= l) continue;
              var slotData = slotDatas[slotIndex];
              var slot = this.getSlot(slotData.name);
              null !== slot && slot._setZorder(i);
            }
            this._slotsDirty = true;
            this._zOrderDirty = !isOriginal;
          }
        };
        Armature.prototype._addBone = function(value) {
          this._bones.indexOf(value) < 0 && this._bones.push(value);
        };
        Armature.prototype._addSlot = function(value) {
          this._slots.indexOf(value) < 0 && this._slots.push(value);
        };
        Armature.prototype._addConstraint = function(value) {
          this._constraints.indexOf(value) < 0 && this._constraints.push(value);
        };
        Armature.prototype._bufferAction = function(action, append) {
          this._actions.indexOf(action) < 0 && (append ? this._actions.push(action) : this._actions.unshift(action));
        };
        Armature.prototype.dispose = function() {
          if (null !== this._armatureData) {
            this._lockUpdate = true;
            this._dragonBones.bufferObject(this);
          }
        };
        Armature.prototype.init = function(armatureData, proxy, display, dragonBones) {
          if (null !== this._armatureData) return;
          this._armatureData = armatureData;
          this._animation = dragonBones_1.BaseObject.borrowObject(dragonBones_1.Animation);
          this._proxy = proxy;
          this._display = display;
          this._dragonBones = dragonBones;
          this._proxy.dbInit(this);
          this._animation.init(this);
          this._animation.animations = this._armatureData.animations;
        };
        Armature.prototype.advanceTime = function(passedTime) {
          if (this._lockUpdate) return;
          if (null === this._armatureData) {
            console.warn("The armature has been disposed.");
            return;
          }
          if (null === this._armatureData.parent) {
            console.warn("The armature data has been disposed.\nPlease make sure dispose armature before call factory.clear().");
            return;
          }
          var prevCacheFrameIndex = this._cacheFrameIndex;
          this._animation.advanceTime(passedTime);
          if (this._slotsDirty) {
            this._slotsDirty = false;
            this._slots.sort(Armature._onSortSlots);
          }
          if (this._cacheFrameIndex < 0 || this._cacheFrameIndex !== prevCacheFrameIndex) {
            var i = 0, l = 0;
            for (i = 0, l = this._bones.length; i < l; ++i) this._bones[i].update(this._cacheFrameIndex);
            for (i = 0, l = this._slots.length; i < l; ++i) this._slots[i].update(this._cacheFrameIndex);
          }
          if (this._actions.length > 0) {
            this._lockUpdate = true;
            for (var _i = 0, _a = this._actions; _i < _a.length; _i++) {
              var action = _a[_i];
              var actionData = action.actionData;
              if (null !== actionData && 0 === actionData.type) if (null !== action.slot) {
                var childArmature = action.slot.childArmature;
                null !== childArmature && childArmature.animation.fadeIn(actionData.name);
              } else if (null !== action.bone) for (var _b = 0, _c = this.getSlots(); _b < _c.length; _b++) {
                var slot = _c[_b];
                if (slot.parent === action.bone) {
                  var childArmature = slot.childArmature;
                  null !== childArmature && childArmature.animation.fadeIn(actionData.name);
                }
              } else this._animation.fadeIn(actionData.name);
              action.returnToPool();
            }
            this._actions.length = 0;
            this._lockUpdate = false;
          }
          this._proxy.dbUpdate();
        };
        Armature.prototype.invalidUpdate = function(boneName, updateSlot) {
          void 0 === boneName && (boneName = null);
          void 0 === updateSlot && (updateSlot = false);
          if (null !== boneName && boneName.length > 0) {
            var bone = this.getBone(boneName);
            if (null !== bone) {
              bone.invalidUpdate();
              if (updateSlot) for (var _i = 0, _a = this._slots; _i < _a.length; _i++) {
                var slot = _a[_i];
                slot.parent === bone && slot.invalidUpdate();
              }
            }
          } else {
            for (var _b = 0, _c = this._bones; _b < _c.length; _b++) {
              var bone = _c[_b];
              bone.invalidUpdate();
            }
            if (updateSlot) for (var _d = 0, _e = this._slots; _d < _e.length; _d++) {
              var slot = _e[_d];
              slot.invalidUpdate();
            }
          }
        };
        Armature.prototype.containsPoint = function(x, y) {
          for (var _i = 0, _a = this._slots; _i < _a.length; _i++) {
            var slot = _a[_i];
            if (slot.containsPoint(x, y)) return slot;
          }
          return null;
        };
        Armature.prototype.intersectsSegment = function(xA, yA, xB, yB, intersectionPointA, intersectionPointB, normalRadians) {
          void 0 === intersectionPointA && (intersectionPointA = null);
          void 0 === intersectionPointB && (intersectionPointB = null);
          void 0 === normalRadians && (normalRadians = null);
          var isV = xA === xB;
          var dMin = 0;
          var dMax = 0;
          var intXA = 0;
          var intYA = 0;
          var intXB = 0;
          var intYB = 0;
          var intAN = 0;
          var intBN = 0;
          var intSlotA = null;
          var intSlotB = null;
          for (var _i = 0, _a = this._slots; _i < _a.length; _i++) {
            var slot = _a[_i];
            var intersectionCount = slot.intersectsSegment(xA, yA, xB, yB, intersectionPointA, intersectionPointB, normalRadians);
            if (intersectionCount > 0) {
              if (null === intersectionPointA && null === intersectionPointB) {
                intSlotA = slot;
                break;
              }
              if (null !== intersectionPointA) {
                var d = isV ? intersectionPointA.y - yA : intersectionPointA.x - xA;
                d < 0 && (d = -d);
                if (null === intSlotA || d < dMin) {
                  dMin = d;
                  intXA = intersectionPointA.x;
                  intYA = intersectionPointA.y;
                  intSlotA = slot;
                  normalRadians && (intAN = normalRadians.x);
                }
              }
              if (null !== intersectionPointB) {
                var d = intersectionPointB.x - xA;
                d < 0 && (d = -d);
                if (null === intSlotB || d > dMax) {
                  dMax = d;
                  intXB = intersectionPointB.x;
                  intYB = intersectionPointB.y;
                  intSlotB = slot;
                  null !== normalRadians && (intBN = normalRadians.y);
                }
              }
            }
          }
          if (null !== intSlotA && null !== intersectionPointA) {
            intersectionPointA.x = intXA;
            intersectionPointA.y = intYA;
            null !== normalRadians && (normalRadians.x = intAN);
          }
          if (null !== intSlotB && null !== intersectionPointB) {
            intersectionPointB.x = intXB;
            intersectionPointB.y = intYB;
            null !== normalRadians && (normalRadians.y = intBN);
          }
          return intSlotA;
        };
        Armature.prototype.getBone = function(name) {
          for (var _i = 0, _a = this._bones; _i < _a.length; _i++) {
            var bone = _a[_i];
            if (bone.name === name) return bone;
          }
          return null;
        };
        Armature.prototype.getBoneByDisplay = function(display) {
          var slot = this.getSlotByDisplay(display);
          return null !== slot ? slot.parent : null;
        };
        Armature.prototype.getSlot = function(name) {
          for (var _i = 0, _a = this._slots; _i < _a.length; _i++) {
            var slot = _a[_i];
            if (slot.name === name) return slot;
          }
          return null;
        };
        Armature.prototype.getSlotByDisplay = function(display) {
          if (null !== display) for (var _i = 0, _a = this._slots; _i < _a.length; _i++) {
            var slot = _a[_i];
            if (slot.display === display) return slot;
          }
          return null;
        };
        Armature.prototype.getBones = function() {
          return this._bones;
        };
        Armature.prototype.getSlots = function() {
          return this._slots;
        };
        Object.defineProperty(Armature.prototype, "flipX", {
          get: function get() {
            return this._flipX;
          },
          set: function set(value) {
            if (this._flipX === value) return;
            this._flipX = value;
            this.invalidUpdate();
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(Armature.prototype, "flipY", {
          get: function get() {
            return this._flipY;
          },
          set: function set(value) {
            if (this._flipY === value) return;
            this._flipY = value;
            this.invalidUpdate();
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(Armature.prototype, "cacheFrameRate", {
          get: function get() {
            return this._armatureData.cacheFrameRate;
          },
          set: function set(value) {
            if (this._armatureData.cacheFrameRate !== value) {
              this._armatureData.cacheFrames(value);
              for (var _i = 0, _a = this._slots; _i < _a.length; _i++) {
                var slot = _a[_i];
                var childArmature = slot.childArmature;
                null !== childArmature && (childArmature.cacheFrameRate = value);
              }
            }
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(Armature.prototype, "name", {
          get: function get() {
            return this._armatureData.name;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(Armature.prototype, "armatureData", {
          get: function get() {
            return this._armatureData;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(Armature.prototype, "animation", {
          get: function get() {
            return this._animation;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(Armature.prototype, "proxy", {
          get: function get() {
            return this._proxy;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(Armature.prototype, "eventDispatcher", {
          get: function get() {
            return this._proxy;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(Armature.prototype, "display", {
          get: function get() {
            return this._display;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(Armature.prototype, "replacedTexture", {
          get: function get() {
            return this._replacedTexture;
          },
          set: function set(value) {
            if (this._replacedTexture === value) return;
            if (null !== this._replaceTextureAtlasData) {
              this._replaceTextureAtlasData.returnToPool();
              this._replaceTextureAtlasData = null;
            }
            this._replacedTexture = value;
            for (var _i = 0, _a = this._slots; _i < _a.length; _i++) {
              var slot = _a[_i];
              slot.invalidUpdate();
              slot.update(-1);
            }
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(Armature.prototype, "clock", {
          get: function get() {
            return this._clock;
          },
          set: function set(value) {
            if (this._clock === value) return;
            null !== this._clock && this._clock.remove(this);
            this._clock = value;
            this._clock && this._clock.add(this);
            for (var _i = 0, _a = this._slots; _i < _a.length; _i++) {
              var slot = _a[_i];
              var childArmature = slot.childArmature;
              null !== childArmature && (childArmature.clock = this._clock);
            }
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(Armature.prototype, "parent", {
          get: function get() {
            return this._parent;
          },
          enumerable: true,
          configurable: true
        });
        Armature.prototype.replaceTexture = function(texture) {
          this.replacedTexture = texture;
        };
        Armature.prototype.hasEventListener = function(type) {
          return this._proxy.hasDBEventListener(type);
        };
        Armature.prototype.addEventListener = function(type, listener, target) {
          this._proxy.addDBEventListener(type, listener, target);
        };
        Armature.prototype.removeEventListener = function(type, listener, target) {
          this._proxy.removeDBEventListener(type, listener, target);
        };
        Armature.prototype.enableAnimationCache = function(frameRate) {
          console.warn("Deprecated.");
          this.cacheFrameRate = frameRate;
        };
        Armature.prototype.getDisplay = function() {
          return this._display;
        };
        return Armature;
      })(dragonBones_1.BaseObject);
      dragonBones_1.Armature = Armature;
    })(dragonBones || (dragonBones = {}));
    var dragonBones;
    (function(dragonBones) {
      var TransformObject = (function(_super) {
        __extends(TransformObject, _super);
        function TransformObject() {
          var _this = null !== _super && _super.apply(this, arguments) || this;
          _this.globalTransformMatrix = new dragonBones.Matrix();
          _this.global = new dragonBones.Transform();
          _this.offset = new dragonBones.Transform();
          return _this;
        }
        TransformObject.prototype._onClear = function() {
          this.globalTransformMatrix.identity();
          this.global.identity();
          this.offset.identity();
          this.origin = null;
          this.userData = null;
          this._globalDirty = false;
          this._armature = null;
        };
        TransformObject.prototype.updateGlobalTransform = function() {
          if (this._globalDirty) {
            this._globalDirty = false;
            this.global.fromMatrix(this.globalTransformMatrix);
          }
        };
        Object.defineProperty(TransformObject.prototype, "armature", {
          get: function get() {
            return this._armature;
          },
          enumerable: true,
          configurable: true
        });
        TransformObject._helpMatrix = new dragonBones.Matrix();
        TransformObject._helpTransform = new dragonBones.Transform();
        TransformObject._helpPoint = new dragonBones.Point();
        return TransformObject;
      })(dragonBones.BaseObject);
      dragonBones.TransformObject = TransformObject;
    })(dragonBones || (dragonBones = {}));
    var dragonBones;
    (function(dragonBones) {
      var Bone = (function(_super) {
        __extends(Bone, _super);
        function Bone() {
          var _this = null !== _super && _super.apply(this, arguments) || this;
          _this.animationPose = new dragonBones.Transform();
          _this._blendState = new dragonBones.BlendState();
          return _this;
        }
        Bone.toString = function() {
          return "[class dragonBones.Bone]";
        };
        Bone.prototype._onClear = function() {
          _super.prototype._onClear.call(this);
          this.offsetMode = 1;
          this.animationPose.identity();
          this._transformDirty = false;
          this._childrenTransformDirty = false;
          this._localDirty = true;
          this._hasConstraint = false;
          this._visible = true;
          this._cachedFrameIndex = -1;
          this._blendState.clear();
          this._boneData = null;
          this._parent = null;
          this._cachedFrameIndices = null;
        };
        Bone.prototype._updateGlobalTransformMatrix = function(isCache) {
          var boneData = this._boneData;
          var global = this.global;
          var globalTransformMatrix = this.globalTransformMatrix;
          var origin = this.origin;
          var offset = this.offset;
          var animationPose = this.animationPose;
          var parent = this._parent;
          var flipX = this._armature.flipX;
          var flipY = this._armature.flipY === dragonBones.DragonBones.yDown;
          var inherit = null !== parent;
          var rotation = 0;
          if (1 === this.offsetMode) if (null !== origin) {
            global.x = origin.x + offset.x + animationPose.x;
            global.scaleX = origin.scaleX * offset.scaleX * animationPose.scaleX;
            global.scaleY = origin.scaleY * offset.scaleY * animationPose.scaleY;
            if (dragonBones.DragonBones.yDown) {
              global.y = origin.y + offset.y + animationPose.y;
              global.skew = origin.skew + offset.skew + animationPose.skew;
              global.rotation = origin.rotation + offset.rotation + animationPose.rotation;
            } else {
              global.y = origin.y - offset.y + animationPose.y;
              global.skew = origin.skew - offset.skew + animationPose.skew;
              global.rotation = origin.rotation - offset.rotation + animationPose.rotation;
            }
          } else {
            global.copyFrom(offset);
            if (!dragonBones.DragonBones.yDown) {
              global.y = -global.y;
              global.skew = -global.skew;
              global.rotation = -global.rotation;
            }
            global.add(animationPose);
          } else if (0 === this.offsetMode) null !== origin ? global.copyFrom(origin).add(animationPose) : global.copyFrom(animationPose); else {
            inherit = false;
            global.copyFrom(offset);
            if (!dragonBones.DragonBones.yDown) {
              global.y = -global.y;
              global.skew = -global.skew;
              global.rotation = -global.rotation;
            }
          }
          if (inherit) {
            var parentMatrix = 0 === parent._boneData.type ? parent.globalTransformMatrix : parent._getGlobalTransformMatrix(global.x, global.y);
            if (boneData.inheritScale) {
              if (!boneData.inheritRotation) {
                parent.updateGlobalTransform();
                rotation = flipX && flipY ? global.rotation - (parent.global.rotation + Math.PI) : flipX ? global.rotation + parent.global.rotation + Math.PI : flipY ? global.rotation + parent.global.rotation : global.rotation - parent.global.rotation;
                global.rotation = rotation;
              }
              global.toMatrix(globalTransformMatrix);
              globalTransformMatrix.concat(parentMatrix);
              if (boneData.inheritTranslation) {
                global.x = globalTransformMatrix.tx;
                global.y = globalTransformMatrix.ty;
              } else {
                globalTransformMatrix.tx = global.x;
                globalTransformMatrix.ty = global.y;
              }
              isCache ? global.fromMatrix(globalTransformMatrix) : this._globalDirty = true;
            } else {
              if (boneData.inheritTranslation) {
                var x = global.x;
                var y = global.y;
                global.x = parentMatrix.a * x + parentMatrix.c * y + parentMatrix.tx;
                global.y = parentMatrix.b * x + parentMatrix.d * y + parentMatrix.ty;
              } else {
                flipX && (global.x = -global.x);
                flipY && (global.y = -global.y);
              }
              if (boneData.inheritRotation) {
                parent.updateGlobalTransform();
                rotation = parent.global.scaleX < 0 ? global.rotation + parent.global.rotation + Math.PI : global.rotation + parent.global.rotation;
                if (parentMatrix.a * parentMatrix.d - parentMatrix.b * parentMatrix.c < 0) {
                  rotation -= 2 * global.rotation;
                  (flipX !== flipY || boneData.inheritReflection) && (global.skew += Math.PI);
                  dragonBones.DragonBones.yDown || (global.skew = -global.skew);
                }
                global.rotation = rotation;
              } else if (flipX || flipY) {
                if (flipX && flipY) rotation = global.rotation + Math.PI; else {
                  rotation = flipX ? Math.PI - global.rotation : -global.rotation;
                  global.skew += Math.PI;
                }
                global.rotation = rotation;
              }
              global.toMatrix(globalTransformMatrix);
            }
          } else {
            if (flipX || flipY) {
              flipX && (global.x = -global.x);
              flipY && (global.y = -global.y);
              if (flipX && flipY) rotation = global.rotation + Math.PI; else {
                rotation = flipX ? Math.PI - global.rotation : -global.rotation;
                global.skew += Math.PI;
              }
              global.rotation = rotation;
            }
            global.toMatrix(globalTransformMatrix);
          }
        };
        Bone.prototype.init = function(boneData, armatureValue) {
          if (null !== this._boneData) return;
          this._boneData = boneData;
          this._armature = armatureValue;
          null !== this._boneData.parent && (this._parent = this._armature.getBone(this._boneData.parent.name));
          this._armature._addBone(this);
          this.origin = this._boneData.transform;
        };
        Bone.prototype.update = function(cacheFrameIndex) {
          this._blendState.dirty = false;
          if (cacheFrameIndex >= 0 && null !== this._cachedFrameIndices) {
            var cachedFrameIndex = this._cachedFrameIndices[cacheFrameIndex];
            if (cachedFrameIndex >= 0 && this._cachedFrameIndex === cachedFrameIndex) this._transformDirty = false; else if (cachedFrameIndex >= 0) {
              this._transformDirty = true;
              this._cachedFrameIndex = cachedFrameIndex;
            } else {
              if (this._hasConstraint) for (var _i = 0, _a = this._armature._constraints; _i < _a.length; _i++) {
                var constraint = _a[_i];
                constraint._root === this && constraint.update();
              }
              if (this._transformDirty || null !== this._parent && this._parent._childrenTransformDirty) {
                this._transformDirty = true;
                this._cachedFrameIndex = -1;
              } else if (this._cachedFrameIndex >= 0) {
                this._transformDirty = false;
                this._cachedFrameIndices[cacheFrameIndex] = this._cachedFrameIndex;
              } else {
                this._transformDirty = true;
                this._cachedFrameIndex = -1;
              }
            }
          } else {
            if (this._hasConstraint) for (var _b = 0, _c = this._armature._constraints; _b < _c.length; _b++) {
              var constraint = _c[_b];
              constraint._root === this && constraint.update();
            }
            if (this._transformDirty || null !== this._parent && this._parent._childrenTransformDirty) {
              cacheFrameIndex = -1;
              this._transformDirty = true;
              this._cachedFrameIndex = -1;
            }
          }
          if (this._transformDirty) {
            this._transformDirty = false;
            this._childrenTransformDirty = true;
            if (this._cachedFrameIndex < 0) {
              var isCache = cacheFrameIndex >= 0;
              this._localDirty && this._updateGlobalTransformMatrix(isCache);
              isCache && null !== this._cachedFrameIndices && (this._cachedFrameIndex = this._cachedFrameIndices[cacheFrameIndex] = this._armature._armatureData.setCacheFrame(this.globalTransformMatrix, this.global));
            } else this._armature._armatureData.getCacheFrame(this.globalTransformMatrix, this.global, this._cachedFrameIndex);
          } else this._childrenTransformDirty && (this._childrenTransformDirty = false);
          this._localDirty = true;
        };
        Bone.prototype.updateByConstraint = function() {
          if (this._localDirty) {
            this._localDirty = false;
            (this._transformDirty || null !== this._parent && this._parent._childrenTransformDirty) && this._updateGlobalTransformMatrix(true);
            this._transformDirty = true;
          }
        };
        Bone.prototype.invalidUpdate = function() {
          this._transformDirty = true;
        };
        Bone.prototype.contains = function(value) {
          if (value === this) return false;
          var ancestor = value;
          while (ancestor !== this && null !== ancestor) ancestor = ancestor.parent;
          return ancestor === this;
        };
        Object.defineProperty(Bone.prototype, "boneData", {
          get: function get() {
            return this._boneData;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(Bone.prototype, "visible", {
          get: function get() {
            return this._visible;
          },
          set: function set(value) {
            if (this._visible === value) return;
            this._visible = value;
            for (var _i = 0, _a = this._armature.getSlots(); _i < _a.length; _i++) {
              var slot = _a[_i];
              slot.parent === this && slot._updateVisible();
            }
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(Bone.prototype, "name", {
          get: function get() {
            return this._boneData.name;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(Bone.prototype, "parent", {
          get: function get() {
            return this._parent;
          },
          enumerable: true,
          configurable: true
        });
        Bone.prototype.getBones = function() {
          console.warn("Deprecated.");
          var bones = new Array();
          for (var _i = 0, _a = this._armature.getBones(); _i < _a.length; _i++) {
            var bone = _a[_i];
            bone.parent === this && bones.push(bone);
          }
          return bones;
        };
        Bone.prototype.getSlots = function() {
          console.warn("Deprecated.");
          var slots = new Array();
          for (var _i = 0, _a = this._armature.getSlots(); _i < _a.length; _i++) {
            var slot = _a[_i];
            slot.parent === this && slots.push(slot);
          }
          return slots;
        };
        Object.defineProperty(Bone.prototype, "slot", {
          get: function get() {
            console.warn("Deprecated.");
            for (var _i = 0, _a = this._armature.getSlots(); _i < _a.length; _i++) {
              var slot = _a[_i];
              if (slot.parent === this) return slot;
            }
            return null;
          },
          enumerable: true,
          configurable: true
        });
        return Bone;
      })(dragonBones.TransformObject);
      dragonBones.Bone = Bone;
    })(dragonBones || (dragonBones = {}));
    var dragonBones;
    (function(dragonBones) {
      var Surface = (function(_super) {
        __extends(Surface, _super);
        function Surface() {
          var _this = null !== _super && _super.apply(this, arguments) || this;
          _this._vertices = [];
          _this._deformVertices = [];
          _this._hullCache = [];
          _this._matrixCahce = [];
          return _this;
        }
        Surface.toString = function() {
          return "[class dragonBones.Surface]";
        };
        Surface.prototype._onClear = function() {
          _super.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;
        };
        Surface.prototype._getAffineTransform = function(x, y, lX, lY, aX, aY, bX, bY, cX, cY, transform, matrix, isDown) {
          var dabX = bX - aX;
          var dabY = bY - aY;
          var dacX = cX - aX;
          var dacY = cY - aY;
          transform.rotation = Math.atan2(dabY, dabX);
          transform.skew = Math.atan2(dacY, dacX) - .5 * Math.PI - transform.rotation;
          isDown && (transform.rotation += Math.PI);
          transform.scaleX = Math.sqrt(dabX * dabX + dabY * dabY) / lX;
          transform.scaleY = Math.sqrt(dacX * dacX + dacY * dacY) / lY;
          transform.toMatrix(matrix);
          transform.x = matrix.tx = aX - (matrix.a * x + matrix.c * y);
          transform.y = matrix.ty = aY - (matrix.b * x + matrix.d * y);
        };
        Surface.prototype._updateVertices = function() {
          var originalVertices = this._boneData.vertices;
          var vertices = this._vertices;
          var animationVertices = this._deformVertices;
          if (null !== this._parent) if (1 === this._parent._boneData.type) for (var i = 0, l = originalVertices.length; i < l; i += 2) {
            var x = originalVertices[i] + animationVertices[i];
            var y = originalVertices[i + 1] + animationVertices[i];
            var matrix = this._parent._getGlobalTransformMatrix(x, y);
            vertices[i] = matrix.a * x + matrix.c * y + matrix.tx;
            vertices[i + 1] = matrix.b * x + matrix.d * y + matrix.ty;
          } else {
            var parentMatrix = this._parent.globalTransformMatrix;
            for (var i = 0, l = originalVertices.length; i < l; i += 2) {
              var x = originalVertices[i] + animationVertices[i];
              var y = originalVertices[i + 1] + animationVertices[i + 1];
              vertices[i] = parentMatrix.a * x + parentMatrix.c * y + parentMatrix.tx;
              vertices[i + 1] = parentMatrix.b * x + parentMatrix.d * y + parentMatrix.ty;
            }
          } else for (var i = 0, l = originalVertices.length; i < l; i += 2) {
            vertices[i] = originalVertices[i] + animationVertices[i];
            vertices[i + 1] = originalVertices[i + 1] + animationVertices[i + 1];
          }
        };
        Surface.prototype._updateGlobalTransformMatrix = function(isCache) {
          isCache;
          var segmentXD = 2 * this._boneData.segmentX;
          var lastIndex = this._vertices.length - 2;
          var lA = 200;
          var raX = this._vertices[0];
          var raY = this._vertices[1];
          var rbX = this._vertices[segmentXD];
          var rbY = this._vertices[segmentXD + 1];
          var rcX = this._vertices[lastIndex];
          var rcY = this._vertices[lastIndex + 1];
          var rdX = this._vertices[lastIndex - segmentXD];
          var rdY = this._vertices[lastIndex - segmentXD + 1];
          var dacX = raX + .5 * (rcX - raX);
          var dacY = raY + .5 * (rcY - raY);
          var dbdX = rbX + .5 * (rdX - rbX);
          var dbdY = rbY + .5 * (rdY - rbY);
          var aX = dacX + .5 * (dbdX - dacX);
          var aY = dacY + .5 * (dbdY - dacY);
          var bX = rbX + .5 * (rcX - rbX);
          var bY = rbY + .5 * (rcY - rbY);
          var cX = rdX + .5 * (rcX - rdX);
          var cY = rdY + .5 * (rcY - rdY);
          this._globalDirty = false;
          this._getAffineTransform(0, 0, lA, lA, aX, aY, bX, bY, cX, cY, this.global, this.globalTransformMatrix, false);
        };
        Surface.prototype._getGlobalTransformMatrix = function(x, y) {
          var lB = 1e3;
          if (x < -lB || lB < x || y < -lB || lB < y) return this.globalTransformMatrix;
          var isDown = false;
          var lA = 200;
          var surfaceData = this._boneData;
          var segmentX = surfaceData.segmentX;
          var segmentY = surfaceData.segmentY;
          var segmentXD = 2 * surfaceData.segmentX;
          var dX = this._dX;
          var dY = this._dY;
          var indexX = Math.floor((x + lA) / dX);
          var indexY = Math.floor((y + lA) / dY);
          var matrixIndex = 0;
          var pX = indexX * dX - lA;
          var pY = indexY * dY - lA;
          var matrices = this._matrixCahce;
          var helpMatrix = Surface._helpMatrix;
          if (x < -lA) {
            if (y < -lA || y >= lA) return this.globalTransformMatrix;
            isDown = y > this._kX * (x + lA) + pY;
            matrixIndex = 7 * (2 * (segmentX * (segmentY + 1) + 2 * segmentX + segmentY + indexY) + (isDown ? 1 : 0));
            if (this._matrixCahce[matrixIndex] > 0) helpMatrix.copyFromArray(matrices, matrixIndex + 1); else {
              var vertexIndex = indexY * (segmentXD + 2);
              var ddX = this._hullCache[4];
              var ddY = this._hullCache[5];
              var sX = this._hullCache[2] - (segmentY - indexY) * ddX;
              var sY = this._hullCache[3] - (segmentY - indexY) * ddY;
              var vertices = this._vertices;
              isDown ? this._getAffineTransform(-lA, pY + dY, lB - lA, dY, vertices[vertexIndex + segmentXD + 2], vertices[vertexIndex + segmentXD + 3], sX + ddX, sY + ddY, vertices[vertexIndex], vertices[vertexIndex + 1], Surface._helpTransform, helpMatrix, true) : this._getAffineTransform(-lB, pY, lB - lA, dY, sX, sY, vertices[vertexIndex], vertices[vertexIndex + 1], sX + ddX, sY + ddY, Surface._helpTransform, helpMatrix, false);
              matrices[matrixIndex] = 1;
              matrices[matrixIndex + 1] = helpMatrix.a;
              matrices[matrixIndex + 2] = helpMatrix.b;
              matrices[matrixIndex + 3] = helpMatrix.c;
              matrices[matrixIndex + 4] = helpMatrix.d;
              matrices[matrixIndex + 5] = helpMatrix.tx;
              matrices[matrixIndex + 6] = helpMatrix.ty;
            }
          } else if (x >= lA) {
            if (y < -lA || y >= lA) return this.globalTransformMatrix;
            isDown = y > this._kX * (x - lB) + pY;
            matrixIndex = 7 * (2 * (segmentX * (segmentY + 1) + segmentX + indexY) + (isDown ? 1 : 0));
            if (this._matrixCahce[matrixIndex] > 0) helpMatrix.copyFromArray(matrices, matrixIndex + 1); else {
              var vertexIndex = (indexY + 1) * (segmentXD + 2) - 2;
              var ddX = this._hullCache[4];
              var ddY = this._hullCache[5];
              var sX = this._hullCache[0] + indexY * ddX;
              var sY = this._hullCache[1] + indexY * ddY;
              var vertices = this._vertices;
              isDown ? this._getAffineTransform(lB, pY + dY, lB - lA, dY, sX + ddX, sY + ddY, vertices[vertexIndex + segmentXD + 2], vertices[vertexIndex + segmentXD + 3], sX, sY, Surface._helpTransform, helpMatrix, true) : this._getAffineTransform(lA, pY, lB - lA, dY, vertices[vertexIndex], vertices[vertexIndex + 1], sX, sY, vertices[vertexIndex + segmentXD + 2], vertices[vertexIndex + segmentXD + 3], Surface._helpTransform, helpMatrix, false);
              matrices[matrixIndex] = 1;
              matrices[matrixIndex + 1] = helpMatrix.a;
              matrices[matrixIndex + 2] = helpMatrix.b;
              matrices[matrixIndex + 3] = helpMatrix.c;
              matrices[matrixIndex + 4] = helpMatrix.d;
              matrices[matrixIndex + 5] = helpMatrix.tx;
              matrices[matrixIndex + 6] = helpMatrix.ty;
            }
          } else if (y < -lA) {
            if (x < -lA || x >= lA) return this.globalTransformMatrix;
            isDown = y > this._kY * (x - pX - dX) - lB;
            matrixIndex = 7 * (segmentX * (segmentY + 1) + 2 * indexX + (isDown ? 1 : 0));
            if (this._matrixCahce[matrixIndex] > 0) helpMatrix.copyFromArray(matrices, matrixIndex + 1); else {
              var vertexIndex = 2 * indexX;
              var ddX = this._hullCache[10];
              var ddY = this._hullCache[11];
              var sX = this._hullCache[8] + indexX * ddX;
              var sY = this._hullCache[9] + indexX * ddY;
              var vertices = this._vertices;
              isDown ? this._getAffineTransform(pX + dX, -lA, dX, lB - lA, vertices[vertexIndex + 2], vertices[vertexIndex + 3], vertices[vertexIndex], vertices[vertexIndex + 1], sX + ddX, sY + ddY, Surface._helpTransform, helpMatrix, true) : this._getAffineTransform(pX, -lB, dX, lB - lA, sX, sY, sX + ddX, sY + ddY, vertices[vertexIndex], vertices[vertexIndex + 1], Surface._helpTransform, helpMatrix, false);
              matrices[matrixIndex] = 1;
              matrices[matrixIndex + 1] = helpMatrix.a;
              matrices[matrixIndex + 2] = helpMatrix.b;
              matrices[matrixIndex + 3] = helpMatrix.c;
              matrices[matrixIndex + 4] = helpMatrix.d;
              matrices[matrixIndex + 5] = helpMatrix.tx;
              matrices[matrixIndex + 6] = helpMatrix.ty;
            }
          } else if (y >= lA) {
            if (x < -lA || x >= lA) return this.globalTransformMatrix;
            isDown = y > this._kY * (x - pX - dX) + lA;
            matrixIndex = 7 * (2 * (segmentX * (segmentY + 1) + segmentX + segmentY + indexY) + (isDown ? 1 : 0));
            if (this._matrixCahce[matrixIndex] > 0) helpMatrix.copyFromArray(matrices, matrixIndex + 1); else {
              var vertexIndex = segmentY * (segmentXD + 2) + 2 * indexX;
              var ddX = this._hullCache[10];
              var ddY = this._hullCache[11];
              var sX = this._hullCache[6] - (segmentX - indexX) * ddX;
              var sY = this._hullCache[7] - (segmentX - indexX) * ddY;
              var vertices = this._vertices;
              isDown ? this._getAffineTransform(pX + dX, lB, dX, lB - lA, sX + ddX, sY + ddY, sX, sY, vertices[vertexIndex + 2], vertices[vertexIndex + 3], Surface._helpTransform, helpMatrix, true) : this._getAffineTransform(pX, lA, dX, lB - lA, vertices[vertexIndex], vertices[vertexIndex + 1], vertices[vertexIndex + 2], vertices[vertexIndex + 3], sX, sY, Surface._helpTransform, helpMatrix, false);
              matrices[matrixIndex] = 1;
              matrices[matrixIndex + 1] = helpMatrix.a;
              matrices[matrixIndex + 2] = helpMatrix.b;
              matrices[matrixIndex + 3] = helpMatrix.c;
              matrices[matrixIndex + 4] = helpMatrix.d;
              matrices[matrixIndex + 5] = helpMatrix.tx;
              matrices[matrixIndex + 6] = helpMatrix.ty;
            }
          } else {
            isDown = y > this._k * (x - pX - dX) + pY;
            matrixIndex = 7 * (2 * (segmentX * indexY + indexX) + (isDown ? 1 : 0));
            if (this._matrixCahce[matrixIndex] > 0) helpMatrix.copyFromArray(matrices, matrixIndex + 1); else {
              var vertexIndex = 2 * indexX + indexY * (segmentXD + 2);
              var vertices = this._vertices;
              isDown ? this._getAffineTransform(pX + dX, pY + dY, dX, dY, vertices[vertexIndex + segmentXD + 4], vertices[vertexIndex + segmentXD + 5], vertices[vertexIndex + segmentXD + 2], vertices[vertexIndex + segmentXD + 3], vertices[vertexIndex + 2], vertices[vertexIndex + 3], Surface._helpTransform, helpMatrix, true) : this._getAffineTransform(pX, pY, dX, dY, vertices[vertexIndex], vertices[vertexIndex + 1], vertices[vertexIndex + 2], vertices[vertexIndex + 3], vertices[vertexIndex + segmentXD + 2], vertices[vertexIndex + segmentXD + 3], Surface._helpTransform, helpMatrix, false);
              matrices[matrixIndex] = 1;
              matrices[matrixIndex + 1] = helpMatrix.a;
              matrices[matrixIndex + 2] = helpMatrix.b;
              matrices[matrixIndex + 3] = helpMatrix.c;
              matrices[matrixIndex + 4] = helpMatrix.d;
              matrices[matrixIndex + 5] = helpMatrix.tx;
              matrices[matrixIndex + 6] = helpMatrix.ty;
            }
          }
          return helpMatrix;
        };
        Surface.prototype.init = function(surfaceData, armatureValue) {
          if (null !== this._boneData) return;
          _super.prototype.init.call(this, surfaceData, armatureValue);
          var segmentX = surfaceData.segmentX;
          var segmentY = surfaceData.segmentY;
          var vertexCount = surfaceData.vertices.length;
          var lB = 1e3;
          var lA = 200;
          this._dX = 2 * lA / segmentX;
          this._dY = 2 * lA / segmentY;
          this._k = -this._dY / this._dX;
          this._kX = -this._dY / (lB - lA);
          this._kY = -(lB - lA) / this._dX;
          this._vertices.length = vertexCount;
          this._deformVertices.length = vertexCount;
          this._matrixCahce.length = 2 * (segmentX * segmentY + 2 * segmentX + 2 * segmentY) * 7;
          this._hullCache.length = 10;
          for (var i = 0; i < vertexCount; ++i) this._deformVertices[i] = 0;
        };
        Surface.prototype.update = function(cacheFrameIndex) {
          this._blendState.dirty = false;
          if (cacheFrameIndex >= 0 && null !== this._cachedFrameIndices) {
            var cachedFrameIndex = this._cachedFrameIndices[cacheFrameIndex];
            if (cachedFrameIndex >= 0 && this._cachedFrameIndex === cachedFrameIndex) this._transformDirty = false; else if (cachedFrameIndex >= 0) {
              this._transformDirty = true;
              this._cachedFrameIndex = cachedFrameIndex;
            } else {
              if (this._hasConstraint) for (var _i = 0, _a = this._armature._constraints; _i < _a.length; _i++) {
                var constraint = _a[_i];
                constraint._root === this && constraint.update();
              }
              if (this._transformDirty || null !== this._parent && this._parent._childrenTransformDirty) {
                this._transformDirty = true;
                this._cachedFrameIndex = -1;
              } else if (this._cachedFrameIndex >= 0) {
                this._transformDirty = false;
                this._cachedFrameIndices[cacheFrameIndex] = this._cachedFrameIndex;
              } else {
                this._transformDirty = true;
                this._cachedFrameIndex = -1;
              }
            }
          } else {
            if (this._hasConstraint) for (var _b = 0, _c = this._armature._constraints; _b < _c.length; _b++) {
              var constraint = _c[_b];
              constraint._root === this && constraint.update();
            }
            if (this._transformDirty || null !== this._parent && this._parent._childrenTransformDirty) {
              cacheFrameIndex = -1;
              this._transformDirty = true;
              this._cachedFrameIndex = -1;
            }
          }
          if (this._transformDirty) {
            this._transformDirty = false;
            this._childrenTransformDirty = true;
            for (var i = 0, l = this._matrixCahce.length; i < l; i += 7) this._matrixCahce[i] = -1;
            this._updateVertices();
            if (this._cachedFrameIndex < 0) {
              var isCache = cacheFrameIndex >= 0;
              this._localDirty && this._updateGlobalTransformMatrix(isCache);
              isCache && null !== this._cachedFrameIndices && (this._cachedFrameIndex = this._cachedFrameIndices[cacheFrameIndex] = this._armature._armatureData.setCacheFrame(this.globalTransformMatrix, this.global));
            } else this._armature._armatureData.getCacheFrame(this.globalTransformMatrix, this.global, this._cachedFrameIndex);
            var lB = 1e3;
            var lA = 200;
            var ddX = 2 * this.global.x;
            var ddY = 2 * this.global.y;
            var helpPoint = Surface._helpPoint;
            this.globalTransformMatrix.transformPoint(lB, -lA, helpPoint);
            this._hullCache[0] = helpPoint.x;
            this._hullCache[1] = helpPoint.y;
            this._hullCache[2] = ddX - helpPoint.x;
            this._hullCache[3] = ddY - helpPoint.y;
            this.globalTransformMatrix.transformPoint(0, this._dY, helpPoint, true);
            this._hullCache[4] = helpPoint.x;
            this._hullCache[5] = helpPoint.y;
            this.globalTransformMatrix.transformPoint(lA, lB, helpPoint);
            this._hullCache[6] = helpPoint.x;
            this._hullCache[7] = helpPoint.y;
            this._hullCache[8] = ddX - helpPoint.x;
            this._hullCache[9] = ddY - helpPoint.y;
            this.globalTransformMatrix.transformPoint(this._dX, 0, helpPoint, true);
            this._hullCache[10] = helpPoint.x;
            this._hullCache[11] = helpPoint.y;
          } else this._childrenTransformDirty && (this._childrenTransformDirty = false);
          this._localDirty = true;
        };
        return Surface;
      })(dragonBones.Bone);
      dragonBones.Surface = Surface;
    })(dragonBones || (dragonBones = {}));
    var dragonBones;
    (function(dragonBones) {
      var Slot = (function(_super) {
        __extends(Slot, _super);
        function Slot() {
          var _this = null !== _super && _super.apply(this, arguments) || this;
          _this._localMatrix = new dragonBones.Matrix();
          _this._colorTransform = new dragonBones.ColorTransform();
          _this._displayDatas = [];
          _this._displayList = [];
          _this._deformVertices = null;
          _this._rawDisplay = null;
          _this._meshDisplay = null;
          return _this;
        }
        Slot.prototype._onClear = function() {
          _super.prototype._onClear.call(this);
          var disposeDisplayList = [];
          for (var _i = 0, _a = this._displayList; _i < _a.length; _i++) {
            var eachDisplay = _a[_i];
            null !== eachDisplay && eachDisplay !== this._rawDisplay && eachDisplay !== this._meshDisplay && disposeDisplayList.indexOf(eachDisplay) < 0 && disposeDisplayList.push(eachDisplay);
          }
          for (var _b = 0, disposeDisplayList_1 = disposeDisplayList; _b < disposeDisplayList_1.length; _b++) {
            var eachDisplay = disposeDisplayList_1[_b];
            eachDisplay instanceof dragonBones.Armature ? eachDisplay.dispose() : this._disposeDisplay(eachDisplay, true);
          }
          null !== this._deformVertices && this._deformVertices.returnToPool();
          null !== this._meshDisplay && this._meshDisplay !== this._rawDisplay && this._disposeDisplay(this._meshDisplay, false);
          null !== this._rawDisplay && this._disposeDisplay(this._rawDisplay, false);
          this.displayController = null;
          this._displayDirty = false;
          this._zOrderDirty = false;
          this._blendModeDirty = false;
          this._colorDirty = false;
          this._transformDirty = false;
          this._visible = true;
          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;
        };
        Slot.prototype._getDefaultRawDisplayData = function(displayIndex) {
          var defaultSkin = this._armature._armatureData.defaultSkin;
          if (null !== defaultSkin) {
            var defaultRawDisplayDatas = defaultSkin.getDisplays(this._slotData.name);
            if (null !== defaultRawDisplayDatas) return displayIndex < defaultRawDisplayDatas.length ? defaultRawDisplayDatas[displayIndex] : null;
          }
          return null;
        };
        Slot.prototype._updateDisplayData = function() {
          var prevDisplayData = this._displayData;
          var prevVerticesData = null !== this._deformVertices ? this._deformVertices.verticesData : null;
          var prevTextureData = this._textureData;
          var rawDisplayData = null;
          var currentVerticesData = null;
          this._displayData = null;
          this._boundingBoxData = null;
          this._textureData = null;
          if (this._displayIndex >= 0) {
            null !== this._rawDisplayDatas && (rawDisplayData = this._displayIndex < this._rawDisplayDatas.length ? this._rawDisplayDatas[this._displayIndex] : null);
            null === rawDisplayData && (rawDisplayData = this._getDefaultRawDisplayData(this._displayIndex));
            this._displayIndex < this._displayDatas.length && (this._displayData = this._displayDatas[this._displayIndex]);
          }
          if (null !== this._displayData) {
            2 === this._displayData.type ? currentVerticesData = this._displayData.vertices : 4 === this._displayData.type ? currentVerticesData = this._displayData.vertices : null !== rawDisplayData && (2 === rawDisplayData.type ? currentVerticesData = rawDisplayData.vertices : 4 === rawDisplayData.type && (currentVerticesData = rawDisplayData.vertices));
            3 === this._displayData.type ? this._boundingBoxData = this._displayData.boundingBox : null !== rawDisplayData && 3 === rawDisplayData.type && (this._boundingBoxData = rawDisplayData.boundingBox);
            0 === this._displayData.type ? this._textureData = this._displayData.texture : 2 === this._displayData.type && (this._textureData = this._displayData.texture);
          }
          if (this._displayData !== prevDisplayData || currentVerticesData !== prevVerticesData || this._textureData !== prevTextureData) {
            if (null === currentVerticesData && null !== this._textureData) {
              var imageDisplayData = this._displayData;
              var scale = this._textureData.parent.scale * this._armature._armatureData.scale;
              var frame = this._textureData.frame;
              this._pivotX = imageDisplayData.pivot.x;
              this._pivotY = imageDisplayData.pivot.y;
              var rect = null !== frame ? frame : this._textureData.region;
              var width = rect.width;
              var height = rect.height;
              if (this._textureData.rotated && null === frame) {
                width = rect.height;
                height = rect.width;
              }
              this._pivotX *= width * scale;
              this._pivotY *= height * scale;
              if (null !== frame) {
                this._pivotX += frame.x * scale;
                this._pivotY += frame.y * scale;
              }
              if (null !== this._displayData && null !== rawDisplayData && this._displayData !== rawDisplayData) {
                rawDisplayData.transform.toMatrix(Slot._helpMatrix);
                Slot._helpMatrix.invert();
                Slot._helpMatrix.transformPoint(0, 0, Slot._helpPoint);
                this._pivotX -= Slot._helpPoint.x;
                this._pivotY -= Slot._helpPoint.y;
                this._displayData.transform.toMatrix(Slot._helpMatrix);
                Slot._helpMatrix.invert();
                Slot._helpMatrix.transformPoint(0, 0, Slot._helpPoint);
                this._pivotX += Slot._helpPoint.x;
                this._pivotY += Slot._helpPoint.y;
              }
              dragonBones.DragonBones.yDown || (this._pivotY = (this._textureData.rotated ? this._textureData.region.width : this._textureData.region.height) * scale - this._pivotY);
            } else {
              this._pivotX = 0;
              this._pivotY = 0;
            }
            null !== rawDisplayData ? this.origin = rawDisplayData.transform : null !== this._displayData ? this.origin = this._displayData.transform : this.origin = null;
            if (currentVerticesData !== prevVerticesData) {
              null === this._deformVertices && (this._deformVertices = dragonBones.BaseObject.borrowObject(dragonBones.DeformVertices));
              this._deformVertices.init(currentVerticesData, this._armature);
            } else null !== this._deformVertices && this._textureData !== prevTextureData && (this._deformVertices.verticesDirty = true);
            this._displayDirty = true;
            this._transformDirty = true;
          }
        };
        Slot.prototype._updateDisplay = function() {
          var prevDisplay = null !== this._display ? this._display : this._rawDisplay;
          var prevChildArmature = this._childArmature;
          if (this._displayIndex >= 0 && this._displayIndex < this._displayList.length) {
            this._display = this._displayList[this._displayIndex];
            if (null !== this._display && this._display instanceof dragonBones.Armature) {
              this._childArmature = this._display;
              this._display = this._childArmature.display;
            } else this._childArmature = null;
          } else {
            this._display = null;
            this._childArmature = null;
          }
          var currentDisplay = null !== this._display ? this._display : this._rawDisplay;
          if (currentDisplay !== prevDisplay) {
            this._onUpdateDisplay();
            this._replaceDisplay(prevDisplay);
            this._transformDirty = true;
            this._visibleDirty = true;
            this._blendModeDirty = true;
            this._colorDirty = true;
          }
          currentDisplay !== this._rawDisplay && currentDisplay !== this._meshDisplay || this._updateFrame();
          if (this._childArmature !== prevChildArmature) {
            if (null !== prevChildArmature) {
              prevChildArmature._parent = null;
              prevChildArmature.clock = null;
              prevChildArmature.inheritAnimation && prevChildArmature.animation.reset();
            }
            if (null !== this._childArmature) {
              this._childArmature._parent = this;
              this._childArmature.clock = this._armature.clock;
              if (this._childArmature.inheritAnimation) {
                if (0 === this._childArmature.cacheFrameRate) {
                  var cacheFrameRate = this._armature.cacheFrameRate;
                  0 !== cacheFrameRate && (this._childArmature.cacheFrameRate = cacheFrameRate);
                }
                var actions = null;
                if (null !== this._displayData && 1 === this._displayData.type) actions = this._displayData.actions; else if (this._displayIndex >= 0 && null !== this._rawDisplayDatas) {
                  var rawDisplayData = this._displayIndex < this._rawDisplayDatas.length ? this._rawDisplayDatas[this._displayIndex] : null;
                  null === rawDisplayData && (rawDisplayData = this._getDefaultRawDisplayData(this._displayIndex));
                  null !== rawDisplayData && 1 === rawDisplayData.type && (actions = rawDisplayData.actions);
                }
                if (null !== actions && actions.length > 0) for (var _i = 0, actions_1 = actions; _i < actions_1.length; _i++) {
                  var action = actions_1[_i];
                  var eventObject = dragonBones.BaseObject.borrowObject(dragonBones.EventObject);
                  dragonBones.EventObject.actionDataToInstance(action, eventObject, this._armature);
                  eventObject.slot = this;
                  this._armature._bufferAction(eventObject, false);
                } else this._childArmature.animation.play();
              }
            }
          }
        };
        Slot.prototype._updateGlobalTransformMatrix = function(isCache) {
          var parentMatrix = 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(parentMatrix);
          isCache ? this.global.fromMatrix(this.globalTransformMatrix) : this._globalDirty = true;
        };
        Slot.prototype._setDisplayIndex = function(value, isAnimation) {
          void 0 === isAnimation && (isAnimation = false);
          if (isAnimation) {
            if (this._animationDisplayIndex === value) return false;
            this._animationDisplayIndex = value;
          }
          if (this._displayIndex === value) return false;
          this._displayIndex = value;
          this._displayDirty = true;
          this._updateDisplayData();
          return this._displayDirty;
        };
        Slot.prototype._setZorder = function(value) {
          this._zOrder === value;
          this._zOrder = value;
          this._zOrderDirty = true;
          return this._zOrderDirty;
        };
        Slot.prototype._setColor = function(value) {
          this._colorTransform.copyFrom(value);
          this._colorDirty = true;
          return this._colorDirty;
        };
        Slot.prototype._setDisplayList = function(value) {
          if (null !== value && value.length > 0) {
            this._displayList.length !== value.length && (this._displayList.length = value.length);
            for (var i = 0, l = value.length; i < l; ++i) {
              var eachDisplay = value[i];
              null !== eachDisplay && eachDisplay !== this._rawDisplay && eachDisplay !== this._meshDisplay && !(eachDisplay instanceof dragonBones.Armature) && this._displayList.indexOf(eachDisplay) < 0 && this._initDisplay(eachDisplay, true);
              this._displayList[i] = eachDisplay;
            }
          } else this._displayList.length > 0 && (this._displayList.length = 0);
          this._displayIndex >= 0 && this._displayIndex < this._displayList.length ? this._displayDirty = this._display !== this._displayList[this._displayIndex] : this._displayDirty = null !== this._display;
          this._updateDisplayData();
          return this._displayDirty;
        };
        Slot.prototype.init = function(slotData, armatureValue, rawDisplay, meshDisplay) {
          if (null !== this._slotData) return;
          this._slotData = slotData;
          this._isFromCache = false;
          this._visibleDirty = true;
          this._blendModeDirty = true;
          this._colorDirty = true;
          this._blendMode = this._slotData.blendMode;
          this._zOrder = this._slotData.zOrder;
          this._colorTransform.copyFrom(this._slotData.color);
          this._rawDisplay = rawDisplay;
          this._meshDisplay = meshDisplay;
          this._armature = armatureValue;
          var slotParent = this._armature.getBone(this._slotData.parent.name);
          null !== slotParent && (this._parent = slotParent);
          this._armature._addSlot(this);
          this._initDisplay(this._rawDisplay, false);
          this._rawDisplay !== this._meshDisplay && this._initDisplay(this._meshDisplay, false);
          this._onUpdateDisplay();
          this._addDisplay();
        };
        Slot.prototype.update = function(cacheFrameIndex) {
          this._isFromCache = false;
          if (this._displayDirty) {
            this._displayDirty = false;
            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));
          }
          if (this._zOrderDirty) {
            this._zOrderDirty = false;
            this._updateZOrder();
          }
          if (cacheFrameIndex >= 0 && null !== this._cachedFrameIndices) {
            var cachedFrameIndex = this._cachedFrameIndices[cacheFrameIndex];
            if (cachedFrameIndex >= 0 && this._cachedFrameIndex === cachedFrameIndex) this._transformDirty = false; else if (cachedFrameIndex >= 0) {
              this._transformDirty = true;
              this._cachedFrameIndex = cachedFrameIndex;
            } else if (this._transformDirty || this._parent._childrenTransformDirty) {
              this._transformDirty = true;
              this._cachedFrameIndex = -1;
            } else if (this._cachedFrameIndex >= 0) {
              this._transformDirty = false;
              this._cachedFrameIndices[cacheFrameIndex] = this._cachedFrameIndex;
            } else {
              this._transformDirty = true;
              this._cachedFrameIndex = -1;
            }
          } else if (this._transformDirty || this._parent._childrenTransformDirty) {
            cacheFrameIndex = -1;
            this._transformDirty = true;
            this._cachedFrameIndex = -1;
          }
          if (null === this._display) return;
          if (this._visibleDirty) {
            this._visibleDirty = false;
            this._updateVisible();
          }
          if (this._blendModeDirty) {
            this._blendModeDirty = false;
            this._updateBlendMode();
          }
          if (this._colorDirty) {
            this._colorDirty = false;
            this._updateColor();
          }
          if (null !== this._deformVertices && null !== this._deformVertices.verticesData && this._display === this._meshDisplay) {
            var isSkinned = null !== this._deformVertices.verticesData.weight;
            var isSurface = 0 !== this._parent._boneData.type;
            if (this._deformVertices.verticesDirty || isSkinned && this._deformVertices.isBonesUpdate() || isSurface && this._parent._childrenTransformDirty) {
              this._deformVertices.verticesDirty = false;
              this._updateMesh();
            }
            if (isSkinned || isSurface) return;
          }
          if (this._transformDirty) {
            this._transformDirty = false;
            if (this._cachedFrameIndex < 0) {
              var isCache = cacheFrameIndex >= 0;
              this._updateGlobalTransformMatrix(isCache);
              isCache && null !== this._cachedFrameIndices && (this._cachedFrameIndex = this._cachedFrameIndices[cacheFrameIndex] = this._armature._armatureData.setCacheFrame(this.globalTransformMatrix, this.global));
            } else {
              this._isFromCache = true;
              this._armature._armatureData.getCacheFrame(this.globalTransformMatrix, this.global, this._cachedFrameIndex);
            }
            this._updateTransform();
          }
        };
        Slot.prototype.updateTransformAndMatrix = function() {
          if (this._transformDirty) {
            this._transformDirty = false;
            this._updateGlobalTransformMatrix(false);
          }
        };
        Slot.prototype.replaceDisplayData = function(value, displayIndex) {
          void 0 === displayIndex && (displayIndex = -1);
          displayIndex < 0 && (displayIndex = this._displayIndex < 0 ? 0 : this._displayIndex);
          if (this._displayDatas.length <= displayIndex) {
            this._displayDatas.length = displayIndex + 1;
            for (var i = 0, l = this._displayDatas.length; i < l; ++i) this._displayDatas[i] || (this._displayDatas[i] = null);
          }
          this._displayDatas[displayIndex] = value;
        };
        Slot.prototype.containsPoint = function(x, y) {
          if (null === this._boundingBoxData) return false;
          this.updateTransformAndMatrix();
          Slot._helpMatrix.copyFrom(this.globalTransformMatrix);
          Slot._helpMatrix.invert();
          Slot._helpMatrix.transformPoint(x, y, Slot._helpPoint);
          return this._boundingBoxData.containsPoint(Slot._helpPoint.x, Slot._helpPoint.y);
        };
        Slot.prototype.intersectsSegment = function(xA, yA, xB, yB, intersectionPointA, intersectionPointB, normalRadians) {
          void 0 === intersectionPointA && (intersectionPointA = null);
          void 0 === intersectionPointB && (intersectionPointB = null);
          void 0 === normalRadians && (normalRadians = null);
          if (null === this._boundingBoxData) return 0;
          this.updateTransformAndMatrix();
          Slot._helpMatrix.copyFrom(this.globalTransformMatrix);
          Slot._helpMatrix.invert();
          Slot._helpMatrix.transformPoint(xA, yA, Slot._helpPoint);
          xA = Slot._helpPoint.x;
          yA = Slot._helpPoint.y;
          Slot._helpMatrix.transformPoint(xB, yB, Slot._helpPoint);
          xB = Slot._helpPoint.x;
          yB = Slot._helpPoint.y;
          var intersectionCount = this._boundingBoxData.intersectsSegment(xA, yA, xB, yB, intersectionPointA, intersectionPointB, normalRadians);
          if (intersectionCount > 0) {
            if (1 === intersectionCount || 2 === intersectionCount) if (null !== intersectionPointA) {
              this.globalTransformMatrix.transformPoint(intersectionPointA.x, intersectionPointA.y, intersectionPointA);
              if (null !== intersectionPointB) {
                intersectionPointB.x = intersectionPointA.x;
                intersectionPointB.y = intersectionPointA.y;
              }
            } else null !== intersectionPointB && this.globalTransformMatrix.transformPoint(intersectionPointB.x, intersectionPointB.y, intersectionPointB); else {
              null !== intersectionPointA && this.globalTransformMatrix.transformPoint(intersectionPointA.x, intersectionPointA.y, intersectionPointA);
              null !== intersectionPointB && this.globalTransformMatrix.transformPoint(intersectionPointB.x, intersectionPointB.y, intersectionPointB);
            }
            if (null !== normalRadians) {
              this.globalTransformMatrix.transformPoint(Math.cos(normalRadians.x), Math.sin(normalRadians.x), Slot._helpPoint, true);
              normalRadians.x = Math.atan2(Slot._helpPoint.y, Slot._helpPoint.x);
              this.globalTransformMatrix.transformPoint(Math.cos(normalRadians.y), Math.sin(normalRadians.y), Slot._helpPoint, true);
              normalRadians.y = Math.atan2(Slot._helpPoint.y, Slot._helpPoint.x);
            }
          }
          return intersectionCount;
        };
        Slot.prototype.invalidUpdate = function() {
          this._displayDirty = true;
          this._transformDirty = true;
        };
        Object.defineProperty(Slot.prototype, "visible", {
          get: function get() {
            return this._visible;
          },
          set: function set(value) {
            if (this._visible === value) return;
            this._visible = value;
            this._updateVisible();
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(Slot.prototype, "displayIndex", {
          get: function get() {
            return this._displayIndex;
          },
          set: function set(value) {
            this._setDisplayIndex(value) && this.update(-1);
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(Slot.prototype, "name", {
          get: function get() {
            return this._slotData.name;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(Slot.prototype, "displayList", {
          get: function get() {
            return this._displayList.concat();
          },
          set: function set(value) {
            var backupDisplayList = this._displayList.concat();
            var disposeDisplayList = new Array();
            this._setDisplayList(value) && this.update(-1);
            for (var _i = 0, backupDisplayList_1 = backupDisplayList; _i < backupDisplayList_1.length; _i++) {
              var eachDisplay = backupDisplayList_1[_i];
              null !== eachDisplay && eachDisplay !== this._rawDisplay && eachDisplay !== this._meshDisplay && this._displayList.indexOf(eachDisplay) < 0 && disposeDisplayList.indexOf(eachDisplay) < 0 && disposeDisplayList.push(eachDisplay);
            }
            for (var _a = 0, disposeDisplayList_2 = disposeDisplayList; _a < disposeDisplayList_2.length; _a++) {
              var eachDisplay = disposeDisplayList_2[_a];
              eachDisplay instanceof dragonBones.Armature || this._disposeDisplay(eachDisplay, true);
            }
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(Slot.prototype, "slotData", {
          get: function get() {
            return this._slotData;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(Slot.prototype, "rawDisplayDatas", {
          get: function get() {
            return this._rawDisplayDatas;
          },
          set: function set(value) {
            if (this._rawDisplayDatas === value) return;
            this._displayDirty = true;
            this._rawDisplayDatas = value;
            if (null !== this._rawDisplayDatas) {
              this._displayDatas.length = this._rawDisplayDatas.length;
              for (var i = 0, l = this._displayDatas.length; i < l; ++i) {
                var rawDisplayData = this._rawDisplayDatas[i];
                null === rawDisplayData && (rawDisplayData = this._getDefaultRawDisplayData(i));
                this._displayDatas[i] = rawDisplayData;
              }
            } else this._displayDatas.length = 0;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(Slot.prototype, "displayData", {
          get: function get() {
            return this._displayData;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(Slot.prototype, "boundingBoxData", {
          get: function get() {
            return this._boundingBoxData;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(Slot.prototype, "rawDisplay", {
          get: function get() {
            return this._rawDisplay;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(Slot.prototype, "meshDisplay", {
          get: function get() {
            return this._meshDisplay;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(Slot.prototype, "display", {
          get: function get() {
            return this._display;
          },
          set: function set(value) {
            if (this._display === value) return;
            var displayListLength = this._displayList.length;
            this._displayIndex < 0 && 0 === displayListLength && (this._displayIndex = 0);
            if (this._displayIndex < 0) return;
            var replaceDisplayList = this.displayList;
            displayListLength <= this._displayIndex && (replaceDisplayList.length = this._displayIndex + 1);
            replaceDisplayList[this._displayIndex] = value;
            this.displayList = replaceDisplayList;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(Slot.prototype, "childArmature", {
          get: function get() {
            return this._childArmature;
          },
          set: function set(value) {
            if (this._childArmature === value) return;
            this.display = value;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(Slot.prototype, "parent", {
          get: function get() {
            return this._parent;
          },
          enumerable: true,
          configurable: true
        });
        Slot.prototype.getDisplay = function() {
          return this._display;
        };
        Slot.prototype.setDisplay = function(value) {
          this.display = value;
        };
        return Slot;
      })(dragonBones.TransformObject);
      dragonBones.Slot = Slot;
    })(dragonBones || (dragonBones = {}));
    var dragonBones;
    (function(dragonBones) {
      var Constraint = (function(_super) {
        __extends(Constraint, _super);
        function Constraint() {
          return null !== _super && _super.apply(this, arguments) || this;
        }
        Constraint.prototype._onClear = function() {
          this._armature = null;
          this._target = null;
          this._root = null;
          this._bone = null;
        };
        Object.defineProperty(Constraint.prototype, "name", {
          get: function get() {
            return this._constraintData.name;
          },
          enumerable: true,
          configurable: true
        });
        Constraint._helpMatrix = new dragonBones.Matrix();
        Constraint._helpTransform = new dragonBones.Transform();
        Constraint._helpPoint = new dragonBones.Point();
        return Constraint;
      })(dragonBones.BaseObject);
      dragonBones.Constraint = Constraint;
      var IKConstraint = (function(_super) {
        __extends(IKConstraint, _super);
        function IKConstraint() {
          return null !== _super && _super.apply(this, arguments) || this;
        }
        IKConstraint.toString = function() {
          return "[class dragonBones.IKConstraint]";
        };
        IKConstraint.prototype._onClear = function() {
          _super.prototype._onClear.call(this);
          this._scaleEnabled = false;
          this._bendPositive = false;
          this._weight = 1;
          this._constraintData = null;
        };
        IKConstraint.prototype._computeA = function() {
          var ikGlobal = this._target.global;
          var global = this._root.global;
          var globalTransformMatrix = this._root.globalTransformMatrix;
          var radian = Math.atan2(ikGlobal.y - global.y, ikGlobal.x - global.x);
          global.scaleX < 0 && (radian += Math.PI);
          global.rotation += dragonBones.Transform.normalizeRadian(radian - global.rotation) * this._weight;
          global.toMatrix(globalTransformMatrix);
        };
        IKConstraint.prototype._computeB = function() {
          var boneLength = this._bone._boneData.length;
          var parent = this._root;
          var ikGlobal = this._target.global;
          var parentGlobal = parent.global;
          var global = this._bone.global;
          var globalTransformMatrix = this._bone.globalTransformMatrix;
          var x = globalTransformMatrix.a * boneLength;
          var y = globalTransformMatrix.b * boneLength;
          var lLL = x * x + y * y;
          var lL = Math.sqrt(lLL);
          var dX = global.x - parentGlobal.x;
          var dY = global.y - parentGlobal.y;
          var lPP = dX * dX + dY * dY;
          var lP = Math.sqrt(lPP);
          var rawRadian = global.rotation;
          var rawParentRadian = parentGlobal.rotation;
          var rawRadianA = Math.atan2(dY, dX);
          dX = ikGlobal.x - parentGlobal.x;
          dY = ikGlobal.y - parentGlobal.y;
          var lTT = dX * dX + dY * dY;
          var lT = Math.sqrt(lTT);
          var radianA = 0;
          if (lL + lP <= lT || lT + lL <= lP || lT + lP <= lL) {
            radianA = Math.atan2(ikGlobal.y - parentGlobal.y, ikGlobal.x - parentGlobal.x);
            lL + lP <= lT || lP < lL && (radianA += Math.PI);
          } else {
            var h = (lPP - lLL + lTT) / (2 * lTT);
            var r = Math.sqrt(lPP - h * h * lTT) / lT;
            var hX = parentGlobal.x + dX * h;
            var hY = parentGlobal.y + dY * h;
            var rX = -dY * r;
            var rY = dX * r;
            var isPPR = false;
            var parentParent = parent.parent;
            if (null !== parentParent) {
              var parentParentMatrix = parentParent.globalTransformMatrix;
              isPPR = parentParentMatrix.a * parentParentMatrix.d - parentParentMatrix.b * parentParentMatrix.c < 0;
            }
            if (isPPR !== this._bendPositive) {
              global.x = hX - rX;
              global.y = hY - rY;
            } else {
              global.x = hX + rX;
              global.y = hY + rY;
            }
            radianA = Math.atan2(global.y - parentGlobal.y, global.x - parentGlobal.x);
          }
          var dR = dragonBones.Transform.normalizeRadian(radianA - rawRadianA);
          parentGlobal.rotation = rawParentRadian + dR * this._weight;
          parentGlobal.toMatrix(parent.globalTransformMatrix);
          var currentRadianA = rawRadianA + dR * this._weight;
          global.x = parentGlobal.x + Math.cos(currentRadianA) * lP;
          global.y = parentGlobal.y + Math.sin(currentRadianA) * lP;
          var radianB = Math.atan2(ikGlobal.y - global.y, ikGlobal.x - global.x);
          global.scaleX < 0 && (radianB += Math.PI);
          global.rotation = parentGlobal.rotation + rawRadian - rawParentRadian + dragonBones.Transform.normalizeRadian(radianB - dR - rawRadian) * this._weight;
          global.toMatrix(globalTransformMatrix);
        };
        IKConstraint.prototype.init = function(constraintData, armature) {
          if (null !== this._constraintData) return;
          this._constraintData = constraintData;
          this._armature = armature;
          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 ikConstraintData = this._constraintData;
          this._scaleEnabled = ikConstraintData.scaleEnabled;
          this._bendPositive = ikConstraintData.bendPositive;
          this._weight = ikConstraintData.weight;
          this._root._hasConstraint = true;
        };
        IKConstraint.prototype.update = function() {
          this._root.updateByConstraint();
          if (null !== this._bone) {
            this._bone.updateByConstraint();
            this._computeB();
          } else this._computeA();
        };
        IKConstraint.prototype.invalidUpdate = function() {
          this._root.invalidUpdate();
          null !== this._bone && this._bone.invalidUpdate();
        };
        return IKConstraint;
      })(Constraint);
      dragonBones.IKConstraint = IKConstraint;
      var PathConstraint = (function(_super) {
        __extends(PathConstraint, _super);
        function PathConstraint() {
          var _this = null !== _super && _super.apply(this, arguments) || this;
          _this._bones = [];
          _this._spaces = [];
          _this._positions = [];
          _this._curves = [];
          _this._boneLengths = [];
          _this._pathGlobalVertices = [];
          _this._segments = [ 10 ];
          return _this;
        }
        PathConstraint.toString = function() {
          return "[class dragonBones.PathConstraint]";
        };
        PathConstraint.prototype._onClear = function() {
          _super.prototype._onClear.call(this);
          this.dirty = false;
          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;
        };
        PathConstraint.prototype._updatePathVertices = function(verticesData) {
          var armature = this._armature;
          var dragonBonesData = armature.armatureData.parent;
          var scale = armature.armatureData.scale;
          var intArray = dragonBonesData.intArray;
          var floatArray = dragonBonesData.floatArray;
          var pathOffset = verticesData.offset;
          var pathVertexCount = intArray[pathOffset + 0];
          var pathVertexOffset = intArray[pathOffset + 2];
          this._pathGlobalVertices.length = 2 * pathVertexCount;
          var weightData = verticesData.weight;
          if (null === weightData) {
            var parentBone = this._pathSlot.parent;
            parentBone.updateByConstraint();
            var matrix = parentBone.globalTransformMatrix;
            for (var i = 0, iV_1 = pathVertexOffset; i < pathVertexCount; i += 2) {
              var vx = floatArray[iV_1++] * scale;
              var vy = floatArray[iV_1++] * scale;
              var x = matrix.a * vx + matrix.c * vy + matrix.tx;
              var y = matrix.b * vx + matrix.d * vy + matrix.ty;
              this._pathGlobalVertices[i] = x;
              this._pathGlobalVertices[i + 1] = y;
            }
            return;
          }
          var bones = this._pathSlot._deformVertices.bones;
          var weightBoneCount = weightData.bones.length;
          var weightOffset = weightData.offset;
          var floatOffset = intArray[weightOffset + 1];
          var iV = floatOffset;
          var iB = weightOffset + 2 + weightBoneCount;
          for (var i = 0, iW = 0; i < pathVertexCount; i++) {
            var vertexBoneCount = intArray[iB++];
            var xG = 0, yG = 0;
            for (var ii = 0, ll = vertexBoneCount; ii < ll; ii++) {
              var boneIndex = intArray[iB++];
              var bone = bones[boneIndex];
              if (null === bone) continue;
              bone.updateByConstraint();
              var matrix = bone.globalTransformMatrix;
              var weight = floatArray[iV++];
              var vx = floatArray[iV++] * scale;
              var vy = floatArray[iV++] * scale;
              xG += (matrix.a * vx + matrix.c * vy + matrix.tx) * weight;
              yG += (matrix.b * vx + matrix.d * vy + matrix.ty) * weight;
            }
            this._pathGlobalVertices[iW++] = xG;
            this._pathGlobalVertices[iW++] = yG;
          }
        };
        PathConstraint.prototype._computeVertices = function(start, count, offset, out) {
          for (var i = offset, iW = start; i < count; i += 2) {
            out[i] = this._pathGlobalVertices[iW++];
            out[i + 1] = this._pathGlobalVertices[iW++];
          }
        };
        PathConstraint.prototype._computeBezierCurve = function(pathDisplayDta, spaceCount, tangents, percentPosition, percentSpacing) {
          var armature = this._armature;
          var intArray = armature.armatureData.parent.intArray;
          var vertexCount = intArray[pathDisplayDta.vertices.offset + 0];
          var positions = this._positions;
          var spaces = this._spaces;
          var isClosed = pathDisplayDta.closed;
          var curveVertices = Array();
          var verticesLength = 2 * vertexCount;
          var curveCount = verticesLength / 6;
          var preCurve = -1;
          var position = this.position;
          positions.length = 3 * spaceCount + 2;
          var pathLength = 0;
          if (!pathDisplayDta.constantSpeed) {
            var lenghts = pathDisplayDta.curveLengths;
            curveCount -= isClosed ? 1 : 2;
            pathLength = lenghts[curveCount];
            percentPosition && (position *= pathLength);
            if (percentSpacing) for (var i = 0; i < spaceCount; i++) spaces[i] *= pathLength;
            curveVertices.length = 8;
            for (var i = 0, o = 0, curve = 0; i < spaceCount; i++, o += 3) {
              var space = spaces[i];
              position += space;
              if (isClosed) {
                position %= pathLength;
                position < 0 && (position += pathLength);
                curve = 0;
              } else {
                if (position < 0) continue;
                if (position > pathLength) continue;
              }
              var percent = 0;
              for (;;curve++) {
                var len = lenghts[curve];
                if (position > len) continue;
                if (0 === curve) percent = position / len; else {
                  var preLen = lenghts[curve - 1];
                  percent = (position - preLen) / (len - preLen);
                }
                break;
              }
              if (curve !== preCurve) {
                preCurve = curve;
                if (isClosed && curve === curveCount) {
                  this._computeVertices(verticesLength - 4, 4, 0, curveVertices);
                  this._computeVertices(0, 4, 4, curveVertices);
                } else this._computeVertices(6 * curve + 2, 8, 0, curveVertices);
              }
              this.addCurvePosition(percent, curveVertices[0], curveVertices[1], curveVertices[2], curveVertices[3], curveVertices[4], curveVertices[5], curveVertices[6], curveVertices[7], positions, o, tangents);
            }
            return;
          }
          if (isClosed) {
            verticesLength += 2;
            curveVertices.length = vertexCount;
            this._computeVertices(2, verticesLength - 4, 0, curveVertices);
            this._computeVertices(0, 2, verticesLength - 4, curveVertices);
            curveVertices[verticesLength - 2] = curveVertices[0];
            curveVertices[verticesLength - 1] = curveVertices[1];
          } else {
            curveCount--;
            verticesLength -= 4;
            curveVertices.length = verticesLength;
            this._computeVertices(2, verticesLength, 0, curveVertices);
          }
          var curves = new Array(curveCount);
          pathLength = 0;
          var x1 = curveVertices[0], y1 = curveVertices[1], cx1 = 0, cy1 = 0, cx2 = 0, cy2 = 0, x2 = 0, y2 = 0;
          var tmpx, tmpy, dddfx, dddfy, ddfx, ddfy, dfx, dfy;
          for (var i = 0, w = 2; i < curveCount; i++, w += 6) {
            cx1 = curveVertices[w];
            cy1 = curveVertices[w + 1];
            cx2 = curveVertices[w + 2];
            cy2 = curveVertices[w + 3];
            x2 = curveVertices[w + 4];
            y2 = curveVertices[w + 5];
            tmpx = .1875 * (x1 - 2 * cx1 + cx2);
            tmpy = .1875 * (y1 - 2 * cy1 + cy2);
            dddfx = .09375 * (3 * (cx1 - cx2) - x1 + x2);
            dddfy = .09375 * (3 * (cy1 - cy2) - y1 + y2);
            ddfx = 2 * tmpx + dddfx;
            ddfy = 2 * tmpy + dddfy;
            dfx = .75 * (cx1 - x1) + tmpx + .16666667 * dddfx;
            dfy = .75 * (cy1 - y1) + tmpy + .16666667 * dddfy;
            pathLength += Math.sqrt(dfx * dfx + dfy * dfy);
            dfx += ddfx;
            dfy += ddfy;
            ddfx += dddfx;
            ddfy += dddfy;
            pathLength += Math.sqrt(dfx * dfx + dfy * dfy);
            dfx += ddfx;
            dfy += ddfy;
            pathLength += Math.sqrt(dfx * dfx + dfy * dfy);
            dfx += ddfx + dddfx;
            dfy += ddfy + dddfy;
            pathLength += Math.sqrt(dfx * dfx + dfy * dfy);
            curves[i] = pathLength;
            x1 = x2;
            y1 = y2;
          }
          percentPosition && (position *= pathLength);
          if (percentSpacing) for (var i = 0; i < spaceCount; i++) spaces[i] *= pathLength;
          var segments = this._segments;
          var curveLength = 0;
          for (var i = 0, o = 0, curve = 0, segment = 0; i < spaceCount; i++, o += 3) {
            var space = spaces[i];
            position += space;
            var p = position;
            if (isClosed) {
              p %= pathLength;
              p < 0 && (p += pathLength);
              curve = 0;
            } else {
              if (p < 0) continue;
              if (p > pathLength) continue;
            }
            for (;;curve++) {
              var length_1 = curves[curve];
              if (p > length_1) continue;
              if (0 === curve) p /= length_1; else {
                var prev = curves[curve - 1];
                p = (p - prev) / (length_1 - prev);
              }
              break;
            }
            if (curve !== preCurve) {
              preCurve = curve;
              var ii = 6 * curve;
              x1 = curveVertices[ii];
              y1 = curveVertices[ii + 1];
              cx1 = curveVertices[ii + 2];
              cy1 = curveVertices[ii + 3];
              cx2 = curveVertices[ii + 4];
              cy2 = curveVertices[ii + 5];
              x2 = curveVertices[ii + 6];
              y2 = curveVertices[ii + 7];
              tmpx = .03 * (x1 - 2 * cx1 + cx2);
              tmpy = .03 * (y1 - 2 * cy1 + cy2);
              dddfx = .006 * (3 * (cx1 - cx2) - x1 + x2);
              dddfy = .006 * (3 * (cy1 - cy2) - y1 + y2);
              ddfx = 2 * tmpx + dddfx;
              ddfy = 2 * tmpy + dddfy;
              dfx = .3 * (cx1 - x1) + tmpx + .16666667 * dddfx;
              dfy = .3 * (cy1 - y1) + tmpy + .16666667 * dddfy;
              curveLength = Math.sqrt(dfx * dfx + dfy * dfy);
              segments[0] = curveLength;
              for (ii = 1; ii < 8; ii++) {
                dfx += ddfx;
                dfy += ddfy;
                ddfx += dddfx;
                ddfy += dddfy;
                curveLength += Math.sqrt(dfx * dfx + dfy * dfy);
                segments[ii] = curveLength;
              }
              dfx += ddfx;
              dfy += ddfy;
              curveLength += Math.sqrt(dfx * dfx + dfy * dfy);
              segments[8] = curveLength;
              dfx += ddfx + dddfx;
              dfy += ddfy + dddfy;
              curveLength += Math.sqrt(dfx * dfx + dfy * dfy);
              segments[9] = curveLength;
              segment = 0;
            }
            p *= curveLength;
            for (;;segment++) {
              var length_2 = segments[segment];
              if (p > length_2) continue;
              if (0 === segment) p /= length_2; else {
                var prev = segments[segment - 1];
                p = segment + (p - prev) / (length_2 - prev);
              }
              break;
            }
            this.addCurvePosition(.1 * p, x1, y1, cx1, cy1, cx2, cy2, x2, y2, positions, o, tangents);
          }
        };
        PathConstraint.prototype.addCurvePosition = function(t, x1, y1, cx1, cy1, cx2, cy2, x2, y2, out, offset, tangents) {
          if (0 === t) {
            out[offset] = x1;
            out[offset + 1] = y1;
            out[offset + 2] = 0;
            return;
          }
          if (1 === t) {
            out[offset] = x2;
            out[offset + 1] = y2;
            out[offset + 2] = 0;
            return;
          }
          var mt = 1 - t;
          var mt2 = mt * mt;
          var t2 = t * t;
          var a = mt2 * mt;
          var b = mt2 * t * 3;
          var c = mt * t2 * 3;
          var d = t * t2;
          var x = a * x1 + b * cx1 + c * cx2 + d * x2;
          var y = a * y1 + b * cy1 + c * cy2 + d * y2;
          out[offset] = x;
          out[offset + 1] = y;
          out[offset + 2] = tangents ? Math.atan2(y - (a * y1 + b * cy1 + c * cy2), x - (a * x1 + b * cx1 + c * cx2)) : 0;
        };
        PathConstraint.prototype.init = function(constraintData, armature) {
          this._constraintData = constraintData;
          this._armature = armature;
          var data = constraintData;
          this.pathOffset = data.pathDisplayData.vertices.offset;
          this.position = data.position;
          this.spacing = data.spacing;
          this.rotateOffset = data.rotateOffset;
          this.rotateMix = data.rotateMix;
          this.translateMix = data.translateMix;
          this._root = this._armature.getBone(data.root.name);
          this._target = this._armature.getBone(data.target.name);
          this._pathSlot = this._armature.getSlot(data.pathSlot.name);
          for (var i = 0, l = data.bones.length; i < l; i++) {
            var bone = this._armature.getBone(data.bones[i].name);
            null !== bone && this._bones.push(bone);
          }
          2 === data.rotateMode && (this._boneLengths.length = this._bones.length);
          this._root._hasConstraint = true;
        };
        PathConstraint.prototype.update = function() {
          var pathSlot = this._pathSlot;
          if (null === pathSlot._deformVertices || null === pathSlot._deformVertices.verticesData || pathSlot._deformVertices.verticesData.offset !== this.pathOffset) return;
          var constraintData = this._constraintData;
          var pathDisplayData = pathSlot._displayData;
          var isPathVerticeDirty = false;
          var deformVertices = pathSlot._deformVertices;
          if (this._root._childrenTransformDirty) {
            this._updatePathVertices(pathDisplayData.vertices);
            isPathVerticeDirty = true;
          } else if (null !== deformVertices && (deformVertices.verticesDirty || deformVertices.isBonesUpdate())) {
            this._updatePathVertices(pathDisplayData.vertices);
            deformVertices.verticesDirty = false;
            isPathVerticeDirty = true;
          }
          if (!isPathVerticeDirty && !this.dirty) return;
          var positionMode = constraintData.positionMode;
          var spacingMode = constraintData.spacingMode;
          var rotateMode = constraintData.rotateMode;
          var bones = this._bones;
          var isLengthMode = 0 === spacingMode;
          var isChainScaleMode = 2 === rotateMode;
          var isTangentMode = 0 === rotateMode;
          var boneCount = bones.length;
          var spacesCount = isTangentMode ? boneCount : boneCount + 1;
          var spacing = this.spacing;
          var spaces = this._spaces;
          spaces.length = spacesCount;
          if (isChainScaleMode || isLengthMode) {
            spaces[0] = 0;
            for (var i = 0, l = spacesCount - 1; i < l; i++) {
              var bone = bones[i];
              bone.updateByConstraint();
              var boneLength = bone._boneData.length;
              var matrix = bone.globalTransformMatrix;
              var x = boneLength * matrix.a;
              var y = boneLength * matrix.b;
              var len = Math.sqrt(x * x + y * y);
              isChainScaleMode && (this._boneLengths[i] = len);
              spaces[i + 1] = (boneLength + spacing) * len / boneLength;
            }
          } else for (var i = 0; i < spacesCount; i++) spaces[i] = spacing;
          this._computeBezierCurve(pathDisplayData, spacesCount, isTangentMode, 1 === positionMode, 2 === spacingMode);
          var positions = this._positions;
          var rotateOffset = this.rotateOffset;
          var boneX = positions[0], boneY = positions[1];
          var tip;
          if (0 === rotateOffset) tip = 1 === rotateMode; else {
            tip = false;
            var bone = pathSlot.parent;
            if (null !== bone) {
              var matrix = bone.globalTransformMatrix;
              rotateOffset *= matrix.a * matrix.d - matrix.b * matrix.c > 0 ? dragonBones.Transform.DEG_RAD : -dragonBones.Transform.DEG_RAD;
            }
          }
          var rotateMix = this.rotateMix;
          var translateMix = this.translateMix;
          for (var i = 0, p = 3; i < boneCount; i++, p += 3) {
            var bone = bones[i];
            bone.updateByConstraint();
            var matrix = bone.globalTransformMatrix;
            matrix.tx += (boneX - matrix.tx) * translateMix;
            matrix.ty += (boneY - matrix.ty) * translateMix;
            var x = positions[p], y = positions[p + 1];
            var dx = x - boneX, dy = y - boneY;
            if (isChainScaleMode) {
              var lenght = this._boneLengths[i];
              var s = (Math.sqrt(dx * dx + dy * dy) / lenght - 1) * rotateMix + 1;
              matrix.a *= s;
              matrix.b *= s;
            }
            boneX = x;
            boneY = y;
            if (rotateMix > 0) {
              var a = matrix.a, b = matrix.b, c = matrix.c, d = matrix.d, r = void 0, cos = void 0, sin = void 0;
              r = isTangentMode ? positions[p - 1] : Math.atan2(dy, dx);
              r -= Math.atan2(b, a);
              if (tip) {
                cos = Math.cos(r);
                sin = Math.sin(r);
                var length_3 = bone._boneData.length;
                boneX += (length_3 * (cos * a - sin * b) - dx) * rotateMix;
                boneY += (length_3 * (sin * a + cos * b) - dy) * rotateMix;
              } else r += rotateOffset;
              r > dragonBones.Transform.PI ? r -= dragonBones.Transform.PI_D : r < -dragonBones.Transform.PI && (r += dragonBones.Transform.PI_D);
              r *= rotateMix;
              cos = Math.cos(r);
              sin = Math.sin(r);
              matrix.a = cos * a - sin * b;
              matrix.b = sin * a + cos * b;
              matrix.c = cos * c - sin * d;
              matrix.d = sin * c + cos * d;
            }
            bone.global.fromMatrix(matrix);
          }
          this.dirty = false;
        };
        PathConstraint.prototype.invalidUpdate = function() {};
        return PathConstraint;
      })(Constraint);
      dragonBones.PathConstraint = PathConstraint;
    })(dragonBones || (dragonBones = {}));
    var dragonBones;
    (function(dragonBones) {
      var WorldClock = (function() {
        function WorldClock(time) {
          void 0 === time && (time = 0);
          this.time = 0;
          this.timeScale = 1;
          this._systemTime = 0;
          this._animatebles = [];
          this._clock = null;
          this.time = time;
          this._systemTime = .001 * new Date().getTime();
        }
        WorldClock.prototype.advanceTime = function(passedTime) {
          passedTime !== passedTime && (passedTime = 0);
          var currentTime = .001 * Date.now();
          passedTime < 0 && (passedTime = currentTime - this._systemTime);
          this._systemTime = currentTime;
          1 !== this.timeScale && (passedTime *= this.timeScale);
          if (0 === passedTime) return;
          passedTime < 0 ? this.time -= passedTime : this.time += passedTime;
          var i = 0, r = 0, l = this._animatebles.length;
          for (;i < l; ++i) {
            var animatable = this._animatebles[i];
            if (null !== animatable) {
              if (r > 0) {
                this._animatebles[i - r] = animatable;
                this._animatebles[i] = null;
              }
              animatable.advanceTime(passedTime);
            } else r++;
          }
          if (r > 0) {
            l = this._animatebles.length;
            for (;i < l; ++i) {
              var animateble = this._animatebles[i];
              null !== animateble ? this._animatebles[i - r] = animateble : r++;
            }
            this._animatebles.length -= r;
          }
        };
        WorldClock.prototype.contains = function(value) {
          if (value === this) return false;
          var ancestor = value;
          while (ancestor !== this && null !== ancestor) ancestor = ancestor.clock;
          return ancestor === this;
        };
        WorldClock.prototype.add = function(value) {
          if (this._animatebles.indexOf(value) < 0) {
            this._animatebles.push(value);
            value.clock = this;
          }
        };
        WorldClock.prototype.remove = function(value) {
          var index = this._animatebles.indexOf(value);
          if (index >= 0) {
            this._animatebles[index] = null;
            value.clock = null;
          }
        };
        WorldClock.prototype.clear = function() {
          for (var _i = 0, _a = this._animatebles; _i < _a.length; _i++) {
            var animatable = _a[_i];
            null !== animatable && (animatable.clock = null);
          }
        };
        Object.defineProperty(WorldClock.prototype, "clock", {
          get: function get() {
            return this._clock;
          },
          set: function set(value) {
            if (this._clock === value) return;
            null !== this._clock && this._clock.remove(this);
            this._clock = value;
            null !== this._clock && this._clock.add(this);
          },
          enumerable: true,
          configurable: true
        });
        WorldClock.clock = new WorldClock();
        return WorldClock;
      })();
      dragonBones.WorldClock = WorldClock;
    })(dragonBones || (dragonBones = {}));
    var dragonBones;
    (function(dragonBones) {
      var Animation = (function(_super) {
        __extends(Animation, _super);
        function Animation() {
          var _this = null !== _super && _super.apply(this, arguments) || this;
          _this._animationNames = [];
          _this._animationStates = [];
          _this._animations = {};
          _this._animationConfig = null;
          return _this;
        }
        Animation.toString = function() {
          return "[class dragonBones.Animation]";
        };
        Animation.prototype._onClear = function() {
          for (var _i = 0, _a = this._animationStates; _i < _a.length; _i++) {
            var animationState = _a[_i];
            animationState.returnToPool();
          }
          for (var k in this._animations) delete this._animations[k];
          null !== this._animationConfig && this._animationConfig.returnToPool();
          this.timeScale = 1;
          this._lockUpdate = false;
          this._animationDirty = false;
          this._inheritTimeScale = 1;
          this._animationNames.length = 0;
          this._animationStates.length = 0;
          this._armature = null;
          this._animationConfig = null;
          this._lastAnimationState = null;
        };
        Animation.prototype._fadeOut = function(animationConfig) {
          switch (animationConfig.fadeOutMode) {
           case 1:
            for (var _i = 0, _a = this._animationStates; _i < _a.length; _i++) {
              var animationState = _a[_i];
              if (null !== animationState._parent) continue;
              animationState.layer === animationConfig.layer && animationState.fadeOut(animationConfig.fadeOutTime, animationConfig.pauseFadeOut);
            }
            break;

           case 2:
            for (var _b = 0, _c = this._animationStates; _b < _c.length; _b++) {
              var animationState = _c[_b];
              if (null !== animationState._parent) continue;
              animationState.group === animationConfig.group && animationState.fadeOut(animationConfig.fadeOutTime, animationConfig.pauseFadeOut);
            }
            break;

           case 3:
            for (var _d = 0, _e = this._animationStates; _d < _e.length; _d++) {
              var animationState = _e[_d];
              if (null !== animationState._parent) continue;
              animationState.layer === animationConfig.layer && animationState.group === animationConfig.group && animationState.fadeOut(animationConfig.fadeOutTime, animationConfig.pauseFadeOut);
            }
            break;

           case 4:
            for (var _f = 0, _g = this._animationStates; _f < _g.length; _f++) {
              var animationState = _g[_f];
              if (null !== animationState._parent) continue;
              animationState.fadeOut(animationConfig.fadeOutTime, animationConfig.pauseFadeOut);
            }
          }
        };
        Animation.prototype.init = function(armature) {
          if (null !== this._armature) return;
          this._armature = armature;
          this._animationConfig = dragonBones.BaseObject.borrowObject(dragonBones.AnimationConfig);
        };
        Animation.prototype.advanceTime = function(passedTime) {
          passedTime < 0 && (passedTime = -passedTime);
          this._armature.inheritAnimation && null !== this._armature._parent ? this._inheritTimeScale = this._armature._parent._armature.animation._inheritTimeScale * this.timeScale : this._inheritTimeScale = this.timeScale;
          1 !== this._inheritTimeScale && (passedTime *= this._inheritTimeScale);
          var animationStateCount = this._animationStates.length;
          if (1 === animationStateCount) {
            var animationState = this._animationStates[0];
            if (animationState._fadeState > 0 && animationState._subFadeState > 0) {
              this._armature._dragonBones.bufferObject(animationState);
              this._animationStates.length = 0;
              this._lastAnimationState = null;
            } else {
              var animationData = animationState._animationData;
              var cacheFrameRate = animationData.cacheFrameRate;
              if (this._animationDirty && cacheFrameRate > 0) {
                this._animationDirty = false;
                for (var _i = 0, _a = this._armature.getBones(); _i < _a.length; _i++) {
                  var bone = _a[_i];
                  bone._cachedFrameIndices = animationData.getBoneCachedFrameIndices(bone.name);
                }
                for (var _b = 0, _c = this._armature.getSlots(); _b < _c.length; _b++) {
                  var slot = _c[_b];
                  var rawDisplayDatas = slot.rawDisplayDatas;
                  if (null !== rawDisplayDatas && rawDisplayDatas.length > 0) {
                    var rawDsplayData = rawDisplayDatas[0];
                    if (null !== rawDsplayData && rawDsplayData.parent === this._armature.armatureData.defaultSkin) {
                      slot._cachedFrameIndices = animationData.getSlotCachedFrameIndices(slot.name);
                      continue;
                    }
                  }
                  slot._cachedFrameIndices = null;
                }
              }
              animationState.advanceTime(passedTime, cacheFrameRate);
            }
          } else if (animationStateCount > 1) {
            for (var i = 0, r = 0; i < animationStateCount; ++i) {
              var animationState = this._animationStates[i];
              if (animationState._fadeState > 0 && animationState._subFadeState > 0) {
                r++;
                this._armature._dragonBones.bufferObject(animationState);
                this._animationDirty = true;
                this._lastAnimationState === animationState && (this._lastAnimationState = null);
              } else {
                r > 0 && (this._animationStates[i - r] = animationState);
                animationState.advanceTime(passedTime, 0);
              }
              if (i === animationStateCount - 1 && r > 0) {
                this._animationStates.length -= r;
                null === this._lastAnimationState && this._animationStates.length > 0 && (this._lastAnimationState = this._animationStates[this._animationStates.length - 1]);
              }
            }
            this._armature._cacheFrameIndex = -1;
          } else this._armature._cacheFrameIndex = -1;
        };
        Animation.prototype.reset = function() {
          for (var _i = 0, _a = this._animationStates; _i < _a.length; _i++) {
            var animationState = _a[_i];
            animationState.returnToPool();
          }
          this._animationDirty = false;
          this._animationConfig.clear();
          this._animationStates.length = 0;
          this._lastAnimationState = null;
        };
        Animation.prototype.stop = function(animationName) {
          void 0 === animationName && (animationName = null);
          if (null !== animationName) {
            var animationState = this.getState(animationName);
            null !== animationState && animationState.stop();
          } else for (var _i = 0, _a = this._animationStates; _i < _a.length; _i++) {
            var animationState = _a[_i];
            animationState.stop();
          }
        };
        Animation.prototype.playConfig = function(animationConfig) {
          var animationName = animationConfig.animation;
          if (!(animationName in this._animations)) {
            console.warn("Non-existent animation.\n", "DragonBones name: " + this._armature.armatureData.parent.name, "Armature name: " + this._armature.name, "Animation name: " + animationName);
            return null;
          }
          var animationData = this._animations[animationName];
          if (5 === animationConfig.fadeOutMode) for (var _i = 0, _a = this._animationStates; _i < _a.length; _i++) {
            var animationState_1 = _a[_i];
            if (animationState_1._animationData === animationData) return animationState_1;
          }
          0 === this._animationStates.length ? animationConfig.fadeInTime = 0 : animationConfig.fadeInTime < 0 && (animationConfig.fadeInTime = animationData.fadeInTime);
          animationConfig.fadeOutTime < 0 && (animationConfig.fadeOutTime = animationConfig.fadeInTime);
          animationConfig.timeScale <= -100 && (animationConfig.timeScale = 1 / animationData.scale);
          if (animationData.frameCount > 1) {
            if (animationConfig.position < 0) {
              animationConfig.position %= animationData.duration;
              animationConfig.position = animationData.duration - animationConfig.position;
            } else animationConfig.position === animationData.duration ? animationConfig.position -= 1e-6 : animationConfig.position > animationData.duration && (animationConfig.position %= animationData.duration);
            animationConfig.duration > 0 && animationConfig.position + animationConfig.duration > animationData.duration && (animationConfig.duration = animationData.duration - animationConfig.position);
            animationConfig.playTimes < 0 && (animationConfig.playTimes = animationData.playTimes);
          } else {
            animationConfig.playTimes = 1;
            animationConfig.position = 0;
            animationConfig.duration > 0 && (animationConfig.duration = 0);
          }
          0 === animationConfig.duration && (animationConfig.duration = -1);
          this._fadeOut(animationConfig);
          var animationState = dragonBones.BaseObject.borrowObject(dragonBones.AnimationState);
          animationState.init(this._armature, animationData, animationConfig);
          this._animationDirty = true;
          this._armature._cacheFrameIndex = -1;
          if (this._animationStates.length > 0) {
            var added = false;
            for (var i = 0, l = this._animationStates.length; i < l; ++i) {
              if (animationState.layer > this._animationStates[i].layer) {
                added = true;
                this._animationStates.splice(i, 0, animationState);
                break;
              }
              if (i !== l - 1 && animationState.layer > this._animationStates[i + 1].layer) {
                added = true;
                this._animationStates.splice(i + 1, 0, animationState);
                break;
              }
            }
            added || this._animationStates.push(animationState);
          } else this._animationStates.push(animationState);
          for (var _b = 0, _c = this._armature.getSlots(); _b < _c.length; _b++) {
            var slot = _c[_b];
            var childArmature = slot.childArmature;
            null !== childArmature && childArmature.inheritAnimation && childArmature.animation.hasAnimation(animationName) && null === childArmature.animation.getState(animationName) && childArmature.animation.fadeIn(animationName);
          }
          var isLocked = false;
          for (var k in animationData.animationTimelines) {
            if (!this._lockUpdate) {
              isLocked = true;
              this._lockUpdate = true;
            }
            var childAnimatiionState = this.fadeIn(k, animationConfig.fadeInTime, 1, animationState.layer, null, 0);
            if (null !== childAnimatiionState) {
              childAnimatiionState.resetToPose = false;
              childAnimatiionState._parent = animationState;
              childAnimatiionState.stop();
            }
          }
          isLocked && (this._lockUpdate = false);
          if (!this._lockUpdate) {
            animationConfig.fadeInTime <= 0 && this._armature.advanceTime(0);
            this._lastAnimationState = animationState;
          }
          return animationState;
        };
        Animation.prototype.play = function(animationName, playTimes) {
          void 0 === animationName && (animationName = null);
          void 0 === playTimes && (playTimes = -1);
          this._animationConfig.clear();
          this._animationConfig.resetToPose = true;
          this._animationConfig.playTimes = playTimes;
          this._animationConfig.fadeInTime = 0;
          this._animationConfig.animation = null !== animationName ? animationName : "";
          if (null !== animationName && animationName.length > 0) this.playConfig(this._animationConfig); else if (null === this._lastAnimationState) {
            var defaultAnimation = this._armature.armatureData.defaultAnimation;
            if (null !== defaultAnimation) {
              this._animationConfig.animation = defaultAnimation.name;
              this.playConfig(this._animationConfig);
            }
          } else if (this._lastAnimationState.isPlaying || this._lastAnimationState.isCompleted) {
            this._animationConfig.animation = this._lastAnimationState.name;
            this.playConfig(this._animationConfig);
          } else this._lastAnimationState.play();
          return this._lastAnimationState;
        };
        Animation.prototype.fadeIn = function(animationName, fadeInTime, playTimes, layer, group, fadeOutMode) {
          void 0 === fadeInTime && (fadeInTime = -1);
          void 0 === playTimes && (playTimes = -1);
          void 0 === layer && (layer = 0);
          void 0 === group && (group = null);
          void 0 === fadeOutMode && (fadeOutMode = 3);
          this._animationConfig.clear();
          this._animationConfig.fadeOutMode = fadeOutMode;
          this._animationConfig.playTimes = playTimes;
          this._animationConfig.layer = layer;
          this._animationConfig.fadeInTime = fadeInTime;
          this._animationConfig.animation = animationName;
          this._animationConfig.group = null !== group ? group : "";
          return this.playConfig(this._animationConfig);
        };
        Animation.prototype.gotoAndPlayByTime = function(animationName, time, playTimes) {
          void 0 === time && (time = 0);
          void 0 === playTimes && (playTimes = -1);
          this._animationConfig.clear();
          this._animationConfig.resetToPose = true;
          this._animationConfig.playTimes = playTimes;
          this._animationConfig.position = time;
          this._animationConfig.fadeInTime = 0;
          this._animationConfig.animation = animationName;
          return this.playConfig(this._animationConfig);
        };
        Animation.prototype.gotoAndPlayByFrame = function(animationName, frame, playTimes) {
          void 0 === frame && (frame = 0);
          void 0 === playTimes && (playTimes = -1);
          this._animationConfig.clear();
          this._animationConfig.resetToPose = true;
          this._animationConfig.playTimes = playTimes;
          this._animationConfig.fadeInTime = 0;
          this._animationConfig.animation = animationName;
          var animationData = animationName in this._animations ? this._animations[animationName] : null;
          null !== animationData && (this._animationConfig.position = animationData.duration * frame / animationData.frameCount);
          return this.playConfig(this._animationConfig);
        };
        Animation.prototype.gotoAndPlayByProgress = function(animationName, progress, playTimes) {
          void 0 === progress && (progress = 0);
          void 0 === playTimes && (playTimes = -1);
          this._animationConfig.clear();
          this._animationConfig.resetToPose = true;
          this._animationConfig.playTimes = playTimes;
          this._animationConfig.fadeInTime = 0;
          this._animationConfig.animation = animationName;
          var animationData = animationName in this._animations ? this._animations[animationName] : null;
          null !== animationData && (this._animationConfig.position = animationData.duration * (progress > 0 ? progress : 0));
          return this.playConfig(this._animationConfig);
        };
        Animation.prototype.gotoAndStopByTime = function(animationName, time) {
          void 0 === time && (time = 0);
          var animationState = this.gotoAndPlayByTime(animationName, time, 1);
          null !== animationState && animationState.stop();
          return animationState;
        };
        Animation.prototype.gotoAndStopByFrame = function(animationName, frame) {
          void 0 === frame && (frame = 0);
          var animationState = this.gotoAndPlayByFrame(animationName, frame, 1);
          null !== animationState && animationState.stop();
          return animationState;
        };
        Animation.prototype.gotoAndStopByProgress = function(animationName, progress) {
          void 0 === progress && (progress = 0);
          var animationState = this.gotoAndPlayByProgress(animationName, progress, 1);
          null !== animationState && animationState.stop();
          return animationState;
        };
        Animation.prototype.getState = function(animationName) {
          var i = this._animationStates.length;
          while (i--) {
            var animationState = this._animationStates[i];
            if (animationState.name === animationName) return animationState;
          }
          return null;
        };
        Animation.prototype.hasAnimation = function(animationName) {
          return animationName in this._animations;
        };
        Animation.prototype.getStates = function() {
          return this._animationStates;
        };
        Object.defineProperty(Animation.prototype, "isPlaying", {
          get: function get() {
            for (var _i = 0, _a = this._animationStates; _i < _a.length; _i++) {
              var animationState = _a[_i];
              if (animationState.isPlaying) return true;
            }
            return false;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(Animation.prototype, "isCompleted", {
          get: function get() {
            for (var _i = 0, _a = this._animationStates; _i < _a.length; _i++) {
              var animationState = _a[_i];
              if (!animationState.isCompleted) return false;
            }
            return this._animationStates.length > 0;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(Animation.prototype, "lastAnimationName", {
          get: function get() {
            return null !== this._lastAnimationState ? this._lastAnimationState.name : "";
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(Animation.prototype, "animationNames", {
          get: function get() {
            return this._animationNames;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(Animation.prototype, "animations", {
          get: function get() {
            return this._animations;
          },
          set: function set(value) {
            if (this._animations === value) return;
            this._animationNames.length = 0;
            for (var k in this._animations) delete this._animations[k];
            for (var k in value) {
              this._animationNames.push(k);
              this._animations[k] = value[k];
            }
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(Animation.prototype, "animationConfig", {
          get: function get() {
            this._animationConfig.clear();
            return this._animationConfig;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(Animation.prototype, "lastAnimationState", {
          get: function get() {
            return this._lastAnimationState;
          },
          enumerable: true,
          configurable: true
        });
        Animation.prototype.gotoAndPlay = function(animationName, fadeInTime, duration, playTimes, layer, group, fadeOutMode, pauseFadeOut, pauseFadeIn) {
          void 0 === fadeInTime && (fadeInTime = -1);
          void 0 === duration && (duration = -1);
          void 0 === playTimes && (playTimes = -1);
          void 0 === layer && (layer = 0);
          void 0 === group && (group = null);
          void 0 === fadeOutMode && (fadeOutMode = 3);
          void 0 === pauseFadeOut && (pauseFadeOut = true);
          void 0 === pauseFadeIn && (pauseFadeIn = true);
          console.warn("Deprecated.");
          pauseFadeOut;
          pauseFadeIn;
          this._animationConfig.clear();
          this._animationConfig.resetToPose = true;
          this._animationConfig.fadeOutMode = fadeOutMode;
          this._animationConfig.playTimes = playTimes;
          this._animationConfig.layer = layer;
          this._animationConfig.fadeInTime = fadeInTime;
          this._animationConfig.animation = animationName;
          this._animationConfig.group = null !== group ? group : "";
          var animationData = this._animations[animationName];
          animationData && duration > 0 && (this._animationConfig.timeScale = animationData.duration / duration);
          return this.playConfig(this._animationConfig);
        };
        Animation.prototype.gotoAndStop = function(animationName, time) {
          void 0 === time && (time = 0);
          console.warn("Deprecated.");
          return this.gotoAndStopByTime(animationName, time);
        };
        Object.defineProperty(Animation.prototype, "animationList", {
          get: function get() {
            console.warn("Deprecated.");
            return this._animationNames;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(Animation.prototype, "animationDataList", {
          get: function get() {
            console.warn("Deprecated.");
            var list = [];
            for (var i = 0, l = this._animationNames.length; i < l; ++i) list.push(this._animations[this._animationNames[i]]);
            return list;
          },
          enumerable: true,
          configurable: true
        });
        return Animation;
      })(dragonBones.BaseObject);
      dragonBones.Animation = Animation;
    })(dragonBones || (dragonBones = {}));
    var dragonBones;
    (function(dragonBones) {
      var AnimationState = (function(_super) {
        __extends(AnimationState, _super);
        function AnimationState() {
          var _this = null !== _super && _super.apply(this, arguments) || this;
          _this._blendState = new BlendState();
          _this._boneMask = [];
          _this._boneTimelines = [];
          _this._surfaceTimelines = [];
          _this._slotTimelines = [];
          _this._constraintTimelines = [];
          _this._animationTimelines = [];
          _this._poseTimelines = [];
          _this._bonePoses = {};
          _this._actionTimeline = null;
          _this._zOrderTimeline = null;
          _this._parent = null;
          return _this;
        }
        AnimationState.toString = function() {
          return "[class dragonBones.AnimationState]";
        };
        AnimationState.prototype._onClear = function() {
          for (var _i = 0, _a = this._boneTimelines; _i < _a.length; _i++) {
            var timeline = _a[_i];
            timeline.returnToPool();
          }
          for (var _b = 0, _c = this._surfaceTimelines; _b < _c.length; _b++) {
            var timeline = _c[_b];
            timeline.returnToPool();
          }
          for (var _d = 0, _e = this._slotTimelines; _d < _e.length; _d++) {
            var timeline = _e[_d];
            timeline.returnToPool();
          }
          for (var _f = 0, _g = this._constraintTimelines; _f < _g.length; _f++) {
            var timeline = _g[_f];
            timeline.returnToPool();
          }
          for (var _h = 0, _j = this._animationTimelines; _h < _j.length; _h++) {
            var timeline = _j[_h];
            timeline.returnToPool();
          }
          for (var k in this._bonePoses) {
            this._bonePoses[k].returnToPool();
            delete this._bonePoses[k];
          }
          null !== this._actionTimeline && this._actionTimeline.returnToPool();
          null !== this._zOrderTimeline && this._zOrderTimeline.returnToPool();
          this.actionEnabled = false;
          this.additiveBlending = false;
          this.displayControl = false;
          this.resetToPose = false;
          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;
        };
        AnimationState.prototype._updateTimelines = function() {
          for (var _i = 0, _a = this._armature._constraints; _i < _a.length; _i++) {
            var constraint = _a[_i];
            var timelineDatas = this._animationData.getConstraintTimelines(constraint.name);
            if (null !== timelineDatas) for (var _b = 0, timelineDatas_1 = timelineDatas; _b < timelineDatas_1.length; _b++) {
              var timelineData = timelineDatas_1[_b];
              switch (timelineData.type) {
               case 30:
                var timeline = dragonBones.BaseObject.borrowObject(dragonBones.IKConstraintTimelineState);
                timeline.constraint = constraint;
                timeline.init(this._armature, this, timelineData);
                this._constraintTimelines.push(timeline);
              }
            } else if (this.resetToPose) {
              var timeline = dragonBones.BaseObject.borrowObject(dragonBones.IKConstraintTimelineState);
              timeline.constraint = constraint;
              timeline.init(this._armature, this, null);
              this._constraintTimelines.push(timeline);
              this._poseTimelines.push(timeline);
            }
          }
          for (var _c = 0, _d = this._armature.animation.getStates(); _c < _d.length; _c++) {
            var animationState = _d[_c];
            if (animationState._parent !== this) continue;
            var timelineDatas = this._animationData.getAnimationTimelines(animationState.name);
            if (null === timelineDatas) continue;
            for (var _e = 0, timelineDatas_2 = timelineDatas; _e < timelineDatas_2.length; _e++) {
              var timelineData = timelineDatas_2[_e];
              switch (timelineData.type) {
               case 40:
                var timeline = dragonBones.BaseObject.borrowObject(dragonBones.AnimationTimelineState);
                timeline.animationState = animationState;
                timeline.init(this._armature, this, timelineData);
                this._animationTimelines.push(timeline);
              }
            }
          }
        };
        AnimationState.prototype._updateBoneAndSlotTimelines = function() {
          var boneTimelines = {};
          for (var _i = 0, _a = this._boneTimelines; _i < _a.length; _i++) {
            var timeline = _a[_i];
            var timelineName = timeline.bone.name;
            timelineName in boneTimelines || (boneTimelines[timelineName] = []);
            boneTimelines[timelineName].push(timeline);
          }
          for (var _b = 0, _c = this._armature.getBones(); _b < _c.length; _b++) {
            var bone = _c[_b];
            var timelineName = bone.name;
            if (!this.containsBoneMask(timelineName)) continue;
            if (timelineName in boneTimelines) delete boneTimelines[timelineName]; else if (0 === bone._boneData.type) {
              var timelineDatas = this._animationData.getBoneTimelines(timelineName);
              var bonePose = timelineName in this._bonePoses ? this._bonePoses[timelineName] : this._bonePoses[timelineName] = dragonBones.BaseObject.borrowObject(BonePose);
              if (null !== timelineDatas) for (var _d = 0, timelineDatas_3 = timelineDatas; _d < timelineDatas_3.length; _d++) {
                var timelineData = timelineDatas_3[_d];
                switch (timelineData.type) {
                 case 10:
                  var timeline = dragonBones.BaseObject.borrowObject(dragonBones.BoneAllTimelineState);
                  timeline.bone = bone;
                  timeline.bonePose = bonePose;
                  timeline.init(this._armature, this, timelineData);
                  this._boneTimelines.push(timeline);
                  break;

                 case 11:
                  var timeline = dragonBones.BaseObject.borrowObject(dragonBones.BoneTranslateTimelineState);
                  timeline.bone = bone;
                  timeline.bonePose = bonePose;
                  timeline.init(this._armature, this, timelineData);
                  this._boneTimelines.push(timeline);
                  break;

                 case 12:
                  var timeline = dragonBones.BaseObject.borrowObject(dragonBones.BoneRotateTimelineState);
                  timeline.bone = bone;
                  timeline.bonePose = bonePose;
                  timeline.init(this._armature, this, timelineData);
                  this._boneTimelines.push(timeline);
                  break;

                 case 13:
                  var timeline = dragonBones.BaseObject.borrowObject(dragonBones.BoneScaleTimelineState);
                  timeline.bone = bone;
                  timeline.bonePose = bonePose;
                  timeline.init(this._armature, this, timelineData);
                  this._boneTimelines.push(timeline);
                }
              } else if (this.resetToPose) {
                var timeline = dragonBones.BaseObject.borrowObject(dragonBones.BoneAllTimelineState);
                timeline.bone = bone;
                timeline.bonePose = bonePose;
                timeline.init(this._armature, this, null);
                this._boneTimelines.push(timeline);
                this._poseTimelines.push(timeline);
              }
            } else if (1 === bone._boneData.type) {
              var timelineDatas = this._animationData.getSurfaceTimelines(timelineName);
              if (null !== timelineDatas) for (var _e = 0, timelineDatas_4 = timelineDatas; _e < timelineDatas_4.length; _e++) {
                var timelineData = timelineDatas_4[_e];
                switch (timelineData.type) {
                 case 50:
                  var timeline = dragonBones.BaseObject.borrowObject(dragonBones.SurfaceTimelineState);
                  timeline.surface = bone;
                  timeline.init(this._armature, this, timelineData);
                  this._surfaceTimelines.push(timeline);
                }
              } else if (this.resetToPose) {
                var timeline = dragonBones.BaseObject.borrowObject(dragonBones.SurfaceTimelineState);
                timeline.surface = bone;
                timeline.init(this._armature, this, null);
                this._surfaceTimelines.push(timeline);
                this._poseTimelines.push(timeline);
              }
            }
          }
          for (var k in boneTimelines) for (var _f = 0, _g = boneTimelines[k]; _f < _g.length; _f++) {
            var timeline = _g[_f];
            this._boneTimelines.splice(this._boneTimelines.indexOf(timeline), 1);
            timeline.returnToPool();
          }
          var slotTimelines = {};
          var ffdFlags = [];
          for (var _h = 0, _j = this._slotTimelines; _h < _j.length; _h++) {
            var timeline = _j[_h];
            var timelineName = timeline.slot.name;
            timelineName in slotTimelines || (slotTimelines[timelineName] = []);
            slotTimelines[timelineName].push(timeline);
          }
          for (var _k = 0, _l = this._armature.getSlots(); _k < _l.length; _k++) {
            var slot = _l[_k];
            var boneName = slot.parent.name;
            if (!this.containsBoneMask(boneName)) continue;
            var timelineName = slot.name;
            var timelineDatas = this._animationData.getSlotTimelines(timelineName);
            if (timelineName in slotTimelines) delete slotTimelines[timelineName]; else {
              var displayIndexFlag = false;
              var colorFlag = false;
              ffdFlags.length = 0;
              if (null !== timelineDatas) for (var _m = 0, timelineDatas_5 = timelineDatas; _m < timelineDatas_5.length; _m++) {
                var timelineData = timelineDatas_5[_m];
                switch (timelineData.type) {
                 case 20:
                  var timeline = dragonBones.BaseObject.borrowObject(dragonBones.SlotDislayTimelineState);
                  timeline.slot = slot;
                  timeline.init(this._armature, this, timelineData);
                  this._slotTimelines.push(timeline);
                  displayIndexFlag = true;
                  break;

                 case 21:
                  var timeline = dragonBones.BaseObject.borrowObject(dragonBones.SlotColorTimelineState);
                  timeline.slot = slot;
                  timeline.init(this._armature, this, timelineData);
                  this._slotTimelines.push(timeline);
                  colorFlag = true;
                  break;

                 case 22:
                  var timeline = dragonBones.BaseObject.borrowObject(dragonBones.DeformTimelineState);
                  timeline.slot = slot;
                  timeline.init(this._armature, this, timelineData);
                  this._slotTimelines.push(timeline);
                  ffdFlags.push(timeline.vertexOffset);
                }
              }
              if (this.resetToPose) {
                if (!displayIndexFlag) {
                  var timeline = dragonBones.BaseObject.borrowObject(dragonBones.SlotDislayTimelineState);
                  timeline.slot = slot;
                  timeline.init(this._armature, this, null);
                  this._slotTimelines.push(timeline);
                  this._poseTimelines.push(timeline);
                }
                if (!colorFlag) {
                  var timeline = dragonBones.BaseObject.borrowObject(dragonBones.SlotColorTimelineState);
                  timeline.slot = slot;
                  timeline.init(this._armature, this, null);
                  this._slotTimelines.push(timeline);
                  this._poseTimelines.push(timeline);
                }
                if (null !== slot.rawDisplayDatas) for (var _o = 0, _p = slot.rawDisplayDatas; _o < _p.length; _o++) {
                  var displayData = _p[_o];
                  if (null !== displayData && 2 === displayData.type) {
                    var meshOffset = displayData.vertices.offset;
                    if (ffdFlags.indexOf(meshOffset) < 0) {
                      var timeline = dragonBones.BaseObject.borrowObject(dragonBones.DeformTimelineState);
                      timeline.vertexOffset = meshOffset;
                      timeline.slot = slot;
                      timeline.init(this._armature, this, null);
                      this._slotTimelines.push(timeline);
                      this._poseTimelines.push(timeline);
                    }
                  }
                }
              }
            }
          }
          for (var k in slotTimelines) for (var _q = 0, _r = slotTimelines[k]; _q < _r.length; _q++) {
            var timeline = _r[_q];
            this._slotTimelines.splice(this._slotTimelines.indexOf(timeline), 1);
            timeline.returnToPool();
          }
        };
        AnimationState.prototype._advanceFadeTime = function(passedTime) {
          var isFadeOut = this._fadeState > 0;
          if (this._subFadeState < 0) {
            this._subFadeState = 0;
            var eventType = isFadeOut ? dragonBones.EventObject.FADE_OUT : dragonBones.EventObject.FADE_IN;
            if (this._armature.eventDispatcher.hasDBEventListener(eventType)) {
              var eventObject = dragonBones.BaseObject.borrowObject(dragonBones.EventObject);
              eventObject.type = eventType;
              eventObject.armature = this._armature;
              eventObject.animationState = this;
              this._armature._dragonBones.bufferEvent(eventObject);
            }
          }
          passedTime < 0 && (passedTime = -passedTime);
          this._fadeTime += passedTime;
          if (this._fadeTime >= this.fadeTotalTime) {
            this._subFadeState = 1;
            this._fadeProgress = isFadeOut ? 0 : 1;
          } else this._fadeTime > 0 ? this._fadeProgress = isFadeOut ? 1 - this._fadeTime / this.fadeTotalTime : this._fadeTime / this.fadeTotalTime : this._fadeProgress = isFadeOut ? 1 : 0;
          if (this._subFadeState > 0) {
            if (!isFadeOut) {
              this._playheadState |= 1;
              this._fadeState = 0;
            }
            var eventType = isFadeOut ? dragonBones.EventObject.FADE_OUT_COMPLETE : dragonBones.EventObject.FADE_IN_COMPLETE;
            if (this._armature.eventDispatcher.hasDBEventListener(eventType)) {
              var eventObject = dragonBones.BaseObject.borrowObject(dragonBones.EventObject);
              eventObject.type = eventType;
              eventObject.armature = this._armature;
              eventObject.animationState = this;
              this._armature._dragonBones.bufferEvent(eventObject);
            }
          }
        };
        AnimationState.prototype.init = function(armature, animationData, animationConfig) {
          if (null !== this._armature) return;
          this._armature = armature;
          this._animationData = animationData;
          this.resetToPose = animationConfig.resetToPose;
          this.additiveBlending = animationConfig.additiveBlending;
          this.displayControl = animationConfig.displayControl;
          this.actionEnabled = animationConfig.actionEnabled;
          this.layer = animationConfig.layer;
          this.playTimes = animationConfig.playTimes;
          this.timeScale = animationConfig.timeScale;
          this.fadeTotalTime = animationConfig.fadeInTime;
          this.autoFadeOutTime = animationConfig.autoFadeOutTime;
          this.weight = animationConfig.weight;
          this.name = animationConfig.name.length > 0 ? animationConfig.name : animationConfig.animation;
          this.group = animationConfig.group;
          animationConfig.pauseFadeIn ? this._playheadState = 2 : this._playheadState = 3;
          if (animationConfig.duration < 0) {
            this._position = 0;
            this._duration = this._animationData.duration;
            0 !== animationConfig.position ? this.timeScale >= 0 ? this._time = animationConfig.position : this._time = animationConfig.position - this._duration : this._time = 0;
          } else {
            this._position = animationConfig.position;
            this._duration = animationConfig.duration;
            this._time = 0;
          }
          this.timeScale < 0 && 0 === this._time && (this._time = -1e-6);
          this.fadeTotalTime <= 0 && (this._fadeProgress = .999999);
          if (animationConfig.boneMask.length > 0) {
            this._boneMask.length = animationConfig.boneMask.length;
            for (var i = 0, l = this._boneMask.length; i < l; ++i) this._boneMask[i] = animationConfig.boneMask[i];
          }
          this._actionTimeline = dragonBones.BaseObject.borrowObject(dragonBones.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);
          if (null !== this._animationData.zOrderTimeline) {
            this._zOrderTimeline = dragonBones.BaseObject.borrowObject(dragonBones.ZOrderTimelineState);
            this._zOrderTimeline.init(this._armature, this, this._animationData.zOrderTimeline);
          }
        };
        AnimationState.prototype.advanceTime = function(passedTime, cacheFrameRate) {
          this._blendState.dirty = false;
          0 === this._fadeState && 0 === this._subFadeState || this._advanceFadeTime(passedTime);
          if (3 === this._playheadState) {
            1 !== this.timeScale && (passedTime *= this.timeScale);
            this._time += passedTime;
          }
          if (0 !== this._timelineDirty) {
            2 === this._timelineDirty && this._updateTimelines();
            this._timelineDirty = 0;
            this._updateBoneAndSlotTimelines();
          }
          if (0 === this.weight) return;
          var isCacheEnabled = 0 === this._fadeState && cacheFrameRate > 0;
          var isUpdateTimeline = true;
          var isUpdateBoneTimeline = true;
          var time = this._time;
          this._weightResult = this.weight * this._fadeProgress;
          null !== this._parent && (this._weightResult *= this._parent._weightResult / this._parent._fadeProgress);
          this._actionTimeline.playState <= 0 && this._actionTimeline.update(time);
          if (isCacheEnabled) {
            var internval = 2 * cacheFrameRate;
            this._actionTimeline.currentTime = Math.floor(this._actionTimeline.currentTime * internval) / internval;
          }
          null !== this._zOrderTimeline && this._zOrderTimeline.playState <= 0 && this._zOrderTimeline.update(time);
          if (isCacheEnabled) {
            var cacheFrameIndex = Math.floor(this._actionTimeline.currentTime * cacheFrameRate);
            if (this._armature._cacheFrameIndex === cacheFrameIndex) {
              isUpdateTimeline = false;
              isUpdateBoneTimeline = false;
            } else {
              this._armature._cacheFrameIndex = cacheFrameIndex;
              this._animationData.cachedFrames[cacheFrameIndex] ? isUpdateBoneTimeline = false : this._animationData.cachedFrames[cacheFrameIndex] = true;
            }
          }
          if (isUpdateTimeline) {
            if (isUpdateBoneTimeline) for (var i = 0, l = this._boneTimelines.length; i < l; ++i) {
              var timeline = this._boneTimelines[i];
              timeline.playState <= 0 && timeline.update(time);
              if (i === l - 1 || timeline.bone !== this._boneTimelines[i + 1].bone) {
                var state = timeline.bone._blendState.update(this._weightResult, this.layer);
                0 !== state && timeline.blend(state);
              }
            }
            for (var i = 0, l = this._surfaceTimelines.length; i < l; ++i) {
              var timeline = this._surfaceTimelines[i];
              var state = timeline.surface._blendState.update(this._weightResult, this.layer);
              timeline.playState <= 0 && timeline.update(time);
              0 !== state && timeline.blend(state);
            }
            if (this.displayControl) for (var i = 0, l = this._slotTimelines.length; i < l; ++i) {
              var timeline = this._slotTimelines[i];
              var displayController = timeline.slot.displayController;
              null !== displayController && displayController !== this.name && displayController !== this.group || timeline.playState <= 0 && timeline.update(time);
            }
            for (var i = 0, l = this._constraintTimelines.length; i < l; ++i) {
              var timeline = this._constraintTimelines[i];
              timeline.playState <= 0 && timeline.update(time);
            }
            for (var i = 0, l = this._animationTimelines.length; i < l; ++i) {
              var timeline = this._animationTimelines[i];
              var state = timeline.animationState._blendState.update(this._weightResult, this.layer);
              timeline.playState <= 0 && timeline.update(time);
              0 !== state && timeline.blend(state);
            }
          }
          if (0 === this._fadeState) {
            if (this._subFadeState > 0) {
              this._subFadeState = 0;
              if (this._poseTimelines.length > 0) {
                for (var _i = 0, _a = this._poseTimelines; _i < _a.length; _i++) {
                  var timeline = _a[_i];
                  timeline instanceof dragonBones.BoneTimelineState ? this._boneTimelines.splice(this._boneTimelines.indexOf(timeline), 1) : timeline instanceof dragonBones.SurfaceTimelineState ? this._surfaceTimelines.splice(this._surfaceTimelines.indexOf(timeline), 1) : timeline instanceof dragonBones.SlotTimelineState ? this._slotTimelines.splice(this._slotTimelines.indexOf(timeline), 1) : timeline instanceof dragonBones.ConstraintTimelineState && this._constraintTimelines.splice(this._constraintTimelines.indexOf(timeline), 1);
                  timeline.returnToPool();
                }
                this._poseTimelines.length = 0;
              }
            }
            this._actionTimeline.playState > 0 && this.autoFadeOutTime >= 0 && this.fadeOut(this.autoFadeOutTime);
          }
        };
        AnimationState.prototype.play = function() {
          this._playheadState = 3;
        };
        AnimationState.prototype.stop = function() {
          this._playheadState &= 1;
        };
        AnimationState.prototype.fadeOut = function(fadeOutTime, pausePlayhead) {
          void 0 === pausePlayhead && (pausePlayhead = true);
          fadeOutTime < 0 && (fadeOutTime = 0);
          pausePlayhead && (this._playheadState &= 2);
          if (this._fadeState > 0) {
            if (fadeOutTime > this.fadeTotalTime - this._fadeTime) return;
          } else {
            this._fadeState = 1;
            this._subFadeState = -1;
            (fadeOutTime <= 0 || this._fadeProgress <= 0) && (this._fadeProgress = 1e-6);
            for (var _i = 0, _a = this._boneTimelines; _i < _a.length; _i++) {
              var timeline = _a[_i];
              timeline.fadeOut();
            }
            for (var _b = 0, _c = this._surfaceTimelines; _b < _c.length; _b++) {
              var timeline = _c[_b];
              timeline.fadeOut();
            }
            for (var _d = 0, _e = this._slotTimelines; _d < _e.length; _d++) {
              var timeline = _e[_d];
              timeline.fadeOut();
            }
            for (var _f = 0, _g = this._constraintTimelines; _f < _g.length; _f++) {
              var timeline = _g[_f];
              timeline.fadeOut();
            }
            for (var _h = 0, _j = this._animationTimelines; _h < _j.length; _h++) {
              var timeline = _j[_h];
              timeline.animationState.fadeOut(fadeOutTime, pausePlayhead);
              timeline.fadeOut();
            }
          }
          this.displayControl = false;
          this.fadeTotalTime = this._fadeProgress > 1e-6 ? fadeOutTime / this._fadeProgress : 0;
          this._fadeTime = this.fadeTotalTime * (1 - this._fadeProgress);
        };
        AnimationState.prototype.containsBoneMask = function(boneName) {
          return 0 === this._boneMask.length || this._boneMask.indexOf(boneName) >= 0;
        };
        AnimationState.prototype.addBoneMask = function(boneName, recursive) {
          void 0 === recursive && (recursive = true);
          var currentBone = this._armature.getBone(boneName);
          if (null === currentBone) return;
          this._boneMask.indexOf(boneName) < 0 && this._boneMask.push(boneName);
          if (recursive) for (var _i = 0, _a = this._armature.getBones(); _i < _a.length; _i++) {
            var bone = _a[_i];
            this._boneMask.indexOf(bone.name) < 0 && currentBone.contains(bone) && this._boneMask.push(bone.name);
          }
          this._timelineDirty = 1;
        };
        AnimationState.prototype.removeBoneMask = function(boneName, recursive) {
          void 0 === recursive && (recursive = true);
          var index = this._boneMask.indexOf(boneName);
          index >= 0 && this._boneMask.splice(index, 1);
          if (recursive) {
            var currentBone = this._armature.getBone(boneName);
            if (null !== currentBone) {
              var bones = this._armature.getBones();
              if (this._boneMask.length > 0) for (var _i = 0, bones_1 = bones; _i < bones_1.length; _i++) {
                var bone = bones_1[_i];
                var index_2 = this._boneMask.indexOf(bone.name);
                index_2 >= 0 && currentBone.contains(bone) && this._boneMask.splice(index_2, 1);
              } else for (var _a = 0, bones_2 = bones; _a < bones_2.length; _a++) {
                var bone = bones_2[_a];
                if (bone === currentBone) continue;
                currentBone.contains(bone) || this._boneMask.push(bone.name);
              }
            }
          }
          this._timelineDirty = 1;
        };
        AnimationState.prototype.removeAllBoneMask = function() {
          this._boneMask.length = 0;
          this._timelineDirty = 1;
        };
        Object.defineProperty(AnimationState.prototype, "isFadeIn", {
          get: function get() {
            return this._fadeState < 0;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(AnimationState.prototype, "isFadeOut", {
          get: function get() {
            return this._fadeState > 0;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(AnimationState.prototype, "isFadeComplete", {
          get: function get() {
            return 0 === this._fadeState;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(AnimationState.prototype, "isPlaying", {
          get: function get() {
            return 0 !== (2 & this._playheadState) && this._actionTimeline.playState <= 0;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(AnimationState.prototype, "isCompleted", {
          get: function get() {
            return this._actionTimeline.playState > 0;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(AnimationState.prototype, "currentPlayTimes", {
          get: function get() {
            return this._actionTimeline.currentPlayTimes;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(AnimationState.prototype, "totalTime", {
          get: function get() {
            return this._duration;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(AnimationState.prototype, "currentTime", {
          get: function get() {
            return this._actionTimeline.currentTime;
          },
          set: function set(value) {
            var currentPlayTimes = this._actionTimeline.currentPlayTimes - (this._actionTimeline.playState > 0 ? 1 : 0);
            if (value < 0 || this._duration < value) {
              value = value % this._duration + currentPlayTimes * this._duration;
              value < 0 && (value += this._duration);
            }
            this.playTimes > 0 && currentPlayTimes === this.playTimes - 1 && value === this._duration && (value = this._duration - 1e-6);
            if (this._time === value) return;
            this._time = value;
            this._actionTimeline.setCurrentTime(this._time);
            null !== this._zOrderTimeline && (this._zOrderTimeline.playState = -1);
            for (var _i = 0, _a = this._boneTimelines; _i < _a.length; _i++) {
              var timeline = _a[_i];
              timeline.playState = -1;
            }
            for (var _b = 0, _c = this._slotTimelines; _b < _c.length; _b++) {
              var timeline = _c[_b];
              timeline.playState = -1;
            }
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(AnimationState.prototype, "animationData", {
          get: function get() {
            return this._animationData;
          },
          enumerable: true,
          configurable: true
        });
        return AnimationState;
      })(dragonBones.BaseObject);
      dragonBones.AnimationState = AnimationState;
      var BonePose = (function(_super) {
        __extends(BonePose, _super);
        function BonePose() {
          var _this = null !== _super && _super.apply(this, arguments) || this;
          _this.current = new dragonBones.Transform();
          _this.delta = new dragonBones.Transform();
          _this.result = new dragonBones.Transform();
          return _this;
        }
        BonePose.toString = function() {
          return "[class dragonBones.BonePose]";
        };
        BonePose.prototype._onClear = function() {
          this.current.identity();
          this.delta.identity();
          this.result.identity();
        };
        return BonePose;
      })(dragonBones.BaseObject);
      dragonBones.BonePose = BonePose;
      var BlendState = (function() {
        function BlendState() {}
        BlendState.prototype.update = function(weight, p_layer) {
          if (this.dirty) {
            if (!(this.leftWeight > 0)) return 0;
            if (this.layer !== p_layer) {
              if (this.layerWeight >= this.leftWeight) {
                this.leftWeight = 0;
                return 0;
              }
              this.layer = p_layer;
              this.leftWeight -= this.layerWeight;
              this.layerWeight = 0;
            }
            weight *= this.leftWeight;
            this.layerWeight += weight;
            this.blendWeight = weight;
            return 2;
          }
          this.dirty = true;
          this.layer = p_layer;
          this.layerWeight = weight;
          this.leftWeight = 1;
          this.blendWeight = weight;
          return 1;
        };
        BlendState.prototype.clear = function() {
          this.dirty = false;
          this.layer = 0;
          this.leftWeight = 0;
          this.layerWeight = 0;
          this.blendWeight = 0;
        };
        return BlendState;
      })();
      dragonBones.BlendState = BlendState;
    })(dragonBones || (dragonBones = {}));
    var dragonBones;
    (function(dragonBones) {
      var TimelineState = (function(_super) {
        __extends(TimelineState, _super);
        function TimelineState() {
          return null !== _super && _super.apply(this, arguments) || this;
        }
        TimelineState.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;
        };
        TimelineState.prototype._setCurrentTime = function(passedTime) {
          var prevState = this.playState;
          var prevPlayTimes = this.currentPlayTimes;
          var prevTime = 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 playTimes = this._animationState.playTimes;
            var totalTime = playTimes * this._duration;
            passedTime *= this._timeScale;
            0 !== this._timeOffset && (passedTime += this._timeOffset * this._animationData.duration);
            if (playTimes > 0 && (passedTime >= totalTime || passedTime <= -totalTime)) {
              this.playState <= 0 && 3 === this._animationState._playheadState && (this.playState = 1);
              this.currentPlayTimes = playTimes;
              this.currentTime = passedTime < 0 ? 0 : this._duration + 1e-6;
            } else {
              0 !== this.playState && 3 === this._animationState._playheadState && (this.playState = 0);
              if (passedTime < 0) {
                passedTime = -passedTime;
                this.currentPlayTimes = Math.floor(passedTime / this._duration);
                this.currentTime = this._duration - passedTime % this._duration;
              } else {
                this.currentPlayTimes = Math.floor(passedTime / this._duration);
                this.currentTime = passedTime % this._duration;
              }
            }
            this.currentTime += this._position;
          } else {
            this.playState = this._actionTimeline.playState;
            this.currentPlayTimes = this._actionTimeline.currentPlayTimes;
            this.currentTime = this._actionTimeline.currentTime;
          }
          if (this.currentPlayTimes === prevPlayTimes && this.currentTime === prevTime) return false;
          (prevState < 0 && this.playState !== prevState || this.playState <= 0 && this.currentPlayTimes !== prevPlayTimes) && (this._frameIndex = -1);
          return true;
        };
        TimelineState.prototype.init = function(armature, animationState, timelineData) {
          this._armature = armature;
          this._animationState = animationState;
          this._timelineData = timelineData;
          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;
          if (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];
          }
        };
        TimelineState.prototype.fadeOut = function() {};
        TimelineState.prototype.update = function(passedTime) {
          if (this._setCurrentTime(passedTime)) {
            if (this._frameCount > 1) {
              var timelineFrameIndex = Math.floor(this.currentTime * this._frameRate);
              var frameIndex = this._frameIndices[this._timelineData.frameIndicesOffset + timelineFrameIndex];
              if (this._frameIndex !== frameIndex) {
                this._frameIndex = frameIndex;
                this._frameOffset = this._animationData.frameOffset + this._timelineArray[this._timelineData.offset + 5 + this._frameIndex];
                this._onArriveAtFrame();
              }
            } else if (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();
          }
        };
        return TimelineState;
      })(dragonBones.BaseObject);
      dragonBones.TimelineState = TimelineState;
      var TweenTimelineState = (function(_super) {
        __extends(TweenTimelineState, _super);
        function TweenTimelineState() {
          return null !== _super && _super.apply(this, arguments) || this;
        }
        TweenTimelineState._getEasingValue = function(tweenType, progress, easing) {
          var value = progress;
          switch (tweenType) {
           case 3:
            value = Math.pow(progress, 2);
            break;

           case 4:
            value = 1 - Math.pow(1 - progress, 2);
            break;

           case 5:
            value = .5 * (1 - Math.cos(progress * Math.PI));
          }
          return (value - progress) * easing + progress;
        };
        TweenTimelineState._getEasingCurveValue = function(progress, samples, count, offset) {
          if (progress <= 0) return 0;
          if (progress >= 1) return 1;
          var segmentCount = count + 1;
          var valueIndex = Math.floor(progress * segmentCount);
          var fromValue = 0 === valueIndex ? 0 : samples[offset + valueIndex - 1];
          var toValue = valueIndex === segmentCount - 1 ? 1e4 : samples[offset + valueIndex];
          return 1e-4 * (fromValue + (toValue - fromValue) * (progress * segmentCount - valueIndex));
        };
        TweenTimelineState.prototype._onClear = function() {
          _super.prototype._onClear.call(this);
          this._tweenType = 0;
          this._curveCount = 0;
          this._framePosition = 0;
          this._frameDurationR = 0;
          this._tweenProgress = 0;
          this._tweenEasing = 0;
        };
        TweenTimelineState.prototype._onArriveAtFrame = function() {
          if (this._frameCount > 1 && (this._frameIndex !== this._frameCount - 1 || 0 === this._animationState.playTimes || this._animationState.currentPlayTimes < this._animationState.playTimes - 1)) {
            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;
            if (this._frameIndex === this._frameCount - 1) this._frameDurationR = 1 / (this._animationData.duration - this._framePosition); else {
              var nextFrameOffset = this._animationData.frameOffset + this._timelineArray[this._timelineData.offset + 5 + this._frameIndex + 1];
              var frameDuration = this._frameArray[nextFrameOffset] * this._frameRateR - this._framePosition;
              this._frameDurationR = frameDuration > 0 ? 1 / frameDuration : 0;
            }
          } else this._tweenState = 1;
        };
        TweenTimelineState.prototype._onUpdateFrame = function() {
          if (2 === this._tweenState) {
            this._tweenProgress = (this.currentTime - this._framePosition) * this._frameDurationR;
            2 === this._tweenType ? this._tweenProgress = TweenTimelineState._getEasingCurveValue(this._tweenProgress, this._frameArray, this._curveCount, this._frameOffset + 3) : 1 !== this._tweenType && (this._tweenProgress = TweenTimelineState._getEasingValue(this._tweenType, this._tweenProgress, this._tweenEasing));
          } else this._tweenProgress = 0;
        };
        return TweenTimelineState;
      })(TimelineState);
      dragonBones.TweenTimelineState = TweenTimelineState;
      var BoneTimelineState = (function(_super) {
        __extends(BoneTimelineState, _super);
        function BoneTimelineState() {
          return null !== _super && _super.apply(this, arguments) || this;
        }
        BoneTimelineState.prototype._onClear = function() {
          _super.prototype._onClear.call(this);
          this.bone = null;
          this.bonePose = null;
        };
        BoneTimelineState.prototype.blend = function(state) {
          var blendWeight = this.bone._blendState.blendWeight;
          var animationPose = this.bone.animationPose;
          var result = this.bonePose.result;
          if (2 === state) {
            animationPose.x += result.x * blendWeight;
            animationPose.y += result.y * blendWeight;
            animationPose.rotation += result.rotation * blendWeight;
            animationPose.skew += result.skew * blendWeight;
            animationPose.scaleX += (result.scaleX - 1) * blendWeight;
            animationPose.scaleY += (result.scaleY - 1) * blendWeight;
          } else if (1 !== blendWeight) {
            animationPose.x = result.x * blendWeight;
            animationPose.y = result.y * blendWeight;
            animationPose.rotation = result.rotation * blendWeight;
            animationPose.skew = result.skew * blendWeight;
            animationPose.scaleX = (result.scaleX - 1) * blendWeight + 1;
            animationPose.scaleY = (result.scaleY - 1) * blendWeight + 1;
          } else {
            animationPose.x = result.x;
            animationPose.y = result.y;
            animationPose.rotation = result.rotation;
            animationPose.skew = result.skew;
            animationPose.scaleX = result.scaleX;
            animationPose.scaleY = result.scaleY;
          }
          0 === this._animationState._fadeState && 0 === this._animationState._subFadeState || (this.bone._transformDirty = true);
        };
        return BoneTimelineState;
      })(TweenTimelineState);
      dragonBones.BoneTimelineState = BoneTimelineState;
      var SlotTimelineState = (function(_super) {
        __extends(SlotTimelineState, _super);
        function SlotTimelineState() {
          return null !== _super && _super.apply(this, arguments) || this;
        }
        SlotTimelineState.prototype._onClear = function() {
          _super.prototype._onClear.call(this);
          this.slot = null;
        };
        return SlotTimelineState;
      })(TweenTimelineState);
      dragonBones.SlotTimelineState = SlotTimelineState;
      var ConstraintTimelineState = (function(_super) {
        __extends(ConstraintTimelineState, _super);
        function ConstraintTimelineState() {
          return null !== _super && _super.apply(this, arguments) || this;
        }
        ConstraintTimelineState.prototype._onClear = function() {
          _super.prototype._onClear.call(this);
          this.constraint = null;
        };
        return ConstraintTimelineState;
      })(TweenTimelineState);
      dragonBones.ConstraintTimelineState = ConstraintTimelineState;
    })(dragonBones || (dragonBones = {}));
    var dragonBones;
    (function(dragonBones) {
      var ActionTimelineState = (function(_super) {
        __extends(ActionTimelineState, _super);
        function ActionTimelineState() {
          return null !== _super && _super.apply(this, arguments) || this;
        }
        ActionTimelineState.toString = function() {
          return "[class dragonBones.ActionTimelineState]";
        };
        ActionTimelineState.prototype._onCrossFrame = function(frameIndex) {
          var eventDispatcher = this._armature.eventDispatcher;
          if (this._animationState.actionEnabled) {
            var frameOffset = this._animationData.frameOffset + this._timelineArray[this._timelineData.offset + 5 + frameIndex];
            var actionCount = this._frameArray[frameOffset + 1];
            var actions = this._animationData.parent.actions;
            for (var i = 0; i < actionCount; ++i) {
              var actionIndex = this._frameArray[frameOffset + 2 + i];
              var action = actions[actionIndex];
              if (0 === action.type) {
                var eventObject = dragonBones.BaseObject.borrowObject(dragonBones.EventObject);
                eventObject.time = this._frameArray[frameOffset] / this._frameRate;
                eventObject.animationState = this._animationState;
                dragonBones.EventObject.actionDataToInstance(action, eventObject, this._armature);
                this._armature._bufferAction(eventObject, true);
              } else {
                var eventType = 10 === action.type ? dragonBones.EventObject.FRAME_EVENT : dragonBones.EventObject.SOUND_EVENT;
                if (11 === action.type || eventDispatcher.hasDBEventListener(eventType)) {
                  var eventObject = dragonBones.BaseObject.borrowObject(dragonBones.EventObject);
                  eventObject.time = this._frameArray[frameOffset] / this._frameRate;
                  eventObject.animationState = this._animationState;
                  dragonBones.EventObject.actionDataToInstance(action, eventObject, this._armature);
                  this._armature._dragonBones.bufferEvent(eventObject);
                }
              }
            }
          }
        };
        ActionTimelineState.prototype._onArriveAtFrame = function() {};
        ActionTimelineState.prototype._onUpdateFrame = function() {};
        ActionTimelineState.prototype.update = function(passedTime) {
          var prevState = this.playState;
          var prevPlayTimes = this.currentPlayTimes;
          var prevTime = this.currentTime;
          if (this._setCurrentTime(passedTime)) {
            var eventDispatcher = this._armature.eventDispatcher;
            if (prevState < 0) {
              if (this.playState === prevState) return;
              this._animationState.displayControl && this._animationState.resetToPose && this._armature._sortZOrder(null, 0);
              prevPlayTimes = this.currentPlayTimes;
              if (eventDispatcher.hasDBEventListener(dragonBones.EventObject.START)) {
                var eventObject = dragonBones.BaseObject.borrowObject(dragonBones.EventObject);
                eventObject.type = dragonBones.EventObject.START;
                eventObject.armature = this._armature;
                eventObject.animationState = this._animationState;
                this._armature._dragonBones.bufferEvent(eventObject);
              }
            }
            var isReverse = this._animationState.timeScale < 0;
            var loopCompleteEvent = null;
            var completeEvent = null;
            if (this.currentPlayTimes !== prevPlayTimes) {
              if (eventDispatcher.hasDBEventListener(dragonBones.EventObject.LOOP_COMPLETE)) {
                loopCompleteEvent = dragonBones.BaseObject.borrowObject(dragonBones.EventObject);
                loopCompleteEvent.type = dragonBones.EventObject.LOOP_COMPLETE;
                loopCompleteEvent.armature = this._armature;
                loopCompleteEvent.animationState = this._animationState;
              }
              if (this.playState > 0 && eventDispatcher.hasDBEventListener(dragonBones.EventObject.COMPLETE)) {
                completeEvent = dragonBones.BaseObject.borrowObject(dragonBones.EventObject);
                completeEvent.type = dragonBones.EventObject.COMPLETE;
                completeEvent.armature = this._armature;
                completeEvent.animationState = this._animationState;
              }
            }
            if (this._frameCount > 1) {
              var timelineData = this._timelineData;
              var timelineFrameIndex = Math.floor(this.currentTime * this._frameRate);
              var frameIndex = this._frameIndices[timelineData.frameIndicesOffset + timelineFrameIndex];
              if (this._frameIndex !== frameIndex) {
                var crossedFrameIndex = this._frameIndex;
                this._frameIndex = frameIndex;
                if (null !== this._timelineArray) {
                  this._frameOffset = this._animationData.frameOffset + this._timelineArray[timelineData.offset + 5 + this._frameIndex];
                  if (isReverse) {
                    if (crossedFrameIndex < 0) {
                      var prevFrameIndex = Math.floor(prevTime * this._frameRate);
                      crossedFrameIndex = this._frameIndices[timelineData.frameIndicesOffset + prevFrameIndex];
                      this.currentPlayTimes === prevPlayTimes && crossedFrameIndex === frameIndex && (crossedFrameIndex = -1);
                    }
                    while (crossedFrameIndex >= 0) {
                      var frameOffset = this._animationData.frameOffset + this._timelineArray[timelineData.offset + 5 + crossedFrameIndex];
                      var framePosition = this._frameArray[frameOffset] / this._frameRate;
                      this._position <= framePosition && framePosition <= this._position + this._duration && this._onCrossFrame(crossedFrameIndex);
                      if (null !== loopCompleteEvent && 0 === crossedFrameIndex) {
                        this._armature._dragonBones.bufferEvent(loopCompleteEvent);
                        loopCompleteEvent = null;
                      }
                      crossedFrameIndex > 0 ? crossedFrameIndex-- : crossedFrameIndex = this._frameCount - 1;
                      if (crossedFrameIndex === frameIndex) break;
                    }
                  } else {
                    if (crossedFrameIndex < 0) {
                      var prevFrameIndex = Math.floor(prevTime * this._frameRate);
                      crossedFrameIndex = this._frameIndices[timelineData.frameIndicesOffset + prevFrameIndex];
                      var frameOffset = this._animationData.frameOffset + this._timelineArray[timelineData.offset + 5 + crossedFrameIndex];
                      var framePosition = this._frameArray[frameOffset] / this._frameRate;
                      this.currentPlayTimes === prevPlayTimes && (prevTime <= framePosition ? crossedFrameIndex > 0 ? crossedFrameIndex-- : crossedFrameIndex = this._frameCount - 1 : crossedFrameIndex === frameIndex && (crossedFrameIndex = -1));
                    }
                    while (crossedFrameIndex >= 0) {
                      crossedFrameIndex < this._frameCount - 1 ? crossedFrameIndex++ : crossedFrameIndex = 0;
                      var frameOffset = this._animationData.frameOffset + this._timelineArray[timelineData.offset + 5 + crossedFrameIndex];
                      var framePosition = this._frameArray[frameOffset] / this._frameRate;
                      this._position <= framePosition && framePosition <= this._position + this._duration && this._onCrossFrame(crossedFrameIndex);
                      if (null !== loopCompleteEvent && 0 === crossedFrameIndex) {
                        this._armature._dragonBones.bufferEvent(loopCompleteEvent);
                        loopCompleteEvent = null;
                      }
                      if (crossedFrameIndex === frameIndex) break;
                    }
                  }
                }
              }
            } else if (this._frameIndex < 0) {
              this._frameIndex = 0;
              if (null !== this._timelineData) {
                this._frameOffset = this._animationData.frameOffset + this._timelineArray[this._timelineData.offset + 5];
                var framePosition = this._frameArray[this._frameOffset] / this._frameRate;
                if (this.currentPlayTimes === prevPlayTimes) prevTime <= framePosition && this._onCrossFrame(this._frameIndex); else if (this._position <= framePosition) {
                  if (!isReverse && null !== loopCompleteEvent) {
                    this._armature._dragonBones.bufferEvent(loopCompleteEvent);
                    loopCompleteEvent = null;
                  }
                  this._onCrossFrame(this._frameIndex);
                }
              }
            }
            null !== loopCompleteEvent && this._armature._dragonBones.bufferEvent(loopCompleteEvent);
            null !== completeEvent && this._armature._dragonBones.bufferEvent(completeEvent);
          }
        };
        ActionTimelineState.prototype.setCurrentTime = function(value) {
          this._setCurrentTime(value);
          this._frameIndex = -1;
        };
        return ActionTimelineState;
      })(dragonBones.TimelineState);
      dragonBones.ActionTimelineState = ActionTimelineState;
      var ZOrderTimelineState = (function(_super) {
        __extends(ZOrderTimelineState, _super);
        function ZOrderTimelineState() {
          return null !== _super && _super.apply(this, arguments) || this;
        }
        ZOrderTimelineState.toString = function() {
          return "[class dragonBones.ZOrderTimelineState]";
        };
        ZOrderTimelineState.prototype._onArriveAtFrame = function() {
          if (this.playState >= 0) {
            var count = this._frameArray[this._frameOffset + 1];
            count > 0 ? this._armature._sortZOrder(this._frameArray, this._frameOffset + 2) : this._armature._sortZOrder(null, 0);
          }
        };
        ZOrderTimelineState.prototype._onUpdateFrame = function() {};
        return ZOrderTimelineState;
      })(dragonBones.TimelineState);
      dragonBones.ZOrderTimelineState = ZOrderTimelineState;
      var BoneAllTimelineState = (function(_super) {
        __extends(BoneAllTimelineState, _super);
        function BoneAllTimelineState() {
          return null !== _super && _super.apply(this, arguments) || this;
        }
        BoneAllTimelineState.toString = function() {
          return "[class dragonBones.BoneAllTimelineState]";
        };
        BoneAllTimelineState.prototype._onArriveAtFrame = function() {
          _super.prototype._onArriveAtFrame.call(this);
          if (null !== this._timelineData) {
            var valueOffset = this._animationData.frameFloatOffset + this._frameValueOffset + 6 * this._frameIndex;
            var scale = this._armature._armatureData.scale;
            var frameFloatArray = this._frameFloatArray;
            var current = this.bonePose.current;
            var delta = this.bonePose.delta;
            current.x = frameFloatArray[valueOffset++] * scale;
            current.y = frameFloatArray[valueOffset++] * scale;
            current.rotation = frameFloatArray[valueOffset++];
            current.skew = frameFloatArray[valueOffset++];
            current.scaleX = frameFloatArray[valueOffset++];
            current.scaleY = frameFloatArray[valueOffset++];
            if (2 === this._tweenState) {
              this._frameIndex === this._frameCount - 1 && (valueOffset = this._animationData.frameFloatOffset + this._frameValueOffset);
              delta.x = frameFloatArray[valueOffset++] * scale - current.x;
              delta.y = frameFloatArray[valueOffset++] * scale - current.y;
              delta.rotation = frameFloatArray[valueOffset++] - current.rotation;
              delta.skew = frameFloatArray[valueOffset++] - current.skew;
              delta.scaleX = frameFloatArray[valueOffset++] - current.scaleX;
              delta.scaleY = frameFloatArray[valueOffset++] - current.scaleY;
            } else {
              delta.x = 0;
              delta.y = 0;
              delta.rotation = 0;
              delta.skew = 0;
              delta.scaleX = 0;
              delta.scaleY = 0;
            }
          } else {
            var current = this.bonePose.current;
            var delta = this.bonePose.delta;
            current.x = 0;
            current.y = 0;
            current.rotation = 0;
            current.skew = 0;
            current.scaleX = 1;
            current.scaleY = 1;
            delta.x = 0;
            delta.y = 0;
            delta.rotation = 0;
            delta.skew = 0;
            delta.scaleX = 0;
            delta.scaleY = 0;
          }
        };
        BoneAllTimelineState.prototype._onUpdateFrame = function() {
          _super.prototype._onUpdateFrame.call(this);
          var current = this.bonePose.current;
          var delta = this.bonePose.delta;
          var result = this.bonePose.result;
          this.bone._transformDirty = true;
          2 !== this._tweenState && (this._tweenState = 0);
          result.x = current.x + delta.x * this._tweenProgress;
          result.y = current.y + delta.y * this._tweenProgress;
          result.rotation = current.rotation + delta.rotation * this._tweenProgress;
          result.skew = current.skew + delta.skew * this._tweenProgress;
          result.scaleX = current.scaleX + delta.scaleX * this._tweenProgress;
          result.scaleY = current.scaleY + delta.scaleY * this._tweenProgress;
        };
        BoneAllTimelineState.prototype.fadeOut = function() {
          var result = this.bonePose.result;
          result.rotation = dragonBones.Transform.normalizeRadian(result.rotation);
          result.skew = dragonBones.Transform.normalizeRadian(result.skew);
        };
        return BoneAllTimelineState;
      })(dragonBones.BoneTimelineState);
      dragonBones.BoneAllTimelineState = BoneAllTimelineState;
      var BoneTranslateTimelineState = (function(_super) {
        __extends(BoneTranslateTimelineState, _super);
        function BoneTranslateTimelineState() {
          return null !== _super && _super.apply(this, arguments) || this;
        }
        BoneTranslateTimelineState.toString = function() {
          return "[class dragonBones.BoneTranslateTimelineState]";
        };
        BoneTranslateTimelineState.prototype._onArriveAtFrame = function() {
          _super.prototype._onArriveAtFrame.call(this);
          if (null !== this._timelineData) {
            var valueOffset = this._animationData.frameFloatOffset + this._frameValueOffset + 2 * this._frameIndex;
            var scale = this._armature._armatureData.scale;
            var frameFloatArray = this._frameFloatArray;
            var current = this.bonePose.current;
            var delta = this.bonePose.delta;
            current.x = frameFloatArray[valueOffset++] * scale;
            current.y = frameFloatArray[valueOffset++] * scale;
            if (2 === this._tweenState) {
              this._frameIndex === this._frameCount - 1 && (valueOffset = this._animationData.frameFloatOffset + this._frameValueOffset);
              delta.x = frameFloatArray[valueOffset++] * scale - current.x;
              delta.y = frameFloatArray[valueOffset++] * scale - current.y;
            } else {
              delta.x = 0;
              delta.y = 0;
            }
          } else {
            var current = this.bonePose.current;
            var delta = this.bonePose.delta;
            current.x = 0;
            current.y = 0;
            delta.x = 0;
            delta.y = 0;
          }
        };
        BoneTranslateTimelineState.prototype._onUpdateFrame = function() {
          _super.prototype._onUpdateFrame.call(this);
          var current = this.bonePose.current;
          var delta = this.bonePose.delta;
          var result = this.bonePose.result;
          this.bone._transformDirty = true;
          2 !== this._tweenState && (this._tweenState = 0);
          result.x = current.x + delta.x * this._tweenProgress;
          result.y = current.y + delta.y * this._tweenProgress;
        };
        return BoneTranslateTimelineState;
      })(dragonBones.BoneTimelineState);
      dragonBones.BoneTranslateTimelineState = BoneTranslateTimelineState;
      var BoneRotateTimelineState = (function(_super) {
        __extends(BoneRotateTimelineState, _super);
        function BoneRotateTimelineState() {
          return null !== _super && _super.apply(this, arguments) || this;
        }
        BoneRotateTimelineState.toString = function() {
          return "[class dragonBones.BoneRotateTimelineState]";
        };
        BoneRotateTimelineState.prototype._onArriveAtFrame = function() {
          _super.prototype._onArriveAtFrame.call(this);
          if (null !== this._timelineData) {
            var valueOffset = this._animationData.frameFloatOffset + this._frameValueOffset + 2 * this._frameIndex;
            var frameFloatArray = this._frameFloatArray;
            var current = this.bonePose.current;
            var delta = this.bonePose.delta;
            current.rotation = frameFloatArray[valueOffset++];
            current.skew = frameFloatArray[valueOffset++];
            if (2 === this._tweenState) {
              if (this._frameIndex === this._frameCount - 1) {
                valueOffset = this._animationData.frameFloatOffset + this._frameValueOffset;
                delta.rotation = dragonBones.Transform.normalizeRadian(frameFloatArray[valueOffset++] - current.rotation);
              } else delta.rotation = frameFloatArray[valueOffset++] - current.rotation;
              delta.skew = frameFloatArray[valueOffset++] - current.skew;
            } else {
              delta.rotation = 0;
              delta.skew = 0;
            }
          } else {
            var current = this.bonePose.current;
            var delta = this.bonePose.delta;
            current.rotation = 0;
            current.skew = 0;
            delta.rotation = 0;
            delta.skew = 0;
          }
        };
        BoneRotateTimelineState.prototype._onUpdateFrame = function() {
          _super.prototype._onUpdateFrame.call(this);
          var current = this.bonePose.current;
          var delta = this.bonePose.delta;
          var result = this.bonePose.result;
          this.bone._transformDirty = true;
          2 !== this._tweenState && (this._tweenState = 0);
          result.rotation = current.rotation + delta.rotation * this._tweenProgress;
          result.skew = current.skew + delta.skew * this._tweenProgress;
        };
        BoneRotateTimelineState.prototype.fadeOut = function() {
          var result = this.bonePose.result;
          result.rotation = dragonBones.Transform.normalizeRadian(result.rotation);
          result.skew = dragonBones.Transform.normalizeRadian(result.skew);
        };
        return BoneRotateTimelineState;
      })(dragonBones.BoneTimelineState);
      dragonBones.BoneRotateTimelineState = BoneRotateTimelineState;
      var BoneScaleTimelineState = (function(_super) {
        __extends(BoneScaleTimelineState, _super);
        function BoneScaleTimelineState() {
          return null !== _super && _super.apply(this, arguments) || this;
        }
        BoneScaleTimelineState.toString = function() {
          return "[class dragonBones.BoneScaleTimelineState]";
        };
        BoneScaleTimelineState.prototype._onArriveAtFrame = function() {
          _super.prototype._onArriveAtFrame.call(this);
          if (null !== this._timelineData) {
            var valueOffset = this._animationData.frameFloatOffset + this._frameValueOffset + 2 * this._frameIndex;
            var frameFloatArray = this._frameFloatArray;
            var current = this.bonePose.current;
            var delta = this.bonePose.delta;
            current.scaleX = frameFloatArray[valueOffset++];
            current.scaleY = frameFloatArray[valueOffset++];
            if (2 === this._tweenState) {
              this._frameIndex === this._frameCount - 1 && (valueOffset = this._animationData.frameFloatOffset + this._frameValueOffset);
              delta.scaleX = frameFloatArray[valueOffset++] - current.scaleX;
              delta.scaleY = frameFloatArray[valueOffset++] - current.scaleY;
            } else {
              delta.scaleX = 0;
              delta.scaleY = 0;
            }
          } else {
            var current = this.bonePose.current;
            var delta = this.bonePose.delta;
            current.scaleX = 1;
            current.scaleY = 1;
            delta.scaleX = 0;
            delta.scaleY = 0;
          }
        };
        BoneScaleTimelineState.prototype._onUpdateFrame = function() {
          _super.prototype._onUpdateFrame.call(this);
          var current = this.bonePose.current;
          var delta = this.bonePose.delta;
          var result = this.bonePose.result;
          this.bone._transformDirty = true;
          2 !== this._tweenState && (this._tweenState = 0);
          result.scaleX = current.scaleX + delta.scaleX * this._tweenProgress;
          result.scaleY = current.scaleY + delta.scaleY * this._tweenProgress;
        };
        return BoneScaleTimelineState;
      })(dragonBones.BoneTimelineState);
      dragonBones.BoneScaleTimelineState = BoneScaleTimelineState;
      var SurfaceTimelineState = (function(_super) {
        __extends(SurfaceTimelineState, _super);
        function SurfaceTimelineState() {
          var _this = null !== _super && _super.apply(this, arguments) || this;
          _this._current = [];
          _this._delta = [];
          _this._result = [];
          return _this;
        }
        SurfaceTimelineState.toString = function() {
          return "[class dragonBones.SurfaceTimelineState]";
        };
        SurfaceTimelineState.prototype._onClear = function() {
          _super.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;
        };
        SurfaceTimelineState.prototype._onArriveAtFrame = function() {
          _super.prototype._onArriveAtFrame.call(this);
          if (null !== this._timelineData) {
            var valueOffset = this._animationData.frameFloatOffset + this._frameValueOffset + this._frameIndex * this._valueCount;
            var scale = this._armature._armatureData.scale;
            var frameFloatArray = this._frameFloatArray;
            if (2 === this._tweenState) {
              var nextValueOffset = valueOffset + this._valueCount;
              this._frameIndex === this._frameCount - 1 && (nextValueOffset = this._animationData.frameFloatOffset + this._frameValueOffset);
              for (var i = 0; i < this._valueCount; ++i) this._delta[i] = frameFloatArray[nextValueOffset + i] * scale - (this._current[i] = frameFloatArray[valueOffset + i] * scale);
            } else for (var i = 0; i < this._valueCount; ++i) this._current[i] = frameFloatArray[valueOffset + i] * scale;
          } else for (var i = 0; i < this._valueCount; ++i) this._current[i] = 0;
        };
        SurfaceTimelineState.prototype._onUpdateFrame = function() {
          _super.prototype._onUpdateFrame.call(this);
          this.surface._transformDirty = true;
          2 !== this._tweenState && (this._tweenState = 0);
          for (var i = 0; i < this._valueCount; ++i) this._result[i] = this._current[i] + this._delta[i] * this._tweenProgress;
        };
        SurfaceTimelineState.prototype.init = function(armature, animationState, timelineData) {
          _super.prototype.init.call(this, armature, animationState, timelineData);
          if (null !== this._timelineData) {
            var frameIntOffset = this._animationData.frameIntOffset + this._timelineArray[this._timelineData.offset + 3];
            this._deformCount = this._frameIntArray[frameIntOffset + 1];
            this._valueCount = this._frameIntArray[frameIntOffset + 2];
            this._valueOffset = this._frameIntArray[frameIntOffset + 3];
            this._frameFloatOffset = this._frameIntArray[frameIntOffset + 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 i = 0; i < this._valueCount; ++i) this._delta[i] = 0;
        };
        SurfaceTimelineState.prototype.blend = function(state) {
          var blendWeight = this.surface._blendState.blendWeight;
          var result = this.surface._deformVertices;
          for (var i = 0; i < this._deformCount; ++i) {
            var value = 0;
            value = i < this._valueOffset ? this._frameFloatArray[this._frameFloatOffset + i] : i < this._valueOffset + this._valueCount ? this._result[i - this._valueOffset] : this._frameFloatArray[this._frameFloatOffset + i - this._valueCount];
            2 === state ? result[i] += value * blendWeight : result[i] = 1 !== blendWeight ? value * blendWeight : value;
          }
          0 === this._animationState._fadeState && 0 === this._animationState._subFadeState || (this.surface._transformDirty = true);
        };
        return SurfaceTimelineState;
      })(dragonBones.TweenTimelineState);
      dragonBones.SurfaceTimelineState = SurfaceTimelineState;
      var SlotDislayTimelineState = (function(_super) {
        __extends(SlotDislayTimelineState, _super);
        function SlotDislayTimelineState() {
          return null !== _super && _super.apply(this, arguments) || this;
        }
        SlotDislayTimelineState.toString = function() {
          return "[class dragonBones.SlotDislayTimelineState]";
        };
        SlotDislayTimelineState.prototype._onArriveAtFrame = function() {
          if (this.playState >= 0) {
            var displayIndex = null !== this._timelineData ? this._frameArray[this._frameOffset + 1] : this.slot._slotData.displayIndex;
            this.slot.displayIndex !== displayIndex && this.slot._setDisplayIndex(displayIndex, true);
          }
        };
        return SlotDislayTimelineState;
      })(dragonBones.SlotTimelineState);
      dragonBones.SlotDislayTimelineState = SlotDislayTimelineState;
      var SlotColorTimelineState = (function(_super) {
        __extends(SlotColorTimelineState, _super);
        function SlotColorTimelineState() {
          var _this = null !== _super && _super.apply(this, arguments) || this;
          _this._current = [ 0, 0, 0, 0, 0, 0, 0, 0 ];
          _this._delta = [ 0, 0, 0, 0, 0, 0, 0, 0 ];
          _this._result = [ 0, 0, 0, 0, 0, 0, 0, 0 ];
          return _this;
        }
        SlotColorTimelineState.toString = function() {
          return "[class dragonBones.SlotColorTimelineState]";
        };
        SlotColorTimelineState.prototype._onClear = function() {
          _super.prototype._onClear.call(this);
          this._dirty = false;
        };
        SlotColorTimelineState.prototype._onArriveAtFrame = function() {
          _super.prototype._onArriveAtFrame.call(this);
          if (null !== this._timelineData) {
            var intArray = this._dragonBonesData.intArray;
            var frameIntArray = this._frameIntArray;
            var valueOffset = this._animationData.frameIntOffset + this._frameValueOffset + 1 * this._frameIndex;
            var colorOffset = frameIntArray[valueOffset];
            colorOffset < 0 && (colorOffset += 65536);
            this._current[0] = intArray[colorOffset++];
            this._current[1] = intArray[colorOffset++];
            this._current[2] = intArray[colorOffset++];
            this._current[3] = intArray[colorOffset++];
            this._current[4] = intArray[colorOffset++];
            this._current[5] = intArray[colorOffset++];
            this._current[6] = intArray[colorOffset++];
            this._current[7] = intArray[colorOffset++];
            if (2 === this._tweenState) {
              colorOffset = this._frameIndex === this._frameCount - 1 ? frameIntArray[this._animationData.frameIntOffset + this._frameValueOffset] : frameIntArray[valueOffset + 1];
              colorOffset < 0 && (colorOffset += 65536);
              this._delta[0] = intArray[colorOffset++] - this._current[0];
              this._delta[1] = intArray[colorOffset++] - this._current[1];
              this._delta[2] = intArray[colorOffset++] - this._current[2];
              this._delta[3] = intArray[colorOffset++] - this._current[3];
              this._delta[4] = intArray[colorOffset++] - this._current[4];
              this._delta[5] = intArray[colorOffset++] - this._current[5];
              this._delta[6] = intArray[colorOffset++] - this._current[6];
              this._delta[7] = intArray[colorOffset++] - this._current[7];
            }
          } else {
            var color = this.slot._slotData.color;
            this._current[0] = 100 * color.alphaMultiplier;
            this._current[1] = 100 * color.redMultiplier;
            this._current[2] = 100 * color.greenMultiplier;
            this._current[3] = 100 * color.blueMultiplier;
            this._current[4] = color.alphaOffset;
            this._current[5] = color.redOffset;
            this._current[6] = color.greenOffset;
            this._current[7] = color.blueOffset;
          }
        };
        SlotColorTimelineState.prototype._onUpdateFrame = function() {
          _super.prototype._onUpdateFrame.call(this);
          this._dirty = true;
          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;
        };
        SlotColorTimelineState.prototype.fadeOut = function() {
          this._tweenState = 0;
          this._dirty = false;
        };
        SlotColorTimelineState.prototype.update = function(passedTime) {
          _super.prototype.update.call(this, passedTime);
          if (0 !== this._tweenState || this._dirty) {
            var result = this.slot._colorTransform;
            if (0 !== this._animationState._fadeState || 0 !== this._animationState._subFadeState) {
              if (result.alphaMultiplier !== this._result[0] || result.redMultiplier !== this._result[1] || result.greenMultiplier !== this._result[2] || result.blueMultiplier !== this._result[3] || result.alphaOffset !== this._result[4] || result.redOffset !== this._result[5] || result.greenOffset !== this._result[6] || result.blueOffset !== this._result[7]) {
                var fadeProgress = Math.pow(this._animationState._fadeProgress, 4);
                result.alphaMultiplier += (this._result[0] - result.alphaMultiplier) * fadeProgress;
                result.redMultiplier += (this._result[1] - result.redMultiplier) * fadeProgress;
                result.greenMultiplier += (this._result[2] - result.greenMultiplier) * fadeProgress;
                result.blueMultiplier += (this._result[3] - result.blueMultiplier) * fadeProgress;
                result.alphaOffset += (this._result[4] - result.alphaOffset) * fadeProgress;
                result.redOffset += (this._result[5] - result.redOffset) * fadeProgress;
                result.greenOffset += (this._result[6] - result.greenOffset) * fadeProgress;
                result.blueOffset += (this._result[7] - result.blueOffset) * fadeProgress;
                this.slot._colorDirty = true;
              }
            } else if (this._dirty) {
              this._dirty = false;
              if (result.alphaMultiplier !== this._result[0] || result.redMultiplier !== this._result[1] || result.greenMultiplier !== this._result[2] || result.blueMultiplier !== this._result[3] || result.alphaOffset !== this._result[4] || result.redOffset !== this._result[5] || result.greenOffset !== this._result[6] || result.blueOffset !== this._result[7]) {
                result.alphaMultiplier = this._result[0];
                result.redMultiplier = this._result[1];
                result.greenMultiplier = this._result[2];
                result.blueMultiplier = this._result[3];
                result.alphaOffset = this._result[4];
                result.redOffset = this._result[5];
                result.greenOffset = this._result[6];
                result.blueOffset = this._result[7];
                this.slot._colorDirty = true;
              }
            }
          }
        };
        return SlotColorTimelineState;
      })(dragonBones.SlotTimelineState);
      dragonBones.SlotColorTimelineState = SlotColorTimelineState;
      var DeformTimelineState = (function(_super) {
        __extends(DeformTimelineState, _super);
        function DeformTimelineState() {
          var _this = null !== _super && _super.apply(this, arguments) || this;
          _this._current = [];
          _this._delta = [];
          _this._result = [];
          return _this;
        }
        DeformTimelineState.toString = function() {
          return "[class dragonBones.DeformTimelineState]";
        };
        DeformTimelineState.prototype._onClear = function() {
          _super.prototype._onClear.call(this);
          this.vertexOffset = 0;
          this._dirty = false;
          this._frameFloatOffset = 0;
          this._valueCount = 0;
          this._deformCount = 0;
          this._valueOffset = 0;
          this._current.length = 0;
          this._delta.length = 0;
          this._result.length = 0;
        };
        DeformTimelineState.prototype._onArriveAtFrame = function() {
          _super.prototype._onArriveAtFrame.call(this);
          if (null !== this._timelineData) {
            var valueOffset = this._animationData.frameFloatOffset + this._frameValueOffset + this._frameIndex * this._valueCount;
            var scale = this._armature._armatureData.scale;
            var frameFloatArray = this._frameFloatArray;
            if (2 === this._tweenState) {
              var nextValueOffset = valueOffset + this._valueCount;
              this._frameIndex === this._frameCount - 1 && (nextValueOffset = this._animationData.frameFloatOffset + this._frameValueOffset);
              for (var i = 0; i < this._valueCount; ++i) this._delta[i] = frameFloatArray[nextValueOffset + i] * scale - (this._current[i] = frameFloatArray[valueOffset + i] * scale);
            } else for (var i = 0; i < this._valueCount; ++i) this._current[i] = frameFloatArray[valueOffset + i] * scale;
          } else for (var i = 0; i < this._valueCount; ++i) this._current[i] = 0;
        };
        DeformTimelineState.prototype._onUpdateFrame = function() {
          _super.prototype._onUpdateFrame.call(this);
          this._dirty = true;
          2 !== this._tweenState && (this._tweenState = 0);
          for (var i = 0; i < this._valueCount; ++i) this._result[i] = this._current[i] + this._delta[i] * this._tweenProgress;
        };
        DeformTimelineState.prototype.init = function(armature, animationState, timelineData) {
          _super.prototype.init.call(this, armature, animationState, timelineData);
          if (null !== this._timelineData) {
            var frameIntOffset = this._animationData.frameIntOffset + this._timelineArray[this._timelineData.offset + 3];
            this.vertexOffset = this._frameIntArray[frameIntOffset + 0];
            this.vertexOffset < 0 && (this.vertexOffset += 65536);
            this._deformCount = this._frameIntArray[frameIntOffset + 1];
            this._valueCount = this._frameIntArray[frameIntOffset + 2];
            this._valueOffset = this._frameIntArray[frameIntOffset + 3];
            this._frameFloatOffset = this._frameIntArray[frameIntOffset + 4] + this._animationData.frameFloatOffset;
          } else {
            var deformVertices = this.slot._deformVertices;
            this._deformCount = null !== deformVertices ? deformVertices.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 i = 0; i < this._valueCount; ++i) this._delta[i] = 0;
        };
        DeformTimelineState.prototype.fadeOut = function() {
          this._tweenState = 0;
          this._dirty = false;
        };
        DeformTimelineState.prototype.update = function(passedTime) {
          var deformVertices = this.slot._deformVertices;
          if (null === deformVertices || null === deformVertices.verticesData || deformVertices.verticesData.offset !== this.vertexOffset) return;
          _super.prototype.update.call(this, passedTime);
          if (0 !== this._tweenState || this._dirty) {
            var result = deformVertices.vertices;
            if (0 !== this._animationState._fadeState || 0 !== this._animationState._subFadeState) {
              var fadeProgress = Math.pow(this._animationState._fadeProgress, 2);
              for (var i = 0; i < this._deformCount; ++i) i < this._valueOffset ? result[i] += (this._frameFloatArray[this._frameFloatOffset + i] - result[i]) * fadeProgress : i < this._valueOffset + this._valueCount ? result[i] += (this._result[i - this._valueOffset] - result[i]) * fadeProgress : result[i] += (this._frameFloatArray[this._frameFloatOffset + i - this._valueCount] - result[i]) * fadeProgress;
              deformVertices.verticesDirty = true;
            } else if (this._dirty) {
              this._dirty = false;
              for (var i = 0; i < this._deformCount; ++i) i < this._valueOffset ? result[i] = this._frameFloatArray[this._frameFloatOffset + i] : i < this._valueOffset + this._valueCount ? result[i] = this._result[i - this._valueOffset] : result[i] = this._frameFloatArray[this._frameFloatOffset + i - this._valueCount];
              deformVertices.verticesDirty = true;
            }
          }
        };
        return DeformTimelineState;
      })(dragonBones.SlotTimelineState);
      dragonBones.DeformTimelineState = DeformTimelineState;
      var IKConstraintTimelineState = (function(_super) {
        __extends(IKConstraintTimelineState, _super);
        function IKConstraintTimelineState() {
          return null !== _super && _super.apply(this, arguments) || this;
        }
        IKConstraintTimelineState.toString = function() {
          return "[class dragonBones.IKConstraintTimelineState]";
        };
        IKConstraintTimelineState.prototype._onClear = function() {
          _super.prototype._onClear.call(this);
          this._current = 0;
          this._delta = 0;
        };
        IKConstraintTimelineState.prototype._onArriveAtFrame = function() {
          _super.prototype._onArriveAtFrame.call(this);
          var ikConstraint = this.constraint;
          if (null !== this._timelineData) {
            var valueOffset = this._animationData.frameIntOffset + this._frameValueOffset + 2 * this._frameIndex;
            var frameIntArray = this._frameIntArray;
            var bendPositive = 0 !== frameIntArray[valueOffset++];
            this._current = .01 * frameIntArray[valueOffset++];
            if (2 === this._tweenState) {
              this._frameIndex === this._frameCount - 1 && (valueOffset = this._animationData.frameIntOffset + this._frameValueOffset);
              this._delta = .01 * frameIntArray[valueOffset + 1] - this._current;
            } else this._delta = 0;
            ikConstraint._bendPositive = bendPositive;
          } else {
            var ikConstraintData = ikConstraint._constraintData;
            this._current = ikConstraintData.weight;
            this._delta = 0;
            ikConstraint._bendPositive = ikConstraintData.bendPositive;
          }
          ikConstraint.invalidUpdate();
        };
        IKConstraintTimelineState.prototype._onUpdateFrame = function() {
          _super.prototype._onUpdateFrame.call(this);
          2 !== this._tweenState && (this._tweenState = 0);
          var ikConstraint = this.constraint;
          ikConstraint._weight = this._current + this._delta * this._tweenProgress;
          ikConstraint.invalidUpdate();
        };
        return IKConstraintTimelineState;
      })(dragonBones.ConstraintTimelineState);
      dragonBones.IKConstraintTimelineState = IKConstraintTimelineState;
      var AnimationTimelineState = (function(_super) {
        __extends(AnimationTimelineState, _super);
        function AnimationTimelineState() {
          var _this = null !== _super && _super.apply(this, arguments) || this;
          _this._floats = [ 0, 0, 0, 0, 0, 0 ];
          return _this;
        }
        AnimationTimelineState.toString = function() {
          return "[class dragonBones.AnimationTimelineState]";
        };
        AnimationTimelineState.prototype._onClear = function() {
          _super.prototype._onClear.call(this);
          this.animationState = null;
        };
        AnimationTimelineState.prototype._onArriveAtFrame = function() {
          _super.prototype._onArriveAtFrame.call(this);
          if (null === this._timelineData) return;
          var valueOffset = this._animationData.frameIntOffset + this._frameValueOffset + 2 * this._frameIndex;
          var frameRateR = 1 / this.animationState._animationData.parent.frameRate;
          var frameIntArray = this._frameIntArray;
          this._floats[0] = frameIntArray[valueOffset++] * frameRateR;
          this._floats[3] = .01 * frameIntArray[valueOffset++];
          if (2 === this._tweenState) {
            this._frameIndex === this._frameCount - 1 && (valueOffset = this._animationData.frameIntOffset + this._frameValueOffset);
            this._floats[1] = frameIntArray[valueOffset++] * frameRateR - this._floats[0];
            this._floats[4] = .01 * frameIntArray[valueOffset++] - this._floats[3];
          } else {
            this._floats[1] = 0;
            this._floats[4] = 0;
          }
        };
        AnimationTimelineState.prototype._onUpdateFrame = function() {
          _super.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;
        };
        AnimationTimelineState.prototype.blend = function(state) {
          var animationState = this.animationState;
          var blendWeight = animationState._blendState.blendWeight;
          if (2 === state) {
            animationState.weight += this._floats[5] * blendWeight;
            animationState.currentTime += this._floats[2] * blendWeight;
          } else {
            animationState.weight = this._floats[5] * blendWeight;
            animationState.currentTime = this._floats[2] * blendWeight;
          }
        };
        return AnimationTimelineState;
      })(dragonBones.TweenTimelineState);
      dragonBones.AnimationTimelineState = AnimationTimelineState;
    })(dragonBones || (dragonBones = {}));
    var dragonBones;
    (function(dragonBones) {
      var EventObject = (function(_super) {
        __extends(EventObject, _super);
        function EventObject() {
          return null !== _super && _super.apply(this, arguments) || this;
        }
        EventObject.actionDataToInstance = function(data, instance, armature) {
          0 === data.type ? instance.type = EventObject.FRAME_EVENT : instance.type = 10 === data.type ? EventObject.FRAME_EVENT : EventObject.SOUND_EVENT;
          instance.name = data.name;
          instance.armature = armature;
          instance.actionData = data;
          instance.data = data.data;
          null !== data.bone && (instance.bone = armature.getBone(data.bone.name));
          null !== data.slot && (instance.slot = armature.getSlot(data.slot.name));
        };
        EventObject.toString = function() {
          return "[class dragonBones.EventObject]";
        };
        EventObject.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;
        };
        EventObject.START = "start";
        EventObject.LOOP_COMPLETE = "loopComplete";
        EventObject.COMPLETE = "complete";
        EventObject.FADE_IN = "fadeIn";
        EventObject.FADE_IN_COMPLETE = "fadeInComplete";
        EventObject.FADE_OUT = "fadeOut";
        EventObject.FADE_OUT_COMPLETE = "fadeOutComplete";
        EventObject.FRAME_EVENT = "frameEvent";
        EventObject.SOUND_EVENT = "soundEvent";
        return EventObject;
      })(dragonBones.BaseObject);
      dragonBones.EventObject = EventObject;
    })(dragonBones || (dragonBones = {}));
    var dragonBones;
    (function(dragonBones) {
      var DataParser = (function() {
        function DataParser() {}
        DataParser._getArmatureType = function(value) {
          switch (value.toLowerCase()) {
           case "stage":
            return 2;

           case "armature":
            return 0;

           case "movieclip":
            return 1;

           default:
            return 0;
          }
        };
        DataParser._getBoneType = function(value) {
          switch (value.toLowerCase()) {
           case "bone":
            return 0;

           case "surface":
            return 1;

           default:
            return 0;
          }
        };
        DataParser._getDisplayType = function(value) {
          switch (value.toLowerCase()) {
           case "image":
            return 0;

           case "mesh":
            return 2;

           case "armature":
            return 1;

           case "boundingbox":
            return 3;

           case "path":
            return 4;

           default:
            return 0;
          }
        };
        DataParser._getBoundingBoxType = function(value) {
          switch (value.toLowerCase()) {
           case "rectangle":
            return 0;

           case "ellipse":
            return 1;

           case "polygon":
            return 2;

           default:
            return 0;
          }
        };
        DataParser._getActionType = function(value) {
          switch (value.toLowerCase()) {
           case "play":
            return 0;

           case "frame":
            return 10;

           case "sound":
            return 11;

           default:
            return 0;
          }
        };
        DataParser._getBlendMode = function(value) {
          switch (value.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;
          }
        };
        DataParser._getPositionMode = function(value) {
          switch (value.toLocaleLowerCase()) {
           case "percent":
            return 1;

           case "fixed":
            return 0;

           default:
            return 1;
          }
        };
        DataParser._getSpacingMode = function(value) {
          switch (value.toLocaleLowerCase()) {
           case "length":
            return 0;

           case "percent":
            return 2;

           case "fixed":
            return 1;

           default:
            return 0;
          }
        };
        DataParser._getRotateMode = function(value) {
          switch (value.toLocaleLowerCase()) {
           case "tangent":
            return 0;

           case "chain":
            return 1;

           case "chainscale":
            return 2;

           default:
            return 0;
          }
        };
        DataParser.parseDragonBonesData = function(rawData) {
          console.warn("Deprecated.");
          return rawData instanceof ArrayBuffer ? dragonBones.BinaryDataParser.getInstance().parseDragonBonesData(rawData) : dragonBones.ObjectDataParser.getInstance().parseDragonBonesData(rawData);
        };
        DataParser.parseTextureAtlasData = function(rawData, scale) {
          void 0 === scale && (scale = 1);
          console.warn("\u5df2\u5e9f\u5f03");
          var textureAtlasData = {};
          var subTextureList = rawData[DataParser.SUB_TEXTURE];
          for (var i = 0, len = subTextureList.length; i < len; i++) {
            var subTextureObject = subTextureList[i];
            var subTextureName = subTextureObject[DataParser.NAME];
            var subTextureRegion = new dragonBones.Rectangle();
            var subTextureFrame = null;
            subTextureRegion.x = subTextureObject[DataParser.X] / scale;
            subTextureRegion.y = subTextureObject[DataParser.Y] / scale;
            subTextureRegion.width = subTextureObject[DataParser.WIDTH] / scale;
            subTextureRegion.height = subTextureObject[DataParser.HEIGHT] / scale;
            if (DataParser.FRAME_WIDTH in subTextureObject) {
              subTextureFrame = new dragonBones.Rectangle();
              subTextureFrame.x = subTextureObject[DataParser.FRAME_X] / scale;
              subTextureFrame.y = subTextureObject[DataParser.FRAME_Y] / scale;
              subTextureFrame.width = subTextureObject[DataParser.FRAME_WIDTH] / scale;
              subTextureFrame.height = subTextureObject[DataParser.FRAME_HEIGHT] / scale;
            }
            textureAtlasData[subTextureName] = {
              region: subTextureRegion,
              frame: subTextureFrame,
              rotated: false
            };
          }
          return textureAtlasData;
        };
        DataParser.DATA_VERSION_2_3 = "2.3";
        DataParser.DATA_VERSION_3_0 = "3.0";
        DataParser.DATA_VERSION_4_0 = "4.0";
        DataParser.DATA_VERSION_4_5 = "4.5";
        DataParser.DATA_VERSION_5_0 = "5.0";
        DataParser.DATA_VERSION_5_5 = "5.5";
        DataParser.DATA_VERSION = DataParser.DATA_VERSION_5_5;
        DataParser.DATA_VERSIONS = [ DataParser.DATA_VERSION_4_0, DataParser.DATA_VERSION_4_5, DataParser.DATA_VERSION_5_0, DataParser.DATA_VERSION_5_5 ];
        DataParser.TEXTURE_ATLAS = "textureAtlas";
        DataParser.SUB_TEXTURE = "SubTexture";
        DataParser.FORMAT = "format";
        DataParser.IMAGE_PATH = "imagePath";
        DataParser.WIDTH = "width";
        DataParser.HEIGHT = "height";
        DataParser.ROTATED = "rotated";
        DataParser.FRAME_X = "frameX";
        DataParser.FRAME_Y = "frameY";
        DataParser.FRAME_WIDTH = "frameWidth";
        DataParser.FRAME_HEIGHT = "frameHeight";
        DataParser.DRADON_BONES = "dragonBones";
        DataParser.USER_DATA = "userData";
        DataParser.ARMATURE = "armature";
        DataParser.BONE = "bone";
        DataParser.SURFACE = "surface";
        DataParser.SLOT = "slot";
        DataParser.CONSTRAINT = "constraint";
        DataParser.IK = "ik";
        DataParser.PATH_CONSTRAINT = "path";
        DataParser.SKIN = "skin";
        DataParser.DISPLAY = "display";
        DataParser.ANIMATION = "animation";
        DataParser.Z_ORDER = "zOrder";
        DataParser.FFD = "ffd";
        DataParser.FRAME = "frame";
        DataParser.TRANSLATE_FRAME = "translateFrame";
        DataParser.ROTATE_FRAME = "rotateFrame";
        DataParser.SCALE_FRAME = "scaleFrame";
        DataParser.DISPLAY_FRAME = "displayFrame";
        DataParser.COLOR_FRAME = "colorFrame";
        DataParser.DEFAULT_ACTIONS = "defaultActions";
        DataParser.ACTIONS = "actions";
        DataParser.EVENTS = "events";
        DataParser.INTS = "ints";
        DataParser.FLOATS = "floats";
        DataParser.STRINGS = "strings";
        DataParser.CANVAS = "canvas";
        DataParser.TRANSFORM = "transform";
        DataParser.PIVOT = "pivot";
        DataParser.AABB = "aabb";
        DataParser.COLOR = "color";
        DataParser.VERSION = "version";
        DataParser.COMPATIBLE_VERSION = "compatibleVersion";
        DataParser.FRAME_RATE = "frameRate";
        DataParser.TYPE = "type";
        DataParser.SUB_TYPE = "subType";
        DataParser.NAME = "name";
        DataParser.PARENT = "parent";
        DataParser.TARGET = "target";
        DataParser.STAGE = "stage";
        DataParser.SHARE = "share";
        DataParser.PATH = "path";
        DataParser.LENGTH = "length";
        DataParser.DISPLAY_INDEX = "displayIndex";
        DataParser.BLEND_MODE = "blendMode";
        DataParser.INHERIT_TRANSLATION = "inheritTranslation";
        DataParser.INHERIT_ROTATION = "inheritRotation";
        DataParser.INHERIT_SCALE = "inheritScale";
        DataParser.INHERIT_REFLECTION = "inheritReflection";
        DataParser.INHERIT_ANIMATION = "inheritAnimation";
        DataParser.INHERIT_DEFORM = "inheritDeform";
        DataParser.SEGMENT_X = "segmentX";
        DataParser.SEGMENT_Y = "segmentY";
        DataParser.BEND_POSITIVE = "bendPositive";
        DataParser.CHAIN = "chain";
        DataParser.WEIGHT = "weight";
        DataParser.FADE_IN_TIME = "fadeInTime";
        DataParser.PLAY_TIMES = "playTimes";
        DataParser.SCALE = "scale";
        DataParser.OFFSET = "offset";
        DataParser.POSITION = "position";
        DataParser.DURATION = "duration";
        DataParser.TWEEN_EASING = "tweenEasing";
        DataParser.TWEEN_ROTATE = "tweenRotate";
        DataParser.TWEEN_SCALE = "tweenScale";
        DataParser.CLOCK_WISE = "clockwise";
        DataParser.CURVE = "curve";
        DataParser.SOUND = "sound";
        DataParser.EVENT = "event";
        DataParser.ACTION = "action";
        DataParser.X = "x";
        DataParser.Y = "y";
        DataParser.SKEW_X = "skX";
        DataParser.SKEW_Y = "skY";
        DataParser.SCALE_X = "scX";
        DataParser.SCALE_Y = "scY";
        DataParser.VALUE = "value";
        DataParser.ROTATE = "rotate";
        DataParser.SKEW = "skew";
        DataParser.ALPHA_OFFSET = "aO";
        DataParser.RED_OFFSET = "rO";
        DataParser.GREEN_OFFSET = "gO";
        DataParser.BLUE_OFFSET = "bO";
        DataParser.ALPHA_MULTIPLIER = "aM";
        DataParser.RED_MULTIPLIER = "rM";
        DataParser.GREEN_MULTIPLIER = "gM";
        DataParser.BLUE_MULTIPLIER = "bM";
        DataParser.UVS = "uvs";
        DataParser.VERTICES = "vertices";
        DataParser.TRIANGLES = "triangles";
        DataParser.WEIGHTS = "weights";
        DataParser.SLOT_POSE = "slotPose";
        DataParser.BONE_POSE = "bonePose";
        DataParser.GLUE_WEIGHTS = "glueWeights";
        DataParser.GLUE_MESHES = "glueMeshes";
        DataParser.BONES = "bones";
        DataParser.POSITION_MODE = "positionMode";
        DataParser.SPACING_MODE = "spacingMode";
        DataParser.ROTATE_MODE = "rotateMode";
        DataParser.SPACING = "spacing";
        DataParser.ROTATE_OFFSET = "rotateOffset";
        DataParser.ROTATE_MIX = "rotateMix";
        DataParser.TRANSLATE_MIX = "translateMix";
        DataParser.TARGET_DISPLAY = "targetDisplay";
        DataParser.CLOSED = "closed";
        DataParser.CONSTANT_SPEED = "constantSpeed";
        DataParser.VERTEX_COUNT = "vertexCount";
        DataParser.LENGTHS = "lengths";
        DataParser.GOTO_AND_PLAY = "gotoAndPlay";
        DataParser.DEFAULT_NAME = "default";
        return DataParser;
      })();
      dragonBones.DataParser = DataParser;
    })(dragonBones || (dragonBones = {}));
    var dragonBones;
    (function(dragonBones) {
      var ObjectDataParser = (function(_super) {
        __extends(ObjectDataParser, _super);
        function ObjectDataParser() {
          var _this = null !== _super && _super.apply(this, arguments) || this;
          _this._rawTextureAtlasIndex = 0;
          _this._rawBones = [];
          _this._data = null;
          _this._armature = null;
          _this._bone = null;
          _this._surface = null;
          _this._slot = null;
          _this._skin = null;
          _this._mesh = null;
          _this._animation = null;
          _this._timeline = null;
          _this._rawTextureAtlases = null;
          _this._defaultColorOffset = -1;
          _this._prevClockwise = 0;
          _this._prevRotation = 0;
          _this._helpMatrixA = new dragonBones.Matrix();
          _this._helpMatrixB = new dragonBones.Matrix();
          _this._helpTransform = new dragonBones.Transform();
          _this._helpColorTransform = new dragonBones.ColorTransform();
          _this._helpPoint = new dragonBones.Point();
          _this._helpArray = [];
          _this._intArray = [];
          _this._floatArray = [];
          _this._frameIntArray = [];
          _this._frameFloatArray = [];
          _this._frameArray = [];
          _this._timelineArray = [];
          _this._cacheRawMeshes = [];
          _this._cacheMeshes = [];
          _this._actionFrames = [];
          _this._weightSlotPose = {};
          _this._weightBonePoses = {};
          _this._cacheBones = {};
          _this._slotChildActions = {};
          return _this;
        }
        ObjectDataParser._getBoolean = function(rawData, key, defaultValue) {
          if (key in rawData) {
            var value = rawData[key];
            var type = typeof value;
            if ("boolean" === type) return value;
            if ("string" !== type) return !!value;
            switch (value) {
             case "0":
             case "NaN":
             case "":
             case "false":
             case "null":
             case "undefined":
              return false;

             default:
              return true;
            }
          }
          return defaultValue;
        };
        ObjectDataParser._getNumber = function(rawData, key, defaultValue) {
          if (key in rawData) {
            var value = rawData[key];
            if (null === value || "NaN" === value) return defaultValue;
            return +value || 0;
          }
          return defaultValue;
        };
        ObjectDataParser._getString = function(rawData, key, defaultValue) {
          if (key in rawData) {
            var value = rawData[key];
            var type = typeof value;
            if ("string" === type) {
              if (dragonBones.DragonBones.webAssembly) for (var i = 0, l = value.length; i < l; ++i) if (value.charCodeAt(i) > 255) return encodeURI(value);
              return value;
            }
            return String(value);
          }
          return defaultValue;
        };
        ObjectDataParser.prototype._getCurvePoint = function(x1, y1, x2, y2, x3, y3, x4, y4, t, result) {
          var l_t = 1 - t;
          var powA = l_t * l_t;
          var powB = t * t;
          var kA = l_t * powA;
          var kB = 3 * t * powA;
          var kC = 3 * l_t * powB;
          var kD = t * powB;
          result.x = kA * x1 + kB * x2 + kC * x3 + kD * x4;
          result.y = kA * y1 + kB * y2 + kC * y3 + kD * y4;
        };
        ObjectDataParser.prototype._samplingEasingCurve = function(curve, samples) {
          var curveCount = curve.length;
          var stepIndex = -2;
          for (var i = 0, l = samples.length; i < l; ++i) {
            var t = (i + 1) / (l + 1);
            while ((stepIndex + 6 < curveCount ? curve[stepIndex + 6] : 1) < t) stepIndex += 6;
            var isInCurve = stepIndex >= 0 && stepIndex + 6 < curveCount;
            var x1 = isInCurve ? curve[stepIndex] : 0;
            var y1 = isInCurve ? curve[stepIndex + 1] : 0;
            var x2 = curve[stepIndex + 2];
            var y2 = curve[stepIndex + 3];
            var x3 = curve[stepIndex + 4];
            var y3 = curve[stepIndex + 5];
            var x4 = isInCurve ? curve[stepIndex + 6] : 1;
            var y4 = isInCurve ? curve[stepIndex + 7] : 1;
            var lower = 0;
            var higher = 1;
            while (higher - lower > 1e-4) {
              var percentage = .5 * (higher + lower);
              this._getCurvePoint(x1, y1, x2, y2, x3, y3, x4, y4, percentage, this._helpPoint);
              t - this._helpPoint.x > 0 ? lower = percentage : higher = percentage;
            }
            samples[i] = this._helpPoint.y;
          }
        };
        ObjectDataParser.prototype._parseActionDataInFrame = function(rawData, frameStart, bone, slot) {
          dragonBones.DataParser.EVENT in rawData && this._mergeActionFrame(rawData[dragonBones.DataParser.EVENT], frameStart, 10, bone, slot);
          dragonBones.DataParser.SOUND in rawData && this._mergeActionFrame(rawData[dragonBones.DataParser.SOUND], frameStart, 11, bone, slot);
          dragonBones.DataParser.ACTION in rawData && this._mergeActionFrame(rawData[dragonBones.DataParser.ACTION], frameStart, 0, bone, slot);
          dragonBones.DataParser.EVENTS in rawData && this._mergeActionFrame(rawData[dragonBones.DataParser.EVENTS], frameStart, 10, bone, slot);
          dragonBones.DataParser.ACTIONS in rawData && this._mergeActionFrame(rawData[dragonBones.DataParser.ACTIONS], frameStart, 0, bone, slot);
        };
        ObjectDataParser.prototype._mergeActionFrame = function(rawData, frameStart, type, bone, slot) {
          var actionOffset = dragonBones.DragonBones.webAssembly ? this._armature.actions.size() : this._armature.actions.length;
          var actions = this._parseActionData(rawData, type, bone, slot);
          var frameIndex = 0;
          var frame = null;
          for (var _i = 0, actions_2 = actions; _i < actions_2.length; _i++) {
            var action = actions_2[_i];
            this._armature.addAction(action, false);
          }
          if (0 === this._actionFrames.length) {
            frame = new ActionFrame();
            frame.frameStart = 0;
            this._actionFrames.push(frame);
            frame = null;
          }
          for (var _a = 0, _b = this._actionFrames; _a < _b.length; _a++) {
            var eachFrame = _b[_a];
            if (eachFrame.frameStart === frameStart) {
              frame = eachFrame;
              break;
            }
            if (eachFrame.frameStart > frameStart) break;
            frameIndex++;
          }
          if (null === frame) {
            frame = new ActionFrame();
            frame.frameStart = frameStart;
            this._actionFrames.splice(frameIndex + 1, 0, frame);
          }
          for (var i = 0; i < actions.length; ++i) frame.actions.push(actionOffset + i);
        };
        ObjectDataParser.prototype._parseArmature = function(rawData, scale) {
          var armature = dragonBones.BaseObject.borrowObject(dragonBones.ArmatureData);
          armature.name = ObjectDataParser._getString(rawData, dragonBones.DataParser.NAME, "");
          armature.frameRate = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.FRAME_RATE, this._data.frameRate);
          armature.scale = scale;
          dragonBones.DataParser.TYPE in rawData && "string" === typeof rawData[dragonBones.DataParser.TYPE] ? armature.type = dragonBones.DataParser._getArmatureType(rawData[dragonBones.DataParser.TYPE]) : armature.type = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.TYPE, 0);
          0 === armature.frameRate && (armature.frameRate = 24);
          this._armature = armature;
          if (dragonBones.DataParser.CANVAS in rawData) {
            var rawCanvas = rawData[dragonBones.DataParser.CANVAS];
            var canvas = dragonBones.BaseObject.borrowObject(dragonBones.CanvasData);
            dragonBones.DataParser.COLOR in rawCanvas ? canvas.hasBackground = true : canvas.hasBackground = false;
            canvas.color = ObjectDataParser._getNumber(rawCanvas, dragonBones.DataParser.COLOR, 0);
            canvas.x = ObjectDataParser._getNumber(rawCanvas, dragonBones.DataParser.X, 0) * armature.scale;
            canvas.y = ObjectDataParser._getNumber(rawCanvas, dragonBones.DataParser.Y, 0) * armature.scale;
            canvas.width = ObjectDataParser._getNumber(rawCanvas, dragonBones.DataParser.WIDTH, 0) * armature.scale;
            canvas.height = ObjectDataParser._getNumber(rawCanvas, dragonBones.DataParser.HEIGHT, 0) * armature.scale;
            armature.canvas = canvas;
          }
          if (dragonBones.DataParser.AABB in rawData) {
            var rawAABB = rawData[dragonBones.DataParser.AABB];
            armature.aabb.x = ObjectDataParser._getNumber(rawAABB, dragonBones.DataParser.X, 0) * armature.scale;
            armature.aabb.y = ObjectDataParser._getNumber(rawAABB, dragonBones.DataParser.Y, 0) * armature.scale;
            armature.aabb.width = ObjectDataParser._getNumber(rawAABB, dragonBones.DataParser.WIDTH, 0) * armature.scale;
            armature.aabb.height = ObjectDataParser._getNumber(rawAABB, dragonBones.DataParser.HEIGHT, 0) * armature.scale;
          }
          if (dragonBones.DataParser.BONE in rawData) {
            var rawBones = rawData[dragonBones.DataParser.BONE];
            for (var _i = 0, rawBones_1 = rawBones; _i < rawBones_1.length; _i++) {
              var rawBone = rawBones_1[_i];
              var parentName = ObjectDataParser._getString(rawBone, dragonBones.DataParser.PARENT, "");
              var bone = this._parseBone(rawBone);
              if (parentName.length > 0) {
                var parent_1 = armature.getBone(parentName);
                if (null !== parent_1) bone.parent = parent_1; else {
                  parentName in this._cacheBones || (this._cacheBones[parentName] = []);
                  this._cacheBones[parentName].push(bone);
                }
              }
              if (bone.name in this._cacheBones) {
                for (var _a = 0, _b = this._cacheBones[bone.name]; _a < _b.length; _a++) {
                  var child = _b[_a];
                  child.parent = bone;
                }
                delete this._cacheBones[bone.name];
              }
              armature.addBone(bone);
              this._rawBones.push(bone);
            }
          }
          if (dragonBones.DataParser.IK in rawData) {
            var rawIKS = rawData[dragonBones.DataParser.IK];
            for (var _c = 0, rawIKS_1 = rawIKS; _c < rawIKS_1.length; _c++) {
              var rawIK = rawIKS_1[_c];
              var constraint = this._parseIKConstraint(rawIK);
              constraint && armature.addConstraint(constraint);
            }
          }
          armature.sortBones();
          if (dragonBones.DataParser.SLOT in rawData) {
            var zOrder = 0;
            var rawSlots = rawData[dragonBones.DataParser.SLOT];
            for (var _d = 0, rawSlots_1 = rawSlots; _d < rawSlots_1.length; _d++) {
              var rawSlot = rawSlots_1[_d];
              armature.addSlot(this._parseSlot(rawSlot, zOrder++));
            }
          }
          if (dragonBones.DataParser.SKIN in rawData) {
            var rawSkins = rawData[dragonBones.DataParser.SKIN];
            for (var _e = 0, rawSkins_1 = rawSkins; _e < rawSkins_1.length; _e++) {
              var rawSkin = rawSkins_1[_e];
              armature.addSkin(this._parseSkin(rawSkin));
            }
          }
          if (dragonBones.DataParser.PATH_CONSTRAINT in rawData) {
            var rawPaths = rawData[dragonBones.DataParser.PATH_CONSTRAINT];
            for (var _f = 0, rawPaths_1 = rawPaths; _f < rawPaths_1.length; _f++) {
              var rawPath = rawPaths_1[_f];
              var constraint = this._parsePathConstraint(rawPath);
              constraint && armature.addConstraint(constraint);
            }
          }
          for (var i = 0, l = this._cacheRawMeshes.length; i < l; ++i) {
            var rawMeshData = this._cacheRawMeshes[i];
            if (!(dragonBones.DataParser.GLUE_WEIGHTS in rawMeshData) || !(dragonBones.DataParser.GLUE_MESHES in rawMeshData)) continue;
            this._parseMeshGlue(rawMeshData, this._cacheMeshes[i]);
          }
          for (var i = 0, l = this._cacheRawMeshes.length; i < l; ++i) {
            var rawData_1 = this._cacheRawMeshes[i];
            var shareName = ObjectDataParser._getString(rawData_1, dragonBones.DataParser.SHARE, "");
            if (0 === shareName.length) continue;
            var skinName = ObjectDataParser._getString(rawData_1, dragonBones.DataParser.SKIN, dragonBones.DataParser.DEFAULT_NAME);
            0 === skinName.length && (skinName = dragonBones.DataParser.DEFAULT_NAME);
            var shareMesh = armature.getMesh(skinName, "", shareName);
            if (null === shareMesh) continue;
            var mesh = this._cacheMeshes[i];
            mesh.vertices.shareFrom(shareMesh.vertices);
          }
          if (dragonBones.DataParser.ANIMATION in rawData) {
            var rawAnimations = rawData[dragonBones.DataParser.ANIMATION];
            for (var _g = 0, rawAnimations_1 = rawAnimations; _g < rawAnimations_1.length; _g++) {
              var rawAnimation = rawAnimations_1[_g];
              var animation = this._parseAnimation(rawAnimation);
              armature.addAnimation(animation);
            }
          }
          if (dragonBones.DataParser.DEFAULT_ACTIONS in rawData) {
            var actions = this._parseActionData(rawData[dragonBones.DataParser.DEFAULT_ACTIONS], 0, null, null);
            for (var _h = 0, actions_3 = actions; _h < actions_3.length; _h++) {
              var action = actions_3[_h];
              armature.addAction(action, true);
              if (0 === action.type) {
                var animation = armature.getAnimation(action.name);
                null !== animation && (armature.defaultAnimation = animation);
              }
            }
          }
          if (dragonBones.DataParser.ACTIONS in rawData) {
            var actions = this._parseActionData(rawData[dragonBones.DataParser.ACTIONS], 0, null, null);
            for (var _j = 0, actions_4 = actions; _j < actions_4.length; _j++) {
              var action = actions_4[_j];
              armature.addAction(action, false);
            }
          }
          this._rawBones.length = 0;
          this._cacheRawMeshes.length = 0;
          this._cacheMeshes.length = 0;
          this._armature = null;
          for (var k in this._weightSlotPose) delete this._weightSlotPose[k];
          for (var k in this._weightBonePoses) delete this._weightBonePoses[k];
          for (var k in this._cacheBones) delete this._cacheBones[k];
          for (var k in this._slotChildActions) delete this._slotChildActions[k];
          return armature;
        };
        ObjectDataParser.prototype._parseBone = function(rawData) {
          var type = 0;
          var scale = this._armature.scale;
          type = dragonBones.DataParser.TYPE in rawData && "string" === typeof rawData[dragonBones.DataParser.TYPE] ? dragonBones.DataParser._getBoneType(rawData[dragonBones.DataParser.TYPE]) : ObjectDataParser._getNumber(rawData, dragonBones.DataParser.TYPE, 0);
          if (0 === type) {
            var bone = dragonBones.BaseObject.borrowObject(dragonBones.BoneData);
            bone.inheritTranslation = ObjectDataParser._getBoolean(rawData, dragonBones.DataParser.INHERIT_TRANSLATION, true);
            bone.inheritRotation = ObjectDataParser._getBoolean(rawData, dragonBones.DataParser.INHERIT_ROTATION, true);
            bone.inheritScale = ObjectDataParser._getBoolean(rawData, dragonBones.DataParser.INHERIT_SCALE, true);
            bone.inheritReflection = ObjectDataParser._getBoolean(rawData, dragonBones.DataParser.INHERIT_REFLECTION, true);
            bone.length = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.LENGTH, 0) * scale;
            bone.name = ObjectDataParser._getString(rawData, dragonBones.DataParser.NAME, "");
            dragonBones.DataParser.TRANSFORM in rawData && this._parseTransform(rawData[dragonBones.DataParser.TRANSFORM], bone.transform, scale);
            return bone;
          }
          var surface = dragonBones.BaseObject.borrowObject(dragonBones.SurfaceData);
          surface.name = ObjectDataParser._getString(rawData, dragonBones.DataParser.NAME, "");
          surface.segmentX = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.SEGMENT_X, 0);
          surface.segmentY = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.SEGMENT_Y, 0);
          surface.vertices.length = (surface.segmentX + 1) * (surface.segmentY + 1) * 2;
          if (dragonBones.DataParser.VERTICES in rawData) {
            var rawVertices = rawData[dragonBones.DataParser.VERTICES];
            for (var i = 0, l = surface.vertices.length; i < l; ++i) i < rawVertices.length ? surface.vertices[i] = rawVertices[i] * scale : surface.vertices[i] = 0;
          }
          return surface;
        };
        ObjectDataParser.prototype._parseIKConstraint = function(rawData) {
          var bone = this._armature.getBone(ObjectDataParser._getString(rawData, dragonBones.DataParser.BONE, ""));
          if (null === bone) return null;
          var target = this._armature.getBone(ObjectDataParser._getString(rawData, dragonBones.DataParser.TARGET, ""));
          if (null === target) return null;
          var constraint = dragonBones.BaseObject.borrowObject(dragonBones.IKConstraintData);
          constraint.scaleEnabled = ObjectDataParser._getBoolean(rawData, dragonBones.DataParser.SCALE, false);
          constraint.bendPositive = ObjectDataParser._getBoolean(rawData, dragonBones.DataParser.BEND_POSITIVE, true);
          constraint.weight = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.WEIGHT, 1);
          constraint.name = ObjectDataParser._getString(rawData, dragonBones.DataParser.NAME, "");
          constraint.type = 0;
          constraint.target = target;
          var chain = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.CHAIN, 0);
          if (chain > 0 && null !== bone.parent) {
            constraint.root = bone.parent;
            constraint.bone = bone;
          } else {
            constraint.root = bone;
            constraint.bone = null;
          }
          return constraint;
        };
        ObjectDataParser.prototype._parsePathConstraint = function(rawData) {
          var target = this._armature.getSlot(ObjectDataParser._getString(rawData, dragonBones.DataParser.TARGET, ""));
          if (null === target) return null;
          var defaultSkin = this._armature.defaultSkin;
          if (null === defaultSkin) return null;
          var targetDisplay = defaultSkin.getDisplay(target.name, ObjectDataParser._getString(rawData, dragonBones.DataParser.TARGET_DISPLAY, target.name));
          if (null === targetDisplay || !(targetDisplay instanceof dragonBones.PathDisplayData)) return null;
          var bones = rawData[dragonBones.DataParser.BONES];
          if (null === bones || 0 === bones.length) return null;
          var constraint = dragonBones.BaseObject.borrowObject(dragonBones.PathConstraintData);
          constraint.name = ObjectDataParser._getString(rawData, dragonBones.DataParser.NAME, "");
          constraint.type = 1;
          constraint.pathSlot = target;
          constraint.pathDisplayData = targetDisplay;
          constraint.target = target.parent;
          constraint.positionMode = dragonBones.DataParser._getPositionMode(ObjectDataParser._getString(rawData, dragonBones.DataParser.POSITION_MODE, ""));
          constraint.spacingMode = dragonBones.DataParser._getSpacingMode(ObjectDataParser._getString(rawData, dragonBones.DataParser.SPACING_MODE, ""));
          constraint.rotateMode = dragonBones.DataParser._getRotateMode(ObjectDataParser._getString(rawData, dragonBones.DataParser.ROTATE_MODE, ""));
          constraint.position = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.POSITION, 0);
          constraint.spacing = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.SPACING, 0);
          constraint.rotateOffset = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.ROTATE_OFFSET, 0);
          constraint.rotateMix = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.ROTATE_MIX, 1);
          constraint.translateMix = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.TRANSLATE_MIX, 1);
          for (var _i = 0, bones_3 = bones; _i < bones_3.length; _i++) {
            var boneName = bones_3[_i];
            var bone = this._armature.getBone(boneName);
            if (null !== bone) {
              constraint.AddBone(bone);
              null === constraint.root && (constraint.root = bone);
            }
          }
          return constraint;
        };
        ObjectDataParser.prototype._parseSlot = function(rawData, zOrder) {
          var slot = dragonBones.BaseObject.borrowObject(dragonBones.SlotData);
          slot.displayIndex = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.DISPLAY_INDEX, 0);
          slot.zOrder = zOrder;
          slot.name = ObjectDataParser._getString(rawData, dragonBones.DataParser.NAME, "");
          slot.parent = this._armature.getBone(ObjectDataParser._getString(rawData, dragonBones.DataParser.PARENT, ""));
          dragonBones.DataParser.BLEND_MODE in rawData && "string" === typeof rawData[dragonBones.DataParser.BLEND_MODE] ? slot.blendMode = dragonBones.DataParser._getBlendMode(rawData[dragonBones.DataParser.BLEND_MODE]) : slot.blendMode = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.BLEND_MODE, 0);
          if (dragonBones.DataParser.COLOR in rawData) {
            slot.color = dragonBones.SlotData.createColor();
            this._parseColorTransform(rawData[dragonBones.DataParser.COLOR], slot.color);
          } else slot.color = dragonBones.SlotData.DEFAULT_COLOR;
          dragonBones.DataParser.ACTIONS in rawData && (this._slotChildActions[slot.name] = this._parseActionData(rawData[dragonBones.DataParser.ACTIONS], 0, null, null));
          return slot;
        };
        ObjectDataParser.prototype._parseSkin = function(rawData) {
          var skin = dragonBones.BaseObject.borrowObject(dragonBones.SkinData);
          skin.name = ObjectDataParser._getString(rawData, dragonBones.DataParser.NAME, dragonBones.DataParser.DEFAULT_NAME);
          0 === skin.name.length && (skin.name = dragonBones.DataParser.DEFAULT_NAME);
          if (dragonBones.DataParser.SLOT in rawData) {
            var rawSlots = rawData[dragonBones.DataParser.SLOT];
            this._skin = skin;
            for (var _i = 0, rawSlots_2 = rawSlots; _i < rawSlots_2.length; _i++) {
              var rawSlot = rawSlots_2[_i];
              var slotName = ObjectDataParser._getString(rawSlot, dragonBones.DataParser.NAME, "");
              var slot = this._armature.getSlot(slotName);
              if (null !== slot) {
                this._slot = slot;
                if (dragonBones.DataParser.DISPLAY in rawSlot) {
                  var rawDisplays = rawSlot[dragonBones.DataParser.DISPLAY];
                  for (var _a = 0, rawDisplays_1 = rawDisplays; _a < rawDisplays_1.length; _a++) {
                    var rawDisplay = rawDisplays_1[_a];
                    rawDisplay ? skin.addDisplay(slotName, this._parseDisplay(rawDisplay)) : skin.addDisplay(slotName, null);
                  }
                }
                this._slot = null;
              }
            }
            this._skin = null;
          }
          return skin;
        };
        ObjectDataParser.prototype._parseDisplay = function(rawData) {
          var name = ObjectDataParser._getString(rawData, dragonBones.DataParser.NAME, "");
          var path = ObjectDataParser._getString(rawData, dragonBones.DataParser.PATH, "");
          var type = 0;
          var display = null;
          type = dragonBones.DataParser.TYPE in rawData && "string" === typeof rawData[dragonBones.DataParser.TYPE] ? dragonBones.DataParser._getDisplayType(rawData[dragonBones.DataParser.TYPE]) : ObjectDataParser._getNumber(rawData, dragonBones.DataParser.TYPE, type);
          switch (type) {
           case 0:
            var imageDisplay = display = dragonBones.BaseObject.borrowObject(dragonBones.ImageDisplayData);
            imageDisplay.name = name;
            imageDisplay.path = path.length > 0 ? path : name;
            this._parsePivot(rawData, imageDisplay);
            break;

           case 1:
            var armatureDisplay = display = dragonBones.BaseObject.borrowObject(dragonBones.ArmatureDisplayData);
            armatureDisplay.name = name;
            armatureDisplay.path = path.length > 0 ? path : name;
            armatureDisplay.inheritAnimation = true;
            if (dragonBones.DataParser.ACTIONS in rawData) {
              var actions = this._parseActionData(rawData[dragonBones.DataParser.ACTIONS], 0, null, null);
              for (var _i = 0, actions_5 = actions; _i < actions_5.length; _i++) {
                var action = actions_5[_i];
                armatureDisplay.addAction(action);
              }
            } else if (this._slot.name in this._slotChildActions) {
              var displays = this._skin.getDisplays(this._slot.name);
              if (null === displays ? 0 === this._slot.displayIndex : this._slot.displayIndex === displays.length) {
                for (var _a = 0, _b = this._slotChildActions[this._slot.name]; _a < _b.length; _a++) {
                  var action = _b[_a];
                  armatureDisplay.addAction(action);
                }
                delete this._slotChildActions[this._slot.name];
              }
            }
            break;

           case 2:
            var meshDisplay = display = dragonBones.BaseObject.borrowObject(dragonBones.MeshDisplayData);
            meshDisplay.vertices.inheritDeform = ObjectDataParser._getBoolean(rawData, dragonBones.DataParser.INHERIT_DEFORM, true);
            meshDisplay.name = name;
            meshDisplay.path = path.length > 0 ? path : name;
            meshDisplay.vertices.data = this._data;
            if (dragonBones.DataParser.SHARE in rawData) {
              this._cacheRawMeshes.push(rawData);
              this._cacheMeshes.push(meshDisplay);
            } else this._parseMesh(rawData, meshDisplay);
            if (dragonBones.DataParser.GLUE_WEIGHTS in rawData && dragonBones.DataParser.GLUE_MESHES in rawData) {
              this._cacheRawMeshes.push(rawData);
              this._cacheMeshes.push(meshDisplay);
            }
            break;

           case 3:
            var boundingBox = this._parseBoundingBox(rawData);
            if (null !== boundingBox) {
              var boundingBoxDisplay = display = dragonBones.BaseObject.borrowObject(dragonBones.BoundingBoxDisplayData);
              boundingBoxDisplay.name = name;
              boundingBoxDisplay.path = path.length > 0 ? path : name;
              boundingBoxDisplay.boundingBox = boundingBox;
            }
            break;

           case 4:
            var rawCurveLengths = rawData[dragonBones.DataParser.LENGTHS];
            var pathDisplay = display = dragonBones.BaseObject.borrowObject(dragonBones.PathDisplayData);
            pathDisplay.closed = ObjectDataParser._getBoolean(rawData, dragonBones.DataParser.CLOSED, false);
            pathDisplay.constantSpeed = ObjectDataParser._getBoolean(rawData, dragonBones.DataParser.CONSTANT_SPEED, false);
            pathDisplay.name = name;
            pathDisplay.path = path.length > 0 ? path : name;
            pathDisplay.vertices.data = this._data;
            pathDisplay.curveLengths.length = rawCurveLengths.length;
            for (var i = 0, l = rawCurveLengths.length; i < l; ++i) pathDisplay.curveLengths[i] = rawCurveLengths[i];
            this._parsePath(rawData, pathDisplay);
          }
          null !== display && dragonBones.DataParser.TRANSFORM in rawData && this._parseTransform(rawData[dragonBones.DataParser.TRANSFORM], display.transform, this._armature.scale);
          return display;
        };
        ObjectDataParser.prototype._parsePath = function(rawData, display) {
          var rawVertices = rawData[dragonBones.DataParser.VERTICES];
          var vertexCount = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.VERTEX_COUNT, 0);
          var vertexOffset = this._floatArray.length;
          var pathOffset = this._intArray.length;
          display.vertices.offset = pathOffset;
          this._intArray.length += 2;
          this._intArray[pathOffset + 0] = vertexCount;
          this._intArray[pathOffset + 2] = vertexOffset;
          if (dragonBones.DataParser.WEIGHTS in rawData) {
            var rawWeights = rawData[dragonBones.DataParser.WEIGHTS];
            var rawBones = rawData[dragonBones.DataParser.BONES];
            var weightBoneCount = rawBones.length;
            var weightCount = Math.floor(rawWeights.length - vertexCount) / 2;
            var weightOffset = this._intArray.length;
            var floatOffset = this._floatArray.length;
            var sortedBones = this._armature.sortedBones;
            var weight = dragonBones.BaseObject.borrowObject(dragonBones.WeightData);
            weight.count = weightCount;
            weight.offset = weightOffset;
            this._intArray.length += 2 + weightBoneCount + vertexCount + weightCount;
            this._intArray[weightOffset + 0] = weightBoneCount;
            this._intArray[weightOffset + 1] = floatOffset;
            for (var i = 0; i < weightBoneCount; i++) {
              var rawBoneIndex = rawBones[i];
              var bone = this._rawBones[rawBoneIndex];
              weight.addBone(bone);
              this._intArray[weightOffset + 2 + i] = sortedBones.indexOf(bone);
            }
            this._floatArray.length += 3 * weightCount;
            for (var i = 0, iW = 0, iV = 0, iB = weightOffset + 2 + weightBoneCount, iF = floatOffset; i < weightCount; i++) {
              var boneCount = rawWeights[iW++];
              this._intArray[iB++] = boneCount;
              for (var j = 0; j < boneCount; j++) {
                var boneIndex = rawWeights[iW++];
                var boneWeight = rawWeights[iW++];
                var x = rawVertices[iV++];
                var y = rawVertices[iV++];
                this._intArray[iB++] = rawBones.indexOf(boneIndex);
                this._floatArray[iF++] = boneWeight;
                this._floatArray[iF++] = x;
                this._floatArray[iF++] = y;
              }
            }
            display.vertices.weight = weight;
          } else {
            this._floatArray.length += rawVertices.length;
            for (var i = 0, l = rawVertices.length; i < l; ++i) this._floatArray[vertexOffset + i] = rawVertices[i];
          }
        };
        ObjectDataParser.prototype._parsePivot = function(rawData, display) {
          if (dragonBones.DataParser.PIVOT in rawData) {
            var rawPivot = rawData[dragonBones.DataParser.PIVOT];
            display.pivot.x = ObjectDataParser._getNumber(rawPivot, dragonBones.DataParser.X, 0);
            display.pivot.y = ObjectDataParser._getNumber(rawPivot, dragonBones.DataParser.Y, 0);
          } else {
            display.pivot.x = .5;
            display.pivot.y = .5;
          }
        };
        ObjectDataParser.prototype._parseMesh = function(rawData, mesh) {
          var rawVertices = rawData[dragonBones.DataParser.VERTICES];
          var rawUVs = rawData[dragonBones.DataParser.UVS];
          var rawTriangles = rawData[dragonBones.DataParser.TRIANGLES];
          var vertexCount = Math.floor(rawVertices.length / 2);
          var triangleCount = Math.floor(rawTriangles.length / 3);
          var vertexOffset = this._floatArray.length;
          var uvOffset = vertexOffset + 2 * vertexCount;
          var meshOffset = this._intArray.length;
          var meshName = this._skin.name + "_" + this._slot.name + "_" + mesh.name;
          mesh.vertices.offset = meshOffset;
          this._intArray.length += 4 + 3 * triangleCount;
          this._intArray[meshOffset + 0] = vertexCount;
          this._intArray[meshOffset + 1] = triangleCount;
          this._intArray[meshOffset + 2] = vertexOffset;
          for (var i = 0, l = 3 * triangleCount; i < l; ++i) this._intArray[meshOffset + 4 + i] = rawTriangles[i];
          this._floatArray.length += 2 * vertexCount + 2 * vertexCount;
          for (var i = 0, l = 2 * vertexCount; i < l; ++i) {
            this._floatArray[vertexOffset + i] = rawVertices[i];
            this._floatArray[uvOffset + i] = rawUVs[i];
          }
          if (dragonBones.DataParser.WEIGHTS in rawData) {
            var rawWeights = rawData[dragonBones.DataParser.WEIGHTS];
            var rawSlotPose = rawData[dragonBones.DataParser.SLOT_POSE];
            var rawBonePoses = rawData[dragonBones.DataParser.BONE_POSE];
            var sortedBones = this._armature.sortedBones;
            var weightBoneIndices = new Array();
            var weightBoneCount = Math.floor(rawBonePoses.length / 7);
            var floatOffset = this._floatArray.length;
            var weightCount = Math.floor(rawWeights.length - vertexCount) / 2;
            var weightOffset = this._intArray.length;
            var weight = dragonBones.BaseObject.borrowObject(dragonBones.WeightData);
            weight.count = weightCount;
            weight.offset = weightOffset;
            weightBoneIndices.length = weightBoneCount;
            this._intArray.length += 2 + weightBoneCount + vertexCount + weightCount;
            this._intArray[weightOffset + 1] = floatOffset;
            for (var i = 0; i < weightBoneCount; ++i) {
              var rawBoneIndex = rawBonePoses[7 * i];
              var bone = this._rawBones[rawBoneIndex];
              weight.addBone(bone);
              weightBoneIndices[i] = rawBoneIndex;
              this._intArray[weightOffset + 2 + i] = sortedBones.indexOf(bone);
            }
            this._floatArray.length += 3 * weightCount;
            this._helpMatrixA.copyFromArray(rawSlotPose, 0);
            for (var i = 0, iW = 0, iB = weightOffset + 2 + weightBoneCount, iV = floatOffset; i < vertexCount; ++i) {
              var iD = 2 * i;
              var vertexBoneCount = this._intArray[iB++] = rawWeights[iW++];
              var x = this._floatArray[vertexOffset + iD];
              var y = this._floatArray[vertexOffset + iD + 1];
              this._helpMatrixA.transformPoint(x, y, this._helpPoint);
              x = this._helpPoint.x;
              y = this._helpPoint.y;
              for (var j = 0; j < vertexBoneCount; ++j) {
                var rawBoneIndex = rawWeights[iW++];
                var boneIndex = weightBoneIndices.indexOf(rawBoneIndex);
                this._helpMatrixB.copyFromArray(rawBonePoses, 7 * boneIndex + 1);
                this._helpMatrixB.invert();
                this._helpMatrixB.transformPoint(x, y, this._helpPoint);
                this._intArray[iB++] = boneIndex;
                this._floatArray[iV++] = rawWeights[iW++];
                this._floatArray[iV++] = this._helpPoint.x;
                this._floatArray[iV++] = this._helpPoint.y;
              }
            }
            mesh.vertices.weight = weight;
            this._weightSlotPose[meshName] = rawSlotPose;
            this._weightBonePoses[meshName] = rawBonePoses;
          }
        };
        ObjectDataParser.prototype._parseMeshGlue = function(rawData, mesh) {
          rawData;
          mesh;
        };
        ObjectDataParser.prototype._parseBoundingBox = function(rawData) {
          var boundingBox = null;
          var type = 0;
          type = dragonBones.DataParser.SUB_TYPE in rawData && "string" === typeof rawData[dragonBones.DataParser.SUB_TYPE] ? dragonBones.DataParser._getBoundingBoxType(rawData[dragonBones.DataParser.SUB_TYPE]) : ObjectDataParser._getNumber(rawData, dragonBones.DataParser.SUB_TYPE, type);
          switch (type) {
           case 0:
            boundingBox = dragonBones.BaseObject.borrowObject(dragonBones.RectangleBoundingBoxData);
            break;

           case 1:
            boundingBox = dragonBones.BaseObject.borrowObject(dragonBones.EllipseBoundingBoxData);
            break;

           case 2:
            boundingBox = this._parsePolygonBoundingBox(rawData);
          }
          if (null !== boundingBox) {
            boundingBox.color = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.COLOR, 0);
            if (0 === boundingBox.type || 1 === boundingBox.type) {
              boundingBox.width = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.WIDTH, 0);
              boundingBox.height = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.HEIGHT, 0);
            }
          }
          return boundingBox;
        };
        ObjectDataParser.prototype._parsePolygonBoundingBox = function(rawData) {
          var polygonBoundingBox = dragonBones.BaseObject.borrowObject(dragonBones.PolygonBoundingBoxData);
          if (dragonBones.DataParser.VERTICES in rawData) {
            var scale = this._armature.scale;
            var rawVertices = rawData[dragonBones.DataParser.VERTICES];
            var vertices = polygonBoundingBox.vertices;
            dragonBones.DragonBones.webAssembly ? vertices.resize(rawVertices.length, 0) : vertices.length = rawVertices.length;
            for (var i = 0, l = rawVertices.length; i < l; i += 2) {
              var x = rawVertices[i] * scale;
              var y = rawVertices[i + 1] * scale;
              if (dragonBones.DragonBones.webAssembly) {
                vertices.set(i, x);
                vertices.set(i + 1, y);
              } else {
                vertices[i] = x;
                vertices[i + 1] = y;
              }
              if (0 === i) {
                polygonBoundingBox.x = x;
                polygonBoundingBox.y = y;
                polygonBoundingBox.width = x;
                polygonBoundingBox.height = y;
              } else {
                x < polygonBoundingBox.x ? polygonBoundingBox.x = x : x > polygonBoundingBox.width && (polygonBoundingBox.width = x);
                y < polygonBoundingBox.y ? polygonBoundingBox.y = y : y > polygonBoundingBox.height && (polygonBoundingBox.height = y);
              }
            }
            polygonBoundingBox.width -= polygonBoundingBox.x;
            polygonBoundingBox.height -= polygonBoundingBox.y;
          } else console.warn("Data error.\n Please reexport DragonBones Data to fixed the bug.");
          return polygonBoundingBox;
        };
        ObjectDataParser.prototype._parseAnimation = function(rawData) {
          var animation = dragonBones.BaseObject.borrowObject(dragonBones.AnimationData);
          animation.frameCount = Math.max(ObjectDataParser._getNumber(rawData, dragonBones.DataParser.DURATION, 1), 1);
          animation.playTimes = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.PLAY_TIMES, 1);
          animation.duration = animation.frameCount / this._armature.frameRate;
          animation.fadeInTime = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.FADE_IN_TIME, 0);
          animation.scale = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.SCALE, 1);
          animation.name = ObjectDataParser._getString(rawData, dragonBones.DataParser.NAME, dragonBones.DataParser.DEFAULT_NAME);
          0 === animation.name.length && (animation.name = dragonBones.DataParser.DEFAULT_NAME);
          animation.frameIntOffset = this._frameIntArray.length;
          animation.frameFloatOffset = this._frameFloatArray.length;
          animation.frameOffset = this._frameArray.length;
          this._animation = animation;
          if (dragonBones.DataParser.FRAME in rawData) {
            var rawFrames = rawData[dragonBones.DataParser.FRAME];
            var keyFrameCount = rawFrames.length;
            if (keyFrameCount > 0) for (var i = 0, frameStart = 0; i < keyFrameCount; ++i) {
              var rawFrame = rawFrames[i];
              this._parseActionDataInFrame(rawFrame, frameStart, null, null);
              frameStart += ObjectDataParser._getNumber(rawFrame, dragonBones.DataParser.DURATION, 1);
            }
          }
          dragonBones.DataParser.Z_ORDER in rawData && (this._animation.zOrderTimeline = this._parseTimeline(rawData[dragonBones.DataParser.Z_ORDER], null, dragonBones.DataParser.FRAME, 1, false, false, 0, this._parseZOrderFrame));
          if (dragonBones.DataParser.BONE in rawData) {
            var rawTimelines = rawData[dragonBones.DataParser.BONE];
            for (var _i = 0, rawTimelines_1 = rawTimelines; _i < rawTimelines_1.length; _i++) {
              var rawTimeline = rawTimelines_1[_i];
              this._parseBoneTimeline(rawTimeline);
            }
          }
          if (dragonBones.DataParser.SURFACE in rawData) {
            var rawTimelines = rawData[dragonBones.DataParser.SURFACE];
            for (var _a = 0, rawTimelines_2 = rawTimelines; _a < rawTimelines_2.length; _a++) {
              var rawTimeline = rawTimelines_2[_a];
              var surfaceName = ObjectDataParser._getString(rawTimeline, dragonBones.DataParser.NAME, "");
              this._surface = this._armature.getBone(surfaceName);
              if (null === this._surface) continue;
              var timeline = this._parseTimeline(rawTimeline, null, dragonBones.DataParser.FRAME, 50, false, true, 0, this._parseSurfaceFrame);
              null !== timeline && this._animation.addSurfaceTimeline(this._surface, timeline);
              this._surface = null;
            }
          }
          if (dragonBones.DataParser.SLOT in rawData) {
            var rawTimelines = rawData[dragonBones.DataParser.SLOT];
            for (var _b = 0, rawTimelines_3 = rawTimelines; _b < rawTimelines_3.length; _b++) {
              var rawTimeline = rawTimelines_3[_b];
              this._parseSlotTimeline(rawTimeline);
            }
          }
          if (dragonBones.DataParser.FFD in rawData) {
            var rawTimelines = rawData[dragonBones.DataParser.FFD];
            for (var _c = 0, rawTimelines_4 = rawTimelines; _c < rawTimelines_4.length; _c++) {
              var rawTimeline = rawTimelines_4[_c];
              var skinName = ObjectDataParser._getString(rawTimeline, dragonBones.DataParser.SKIN, dragonBones.DataParser.DEFAULT_NAME);
              var slotName = ObjectDataParser._getString(rawTimeline, dragonBones.DataParser.SLOT, "");
              var displayName = ObjectDataParser._getString(rawTimeline, dragonBones.DataParser.NAME, "");
              0 === skinName.length && (skinName = dragonBones.DataParser.DEFAULT_NAME);
              this._slot = this._armature.getSlot(slotName);
              this._mesh = this._armature.getMesh(skinName, slotName, displayName);
              if (null === this._slot || null === this._mesh) continue;
              var timeline = this._parseTimeline(rawTimeline, null, dragonBones.DataParser.FRAME, 22, false, true, 0, this._parseSlotFFDFrame);
              null !== timeline && this._animation.addSlotTimeline(this._slot, timeline);
              this._slot = null;
              this._mesh = null;
            }
          }
          if (dragonBones.DataParser.IK in rawData) {
            var rawTimelines = rawData[dragonBones.DataParser.IK];
            for (var _d = 0, rawTimelines_5 = rawTimelines; _d < rawTimelines_5.length; _d++) {
              var rawTimeline = rawTimelines_5[_d];
              var constraintName = ObjectDataParser._getString(rawTimeline, dragonBones.DataParser.NAME, "");
              var constraint = this._armature.getConstraint(constraintName);
              if (null === constraint) continue;
              var timeline = this._parseTimeline(rawTimeline, null, dragonBones.DataParser.FRAME, 30, true, false, 2, this._parseIKConstraintFrame);
              null !== timeline && this._animation.addConstraintTimeline(constraint, timeline);
            }
          }
          if (dragonBones.DataParser.ANIMATION in rawData) {
            var rawTimelines = rawData[dragonBones.DataParser.ANIMATION];
            for (var _e = 0, rawTimelines_6 = rawTimelines; _e < rawTimelines_6.length; _e++) {
              var rawTimeline = rawTimelines_6[_e];
              var animationName = ObjectDataParser._getString(rawTimeline, dragonBones.DataParser.NAME, "");
              var timeline = this._parseTimeline(rawTimeline, null, dragonBones.DataParser.FRAME, 40, true, false, 2, this._parseAnimationFrame);
              null !== timeline && this._animation.addAnimationTimeline(animationName, timeline);
            }
          }
          if (this._actionFrames.length > 0) {
            this._animation.actionTimeline = this._parseTimeline(null, this._actionFrames, "", 0, false, false, 0, this._parseActionFrame);
            this._actionFrames.length = 0;
          }
          this._animation = null;
          return animation;
        };
        ObjectDataParser.prototype._parseTimeline = function(rawData, rawFrames, framesKey, type, addIntOffset, addFloatOffset, frameValueCount, frameParser) {
          null !== rawData && framesKey.length > 0 && framesKey in rawData && (rawFrames = rawData[framesKey]);
          if (null === rawFrames) return null;
          var keyFrameCount = rawFrames.length;
          if (0 === keyFrameCount) return null;
          var frameIntArrayLength = this._frameIntArray.length;
          var frameFloatArrayLength = this._frameFloatArray.length;
          var timeline = dragonBones.BaseObject.borrowObject(dragonBones.TimelineData);
          var timelineOffset = this._timelineArray.length;
          this._timelineArray.length += 5 + keyFrameCount;
          if (null !== rawData) {
            this._timelineArray[timelineOffset + 0] = Math.round(100 * ObjectDataParser._getNumber(rawData, dragonBones.DataParser.SCALE, 1));
            this._timelineArray[timelineOffset + 1] = Math.round(100 * ObjectDataParser._getNumber(rawData, dragonBones.DataParser.OFFSET, 0));
          } else {
            this._timelineArray[timelineOffset + 0] = 100;
            this._timelineArray[timelineOffset + 1] = 0;
          }
          this._timelineArray[timelineOffset + 2] = keyFrameCount;
          this._timelineArray[timelineOffset + 3] = frameValueCount;
          this._timelineArray[timelineOffset + 4] = addIntOffset ? frameIntArrayLength - this._animation.frameIntOffset : addFloatOffset ? frameFloatArrayLength - this._animation.frameFloatOffset : 0;
          this._timeline = timeline;
          timeline.type = type;
          timeline.offset = timelineOffset;
          if (1 === keyFrameCount) {
            timeline.frameIndicesOffset = -1;
            this._timelineArray[timelineOffset + 5 + 0] = frameParser.call(this, rawFrames[0], 0, 0) - this._animation.frameOffset;
          } else {
            var totalFrameCount = this._animation.frameCount + 1;
            var frameIndices = this._data.frameIndices;
            var frameIndicesOffset = 0;
            if (dragonBones.DragonBones.webAssembly) {
              frameIndicesOffset = frameIndices.size();
              frameIndices.resize(frameIndicesOffset + totalFrameCount, 0);
            } else {
              frameIndicesOffset = frameIndices.length;
              frameIndices.length += totalFrameCount;
            }
            timeline.frameIndicesOffset = frameIndicesOffset;
            for (var i = 0, iK = 0, frameStart = 0, frameCount = 0; i < totalFrameCount; ++i) {
              if (frameStart + frameCount <= i && iK < keyFrameCount) {
                var rawFrame = rawFrames[iK];
                frameStart = i;
                frameCount = iK === keyFrameCount - 1 ? this._animation.frameCount - frameStart : rawFrame instanceof ActionFrame ? this._actionFrames[iK + 1].frameStart - frameStart : ObjectDataParser._getNumber(rawFrame, dragonBones.DataParser.DURATION, 1);
                this._timelineArray[timelineOffset + 5 + iK] = frameParser.call(this, rawFrame, frameStart, frameCount) - this._animation.frameOffset;
                iK++;
              }
              dragonBones.DragonBones.webAssembly ? frameIndices.set(frameIndicesOffset + i, iK - 1) : frameIndices[frameIndicesOffset + i] = iK - 1;
            }
          }
          this._timeline = null;
          return timeline;
        };
        ObjectDataParser.prototype._parseBoneTimeline = function(rawData) {
          var bone = this._armature.getBone(ObjectDataParser._getString(rawData, dragonBones.DataParser.NAME, ""));
          if (null === bone) return;
          this._bone = bone;
          this._slot = this._armature.getSlot(this._bone.name);
          if (dragonBones.DataParser.TRANSLATE_FRAME in rawData) {
            var timeline = this._parseTimeline(rawData, null, dragonBones.DataParser.TRANSLATE_FRAME, 11, false, true, 2, this._parseBoneTranslateFrame);
            null !== timeline && this._animation.addBoneTimeline(bone, timeline);
          }
          if (dragonBones.DataParser.ROTATE_FRAME in rawData) {
            var timeline = this._parseTimeline(rawData, null, dragonBones.DataParser.ROTATE_FRAME, 12, false, true, 2, this._parseBoneRotateFrame);
            null !== timeline && this._animation.addBoneTimeline(bone, timeline);
          }
          if (dragonBones.DataParser.SCALE_FRAME in rawData) {
            var timeline = this._parseTimeline(rawData, null, dragonBones.DataParser.SCALE_FRAME, 13, false, true, 2, this._parseBoneScaleFrame);
            null !== timeline && this._animation.addBoneTimeline(bone, timeline);
          }
          if (dragonBones.DataParser.FRAME in rawData) {
            var timeline = this._parseTimeline(rawData, null, dragonBones.DataParser.FRAME, 10, false, true, 6, this._parseBoneAllFrame);
            null !== timeline && this._animation.addBoneTimeline(bone, timeline);
          }
          this._bone = null;
          this._slot = null;
        };
        ObjectDataParser.prototype._parseSlotTimeline = function(rawData) {
          var slot = this._armature.getSlot(ObjectDataParser._getString(rawData, dragonBones.DataParser.NAME, ""));
          if (null === slot) return;
          this._slot = slot;
          var displayTimeline = null;
          displayTimeline = dragonBones.DataParser.DISPLAY_FRAME in rawData ? this._parseTimeline(rawData, null, dragonBones.DataParser.DISPLAY_FRAME, 20, false, false, 0, this._parseSlotDisplayFrame) : this._parseTimeline(rawData, null, dragonBones.DataParser.FRAME, 20, false, false, 0, this._parseSlotDisplayFrame);
          null !== displayTimeline && this._animation.addSlotTimeline(slot, displayTimeline);
          var colorTimeline = null;
          colorTimeline = dragonBones.DataParser.COLOR_FRAME in rawData ? this._parseTimeline(rawData, null, dragonBones.DataParser.COLOR_FRAME, 21, true, false, 1, this._parseSlotColorFrame) : this._parseTimeline(rawData, null, dragonBones.DataParser.FRAME, 21, true, false, 1, this._parseSlotColorFrame);
          null !== colorTimeline && this._animation.addSlotTimeline(slot, colorTimeline);
          this._slot = null;
        };
        ObjectDataParser.prototype._parseFrame = function(rawData, frameStart, frameCount) {
          rawData;
          frameCount;
          var frameOffset = this._frameArray.length;
          this._frameArray.length += 1;
          this._frameArray[frameOffset + 0] = frameStart;
          return frameOffset;
        };
        ObjectDataParser.prototype._parseTweenFrame = function(rawData, frameStart, frameCount) {
          var frameOffset = this._parseFrame(rawData, frameStart, frameCount);
          if (frameCount > 0) if (dragonBones.DataParser.CURVE in rawData) {
            var sampleCount = frameCount + 1;
            this._helpArray.length = sampleCount;
            this._samplingEasingCurve(rawData[dragonBones.DataParser.CURVE], this._helpArray);
            this._frameArray.length += 2 + this._helpArray.length;
            this._frameArray[frameOffset + 1] = 2;
            this._frameArray[frameOffset + 2] = sampleCount;
            for (var i = 0; i < sampleCount; ++i) this._frameArray[frameOffset + 3 + i] = Math.round(1e4 * this._helpArray[i]);
          } else {
            var noTween = -2;
            var tweenEasing = noTween;
            dragonBones.DataParser.TWEEN_EASING in rawData && (tweenEasing = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.TWEEN_EASING, noTween));
            if (tweenEasing === noTween) {
              this._frameArray.length += 1;
              this._frameArray[frameOffset + 1] = 0;
            } else if (0 === tweenEasing) {
              this._frameArray.length += 1;
              this._frameArray[frameOffset + 1] = 1;
            } else if (tweenEasing < 0) {
              this._frameArray.length += 2;
              this._frameArray[frameOffset + 1] = 3;
              this._frameArray[frameOffset + 2] = Math.round(100 * -tweenEasing);
            } else if (tweenEasing <= 1) {
              this._frameArray.length += 2;
              this._frameArray[frameOffset + 1] = 4;
              this._frameArray[frameOffset + 2] = Math.round(100 * tweenEasing);
            } else {
              this._frameArray.length += 2;
              this._frameArray[frameOffset + 1] = 5;
              this._frameArray[frameOffset + 2] = Math.round(100 * tweenEasing - 100);
            }
          } else {
            this._frameArray.length += 1;
            this._frameArray[frameOffset + 1] = 0;
          }
          return frameOffset;
        };
        ObjectDataParser.prototype._parseActionFrame = function(frame, frameStart, frameCount) {
          frameCount;
          var frameOffset = this._frameArray.length;
          var actionCount = frame.actions.length;
          this._frameArray.length += 2 + actionCount;
          this._frameArray[frameOffset + 0] = frameStart;
          this._frameArray[frameOffset + 0 + 1] = actionCount;
          for (var i = 0; i < actionCount; ++i) this._frameArray[frameOffset + 0 + 2 + i] = frame.actions[i];
          return frameOffset;
        };
        ObjectDataParser.prototype._parseZOrderFrame = function(rawData, frameStart, frameCount) {
          var frameOffset = this._parseFrame(rawData, frameStart, frameCount);
          if (dragonBones.DataParser.Z_ORDER in rawData) {
            var rawZOrder = rawData[dragonBones.DataParser.Z_ORDER];
            if (rawZOrder.length > 0) {
              var slotCount = this._armature.sortedSlots.length;
              var unchanged = new Array(slotCount - rawZOrder.length / 2);
              var zOrders = new Array(slotCount);
              for (var i_1 = 0; i_1 < unchanged.length; ++i_1) unchanged[i_1] = 0;
              for (var i_2 = 0; i_2 < slotCount; ++i_2) zOrders[i_2] = -1;
              var originalIndex = 0;
              var unchangedIndex = 0;
              for (var i_3 = 0, l = rawZOrder.length; i_3 < l; i_3 += 2) {
                var slotIndex = rawZOrder[i_3];
                var zOrderOffset = rawZOrder[i_3 + 1];
                while (originalIndex !== slotIndex) unchanged[unchangedIndex++] = originalIndex++;
                var index = originalIndex + zOrderOffset;
                zOrders[index] = originalIndex++;
              }
              while (originalIndex < slotCount) unchanged[unchangedIndex++] = originalIndex++;
              this._frameArray.length += 1 + slotCount;
              this._frameArray[frameOffset + 1] = slotCount;
              var i = slotCount;
              while (i--) -1 === zOrders[i] ? this._frameArray[frameOffset + 2 + i] = unchanged[--unchangedIndex] || 0 : this._frameArray[frameOffset + 2 + i] = zOrders[i] || 0;
              return frameOffset;
            }
          }
          this._frameArray.length += 1;
          this._frameArray[frameOffset + 1] = 0;
          return frameOffset;
        };
        ObjectDataParser.prototype._parseBoneAllFrame = function(rawData, frameStart, frameCount) {
          this._helpTransform.identity();
          dragonBones.DataParser.TRANSFORM in rawData && this._parseTransform(rawData[dragonBones.DataParser.TRANSFORM], this._helpTransform, 1);
          var rotation = this._helpTransform.rotation;
          if (0 !== frameStart) if (0 === this._prevClockwise) rotation = this._prevRotation + dragonBones.Transform.normalizeRadian(rotation - this._prevRotation); else {
            (this._prevClockwise > 0 ? rotation >= this._prevRotation : rotation <= this._prevRotation) && (this._prevClockwise = this._prevClockwise > 0 ? this._prevClockwise - 1 : this._prevClockwise + 1);
            rotation = this._prevRotation + rotation - this._prevRotation + dragonBones.Transform.PI_D * this._prevClockwise;
          }
          this._prevClockwise = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.TWEEN_ROTATE, 0);
          this._prevRotation = rotation;
          var frameOffset = this._parseTweenFrame(rawData, frameStart, frameCount);
          var frameFloatOffset = this._frameFloatArray.length;
          this._frameFloatArray.length += 6;
          this._frameFloatArray[frameFloatOffset++] = this._helpTransform.x;
          this._frameFloatArray[frameFloatOffset++] = this._helpTransform.y;
          this._frameFloatArray[frameFloatOffset++] = rotation;
          this._frameFloatArray[frameFloatOffset++] = this._helpTransform.skew;
          this._frameFloatArray[frameFloatOffset++] = this._helpTransform.scaleX;
          this._frameFloatArray[frameFloatOffset++] = this._helpTransform.scaleY;
          this._parseActionDataInFrame(rawData, frameStart, this._bone, this._slot);
          return frameOffset;
        };
        ObjectDataParser.prototype._parseBoneTranslateFrame = function(rawData, frameStart, frameCount) {
          var frameOffset = this._parseTweenFrame(rawData, frameStart, frameCount);
          var frameFloatOffset = this._frameFloatArray.length;
          this._frameFloatArray.length += 2;
          this._frameFloatArray[frameFloatOffset++] = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.X, 0);
          this._frameFloatArray[frameFloatOffset++] = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.Y, 0);
          return frameOffset;
        };
        ObjectDataParser.prototype._parseBoneRotateFrame = function(rawData, frameStart, frameCount) {
          var rotation = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.ROTATE, 0) * dragonBones.Transform.DEG_RAD;
          if (0 !== frameStart) if (0 === this._prevClockwise) rotation = this._prevRotation + dragonBones.Transform.normalizeRadian(rotation - this._prevRotation); else {
            (this._prevClockwise > 0 ? rotation >= this._prevRotation : rotation <= this._prevRotation) && (this._prevClockwise = this._prevClockwise > 0 ? this._prevClockwise - 1 : this._prevClockwise + 1);
            rotation = this._prevRotation + rotation - this._prevRotation + dragonBones.Transform.PI_D * this._prevClockwise;
          }
          this._prevClockwise = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.CLOCK_WISE, 0);
          this._prevRotation = rotation;
          var frameOffset = this._parseTweenFrame(rawData, frameStart, frameCount);
          var frameFloatOffset = this._frameFloatArray.length;
          this._frameFloatArray.length += 2;
          this._frameFloatArray[frameFloatOffset++] = rotation;
          this._frameFloatArray[frameFloatOffset++] = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.SKEW, 0) * dragonBones.Transform.DEG_RAD;
          return frameOffset;
        };
        ObjectDataParser.prototype._parseBoneScaleFrame = function(rawData, frameStart, frameCount) {
          var frameOffset = this._parseTweenFrame(rawData, frameStart, frameCount);
          var frameFloatOffset = this._frameFloatArray.length;
          this._frameFloatArray.length += 2;
          this._frameFloatArray[frameFloatOffset++] = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.X, 1);
          this._frameFloatArray[frameFloatOffset++] = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.Y, 1);
          return frameOffset;
        };
        ObjectDataParser.prototype._parseSurfaceFrame = function(rawData, frameStart, frameCount) {
          var frameFloatOffset = this._frameFloatArray.length;
          var frameOffset = this._parseTweenFrame(rawData, frameStart, frameCount);
          var rawVertices = rawData[dragonBones.DataParser.VERTICES];
          var offset = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.OFFSET, 0);
          var vertexCount = this._surface.vertices.length / 2;
          var x = 0;
          var y = 0;
          this._frameFloatArray.length += 2 * vertexCount;
          for (var i = 0; i < 2 * vertexCount; i += 2) {
            x = i < offset || i - offset >= rawVertices.length ? 0 : rawVertices[i - offset];
            y = i + 1 < offset || i + 1 - offset >= rawVertices.length ? 0 : rawVertices[i + 1 - offset];
            this._frameFloatArray[frameFloatOffset + i] = x;
            this._frameFloatArray[frameFloatOffset + i + 1] = y;
          }
          if (0 === frameStart) {
            var frameIntOffset = this._frameIntArray.length;
            this._frameIntArray.length += 5;
            this._frameIntArray[frameIntOffset + 0] = 0;
            this._frameIntArray[frameIntOffset + 1] = this._frameFloatArray.length - frameFloatOffset;
            this._frameIntArray[frameIntOffset + 2] = this._frameFloatArray.length - frameFloatOffset;
            this._frameIntArray[frameIntOffset + 3] = 0;
            this._frameIntArray[frameIntOffset + 4] = frameFloatOffset - this._animation.frameFloatOffset;
            this._timelineArray[this._timeline.offset + 3] = frameIntOffset - this._animation.frameIntOffset;
          }
          return frameOffset;
        };
        ObjectDataParser.prototype._parseSlotDisplayFrame = function(rawData, frameStart, frameCount) {
          var frameOffset = this._parseFrame(rawData, frameStart, frameCount);
          this._frameArray.length += 1;
          dragonBones.DataParser.VALUE in rawData ? this._frameArray[frameOffset + 1] = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.VALUE, 0) : this._frameArray[frameOffset + 1] = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.DISPLAY_INDEX, 0);
          this._parseActionDataInFrame(rawData, frameStart, this._slot.parent, this._slot);
          return frameOffset;
        };
        ObjectDataParser.prototype._parseSlotColorFrame = function(rawData, frameStart, frameCount) {
          var frameOffset = this._parseTweenFrame(rawData, frameStart, frameCount);
          var colorOffset = -1;
          if (dragonBones.DataParser.VALUE in rawData || dragonBones.DataParser.COLOR in rawData) {
            var rawColor = dragonBones.DataParser.VALUE in rawData ? rawData[dragonBones.DataParser.VALUE] : rawData[dragonBones.DataParser.COLOR];
            for (var k in rawColor) {
              k;
              this._parseColorTransform(rawColor, this._helpColorTransform);
              colorOffset = this._intArray.length;
              this._intArray.length += 8;
              this._intArray[colorOffset++] = Math.round(100 * this._helpColorTransform.alphaMultiplier);
              this._intArray[colorOffset++] = Math.round(100 * this._helpColorTransform.redMultiplier);
              this._intArray[colorOffset++] = Math.round(100 * this._helpColorTransform.greenMultiplier);
              this._intArray[colorOffset++] = Math.round(100 * this._helpColorTransform.blueMultiplier);
              this._intArray[colorOffset++] = Math.round(this._helpColorTransform.alphaOffset);
              this._intArray[colorOffset++] = Math.round(this._helpColorTransform.redOffset);
              this._intArray[colorOffset++] = Math.round(this._helpColorTransform.greenOffset);
              this._intArray[colorOffset++] = Math.round(this._helpColorTransform.blueOffset);
              colorOffset -= 8;
              break;
            }
          }
          if (colorOffset < 0) {
            if (this._defaultColorOffset < 0) {
              this._defaultColorOffset = colorOffset = this._intArray.length;
              this._intArray.length += 8;
              this._intArray[colorOffset++] = 100;
              this._intArray[colorOffset++] = 100;
              this._intArray[colorOffset++] = 100;
              this._intArray[colorOffset++] = 100;
              this._intArray[colorOffset++] = 0;
              this._intArray[colorOffset++] = 0;
              this._intArray[colorOffset++] = 0;
              this._intArray[colorOffset++] = 0;
            }
            colorOffset = this._defaultColorOffset;
          }
          var frameIntOffset = this._frameIntArray.length;
          this._frameIntArray.length += 1;
          this._frameIntArray[frameIntOffset] = colorOffset;
          return frameOffset;
        };
        ObjectDataParser.prototype._parseSlotFFDFrame = function(rawData, frameStart, frameCount) {
          var frameFloatOffset = this._frameFloatArray.length;
          var frameOffset = this._parseTweenFrame(rawData, frameStart, frameCount);
          var rawVertices = dragonBones.DataParser.VERTICES in rawData ? rawData[dragonBones.DataParser.VERTICES] : null;
          var offset = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.OFFSET, 0);
          var vertexCount = this._intArray[this._mesh.vertices.offset + 0];
          var meshName = this._mesh.parent.name + "_" + this._slot.name + "_" + this._mesh.name;
          var weight = this._mesh.vertices.weight;
          var x = 0;
          var y = 0;
          var iB = 0;
          var iV = 0;
          if (null !== weight) {
            var rawSlotPose = this._weightSlotPose[meshName];
            this._helpMatrixA.copyFromArray(rawSlotPose, 0);
            this._frameFloatArray.length += 2 * weight.count;
            iB = weight.offset + 2 + weight.bones.length;
          } else this._frameFloatArray.length += 2 * vertexCount;
          for (var i = 0; i < 2 * vertexCount; i += 2) {
            if (null === rawVertices) {
              x = 0;
              y = 0;
            } else {
              x = i < offset || i - offset >= rawVertices.length ? 0 : rawVertices[i - offset];
              y = i + 1 < offset || i + 1 - offset >= rawVertices.length ? 0 : rawVertices[i + 1 - offset];
            }
            if (null !== weight) {
              var rawBonePoses = this._weightBonePoses[meshName];
              var vertexBoneCount = this._intArray[iB++];
              this._helpMatrixA.transformPoint(x, y, this._helpPoint, true);
              x = this._helpPoint.x;
              y = this._helpPoint.y;
              for (var j = 0; j < vertexBoneCount; ++j) {
                var boneIndex = this._intArray[iB++];
                this._helpMatrixB.copyFromArray(rawBonePoses, 7 * boneIndex + 1);
                this._helpMatrixB.invert();
                this._helpMatrixB.transformPoint(x, y, this._helpPoint, true);
                this._frameFloatArray[frameFloatOffset + iV++] = this._helpPoint.x;
                this._frameFloatArray[frameFloatOffset + iV++] = this._helpPoint.y;
              }
            } else {
              this._frameFloatArray[frameFloatOffset + i] = x;
              this._frameFloatArray[frameFloatOffset + i + 1] = y;
            }
          }
          if (0 === frameStart) {
            var frameIntOffset = this._frameIntArray.length;
            this._frameIntArray.length += 5;
            this._frameIntArray[frameIntOffset + 0] = this._mesh.vertices.offset;
            this._frameIntArray[frameIntOffset + 1] = this._frameFloatArray.length - frameFloatOffset;
            this._frameIntArray[frameIntOffset + 2] = this._frameFloatArray.length - frameFloatOffset;
            this._frameIntArray[frameIntOffset + 3] = 0;
            this._frameIntArray[frameIntOffset + 4] = frameFloatOffset - this._animation.frameFloatOffset;
            this._timelineArray[this._timeline.offset + 3] = frameIntOffset - this._animation.frameIntOffset;
          }
          return frameOffset;
        };
        ObjectDataParser.prototype._parseIKConstraintFrame = function(rawData, frameStart, frameCount) {
          var frameOffset = this._parseTweenFrame(rawData, frameStart, frameCount);
          var frameIntOffset = this._frameIntArray.length;
          this._frameIntArray.length += 2;
          this._frameIntArray[frameIntOffset++] = ObjectDataParser._getBoolean(rawData, dragonBones.DataParser.BEND_POSITIVE, true) ? 1 : 0;
          this._frameIntArray[frameIntOffset++] = Math.round(100 * ObjectDataParser._getNumber(rawData, dragonBones.DataParser.WEIGHT, 1));
          return frameOffset;
        };
        ObjectDataParser.prototype._parseAnimationFrame = function(rawData, frameStart, frameCount) {
          var frameOffset = this._parseTweenFrame(rawData, frameStart, frameCount);
          var frameIntOffset = this._frameIntArray.length;
          this._frameIntArray.length += 2;
          this._frameIntArray[frameIntOffset++] = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.VALUE, 0);
          this._frameIntArray[frameIntOffset++] = Math.round(100 * ObjectDataParser._getNumber(rawData, dragonBones.DataParser.WEIGHT, 1));
          return frameOffset;
        };
        ObjectDataParser.prototype._parseActionData = function(rawData, type, bone, slot) {
          var actions = new Array();
          if ("string" === typeof rawData) {
            var action = dragonBones.BaseObject.borrowObject(dragonBones.ActionData);
            action.type = type;
            action.name = rawData;
            action.bone = bone;
            action.slot = slot;
            actions.push(action);
          } else if (rawData instanceof Array) for (var _i = 0, rawData_2 = rawData; _i < rawData_2.length; _i++) {
            var rawAction = rawData_2[_i];
            var action = dragonBones.BaseObject.borrowObject(dragonBones.ActionData);
            if (dragonBones.DataParser.GOTO_AND_PLAY in rawAction) {
              action.type = 0;
              action.name = ObjectDataParser._getString(rawAction, dragonBones.DataParser.GOTO_AND_PLAY, "");
            } else {
              dragonBones.DataParser.TYPE in rawAction && "string" === typeof rawAction[dragonBones.DataParser.TYPE] ? action.type = dragonBones.DataParser._getActionType(rawAction[dragonBones.DataParser.TYPE]) : action.type = ObjectDataParser._getNumber(rawAction, dragonBones.DataParser.TYPE, type);
              action.name = ObjectDataParser._getString(rawAction, dragonBones.DataParser.NAME, "");
            }
            if (dragonBones.DataParser.BONE in rawAction) {
              var boneName = ObjectDataParser._getString(rawAction, dragonBones.DataParser.BONE, "");
              action.bone = this._armature.getBone(boneName);
            } else action.bone = bone;
            if (dragonBones.DataParser.SLOT in rawAction) {
              var slotName = ObjectDataParser._getString(rawAction, dragonBones.DataParser.SLOT, "");
              action.slot = this._armature.getSlot(slotName);
            } else action.slot = slot;
            var userData = null;
            if (dragonBones.DataParser.INTS in rawAction) {
              null === userData && (userData = dragonBones.BaseObject.borrowObject(dragonBones.UserData));
              var rawInts = rawAction[dragonBones.DataParser.INTS];
              for (var _a = 0, rawInts_1 = rawInts; _a < rawInts_1.length; _a++) {
                var rawValue = rawInts_1[_a];
                userData.addInt(rawValue);
              }
            }
            if (dragonBones.DataParser.FLOATS in rawAction) {
              null === userData && (userData = dragonBones.BaseObject.borrowObject(dragonBones.UserData));
              var rawFloats = rawAction[dragonBones.DataParser.FLOATS];
              for (var _b = 0, rawFloats_1 = rawFloats; _b < rawFloats_1.length; _b++) {
                var rawValue = rawFloats_1[_b];
                userData.addFloat(rawValue);
              }
            }
            if (dragonBones.DataParser.STRINGS in rawAction) {
              null === userData && (userData = dragonBones.BaseObject.borrowObject(dragonBones.UserData));
              var rawStrings = rawAction[dragonBones.DataParser.STRINGS];
              for (var _c = 0, rawStrings_1 = rawStrings; _c < rawStrings_1.length; _c++) {
                var rawValue = rawStrings_1[_c];
                userData.addString(rawValue);
              }
            }
            action.data = userData;
            actions.push(action);
          }
          return actions;
        };
        ObjectDataParser.prototype._parseTransform = function(rawData, transform, scale) {
          transform.x = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.X, 0) * scale;
          transform.y = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.Y, 0) * scale;
          if (dragonBones.DataParser.ROTATE in rawData || dragonBones.DataParser.SKEW in rawData) {
            transform.rotation = dragonBones.Transform.normalizeRadian(ObjectDataParser._getNumber(rawData, dragonBones.DataParser.ROTATE, 0) * dragonBones.Transform.DEG_RAD);
            transform.skew = dragonBones.Transform.normalizeRadian(ObjectDataParser._getNumber(rawData, dragonBones.DataParser.SKEW, 0) * dragonBones.Transform.DEG_RAD);
          } else if (dragonBones.DataParser.SKEW_X in rawData || dragonBones.DataParser.SKEW_Y in rawData) {
            transform.rotation = dragonBones.Transform.normalizeRadian(ObjectDataParser._getNumber(rawData, dragonBones.DataParser.SKEW_Y, 0) * dragonBones.Transform.DEG_RAD);
            transform.skew = dragonBones.Transform.normalizeRadian(ObjectDataParser._getNumber(rawData, dragonBones.DataParser.SKEW_X, 0) * dragonBones.Transform.DEG_RAD) - transform.rotation;
          }
          transform.scaleX = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.SCALE_X, 1);
          transform.scaleY = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.SCALE_Y, 1);
        };
        ObjectDataParser.prototype._parseColorTransform = function(rawData, color) {
          color.alphaMultiplier = .01 * ObjectDataParser._getNumber(rawData, dragonBones.DataParser.ALPHA_MULTIPLIER, 100);
          color.redMultiplier = .01 * ObjectDataParser._getNumber(rawData, dragonBones.DataParser.RED_MULTIPLIER, 100);
          color.greenMultiplier = .01 * ObjectDataParser._getNumber(rawData, dragonBones.DataParser.GREEN_MULTIPLIER, 100);
          color.blueMultiplier = .01 * ObjectDataParser._getNumber(rawData, dragonBones.DataParser.BLUE_MULTIPLIER, 100);
          color.alphaOffset = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.ALPHA_OFFSET, 0);
          color.redOffset = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.RED_OFFSET, 0);
          color.greenOffset = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.GREEN_OFFSET, 0);
          color.blueOffset = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.BLUE_OFFSET, 0);
        };
        ObjectDataParser.prototype._parseArray = function(rawData) {
          rawData;
          this._intArray.length = 0;
          this._floatArray.length = 0;
          this._frameIntArray.length = 0;
          this._frameFloatArray.length = 0;
          this._frameArray.length = 0;
          this._timelineArray.length = 0;
        };
        ObjectDataParser.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 l1 = this._intArray.length * Int16Array.BYTES_PER_ELEMENT;
          var l2 = this._floatArray.length * Float32Array.BYTES_PER_ELEMENT;
          var l3 = this._frameIntArray.length * Int16Array.BYTES_PER_ELEMENT;
          var l4 = this._frameFloatArray.length * Float32Array.BYTES_PER_ELEMENT;
          var l5 = this._frameArray.length * Int16Array.BYTES_PER_ELEMENT;
          var l6 = this._timelineArray.length * Uint16Array.BYTES_PER_ELEMENT;
          var lTotal = l1 + l2 + l3 + l4 + l5 + l6;
          if (dragonBones.DragonBones.webAssembly) {
            var shareBuffer = dragonBones.webAssemblyModule.HEAP16.buffer;
            var bufferPointer = dragonBones.webAssemblyModule._malloc(lTotal);
            var intArray = new Int16Array(shareBuffer, bufferPointer, this._intArray.length);
            var floatArray = new Float32Array(shareBuffer, bufferPointer + l1, this._floatArray.length);
            var frameIntArray = new Int16Array(shareBuffer, bufferPointer + l1 + l2, this._frameIntArray.length);
            var frameFloatArray = new Float32Array(shareBuffer, bufferPointer + l1 + l2 + l3, this._frameFloatArray.length);
            var frameArray = new Int16Array(shareBuffer, bufferPointer + l1 + l2 + l3 + l4, this._frameArray.length);
            var timelineArray = new Uint16Array(shareBuffer, bufferPointer + l1 + l2 + l3 + l4 + l5, this._timelineArray.length);
            for (var i = 0, l = this._intArray.length; i < l; ++i) intArray[i] = this._intArray[i];
            for (var i = 0, l = this._floatArray.length; i < l; ++i) floatArray[i] = this._floatArray[i];
            for (var i = 0, l = this._frameIntArray.length; i < l; ++i) frameIntArray[i] = this._frameIntArray[i];
            for (var i = 0, l = this._frameFloatArray.length; i < l; ++i) frameFloatArray[i] = this._frameFloatArray[i];
            for (var i = 0, l = this._frameArray.length; i < l; ++i) frameArray[i] = this._frameArray[i];
            for (var i = 0, l = this._timelineArray.length; i < l; ++i) timelineArray[i] = this._timelineArray[i];
            dragonBones.webAssemblyModule.setDataBinary(this._data, bufferPointer, l1, l2, l3, l4, l5, l6);
          } else {
            var binary = new ArrayBuffer(lTotal);
            var intArray = new Int16Array(binary, 0, this._intArray.length);
            var floatArray = new Float32Array(binary, l1, this._floatArray.length);
            var frameIntArray = new Int16Array(binary, l1 + l2, this._frameIntArray.length);
            var frameFloatArray = new Float32Array(binary, l1 + l2 + l3, this._frameFloatArray.length);
            var frameArray = new Int16Array(binary, l1 + l2 + l3 + l4, this._frameArray.length);
            var timelineArray = new Uint16Array(binary, l1 + l2 + l3 + l4 + l5, this._timelineArray.length);
            for (var i = 0, l = this._intArray.length; i < l; ++i) intArray[i] = this._intArray[i];
            for (var i = 0, l = this._floatArray.length; i < l; ++i) floatArray[i] = this._floatArray[i];
            for (var i = 0, l = this._frameIntArray.length; i < l; ++i) frameIntArray[i] = this._frameIntArray[i];
            for (var i = 0, l = this._frameFloatArray.length; i < l; ++i) frameFloatArray[i] = this._frameFloatArray[i];
            for (var i = 0, l = this._frameArray.length; i < l; ++i) frameArray[i] = this._frameArray[i];
            for (var i = 0, l = this._timelineArray.length; i < l; ++i) timelineArray[i] = this._timelineArray[i];
            this._data.binary = binary;
            this._data.intArray = intArray;
            this._data.floatArray = floatArray;
            this._data.frameIntArray = frameIntArray;
            this._data.frameFloatArray = frameFloatArray;
            this._data.frameArray = frameArray;
            this._data.timelineArray = timelineArray;
          }
          this._defaultColorOffset = -1;
        };
        ObjectDataParser.prototype.parseDragonBonesData = function(rawData, scale) {
          void 0 === scale && (scale = 1);
          console.assert(null !== rawData && void 0 !== rawData, "Data error.");
          var version = ObjectDataParser._getString(rawData, dragonBones.DataParser.VERSION, "");
          var compatibleVersion = ObjectDataParser._getString(rawData, dragonBones.DataParser.COMPATIBLE_VERSION, "");
          if (dragonBones.DataParser.DATA_VERSIONS.indexOf(version) >= 0 || dragonBones.DataParser.DATA_VERSIONS.indexOf(compatibleVersion) >= 0) {
            var data = dragonBones.BaseObject.borrowObject(dragonBones.DragonBonesData);
            data.version = version;
            data.name = ObjectDataParser._getString(rawData, dragonBones.DataParser.NAME, "");
            data.frameRate = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.FRAME_RATE, 24);
            0 === data.frameRate && (data.frameRate = 24);
            if (dragonBones.DataParser.ARMATURE in rawData) {
              this._data = data;
              this._parseArray(rawData);
              var rawArmatures = rawData[dragonBones.DataParser.ARMATURE];
              for (var _i = 0, rawArmatures_1 = rawArmatures; _i < rawArmatures_1.length; _i++) {
                var rawArmature = rawArmatures_1[_i];
                data.addArmature(this._parseArmature(rawArmature, scale));
              }
              this._data.binary || this._modifyArray();
              dragonBones.DataParser.STAGE in rawData ? data.stage = data.getArmature(ObjectDataParser._getString(rawData, dragonBones.DataParser.STAGE, "")) : data.armatureNames.length > 0 && (data.stage = data.getArmature(data.armatureNames[0]));
              this._data = null;
            }
            dragonBones.DataParser.TEXTURE_ATLAS in rawData && (this._rawTextureAtlases = rawData[dragonBones.DataParser.TEXTURE_ATLAS]);
            return data;
          }
          console.assert(false, "Nonsupport data version: " + version + "\nPlease convert DragonBones data to support version.\nRead more: https://github.com/DragonBones/Tools/");
          return null;
        };
        ObjectDataParser.prototype.parseTextureAtlasData = function(rawData, textureAtlasData, scale) {
          void 0 === scale && (scale = 1);
          console.assert(void 0 !== rawData);
          if (null === rawData) {
            if (null === this._rawTextureAtlases || 0 === this._rawTextureAtlases.length) return false;
            var rawTextureAtlas = this._rawTextureAtlases[this._rawTextureAtlasIndex++];
            this.parseTextureAtlasData(rawTextureAtlas, textureAtlasData, scale);
            if (this._rawTextureAtlasIndex >= this._rawTextureAtlases.length) {
              this._rawTextureAtlasIndex = 0;
              this._rawTextureAtlases = null;
            }
            return true;
          }
          textureAtlasData.width = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.WIDTH, 0);
          textureAtlasData.height = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.HEIGHT, 0);
          textureAtlasData.scale = 1 === scale ? 1 / ObjectDataParser._getNumber(rawData, dragonBones.DataParser.SCALE, 1) : scale;
          textureAtlasData.name = ObjectDataParser._getString(rawData, dragonBones.DataParser.NAME, "");
          textureAtlasData.imagePath = ObjectDataParser._getString(rawData, dragonBones.DataParser.IMAGE_PATH, "");
          if (dragonBones.DataParser.SUB_TEXTURE in rawData) {
            var rawTextures = rawData[dragonBones.DataParser.SUB_TEXTURE];
            for (var i = 0, l = rawTextures.length; i < l; ++i) {
              var rawTexture = rawTextures[i];
              var textureData = textureAtlasData.createTexture();
              textureData.rotated = ObjectDataParser._getBoolean(rawTexture, dragonBones.DataParser.ROTATED, false);
              textureData.name = ObjectDataParser._getString(rawTexture, dragonBones.DataParser.NAME, "");
              textureData.region.x = ObjectDataParser._getNumber(rawTexture, dragonBones.DataParser.X, 0);
              textureData.region.y = ObjectDataParser._getNumber(rawTexture, dragonBones.DataParser.Y, 0);
              textureData.region.width = ObjectDataParser._getNumber(rawTexture, dragonBones.DataParser.WIDTH, 0);
              textureData.region.height = ObjectDataParser._getNumber(rawTexture, dragonBones.DataParser.HEIGHT, 0);
              var frameWidth = ObjectDataParser._getNumber(rawTexture, dragonBones.DataParser.FRAME_WIDTH, -1);
              var frameHeight = ObjectDataParser._getNumber(rawTexture, dragonBones.DataParser.FRAME_HEIGHT, -1);
              if (frameWidth > 0 && frameHeight > 0) {
                textureData.frame = dragonBones.TextureData.createRectangle();
                textureData.frame.x = ObjectDataParser._getNumber(rawTexture, dragonBones.DataParser.FRAME_X, 0);
                textureData.frame.y = ObjectDataParser._getNumber(rawTexture, dragonBones.DataParser.FRAME_Y, 0);
                textureData.frame.width = frameWidth;
                textureData.frame.height = frameHeight;
              }
              textureAtlasData.addTexture(textureData);
            }
          }
          return true;
        };
        ObjectDataParser.getInstance = function() {
          null === ObjectDataParser._objectDataParserInstance && (ObjectDataParser._objectDataParserInstance = new ObjectDataParser());
          return ObjectDataParser._objectDataParserInstance;
        };
        ObjectDataParser._objectDataParserInstance = null;
        return ObjectDataParser;
      })(dragonBones.DataParser);
      dragonBones.ObjectDataParser = ObjectDataParser;
      var ActionFrame = (function() {
        function ActionFrame() {
          this.frameStart = 0;
          this.actions = [];
        }
        return ActionFrame;
      })();
      dragonBones.ActionFrame = ActionFrame;
    })(dragonBones || (dragonBones = {}));
    var dragonBones;
    (function(dragonBones) {
      var BinaryDataParser = (function(_super) {
        __extends(BinaryDataParser, _super);
        function BinaryDataParser() {
          return null !== _super && _super.apply(this, arguments) || this;
        }
        BinaryDataParser.prototype._inRange = function(a, min, max) {
          return min <= a && a <= max;
        };
        BinaryDataParser.prototype._decodeUTF8 = function(data) {
          var EOF_byte = -1;
          var EOF_code_point = -1;
          var FATAL_POINT = 65533;
          var pos = 0;
          var result = "";
          var code_point;
          var utf8_code_point = 0;
          var utf8_bytes_needed = 0;
          var utf8_bytes_seen = 0;
          var utf8_lower_boundary = 0;
          while (data.length > pos) {
            var _byte = data[pos++];
            if (_byte === EOF_byte) code_point = 0 !== utf8_bytes_needed ? FATAL_POINT : EOF_code_point; else if (0 === utf8_bytes_needed) if (this._inRange(_byte, 0, 127)) code_point = _byte; else {
              if (this._inRange(_byte, 194, 223)) {
                utf8_bytes_needed = 1;
                utf8_lower_boundary = 128;
                utf8_code_point = _byte - 192;
              } else if (this._inRange(_byte, 224, 239)) {
                utf8_bytes_needed = 2;
                utf8_lower_boundary = 2048;
                utf8_code_point = _byte - 224;
              } else if (this._inRange(_byte, 240, 244)) {
                utf8_bytes_needed = 3;
                utf8_lower_boundary = 65536;
                utf8_code_point = _byte - 240;
              }
              utf8_code_point *= Math.pow(64, utf8_bytes_needed);
              code_point = null;
            } else if (this._inRange(_byte, 128, 191)) {
              utf8_bytes_seen += 1;
              utf8_code_point += (_byte - 128) * Math.pow(64, utf8_bytes_needed - utf8_bytes_seen);
              if (utf8_bytes_seen !== utf8_bytes_needed) code_point = null; else {
                var cp = utf8_code_point;
                var lower_boundary = utf8_lower_boundary;
                utf8_code_point = 0;
                utf8_bytes_needed = 0;
                utf8_bytes_seen = 0;
                utf8_lower_boundary = 0;
                code_point = this._inRange(cp, lower_boundary, 1114111) && !this._inRange(cp, 55296, 57343) ? cp : _byte;
              }
            } else {
              utf8_code_point = 0;
              utf8_bytes_needed = 0;
              utf8_bytes_seen = 0;
              utf8_lower_boundary = 0;
              pos--;
              code_point = _byte;
            }
            if (null !== code_point && code_point !== EOF_code_point) if (code_point <= 65535) code_point > 0 && (result += String.fromCharCode(code_point)); else {
              code_point -= 65536;
              result += String.fromCharCode(55296 + (code_point >> 10 & 1023));
              result += String.fromCharCode(56320 + (1023 & code_point));
            }
          }
          return result;
        };
        BinaryDataParser.prototype._getUTF16Key = function(value) {
          for (var i = 0, l = value.length; i < l; ++i) if (value.charCodeAt(i) > 255) return encodeURI(value);
          return value;
        };
        BinaryDataParser.prototype._parseBinaryTimeline = function(type, offset, timelineData) {
          void 0 === timelineData && (timelineData = null);
          var timeline = null !== timelineData ? timelineData : dragonBones.BaseObject.borrowObject(dragonBones.TimelineData);
          timeline.type = type;
          timeline.offset = offset;
          this._timeline = timeline;
          var keyFrameCount = this._timelineArrayBuffer[timeline.offset + 2];
          if (1 === keyFrameCount) timeline.frameIndicesOffset = -1; else {
            var frameIndicesOffset = 0;
            var totalFrameCount = this._animation.frameCount + 1;
            var frameIndices = this._data.frameIndices;
            if (dragonBones.DragonBones.webAssembly) {
              frameIndicesOffset = frameIndices.size();
              frameIndices.resize(frameIndicesOffset + totalFrameCount, 0);
            } else {
              frameIndicesOffset = frameIndices.length;
              frameIndices.length += totalFrameCount;
            }
            timeline.frameIndicesOffset = frameIndicesOffset;
            for (var i = 0, iK = 0, frameStart = 0, frameCount = 0; i < totalFrameCount; ++i) {
              if (frameStart + frameCount <= i && iK < keyFrameCount) {
                frameStart = this._frameArrayBuffer[this._animation.frameOffset + this._timelineArrayBuffer[timeline.offset + 5 + iK]];
                frameCount = iK === keyFrameCount - 1 ? this._animation.frameCount - frameStart : this._frameArrayBuffer[this._animation.frameOffset + this._timelineArrayBuffer[timeline.offset + 5 + iK + 1]] - frameStart;
                iK++;
              }
              dragonBones.DragonBones.webAssembly ? frameIndices.set(frameIndicesOffset + i, iK - 1) : frameIndices[frameIndicesOffset + i] = iK - 1;
            }
          }
          this._timeline = null;
          return timeline;
        };
        BinaryDataParser.prototype._parseVertices = function(rawData, vertices) {
          vertices.offset = rawData[dragonBones.DataParser.OFFSET];
          var weightOffset = this._intArrayBuffer[vertices.offset + 3];
          if (weightOffset >= 0) {
            var weight = dragonBones.BaseObject.borrowObject(dragonBones.WeightData);
            var vertexCount = this._intArrayBuffer[vertices.offset + 0];
            var boneCount = this._intArrayBuffer[weightOffset + 0];
            weight.offset = weightOffset;
            for (var i = 0; i < boneCount; ++i) {
              var boneIndex = this._intArrayBuffer[weightOffset + 2 + i];
              weight.addBone(this._rawBones[boneIndex]);
            }
            var boneIndicesOffset = weightOffset + 2 + boneCount;
            var weightCount = 0;
            for (var i = 0, l = vertexCount; i < l; ++i) {
              var vertexBoneCount = this._intArrayBuffer[boneIndicesOffset++];
              weightCount += vertexBoneCount;
              boneIndicesOffset += vertexBoneCount;
            }
            weight.count = weightCount;
            vertices.weight = weight;
          }
        };
        BinaryDataParser.prototype._parseMesh = function(rawData, mesh) {
          this._parseVertices(rawData, mesh.vertices);
        };
        BinaryDataParser.prototype._parsePath = function(rawData, path) {
          this._parseVertices(rawData, path.vertices);
        };
        BinaryDataParser.prototype._parseAnimation = function(rawData) {
          var animation = dragonBones.BaseObject.borrowObject(dragonBones.AnimationData);
          animation.frameCount = Math.max(dragonBones.ObjectDataParser._getNumber(rawData, dragonBones.DataParser.DURATION, 1), 1);
          animation.playTimes = dragonBones.ObjectDataParser._getNumber(rawData, dragonBones.DataParser.PLAY_TIMES, 1);
          animation.duration = animation.frameCount / this._armature.frameRate;
          animation.fadeInTime = dragonBones.ObjectDataParser._getNumber(rawData, dragonBones.DataParser.FADE_IN_TIME, 0);
          animation.scale = dragonBones.ObjectDataParser._getNumber(rawData, dragonBones.DataParser.SCALE, 1);
          animation.name = dragonBones.ObjectDataParser._getString(rawData, dragonBones.DataParser.NAME, dragonBones.DataParser.DEFAULT_NAME);
          0 === animation.name.length && (animation.name = dragonBones.DataParser.DEFAULT_NAME);
          var offsets = rawData[dragonBones.DataParser.OFFSET];
          animation.frameIntOffset = offsets[0];
          animation.frameFloatOffset = offsets[1];
          animation.frameOffset = offsets[2];
          this._animation = animation;
          dragonBones.DataParser.ACTION in rawData && (animation.actionTimeline = this._parseBinaryTimeline(0, rawData[dragonBones.DataParser.ACTION]));
          dragonBones.DataParser.Z_ORDER in rawData && (animation.zOrderTimeline = this._parseBinaryTimeline(1, rawData[dragonBones.DataParser.Z_ORDER]));
          if (dragonBones.DataParser.BONE in rawData) {
            var rawTimeliness = rawData[dragonBones.DataParser.BONE];
            for (var k in rawTimeliness) {
              var rawTimelines = rawTimeliness[k];
              dragonBones.DragonBones.webAssembly && (k = this._getUTF16Key(k));
              var bone = this._armature.getBone(k);
              if (null === bone) continue;
              for (var i = 0, l = rawTimelines.length; i < l; i += 2) {
                var timelineType = rawTimelines[i];
                var timelineOffset = rawTimelines[i + 1];
                var timeline = this._parseBinaryTimeline(timelineType, timelineOffset);
                this._animation.addBoneTimeline(bone, timeline);
              }
            }
          }
          if (dragonBones.DataParser.SURFACE in rawData) {
            var rawTimeliness = rawData[dragonBones.DataParser.SURFACE];
            for (var k in rawTimeliness) {
              var rawTimelines = rawTimeliness[k];
              dragonBones.DragonBones.webAssembly && (k = this._getUTF16Key(k));
              var surface = this._armature.getBone(k);
              if (null === surface) continue;
              for (var i = 0, l = rawTimelines.length; i < l; i += 2) {
                var timelineType = rawTimelines[i];
                var timelineOffset = rawTimelines[i + 1];
                var timeline = this._parseBinaryTimeline(timelineType, timelineOffset);
                this._animation.addSurfaceTimeline(surface, timeline);
              }
            }
          }
          if (dragonBones.DataParser.SLOT in rawData) {
            var rawTimeliness = rawData[dragonBones.DataParser.SLOT];
            for (var k in rawTimeliness) {
              var rawTimelines = rawTimeliness[k];
              dragonBones.DragonBones.webAssembly && (k = this._getUTF16Key(k));
              var slot = this._armature.getSlot(k);
              if (null === slot) continue;
              for (var i = 0, l = rawTimelines.length; i < l; i += 2) {
                var timelineType = rawTimelines[i];
                var timelineOffset = rawTimelines[i + 1];
                var timeline = this._parseBinaryTimeline(timelineType, timelineOffset);
                this._animation.addSlotTimeline(slot, timeline);
              }
            }
          }
          if (dragonBones.DataParser.CONSTRAINT in rawData) {
            var rawTimeliness = rawData[dragonBones.DataParser.CONSTRAINT];
            for (var k in rawTimeliness) {
              var rawTimelines = rawTimeliness[k];
              dragonBones.DragonBones.webAssembly && (k = this._getUTF16Key(k));
              var constraint = this._armature.getConstraint(k);
              if (null === constraint) continue;
              for (var i = 0, l = rawTimelines.length; i < l; i += 2) {
                var timelineType = rawTimelines[i];
                var timelineOffset = rawTimelines[i + 1];
                var timeline = this._parseBinaryTimeline(timelineType, timelineOffset);
                this._animation.addConstraintTimeline(constraint, timeline);
              }
            }
          }
          if (dragonBones.DataParser.ANIMATION in rawData) {
            var rawTimeliness = rawData[dragonBones.DataParser.ANIMATION];
            for (var k in rawTimeliness) {
              var rawTimelines = rawTimeliness[k];
              dragonBones.DragonBones.webAssembly && (k = this._getUTF16Key(k));
              for (var i = 0, l = rawTimelines.length; i < l; i += 2) {
                var timelineType = rawTimelines[i];
                var timelineOffset = rawTimelines[i + 1];
                var timeline = this._parseBinaryTimeline(timelineType, timelineOffset);
                this._animation.addAnimationTimeline(k, timeline);
              }
            }
          }
          this._animation = null;
          return animation;
        };
        BinaryDataParser.prototype._parseArray = function(rawData) {
          var offsets = rawData[dragonBones.DataParser.OFFSET];
          var l1 = offsets[1];
          var l2 = offsets[3];
          var l3 = offsets[5];
          var l4 = offsets[7];
          var l5 = offsets[9];
          var l6 = offsets[11];
          var intArray = new Int16Array(this._binary, this._binaryOffset + offsets[0], l1 / Int16Array.BYTES_PER_ELEMENT);
          var floatArray = new Float32Array(this._binary, this._binaryOffset + offsets[2], l2 / Float32Array.BYTES_PER_ELEMENT);
          var frameIntArray = new Int16Array(this._binary, this._binaryOffset + offsets[4], l3 / Int16Array.BYTES_PER_ELEMENT);
          var frameFloatArray = new Float32Array(this._binary, this._binaryOffset + offsets[6], l4 / Float32Array.BYTES_PER_ELEMENT);
          var frameArray = new Int16Array(this._binary, this._binaryOffset + offsets[8], l5 / Int16Array.BYTES_PER_ELEMENT);
          var timelineArray = new Uint16Array(this._binary, this._binaryOffset + offsets[10], l6 / Uint16Array.BYTES_PER_ELEMENT);
          if (dragonBones.DragonBones.webAssembly) {
            var lTotal = l1 + l2 + l3 + l4 + l5 + l6;
            var bufferPointer = dragonBones.webAssemblyModule._malloc(lTotal);
            var rawArray = new Uint8Array(this._binary, this._binaryOffset, lTotal / Uint8Array.BYTES_PER_ELEMENT);
            var copyArray = new Uint8Array(dragonBones.webAssemblyModule.HEAP16.buffer, bufferPointer, rawArray.length);
            for (var i = 0, l = rawArray.length; i < l; ++i) copyArray[i] = rawArray[i];
            dragonBones.webAssemblyModule.setDataBinary(this._data, bufferPointer, l1, l2, l3, l4, l5, l6);
            this._intArrayBuffer = intArray;
            this._floatArrayBuffer = floatArray;
            this._frameIntArrayBuffer = frameIntArray;
            this._frameFloatArrayBuffer = frameFloatArray;
            this._frameArrayBuffer = frameArray;
            this._timelineArrayBuffer = timelineArray;
          } else {
            this._data.binary = this._binary;
            this._data.intArray = this._intArrayBuffer = intArray;
            this._data.floatArray = this._floatArrayBuffer = floatArray;
            this._data.frameIntArray = this._frameIntArrayBuffer = frameIntArray;
            this._data.frameFloatArray = this._frameFloatArrayBuffer = frameFloatArray;
            this._data.frameArray = this._frameArrayBuffer = frameArray;
            this._data.timelineArray = this._timelineArrayBuffer = timelineArray;
          }
        };
        BinaryDataParser.prototype.parseDragonBonesData = function(rawData, scale) {
          void 0 === scale && (scale = 1);
          console.assert(null !== rawData && void 0 !== rawData && rawData instanceof ArrayBuffer, "Data error.");
          var tag = new Uint8Array(rawData, 0, 8);
          if (tag[0] !== "D".charCodeAt(0) || tag[1] !== "B".charCodeAt(0) || tag[2] !== "D".charCodeAt(0) || tag[3] !== "T".charCodeAt(0)) {
            console.assert(false, "Nonsupport data.");
            return null;
          }
          var headerLength = new Uint32Array(rawData, 8, 1)[0];
          var headerBytes = new Uint8Array(rawData, 12, headerLength);
          var headerString = this._decodeUTF8(headerBytes);
          var header = JSON.parse(headerString);
          this._binaryOffset = 12 + headerLength;
          this._binary = rawData;
          return _super.prototype.parseDragonBonesData.call(this, header, scale);
        };
        BinaryDataParser.getInstance = function() {
          null === BinaryDataParser._binaryDataParserInstance && (BinaryDataParser._binaryDataParserInstance = new BinaryDataParser());
          return BinaryDataParser._binaryDataParserInstance;
        };
        BinaryDataParser._binaryDataParserInstance = null;
        return BinaryDataParser;
      })(dragonBones.ObjectDataParser);
      dragonBones.BinaryDataParser = BinaryDataParser;
    })(dragonBones || (dragonBones = {}));
    var dragonBones;
    (function(dragonBones) {
      var BaseFactory = (function() {
        function BaseFactory(dataParser) {
          void 0 === dataParser && (dataParser = null);
          this.autoSearch = false;
          this._dragonBonesDataMap = {};
          this._textureAtlasDataMap = {};
          this._dragonBones = null;
          this._dataParser = null;
          null === BaseFactory._objectParser && (BaseFactory._objectParser = new dragonBones.ObjectDataParser());
          null === BaseFactory._binaryParser && (BaseFactory._binaryParser = new dragonBones.BinaryDataParser());
          this._dataParser = null !== dataParser ? dataParser : BaseFactory._objectParser;
        }
        BaseFactory.prototype._isSupportMesh = function() {
          return true;
        };
        BaseFactory.prototype._getTextureData = function(textureAtlasName, textureName) {
          if (textureAtlasName in this._textureAtlasDataMap) for (var _i = 0, _a = this._textureAtlasDataMap[textureAtlasName]; _i < _a.length; _i++) {
            var textureAtlasData = _a[_i];
            var textureData = textureAtlasData.getTexture(textureName);
            if (null !== textureData) return textureData;
          }
          if (this.autoSearch) for (var k in this._textureAtlasDataMap) for (var _b = 0, _c = this._textureAtlasDataMap[k]; _b < _c.length; _b++) {
            var textureAtlasData = _c[_b];
            if (textureAtlasData.autoSearch) {
              var textureData = textureAtlasData.getTexture(textureName);
              if (null !== textureData) return textureData;
            }
          }
          return null;
        };
        BaseFactory.prototype._fillBuildArmaturePackage = function(dataPackage, dragonBonesName, armatureName, skinName, textureAtlasName) {
          var dragonBonesData = null;
          var armatureData = null;
          if (dragonBonesName.length > 0 && dragonBonesName in this._dragonBonesDataMap) {
            dragonBonesData = this._dragonBonesDataMap[dragonBonesName];
            armatureData = dragonBonesData.getArmature(armatureName);
          }
          if (null === armatureData && (0 === dragonBonesName.length || this.autoSearch)) for (var k in this._dragonBonesDataMap) {
            dragonBonesData = this._dragonBonesDataMap[k];
            if (0 === dragonBonesName.length || dragonBonesData.autoSearch) {
              armatureData = dragonBonesData.getArmature(armatureName);
              if (null !== armatureData) {
                dragonBonesName = k;
                break;
              }
            }
          }
          if (null !== armatureData) {
            dataPackage.dataName = dragonBonesName;
            dataPackage.textureAtlasName = textureAtlasName;
            dataPackage.data = dragonBonesData;
            dataPackage.armature = armatureData;
            dataPackage.skin = null;
            if (skinName.length > 0) {
              dataPackage.skin = armatureData.getSkin(skinName);
              if (null === dataPackage.skin && this.autoSearch) for (var k in this._dragonBonesDataMap) {
                var skinDragonBonesData = this._dragonBonesDataMap[k];
                var skinArmatureData = skinDragonBonesData.getArmature(skinName);
                if (null !== skinArmatureData) {
                  dataPackage.skin = skinArmatureData.defaultSkin;
                  break;
                }
              }
            }
            null === dataPackage.skin && (dataPackage.skin = armatureData.defaultSkin);
            return true;
          }
          return false;
        };
        BaseFactory.prototype._buildBones = function(dataPackage, armature) {
          for (var _i = 0, _a = dataPackage.armature.sortedBones; _i < _a.length; _i++) {
            var boneData = _a[_i];
            var bone = dragonBones.BaseObject.borrowObject(0 === boneData.type ? dragonBones.Bone : dragonBones.Surface);
            bone.init(boneData, armature);
          }
        };
        BaseFactory.prototype._buildSlots = function(dataPackage, armature) {
          var currentSkin = dataPackage.skin;
          var defaultSkin = dataPackage.armature.defaultSkin;
          if (null === currentSkin || null === defaultSkin) return;
          var skinSlots = {};
          for (var k in defaultSkin.displays) {
            var displays = defaultSkin.getDisplays(k);
            skinSlots[k] = displays;
          }
          if (currentSkin !== defaultSkin) for (var k in currentSkin.displays) {
            var displays = currentSkin.getDisplays(k);
            skinSlots[k] = displays;
          }
          for (var _i = 0, _a = dataPackage.armature.sortedSlots; _i < _a.length; _i++) {
            var slotData = _a[_i];
            var displayDatas = slotData.name in skinSlots ? skinSlots[slotData.name] : null;
            var slot = this._buildSlot(dataPackage, slotData, armature);
            slot.rawDisplayDatas = displayDatas;
            if (null !== displayDatas) {
              var displayList = new Array();
              for (var i = 0, l = dragonBones.DragonBones.webAssembly ? displayDatas.size() : displayDatas.length; i < l; ++i) {
                var displayData = dragonBones.DragonBones.webAssembly ? displayDatas.get(i) : displayDatas[i];
                null !== displayData ? displayList.push(this._getSlotDisplay(dataPackage, displayData, null, slot)) : displayList.push(null);
              }
              slot._setDisplayList(displayList);
            }
            slot._setDisplayIndex(slotData.displayIndex, true);
          }
        };
        BaseFactory.prototype._buildConstraints = function(dataPackage, armature) {
          var constraints = dataPackage.armature.constraints;
          for (var k in constraints) {
            var constraintData = constraints[k];
            switch (constraintData.type) {
             case 0:
              var ikConstraint = dragonBones.BaseObject.borrowObject(dragonBones.IKConstraint);
              ikConstraint.init(constraintData, armature);
              armature._addConstraint(ikConstraint);
              break;

             case 1:
              var pathConstraint = dragonBones.BaseObject.borrowObject(dragonBones.PathConstraint);
              pathConstraint.init(constraintData, armature);
              armature._addConstraint(pathConstraint);
              break;

             default:
              var constraint = dragonBones.BaseObject.borrowObject(dragonBones.IKConstraint);
              constraint.init(constraintData, armature);
              armature._addConstraint(constraint);
            }
          }
        };
        BaseFactory.prototype._buildChildArmature = function(dataPackage, slot, displayData) {
          slot;
          return this.buildArmature(displayData.path, null !== dataPackage ? dataPackage.dataName : "", "", null !== dataPackage ? dataPackage.textureAtlasName : "");
        };
        BaseFactory.prototype._getSlotDisplay = function(dataPackage, displayData, rawDisplayData, slot) {
          var dataName = null !== dataPackage ? dataPackage.dataName : displayData.parent.parent.parent.name;
          var display = null;
          switch (displayData.type) {
           case 0:
            var imageDisplayData = displayData;
            null !== dataPackage && dataPackage.textureAtlasName.length > 0 && (imageDisplayData.texture = this._getTextureData(dataPackage.textureAtlasName, displayData.path));
            null === imageDisplayData.texture && (imageDisplayData.texture = this._getTextureData(dataName, displayData.path));
            display = null !== rawDisplayData && 2 === rawDisplayData.type && this._isSupportMesh() ? slot.meshDisplay : slot.rawDisplay;
            break;

           case 2:
            var meshDisplayData = displayData;
            null !== dataPackage && dataPackage.textureAtlasName.length > 0 && (meshDisplayData.texture = this._getTextureData(dataPackage.textureAtlasName, meshDisplayData.path));
            null === meshDisplayData.texture && (meshDisplayData.texture = this._getTextureData(dataName, meshDisplayData.path));
            display = this._isSupportMesh() ? slot.meshDisplay : slot.rawDisplay;
            break;

           case 1:
            var armatureDisplayData = displayData;
            var childArmature = this._buildChildArmature(dataPackage, slot, displayData);
            if (null !== childArmature) {
              childArmature.inheritAnimation = armatureDisplayData.inheritAnimation;
              if (!childArmature.inheritAnimation) {
                var actions = armatureDisplayData.actions.length > 0 ? armatureDisplayData.actions : childArmature.armatureData.defaultActions;
                if (actions.length > 0) for (var _i = 0, actions_6 = actions; _i < actions_6.length; _i++) {
                  var action = actions_6[_i];
                  var eventObject = dragonBones.BaseObject.borrowObject(dragonBones.EventObject);
                  dragonBones.EventObject.actionDataToInstance(action, eventObject, slot.armature);
                  eventObject.slot = slot;
                  slot.armature._bufferAction(eventObject, false);
                } else childArmature.animation.play();
              }
              armatureDisplayData.armature = childArmature.armatureData;
            }
            display = childArmature;
          }
          return display;
        };
        BaseFactory.prototype.parseDragonBonesData = function(rawData, name, scale) {
          void 0 === name && (name = null);
          void 0 === scale && (scale = 1);
          var dataParser = rawData instanceof ArrayBuffer ? BaseFactory._binaryParser : this._dataParser;
          var dragonBonesData = dataParser.parseDragonBonesData(rawData, scale);
          while (true) {
            var textureAtlasData = this._buildTextureAtlasData(null, null);
            if (!dataParser.parseTextureAtlasData(null, textureAtlasData, scale)) {
              textureAtlasData.returnToPool();
              break;
            }
            this.addTextureAtlasData(textureAtlasData, name);
          }
          null !== dragonBonesData && this.addDragonBonesData(dragonBonesData, name);
          return dragonBonesData;
        };
        BaseFactory.prototype.parseTextureAtlasData = function(rawData, textureAtlas, name, scale) {
          void 0 === name && (name = null);
          void 0 === scale && (scale = 1);
          var textureAtlasData = this._buildTextureAtlasData(null, null);
          this._dataParser.parseTextureAtlasData(rawData, textureAtlasData, scale);
          this._buildTextureAtlasData(textureAtlasData, textureAtlas || null);
          this.addTextureAtlasData(textureAtlasData, name);
          return textureAtlasData;
        };
        BaseFactory.prototype.updateTextureAtlasData = function(name, textureAtlases) {
          var textureAtlasDatas = this.getTextureAtlasData(name);
          if (null !== textureAtlasDatas) for (var i = 0, l = textureAtlasDatas.length; i < l; ++i) i < textureAtlases.length && this._buildTextureAtlasData(textureAtlasDatas[i], textureAtlases[i]);
        };
        BaseFactory.prototype.getDragonBonesData = function(name) {
          return name in this._dragonBonesDataMap ? this._dragonBonesDataMap[name] : null;
        };
        BaseFactory.prototype.addDragonBonesData = function(data, name) {
          void 0 === name && (name = null);
          name = null !== name ? name : data.name;
          if (name in this._dragonBonesDataMap) {
            if (this._dragonBonesDataMap[name] === data) return;
            console.warn("Can not add same name data: " + name);
            return;
          }
          this._dragonBonesDataMap[name] = data;
        };
        BaseFactory.prototype.removeDragonBonesData = function(name, disposeData) {
          void 0 === disposeData && (disposeData = true);
          if (name in this._dragonBonesDataMap) {
            disposeData && this._dragonBones.bufferObject(this._dragonBonesDataMap[name]);
            delete this._dragonBonesDataMap[name];
          }
        };
        BaseFactory.prototype.getTextureAtlasData = function(name) {
          return name in this._textureAtlasDataMap ? this._textureAtlasDataMap[name] : null;
        };
        BaseFactory.prototype.addTextureAtlasData = function(data, name) {
          void 0 === name && (name = null);
          name = null !== name ? name : data.name;
          var textureAtlasList = name in this._textureAtlasDataMap ? this._textureAtlasDataMap[name] : this._textureAtlasDataMap[name] = [];
          textureAtlasList.indexOf(data) < 0 && textureAtlasList.push(data);
        };
        BaseFactory.prototype.removeTextureAtlasData = function(name, disposeData) {
          void 0 === disposeData && (disposeData = true);
          if (name in this._textureAtlasDataMap) {
            var textureAtlasDataList = this._textureAtlasDataMap[name];
            if (disposeData) for (var _i = 0, textureAtlasDataList_1 = textureAtlasDataList; _i < textureAtlasDataList_1.length; _i++) {
              var textureAtlasData = textureAtlasDataList_1[_i];
              this._dragonBones.bufferObject(textureAtlasData);
            }
            delete this._textureAtlasDataMap[name];
          }
        };
        BaseFactory.prototype.getArmatureData = function(name, dragonBonesName) {
          void 0 === dragonBonesName && (dragonBonesName = "");
          var dataPackage = new BuildArmaturePackage();
          if (!this._fillBuildArmaturePackage(dataPackage, dragonBonesName, name, "", "")) return null;
          return dataPackage.armature;
        };
        BaseFactory.prototype.clear = function(disposeData) {
          void 0 === disposeData && (disposeData = true);
          for (var k in this._dragonBonesDataMap) {
            disposeData && this._dragonBones.bufferObject(this._dragonBonesDataMap[k]);
            delete this._dragonBonesDataMap[k];
          }
          for (var k in this._textureAtlasDataMap) {
            if (disposeData) {
              var textureAtlasDataList = this._textureAtlasDataMap[k];
              for (var _i = 0, textureAtlasDataList_2 = textureAtlasDataList; _i < textureAtlasDataList_2.length; _i++) {
                var textureAtlasData = textureAtlasDataList_2[_i];
                this._dragonBones.bufferObject(textureAtlasData);
              }
            }
            delete this._textureAtlasDataMap[k];
          }
        };
        BaseFactory.prototype.buildArmature = function(armatureName, dragonBonesName, skinName, textureAtlasName) {
          void 0 === dragonBonesName && (dragonBonesName = "");
          void 0 === skinName && (skinName = "");
          void 0 === textureAtlasName && (textureAtlasName = "");
          var dataPackage = new BuildArmaturePackage();
          if (!this._fillBuildArmaturePackage(dataPackage, dragonBonesName || "", armatureName, skinName || "", textureAtlasName || "")) {
            console.warn("No armature data: " + armatureName + ", " + (null !== dragonBonesName ? dragonBonesName : ""));
            return null;
          }
          var armature = this._buildArmature(dataPackage);
          this._buildBones(dataPackage, armature);
          this._buildSlots(dataPackage, armature);
          this._buildConstraints(dataPackage, armature);
          armature.invalidUpdate(null, true);
          armature.advanceTime(0);
          return armature;
        };
        BaseFactory.prototype.replaceDisplay = function(slot, displayData, displayIndex) {
          void 0 === displayIndex && (displayIndex = -1);
          displayIndex < 0 && (displayIndex = slot.displayIndex);
          displayIndex < 0 && (displayIndex = 0);
          slot.replaceDisplayData(displayData, displayIndex);
          var displayList = slot.displayList;
          if (displayList.length <= displayIndex) {
            displayList.length = displayIndex + 1;
            for (var i = 0, l = displayList.length; i < l; ++i) displayList[i] || (displayList[i] = null);
          }
          if (null !== displayData) {
            var rawDisplayDatas = slot.rawDisplayDatas;
            var rawDisplayData = null;
            rawDisplayDatas && (dragonBones.DragonBones.webAssembly ? displayIndex < rawDisplayDatas.size() && (rawDisplayData = rawDisplayDatas.get(displayIndex)) : displayIndex < rawDisplayDatas.length && (rawDisplayData = rawDisplayDatas[displayIndex]));
            displayList[displayIndex] = this._getSlotDisplay(null, displayData, rawDisplayData, slot);
          } else displayList[displayIndex] = null;
          slot.displayList = displayList;
        };
        BaseFactory.prototype.replaceSlotDisplay = function(dragonBonesName, armatureName, slotName, displayName, slot, displayIndex) {
          void 0 === displayIndex && (displayIndex = -1);
          var armatureData = this.getArmatureData(armatureName, dragonBonesName || "");
          if (!armatureData || !armatureData.defaultSkin) return false;
          var displayData = armatureData.defaultSkin.getDisplay(slotName, displayName);
          if (!displayData) return false;
          this.replaceDisplay(slot, displayData, displayIndex);
          return true;
        };
        BaseFactory.prototype.replaceSlotDisplayList = function(dragonBonesName, armatureName, slotName, slot) {
          var armatureData = this.getArmatureData(armatureName, dragonBonesName || "");
          if (!armatureData || !armatureData.defaultSkin) return false;
          var displays = armatureData.defaultSkin.getDisplays(slotName);
          if (!displays) return false;
          var displayIndex = 0;
          for (var i = 0, l = dragonBones.DragonBones.webAssembly ? displays.size() : displays.length; i < l; ++i) {
            var displayData = dragonBones.DragonBones.webAssembly ? displays.get(i) : displays[i];
            this.replaceDisplay(slot, displayData, displayIndex++);
          }
          return true;
        };
        BaseFactory.prototype.replaceSkin = function(armature, skin, isOverride, exclude) {
          void 0 === isOverride && (isOverride = false);
          void 0 === exclude && (exclude = null);
          var success = false;
          var defaultSkin = skin.parent.defaultSkin;
          for (var _i = 0, _a = armature.getSlots(); _i < _a.length; _i++) {
            var slot = _a[_i];
            if (null !== exclude && exclude.indexOf(slot.name) >= 0) continue;
            var displays = skin.getDisplays(slot.name);
            if (!displays) {
              null !== defaultSkin && skin !== defaultSkin && (displays = defaultSkin.getDisplays(slot.name));
              if (!displays) {
                if (isOverride) {
                  slot.rawDisplayDatas = null;
                  slot.displayList = [];
                }
                continue;
              }
            }
            var displayCount = dragonBones.DragonBones.webAssembly ? displays.size() : displays.length;
            var displayList = slot.displayList;
            displayList.length = displayCount;
            for (var i = 0, l = displayCount; i < l; ++i) {
              var displayData = dragonBones.DragonBones.webAssembly ? displays.get(i) : displays[i];
              displayList[i] = null !== displayData ? this._getSlotDisplay(null, displayData, null, slot) : null;
            }
            success = true;
            slot.rawDisplayDatas = displays;
            slot.displayList = displayList;
          }
          return success;
        };
        BaseFactory.prototype.replaceAnimation = function(armature, armatureData, isOverride) {
          void 0 === isOverride && (isOverride = true);
          var skinData = armatureData.defaultSkin;
          if (null === skinData) return false;
          if (isOverride) armature.animation.animations = armatureData.animations; else {
            var rawAnimations = armature.animation.animations;
            var animations = {};
            for (var k in rawAnimations) animations[k] = rawAnimations[k];
            for (var k in armatureData.animations) animations[k] = armatureData.animations[k];
            armature.animation.animations = animations;
          }
          for (var _i = 0, _a = armature.getSlots(); _i < _a.length; _i++) {
            var slot = _a[_i];
            var index = 0;
            for (var _b = 0, _c = slot.displayList; _b < _c.length; _b++) {
              var display = _c[_b];
              if (display instanceof dragonBones.Armature) {
                var displayDatas = skinData.getDisplays(slot.name);
                if (null !== displayDatas && index < (dragonBones.DragonBones.webAssembly ? displayDatas.size() : displayDatas.length)) {
                  var displayData = dragonBones.DragonBones.webAssembly ? displayDatas.get(index) : displayDatas[index];
                  if (null !== displayData && 1 === displayData.type) {
                    var childArmatureData = this.getArmatureData(displayData.path, displayData.parent.parent.parent.name);
                    childArmatureData && this.replaceAnimation(display, childArmatureData, isOverride);
                  }
                }
              }
              index++;
            }
          }
          return true;
        };
        BaseFactory.prototype.getAllDragonBonesData = function() {
          return this._dragonBonesDataMap;
        };
        BaseFactory.prototype.getAllTextureAtlasData = function() {
          return this._textureAtlasDataMap;
        };
        Object.defineProperty(BaseFactory.prototype, "clock", {
          get: function get() {
            return this._dragonBones.clock;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(BaseFactory.prototype, "dragonBones", {
          get: function get() {
            return this._dragonBones;
          },
          enumerable: true,
          configurable: true
        });
        BaseFactory.prototype.changeSkin = function(armature, skin, exclude) {
          void 0 === exclude && (exclude = null);
          return this.replaceSkin(armature, skin, false, exclude);
        };
        BaseFactory.prototype.copyAnimationsToArmature = function(toArmature, fromArmatreName, fromSkinName, fromDragonBonesDataName, replaceOriginalAnimation) {
          void 0 === fromSkinName && (fromSkinName = "");
          void 0 === fromDragonBonesDataName && (fromDragonBonesDataName = "");
          void 0 === replaceOriginalAnimation && (replaceOriginalAnimation = true);
          fromSkinName;
          var armatureData = this.getArmatureData(fromArmatreName, fromDragonBonesDataName);
          if (!armatureData) return false;
          return this.replaceAnimation(toArmature, armatureData, replaceOriginalAnimation);
        };
        BaseFactory._objectParser = null;
        BaseFactory._binaryParser = null;
        return BaseFactory;
      })();
      dragonBones.BaseFactory = BaseFactory;
      var BuildArmaturePackage = (function() {
        function BuildArmaturePackage() {
          this.dataName = "";
          this.textureAtlasName = "";
          this.skin = null;
        }
        return BuildArmaturePackage;
      })();
      dragonBones.BuildArmaturePackage = BuildArmaturePackage;
    })(dragonBones || (dragonBones = {}));
    module.exports = dragonBones;
  }), {} ],
  289: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _assembler = _interopRequireDefault(require("../../cocos2d/core/renderer/assembler"));
    var _mat = _interopRequireDefault(require("../../cocos2d/core/value-types/mat4"));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    function _inheritsLoose(subClass, superClass) {
      subClass.prototype = Object.create(superClass.prototype);
      subClass.prototype.constructor = subClass;
      subClass.__proto__ = superClass;
    }
    var Armature = require("./ArmatureDisplay");
    var RenderFlow = require("../../cocos2d/core/renderer/render-flow");
    var gfx = cc.gfx;
    var NEED_COLOR = 1;
    var NEED_BATCH = 16;
    var _boneColor = cc.color(255, 0, 0, 255);
    var _slotColor = cc.color(0, 0, 255, 255);
    var _originColor = cc.color(0, 255, 0, 255);
    var _nodeR, _nodeG, _nodeB, _nodeA, _premultipliedAlpha, _multiply, _mustFlush, _buffer, _node, _renderer, _comp, _vfOffset, _indexOffset, _vertexOffset, _vertexCount, _indexCount, _x, _y, _c, _r, _g, _b, _a, _handleVal, _m00, _m04, _m12, _m01, _m05, _m13;
    function _getSlotMaterial(tex, blendMode) {
      if (!tex) return null;
      var src, dst;
      switch (blendMode) {
       case 1:
        src = _premultipliedAlpha ? cc.macro.ONE : cc.macro.SRC_ALPHA;
        dst = cc.macro.ONE;
        break;

       case 10:
        src = cc.macro.DST_COLOR;
        dst = cc.macro.ONE_MINUS_SRC_ALPHA;
        break;

       case 12:
        src = cc.macro.ONE;
        dst = cc.macro.ONE_MINUS_SRC_COLOR;
        break;

       case 0:
       default:
        src = _premultipliedAlpha ? cc.macro.ONE : cc.macro.SRC_ALPHA;
        dst = cc.macro.ONE_MINUS_SRC_ALPHA;
      }
      var useModel = !_comp.enableBatch;
      var baseMaterial = _comp._materials[0];
      if (!baseMaterial) return null;
      var materialCache = _comp._materialCache;
      var key = tex.getId() + src + dst + useModel;
      var material = materialCache[key];
      if (!material) {
        if (materialCache.baseMaterial) material = cc.MaterialVariant.create(baseMaterial); else {
          material = baseMaterial;
          materialCache.baseMaterial = baseMaterial;
        }
        material.define("CC_USE_MODEL", useModel);
        material.setProperty("texture", tex);
        material.setBlend(true, gfx.BLEND_FUNC_ADD, src, dst, gfx.BLEND_FUNC_ADD, src, dst);
        materialCache[key] = material;
      }
      return material;
    }
    function _handleColor(color, parentOpacity) {
      _a = color.a * parentOpacity * _nodeA;
      _multiply = _premultipliedAlpha ? _a / 255 : 1;
      _r = color.r * _nodeR * _multiply;
      _g = color.g * _nodeG * _multiply;
      _b = color.b * _nodeB * _multiply;
      _c = (_a << 24 >>> 0) + (_b << 16) + (_g << 8) + _r;
    }
    var ArmatureAssembler = (function(_Assembler) {
      _inheritsLoose(ArmatureAssembler, _Assembler);
      function ArmatureAssembler() {
        return _Assembler.apply(this, arguments) || this;
      }
      var _proto = ArmatureAssembler.prototype;
      _proto.updateRenderData = function updateRenderData(comp, batchData) {};
      _proto.realTimeTraverse = function realTimeTraverse(armature, parentMat, parentOpacity) {
        var slots = armature._slots;
        var vbuf, ibuf, uintbuf;
        var material;
        var vertices, indices;
        var slotColor;
        var slot;
        var slotMat;
        var slotMatm;
        var offsetInfo;
        for (var i = 0, l = slots.length; i < l; i++) {
          slot = slots[i];
          slotColor = slot._color;
          if (!slot._visible || !slot._displayData) continue;
          parentMat ? slot._mulMat(slot._worldMatrix, parentMat, slot._matrix) : _mat["default"].copy(slot._worldMatrix, slot._matrix);
          if (slot.childArmature) {
            this.realTimeTraverse(slot.childArmature, slot._worldMatrix, parentOpacity * slotColor.a / 255);
            continue;
          }
          material = _getSlotMaterial(slot.getTexture(), slot._blendMode);
          if (!material) continue;
          if (_mustFlush || material.getHash() !== _renderer.material.getHash()) {
            _mustFlush = false;
            _renderer._flush();
            _renderer.node = _node;
            _renderer.material = material;
          }
          _handleColor(slotColor, parentOpacity);
          slotMat = slot._worldMatrix;
          slotMatm = slotMat.m;
          vertices = slot._localVertices;
          _vertexCount = vertices.length >> 2;
          indices = slot._indices;
          _indexCount = indices.length;
          offsetInfo = _buffer.request(_vertexCount, _indexCount);
          _indexOffset = offsetInfo.indiceOffset;
          _vfOffset = offsetInfo.byteOffset >> 2;
          _vertexOffset = offsetInfo.vertexOffset;
          vbuf = _buffer._vData;
          ibuf = _buffer._iData;
          uintbuf = _buffer._uintVData;
          _m00 = slotMatm[0];
          _m04 = slotMatm[4];
          _m12 = slotMatm[12];
          _m01 = slotMatm[1];
          _m05 = slotMatm[5];
          _m13 = slotMatm[13];
          for (var vi = 0, vl = vertices.length; vi < vl; ) {
            _x = vertices[vi++];
            _y = vertices[vi++];
            vbuf[_vfOffset++] = _x * _m00 + _y * _m04 + _m12;
            vbuf[_vfOffset++] = _x * _m01 + _y * _m05 + _m13;
            vbuf[_vfOffset++] = vertices[vi++];
            vbuf[_vfOffset++] = vertices[vi++];
            uintbuf[_vfOffset++] = _c;
          }
          for (var ii = 0, il = indices.length; ii < il; ii++) ibuf[_indexOffset++] = _vertexOffset + indices[ii];
        }
      };
      _proto.cacheTraverse = function cacheTraverse(frame, parentMat) {
        if (!frame) return;
        var segments = frame.segments;
        if (0 == segments.length) return;
        var vbuf, ibuf, uintbuf;
        var material;
        var offsetInfo;
        var vertices = frame.vertices;
        var indices = frame.indices;
        var frameVFOffset = 0, frameIndexOffset = 0, segVFCount = 0;
        if (parentMat) {
          var parentMatm = parentMat.m;
          _m00 = parentMatm[0];
          _m01 = parentMatm[1];
          _m04 = parentMatm[4];
          _m05 = parentMatm[5];
          _m12 = parentMatm[12];
          _m13 = parentMatm[13];
        }
        var justTranslate = 1 === _m00 && 0 === _m01 && 0 === _m04 && 1 === _m05;
        var needBatch = _handleVal & NEED_BATCH;
        var calcTranslate = needBatch && justTranslate;
        var colorOffset = 0;
        var colors = frame.colors;
        var nowColor = colors[colorOffset++];
        var maxVFOffset = nowColor.vfOffset;
        _handleColor(nowColor, 1);
        for (var i = 0, n = segments.length; i < n; i++) {
          var segInfo = segments[i];
          material = _getSlotMaterial(segInfo.tex, segInfo.blendMode);
          if (_mustFlush || material.getHash() !== _renderer.material.getHash()) {
            _mustFlush = false;
            _renderer._flush();
            _renderer.node = _node;
            _renderer.material = material;
          }
          _vertexCount = segInfo.vertexCount;
          _indexCount = segInfo.indexCount;
          offsetInfo = _buffer.request(_vertexCount, _indexCount);
          _indexOffset = offsetInfo.indiceOffset;
          _vertexOffset = offsetInfo.vertexOffset;
          _vfOffset = offsetInfo.byteOffset >> 2;
          vbuf = _buffer._vData;
          ibuf = _buffer._iData;
          uintbuf = _buffer._uintVData;
          for (var ii = _indexOffset, il = _indexOffset + _indexCount; ii < il; ii++) ibuf[ii] = _vertexOffset + indices[frameIndexOffset++];
          segVFCount = segInfo.vfCount;
          vbuf.set(vertices.subarray(frameVFOffset, frameVFOffset + segVFCount), _vfOffset);
          frameVFOffset += segVFCount;
          if (calcTranslate) for (var _ii = _vfOffset, _il = _vfOffset + segVFCount; _ii < _il; _ii += 5) {
            vbuf[_ii] += _m12;
            vbuf[_ii + 1] += _m13;
          } else if (needBatch) for (var _ii2 = _vfOffset, _il2 = _vfOffset + segVFCount; _ii2 < _il2; _ii2 += 5) {
            _x = vbuf[_ii2];
            _y = vbuf[_ii2 + 1];
            vbuf[_ii2] = _x * _m00 + _y * _m04 + _m12;
            vbuf[_ii2 + 1] = _x * _m01 + _y * _m05 + _m13;
          }
          if (!(_handleVal & NEED_COLOR)) continue;
          var frameColorOffset = frameVFOffset - segVFCount;
          for (var _ii3 = _vfOffset + 4, _il3 = _vfOffset + 4 + segVFCount; _ii3 < _il3; _ii3 += 5, 
          frameColorOffset += 5) {
            if (frameColorOffset >= maxVFOffset) {
              nowColor = colors[colorOffset++];
              _handleColor(nowColor, 1);
              maxVFOffset = nowColor.vfOffset;
            }
            uintbuf[_ii3] = _c;
          }
        }
      };
      _proto.fillBuffers = function fillBuffers(comp, renderer) {
        comp.node._renderFlag |= RenderFlow.FLAG_UPDATE_RENDER_DATA;
        var armature = comp._armature;
        if (!armature) return;
        _mustFlush = true;
        _premultipliedAlpha = comp.premultipliedAlpha;
        _node = comp.node;
        _buffer = renderer._meshBuffer;
        _renderer = renderer;
        _comp = comp;
        _handleVal = 0;
        var nodeColor = _node._color;
        _nodeR = nodeColor.r / 255;
        _nodeG = nodeColor.g / 255;
        _nodeB = nodeColor.b / 255;
        _nodeA = nodeColor.a / 255;
        4294967295 !== nodeColor._val && (_handleVal |= NEED_COLOR);
        var worldMat = void 0;
        if (_comp.enableBatch) {
          worldMat = _node._worldMatrix;
          _mustFlush = false;
          _handleVal |= NEED_BATCH;
        }
        if (comp.isAnimationCached()) this.cacheTraverse(comp._curFrame, worldMat); else {
          this.realTimeTraverse(armature, worldMat, 1);
          var graphics = comp._debugDraw;
          if (comp.debugBones && graphics) {
            graphics.clear();
            graphics.lineWidth = 5;
            graphics.strokeColor = _boneColor;
            graphics.fillColor = _slotColor;
            var bones = armature.getBones();
            for (var i = 0, l = bones.length; i < l; i++) {
              var bone = bones[i];
              var boneLength = Math.max(bone.boneData.length, 5);
              var startX = bone.globalTransformMatrix.tx;
              var startY = bone.globalTransformMatrix.ty;
              var endX = startX + bone.globalTransformMatrix.a * boneLength;
              var endY = startY + bone.globalTransformMatrix.b * boneLength;
              graphics.moveTo(startX, startY);
              graphics.lineTo(endX, endY);
              graphics.stroke();
              graphics.circle(startX, startY, 2 * Math.PI);
              graphics.fill();
              0 === i && (graphics.fillColor = _originColor);
            }
          }
        }
        renderer.worldMatDirty++;
        comp.attachUtil._syncAttachedNode();
        _node = void 0;
        _buffer = void 0;
        _renderer = void 0;
        _comp = void 0;
      };
      _proto.postFillBuffers = function postFillBuffers(comp, renderer) {
        renderer.worldMatDirty--;
      };
      return ArmatureAssembler;
    })(_assembler["default"]);
    exports["default"] = ArmatureAssembler;
    _assembler["default"].register(Armature, ArmatureAssembler);
    module.exports = exports["default"];
  }), {
    "../../cocos2d/core/renderer/assembler": 165,
    "../../cocos2d/core/renderer/render-flow": 169,
    "../../cocos2d/core/value-types/mat4": 226,
    "./ArmatureDisplay": 279
  } ],
  290: [ (function(require, module, exports) {
    "use strict";
    var _mat = _interopRequireDefault(require("../../cocos2d/core/value-types/mat4"));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    var RenderFlow = require("../../cocos2d/core/renderer/render-flow");
    var FLAG_TRANSFORM = RenderFlow.FLAG_TRANSFORM;
    var EmptyHandle = function EmptyHandle() {};
    var ATTACHED_ROOT_NAME = "ATTACHED_NODE_TREE";
    var ATTACHED_PRE_NAME = "ATTACHED_NODE:";
    var limitNode = function limitNode(node) {
      Object.defineProperty(node, "_worldMatDirty", {
        get: function get() {
          return true;
        },
        set: function set(value) {}
      });
      node._calculWorldMatrix = EmptyHandle;
      node._mulMat = EmptyHandle;
    };
    var _tempMat4 = new _mat["default"]();
    var AttachUtil = cc.Class({
      name: "sp.AttachUtil",
      ctor: function ctor() {
        this._inited = false;
        this._skeleton = null;
        this._skeletonNode = null;
        this._skeletonComp = null;
        this._attachedRootNode = null;
        this._attachedNodeArray = [];
        this._boneIndexToNode = {};
      },
      init: function init(skeletonComp) {
        this._inited = true;
        this._skeleton = skeletonComp._skeleton;
        this._skeletonNode = skeletonComp.node;
        this._skeletonComp = skeletonComp;
      },
      reset: function reset() {
        this._inited = false;
        this._skeleton = null;
        this._skeletonNode = null;
        this._skeletonComp = null;
      },
      _prepareAttachNode: function _prepareAttachNode() {
        var armature = this._skeleton;
        if (!armature) return;
        var rootNode = this._skeletonNode.getChildByName(ATTACHED_ROOT_NAME);
        if (!rootNode || !rootNode.isValid) {
          rootNode = new cc.Node(ATTACHED_ROOT_NAME);
          limitNode(rootNode);
          this._skeletonNode.addChild(rootNode);
        }
        var isCached = this._skeletonComp.isAnimationCached();
        isCached && this._skeletonComp._frameCache && this._skeletonComp._frameCache.enableCacheAttachedInfo();
        this._attachedRootNode = rootNode;
        return rootNode;
      },
      _buildBoneAttachedNode: function _buildBoneAttachedNode(bone, boneIndex) {
        var boneNodeName = ATTACHED_PRE_NAME + bone.data.name;
        var boneNode = new cc.Node(boneNodeName);
        this._buildBoneRelation(boneNode, bone, boneIndex);
        return boneNode;
      },
      _buildBoneRelation: function _buildBoneRelation(boneNode, bone, boneIndex) {
        limitNode(boneNode);
        boneNode._bone = bone;
        boneNode._boneIndex = boneIndex;
        this._attachedNodeArray.push(boneNode);
        this._boneIndexToNode[boneIndex] = boneNode;
      },
      getAttachedRootNode: function getAttachedRootNode() {
        return this._attachedRootNode;
      },
      getAttachedNodes: function getAttachedNodes(boneName) {
        var nodeArray = this._attachedNodeArray;
        var res = [];
        if (!this._inited) return res;
        for (var i = 0, n = nodeArray.length; i < n; i++) {
          var boneNode = nodeArray[i];
          if (!boneNode || !boneNode.isValid) continue;
          boneNode.name === ATTACHED_PRE_NAME + boneName && res.push(boneNode);
        }
        return res;
      },
      _rebuildNodeArray: function _rebuildNodeArray() {
        var findMap = this._boneIndexToNode = {};
        var oldNodeArray = this._attachedNodeArray;
        var nodeArray = this._attachedNodeArray = [];
        for (var i = 0, n = oldNodeArray.length; i < n; i++) {
          var boneNode = oldNodeArray[i];
          if (!boneNode || !boneNode.isValid || boneNode._toRemove) continue;
          nodeArray.push(boneNode);
          findMap[boneNode._boneIndex] = boneNode;
        }
      },
      _sortNodeArray: function _sortNodeArray() {
        var nodeArray = this._attachedNodeArray;
        nodeArray.sort((function(a, b) {
          return a._boneIndex < b._boneIndex ? -1 : 1;
        }));
      },
      _getNodeByBoneIndex: function _getNodeByBoneIndex(boneIndex) {
        var findMap = this._boneIndexToNode;
        var boneNode = findMap[boneIndex];
        if (!boneNode || !boneNode.isValid) return null;
        return boneNode;
      },
      destroyAttachedNodes: function destroyAttachedNodes(boneName) {
        if (!this._inited) return;
        var nodeArray = this._attachedNodeArray;
        var markTree = function markTree(rootNode) {
          var children = rootNode.children;
          for (var i = 0, n = children.length; i < n; i++) {
            var c = children[i];
            c && markTree(c);
          }
          rootNode._toRemove = true;
        };
        for (var i = 0, n = nodeArray.length; i < n; i++) {
          var boneNode = nodeArray[i];
          if (!boneNode || !boneNode.isValid) continue;
          var delName = boneNode.name.split(ATTACHED_PRE_NAME)[1];
          if (delName === boneName) {
            markTree(boneNode);
            boneNode.removeFromParent(true);
            boneNode.destroy();
            nodeArray[i] = null;
          }
        }
        this._rebuildNodeArray();
      },
      generateAttachedNodes: function generateAttachedNodes(boneName) {
        var targetNodes = [];
        if (!this._inited) return targetNodes;
        var rootNode = this._prepareAttachNode();
        if (!rootNode) return targetNodes;
        var res = [];
        var bones = this._skeleton.bones;
        for (var i = 0, n = bones.length; i < n; i++) {
          var bone = bones[i];
          var boneData = bone.data;
          boneData.name == boneName && res.push(bone);
        }
        var buildBoneTree = function(bone) {
          if (!bone) return;
          var boneData = bone.data;
          var boneNode = this._getNodeByBoneIndex(boneData.index);
          if (boneNode) return boneNode;
          boneNode = this._buildBoneAttachedNode(bone, boneData.index);
          var parentBoneNode = buildBoneTree(bone.parent) || rootNode;
          boneNode.parent = parentBoneNode;
          return boneNode;
        }.bind(this);
        for (var _i = 0, _n = res.length; _i < _n; _i++) {
          var targetNode = buildBoneTree(res[_i]);
          targetNodes.push(targetNode);
        }
        this._sortNodeArray();
        return targetNodes;
      },
      destroyAllAttachedNodes: function destroyAllAttachedNodes() {
        this._attachedRootNode = null;
        this._attachedNodeArray.length = 0;
        this._boneIndexToNode = {};
        if (!this._inited) return;
        var rootNode = this._skeletonNode.getChildByName(ATTACHED_ROOT_NAME);
        if (rootNode) {
          rootNode.removeFromParent(true);
          rootNode.destroy();
          rootNode = null;
        }
      },
      generateAllAttachedNodes: function generateAllAttachedNodes() {
        if (!this._inited) return;
        this._boneIndexToNode = {};
        this._attachedNodeArray.length = 0;
        var rootNode = this._prepareAttachNode();
        if (!rootNode) return;
        var bones = this._skeleton.bones;
        for (var i = 0, n = bones.length; i < n; i++) {
          var bone = bones[i];
          var boneData = bone.data;
          var parentNode = null;
          if (bone.parent) {
            var parentIndex = bone.parent.data.index;
            parentNode = this._boneIndexToNode[parentIndex];
          } else parentNode = rootNode;
          if (parentNode) {
            var boneNode = parentNode.getChildByName(ATTACHED_PRE_NAME + boneData.name);
            if (boneNode && boneNode.isValid) this._buildBoneRelation(boneNode, bone, boneData.index); else {
              boneNode = this._buildBoneAttachedNode(bone, boneData.index);
              parentNode.addChild(boneNode);
            }
          }
        }
        return rootNode;
      },
      _hasAttachedNode: function _hasAttachedNode() {
        if (!this._inited) return false;
        var attachedRootNode = this._skeletonNode.getChildByName(ATTACHED_ROOT_NAME);
        return !!attachedRootNode;
      },
      _associateAttachedNode: function _associateAttachedNode() {
        if (!this._inited) return;
        var rootNode = this._skeletonNode.getChildByName(ATTACHED_ROOT_NAME);
        if (!rootNode || !rootNode.isValid) return;
        this._attachedRootNode = rootNode;
        this._boneIndexToNode = {};
        var nodeArray = this._attachedNodeArray;
        nodeArray.length = 0;
        limitNode(rootNode);
        true;
        var isCached = this._skeletonComp.isAnimationCached();
        isCached && this._skeletonComp._frameCache && this._skeletonComp._frameCache.enableCacheAttachedInfo();
        var bones = this._skeleton.bones;
        for (var i = 0, n = bones.length; i < n; i++) {
          var bone = bones[i];
          var boneData = bone.data;
          var parentNode = null;
          if (bone.parent) {
            var parentIndex = bone.parent.data.index;
            parentNode = this._boneIndexToNode[parentIndex];
          } else parentNode = rootNode;
          if (parentNode) {
            var boneNode = parentNode.getChildByName(ATTACHED_PRE_NAME + boneData.name);
            boneNode && boneNode.isValid && this._buildBoneRelation(boneNode, bone, boneData.index);
          }
        }
      },
      _syncAttachedNode: function _syncAttachedNode() {
        if (!this._inited) return;
        var rootNode = this._attachedRootNode;
        var nodeArray = this._attachedNodeArray;
        if (!rootNode || !rootNode.isValid) {
          this._attachedRootNode = null;
          nodeArray.length = 0;
          return;
        }
        var rootMatrix = this._skeletonNode._worldMatrix;
        _mat["default"].copy(rootNode._worldMatrix, rootMatrix);
        rootNode._renderFlag &= ~FLAG_TRANSFORM;
        var boneInfos = null;
        var isCached = this._skeletonComp.isAnimationCached();
        boneInfos = isCached ? this._skeletonComp._curFrame && this._skeletonComp._curFrame.boneInfos : this._skeleton.bones;
        if (!boneInfos) return;
        var mulMat = this._skeletonNode._mulMat;
        var matrixHandle = function matrixHandle(nodeMat, parentMat, bone) {
          var tm = _tempMat4.m;
          tm[0] = bone.a;
          tm[1] = bone.c;
          tm[4] = bone.b;
          tm[5] = bone.d;
          tm[12] = bone.worldX;
          tm[13] = bone.worldY;
          mulMat(nodeMat, parentMat, _tempMat4);
        };
        var nodeArrayDirty = false;
        for (var i = 0, n = nodeArray.length; i < n; i++) {
          var boneNode = nodeArray[i];
          if (!boneNode || !boneNode.isValid) {
            nodeArray[i] = null;
            nodeArrayDirty = true;
            continue;
          }
          var bone = boneInfos[boneNode._boneIndex];
          if (!bone) {
            boneNode.removeFromParent(true);
            boneNode.destroy();
            nodeArray[i] = null;
            nodeArrayDirty = true;
            continue;
          }
          matrixHandle(boneNode._worldMatrix, rootNode._worldMatrix, bone);
          boneNode._renderFlag &= ~FLAG_TRANSFORM;
        }
        nodeArrayDirty && this._rebuildNodeArray();
      }
    });
    module.exports = sp.AttachUtil = AttachUtil;
  }), {
    "../../cocos2d/core/renderer/render-flow": 169,
    "../../cocos2d/core/value-types/mat4": 226
  } ],
  291: [ (function(require, module, exports) {
    "use strict";
    var TrackEntryListeners = require("./track-entry-listeners");
    var RenderComponent = require("../../cocos2d/core/components/CCRenderComponent");
    var spine = require("./lib/spine");
    var Graphics = require("../../cocos2d/core/graphics/graphics");
    var RenderFlow = require("../../cocos2d/core/renderer/render-flow");
    var FLAG_POST_RENDER = RenderFlow.FLAG_POST_RENDER;
    var SkeletonCache = require("./skeleton-cache");
    var AttachUtil = require("./AttachUtil");
    var DefaultSkinsEnum = cc.Enum({
      default: -1
    });
    var DefaultAnimsEnum = cc.Enum({
      "<None>": 0
    });
    var AnimationCacheMode = cc.Enum({
      REALTIME: 0,
      SHARED_CACHE: 1,
      PRIVATE_CACHE: 2
    });
    function setEnumAttr(obj, propName, enumDef) {
      cc.Class.Attr.setClassAttr(obj, propName, "type", "Enum");
      cc.Class.Attr.setClassAttr(obj, propName, "enumList", cc.Enum.getList(enumDef));
    }
    sp.Skeleton = cc.Class({
      name: "sp.Skeleton",
      extends: RenderComponent,
      editor: false,
      statics: {
        AnimationCacheMode: AnimationCacheMode
      },
      properties: {
        paused: {
          default: false,
          visible: false
        },
        skeletonData: {
          default: null,
          type: sp.SkeletonData,
          notify: function notify() {
            this.defaultSkin = "";
            this.defaultAnimation = "";
            false;
            this._updateSkeletonData();
          },
          tooltip: false
        },
        defaultSkin: {
          default: "",
          visible: false
        },
        defaultAnimation: {
          default: "",
          visible: false
        },
        animation: {
          get: function get() {
            if (this.isAnimationCached()) return this._animationName;
            var entry = this.getCurrent(0);
            return entry && entry.animation.name || "";
          },
          set: function set(value) {
            this.defaultAnimation = value;
            if (value) this.setAnimation(0, value, this.loop); else if (!this.isAnimationCached()) {
              this.clearTrack(0);
              this.setToSetupPose();
            }
          },
          visible: false
        },
        _defaultSkinIndex: {
          get: function get() {
            if (this.skeletonData) {
              var skinsEnum = this.skeletonData.getSkinsEnum();
              if (skinsEnum) if ("" === this.defaultSkin) {
                if (skinsEnum.hasOwnProperty(0)) {
                  this._defaultSkinIndex = 0;
                  return 0;
                }
              } else {
                var skinIndex = skinsEnum[this.defaultSkin];
                if (void 0 !== skinIndex) return skinIndex;
              }
            }
            return 0;
          },
          set: function set(value) {
            var skinsEnum;
            this.skeletonData && (skinsEnum = this.skeletonData.getSkinsEnum());
            if (!skinsEnum) return cc.errorID("", this.name);
            var skinName = skinsEnum[value];
            if (void 0 !== skinName) {
              this.defaultSkin = skinName;
              this.setSkin(this.defaultSkin);
              false;
            } else cc.errorID(7501, this.name);
          },
          type: DefaultSkinsEnum,
          visible: true,
          displayName: "Default Skin",
          tooltip: false
        },
        _animationIndex: {
          get: function get() {
            var animationName = this.animation;
            if (this.skeletonData && animationName) {
              var animsEnum = this.skeletonData.getAnimsEnum();
              if (animsEnum) {
                var animIndex = animsEnum[animationName];
                if (void 0 !== animIndex) return animIndex;
              }
            }
            return 0;
          },
          set: function set(value) {
            if (0 === value) {
              this.animation = "";
              return;
            }
            var animsEnum;
            this.skeletonData && (animsEnum = this.skeletonData.getAnimsEnum());
            if (!animsEnum) return cc.errorID(7502, this.name);
            var animName = animsEnum[value];
            void 0 !== animName ? this.animation = animName : cc.errorID(7503, this.name);
          },
          type: DefaultAnimsEnum,
          visible: true,
          displayName: "Animation",
          tooltip: false
        },
        _preCacheMode: -1,
        _cacheMode: AnimationCacheMode.REALTIME,
        _defaultCacheMode: {
          default: 0,
          type: AnimationCacheMode,
          notify: function notify() {
            this.setAnimationCacheMode(this._defaultCacheMode);
          },
          editorOnly: true,
          visible: true,
          animatable: false,
          displayName: "Animation Cache Mode",
          tooltip: false
        },
        loop: {
          default: true,
          tooltip: false
        },
        premultipliedAlpha: {
          default: true,
          tooltip: false
        },
        timeScale: {
          default: 1,
          tooltip: false
        },
        debugSlots: {
          default: false,
          editorOnly: true,
          tooltip: false,
          notify: function notify() {
            this._updateDebugDraw();
          }
        },
        debugBones: {
          default: false,
          editorOnly: true,
          tooltip: false,
          notify: function notify() {
            this._updateDebugDraw();
          }
        },
        debugMesh: {
          default: false,
          editorOnly: true,
          tooltip: false,
          notify: function notify() {
            this._updateDebugDraw();
          }
        },
        useTint: {
          default: false,
          tooltip: false,
          notify: function notify() {
            this._updateUseTint();
          }
        },
        enableBatch: {
          default: false,
          notify: function notify() {
            this._updateBatch();
          },
          tooltip: false
        },
        _accTime: 0,
        _playCount: 0,
        _frameCache: null,
        _curFrame: null,
        _skeletonCache: null,
        _animationName: "",
        _animationQueue: [],
        _headAniInfo: null,
        _playTimes: 0,
        _isAniComplete: true
      },
      ctor: function ctor() {
        this._effectDelegate = null;
        this._skeleton = null;
        this._rootBone = null;
        this._listener = null;
        this._materialCache = {};
        this._debugRenderer = null;
        this._startSlotIndex = -1;
        this._endSlotIndex = -1;
        this._startEntry = {
          animation: {
            name: ""
          },
          trackIndex: 0
        };
        this._endEntry = {
          animation: {
            name: ""
          },
          trackIndex: 0
        };
        this.attachUtil = new AttachUtil();
      },
      _getDefaultMaterial: function _getDefaultMaterial() {
        return cc.Material.getBuiltinMaterial("2d-spine");
      },
      _updateMaterial: function _updateMaterial() {
        var useTint = this.useTint || this.isAnimationCached() && true;
        var baseMaterial = this.getMaterial(0);
        if (baseMaterial) {
          baseMaterial.define("USE_TINT", useTint);
          baseMaterial.define("CC_USE_MODEL", !this.enableBatch);
          var srcBlendFactor = this.premultipliedAlpha ? cc.gfx.BLEND_ONE : cc.gfx.BLEND_SRC_ALPHA;
          var dstBlendFactor = cc.gfx.BLEND_ONE_MINUS_SRC_ALPHA;
          baseMaterial.setBlend(true, cc.gfx.BLEND_FUNC_ADD, srcBlendFactor, srcBlendFactor, cc.gfx.BLEND_FUNC_ADD, dstBlendFactor, dstBlendFactor);
        }
        this._materialCache = {};
      },
      disableRender: function disableRender() {
        this._super();
        this.node._renderFlag &= ~FLAG_POST_RENDER;
      },
      markForRender: function markForRender(enable) {
        this._super(enable);
        enable ? this.node._renderFlag |= FLAG_POST_RENDER : this.node._renderFlag &= ~FLAG_POST_RENDER;
      },
      _updateUseTint: function _updateUseTint() {
        var baseMaterial = this.getMaterial(0);
        if (baseMaterial) {
          var useTint = this.useTint || this.isAnimationCached() && true;
          baseMaterial.define("USE_TINT", useTint);
        }
        this._materialCache = {};
      },
      _updateBatch: function _updateBatch() {
        var baseMaterial = this.getMaterial(0);
        baseMaterial && baseMaterial.define("CC_USE_MODEL", !this.enableBatch);
        this._materialCache = {};
      },
      _validateRender: function _validateRender() {
        var skeletonData = this.skeletonData;
        if (!skeletonData || !skeletonData.isTexturesLoaded()) {
          this.disableRender();
          return;
        }
        this._super();
      },
      setSkeletonData: function setSkeletonData(skeletonData) {
        null != skeletonData.width && null != skeletonData.height && this.node.setContentSize(skeletonData.width, skeletonData.height);
        true;
        if (this._cacheMode === AnimationCacheMode.SHARED_CACHE) this._skeletonCache = SkeletonCache.sharedCache; else if (this._cacheMode === AnimationCacheMode.PRIVATE_CACHE) {
          this._skeletonCache = new SkeletonCache();
          this._skeletonCache.enablePrivateMode();
        }
        if (this.isAnimationCached()) {
          (this.debugBones || this.debugSlots) && cc.warn("Debug bones or slots is invalid in cached mode");
          var skeletonInfo = this._skeletonCache.getSkeletonCache(this.skeletonData._uuid, skeletonData);
          this._skeleton = skeletonInfo.skeleton;
          this._clipper = skeletonInfo.clipper;
          this._rootBone = this._skeleton.getRootBone();
        } else {
          this._skeleton = new spine.Skeleton(skeletonData);
          this._clipper = new spine.SkeletonClipping();
          this._rootBone = this._skeleton.getRootBone();
        }
        this.markForRender(true);
      },
      setSlotsRange: function setSlotsRange(startSlotIndex, endSlotIndex) {
        if (this.isAnimationCached()) cc.warn("Slots visible range can not be modified in cached mode."); else {
          this._startSlotIndex = startSlotIndex;
          this._endSlotIndex = endSlotIndex;
        }
      },
      setAnimationStateData: function setAnimationStateData(stateData) {
        if (this.isAnimationCached()) cc.warn("'setAnimationStateData' interface can not be invoked in cached mode."); else {
          var state = new spine.AnimationState(stateData);
          if (this._listener) {
            this._state && this._state.removeListener(this._listener);
            state.addListener(this._listener);
          }
          this._state = state;
        }
      },
      __preload: function __preload() {
        this._super();
        var Flags;
        false;
        var children = this.node.children;
        for (var i = 0, n = children.length; i < n; i++) {
          var child = children[i];
          child && "DEBUG_DRAW_NODE" === child._name && child.destroy();
        }
        this._updateSkeletonData();
        this._updateDebugDraw();
        this._updateUseTint();
        this._updateBatch();
      },
      setAnimationCacheMode: function setAnimationCacheMode(cacheMode) {
        if (this._preCacheMode !== cacheMode) {
          this._cacheMode = cacheMode;
          this._updateSkeletonData();
          this._updateUseTint();
        }
      },
      isAnimationCached: function isAnimationCached() {
        false;
        return this._cacheMode !== AnimationCacheMode.REALTIME;
      },
      update: function update(dt) {
        false;
        if (this.paused) return;
        dt *= this.timeScale * sp.timeScale;
        if (this.isAnimationCached()) {
          if (this._isAniComplete) {
            if (0 === this._animationQueue.length && !this._headAniInfo) {
              var frameCache = this._frameCache;
              if (frameCache && frameCache.isInvalid()) {
                frameCache.updateToFrame();
                var frames = frameCache.frames;
                this._curFrame = frames[frames.length - 1];
              }
              return;
            }
            this._headAniInfo || (this._headAniInfo = this._animationQueue.shift());
            this._accTime += dt;
            if (this._accTime > this._headAniInfo.delay) {
              var aniInfo = this._headAniInfo;
              this._headAniInfo = null;
              this.setAnimation(0, aniInfo.animationName, aniInfo.loop);
            }
            return;
          }
          this._updateCache(dt);
        } else this._updateRealtime(dt);
      },
      _emitCacheCompleteEvent: function _emitCacheCompleteEvent() {
        if (!this._listener) return;
        this._endEntry.animation.name = this._animationName;
        this._listener.complete && this._listener.complete(this._endEntry);
        this._listener.end && this._listener.end(this._endEntry);
      },
      _updateCache: function _updateCache(dt) {
        var frameCache = this._frameCache;
        if (!frameCache.isInited()) return;
        var frames = frameCache.frames;
        var frameTime = SkeletonCache.FrameTime;
        if (0 == this._accTime && 0 == this._playCount) {
          this._startEntry.animation.name = this._animationName;
          this._listener && this._listener.start && this._listener.start(this._startEntry);
        }
        this._accTime += dt;
        var frameIdx = Math.floor(this._accTime / frameTime);
        frameCache.isCompleted || frameCache.updateToFrame(frameIdx);
        if (frameCache.isCompleted && frameIdx >= frames.length) {
          this._playCount++;
          if (this._playTimes > 0 && this._playCount >= this._playTimes) {
            this._curFrame = frames[frames.length - 1];
            this._accTime = 0;
            this._playCount = 0;
            this._isAniComplete = true;
            this._emitCacheCompleteEvent();
            return;
          }
          this._accTime = 0;
          frameIdx = 0;
          this._emitCacheCompleteEvent();
        }
        this._curFrame = frames[frameIdx];
      },
      _updateRealtime: function _updateRealtime(dt) {
        var skeleton = this._skeleton;
        var state = this._state;
        if (skeleton) {
          skeleton.update(dt);
          if (state) {
            state.update(dt);
            state.apply(skeleton);
          }
        }
      },
      setVertexEffectDelegate: function setVertexEffectDelegate(effectDelegate) {
        this._effectDelegate = effectDelegate;
      },
      updateWorldTransform: function updateWorldTransform() {
        if (!this.isAnimationCached()) return;
        this._skeleton && this._skeleton.updateWorldTransform();
      },
      setToSetupPose: function setToSetupPose() {
        this._skeleton && this._skeleton.setToSetupPose();
      },
      setBonesToSetupPose: function setBonesToSetupPose() {
        this._skeleton && this._skeleton.setBonesToSetupPose();
      },
      setSlotsToSetupPose: function setSlotsToSetupPose() {
        this._skeleton && this._skeleton.setSlotsToSetupPose();
      },
      updateAnimationCache: function updateAnimationCache(animName) {
        if (!this.isAnimationCached()) return;
        var uuid = this.skeletonData._uuid;
        this._skeletonCache && this._skeletonCache.updateAnimationCache(uuid, animName);
      },
      invalidAnimationCache: function invalidAnimationCache() {
        if (!this.isAnimationCached()) return;
        this._skeletonCache && this._skeletonCache.invalidAnimationCache(this.skeletonData._uuid);
      },
      findBone: function findBone(boneName) {
        if (this._skeleton) return this._skeleton.findBone(boneName);
        return null;
      },
      findSlot: function findSlot(slotName) {
        if (this._skeleton) return this._skeleton.findSlot(slotName);
        return null;
      },
      setSkin: function setSkin(skinName) {
        if (this._skeleton) {
          this._skeleton.setSkinByName(skinName);
          this._skeleton.setSlotsToSetupPose();
        }
        this.invalidAnimationCache();
      },
      getAttachment: function getAttachment(slotName, attachmentName) {
        if (this._skeleton) return this._skeleton.getAttachmentByName(slotName, attachmentName);
        return null;
      },
      setAttachment: function setAttachment(slotName, attachmentName) {
        this._skeleton && this._skeleton.setAttachment(slotName, attachmentName);
        this.invalidAnimationCache();
      },
      getTextureAtlas: function getTextureAtlas(regionAttachment) {
        return regionAttachment.region;
      },
      setMix: function setMix(fromAnimation, toAnimation, duration) {
        this._state && this._state.data.setMix(fromAnimation, toAnimation, duration);
      },
      setAnimation: function setAnimation(trackIndex, name, loop) {
        this._playTimes = loop ? 0 : 1;
        this._animationName = name;
        if (this.isAnimationCached()) {
          0 !== trackIndex && cc.warn("Track index can not greater than 0 in cached mode.");
          if (!this._skeletonCache) return null;
          var cache = this._skeletonCache.getAnimationCache(this.skeletonData._uuid, name);
          cache || (cache = this._skeletonCache.initAnimationCache(this.skeletonData._uuid, name));
          if (cache) {
            this._isAniComplete = false;
            this._accTime = 0;
            this._playCount = 0;
            this._frameCache = cache;
            this.attachUtil._hasAttachedNode() && this._frameCache.enableCacheAttachedInfo();
            this._frameCache.updateToFrame(0);
            this._curFrame = this._frameCache.frames[0];
          }
        } else if (this._skeleton) {
          var animation = this._skeleton.data.findAnimation(name);
          if (!animation) {
            cc.logID(7509, name);
            return null;
          }
          var res = this._state.setAnimationWith(trackIndex, animation, loop);
          this._state.apply(this._skeleton);
          return res;
        }
        return null;
      },
      addAnimation: function addAnimation(trackIndex, name, loop, delay) {
        delay = delay || 0;
        if (this.isAnimationCached()) {
          0 !== trackIndex && cc.warn("Track index can not greater than 0 in cached mode.");
          this._animationQueue.push({
            animationName: name,
            loop: loop,
            delay: delay
          });
        } else if (this._skeleton) {
          var animation = this._skeleton.data.findAnimation(name);
          if (!animation) {
            cc.logID(7510, name);
            return null;
          }
          return this._state.addAnimationWith(trackIndex, animation, loop, delay);
        }
        return null;
      },
      findAnimation: function findAnimation(name) {
        if (this._skeleton) return this._skeleton.data.findAnimation(name);
        return null;
      },
      getCurrent: function getCurrent(trackIndex) {
        if (this.isAnimationCached()) cc.warn("'getCurrent' interface can not be invoked in cached mode."); else if (this._state) return this._state.getCurrent(trackIndex);
        return null;
      },
      clearTracks: function clearTracks() {
        this.isAnimationCached() ? cc.warn("'clearTracks' interface can not be invoked in cached mode.") : this._state && this._state.clearTracks();
      },
      clearTrack: function clearTrack(trackIndex) {
        if (this.isAnimationCached()) cc.warn("'clearTrack' interface can not be invoked in cached mode."); else if (this._state) {
          this._state.clearTrack(trackIndex);
          false;
        }
      },
      setStartListener: function setStartListener(listener) {
        this._ensureListener();
        this._listener.start = listener;
      },
      setInterruptListener: function setInterruptListener(listener) {
        this._ensureListener();
        this._listener.interrupt = listener;
      },
      setEndListener: function setEndListener(listener) {
        this._ensureListener();
        this._listener.end = listener;
      },
      setDisposeListener: function setDisposeListener(listener) {
        this._ensureListener();
        this._listener.dispose = listener;
      },
      setCompleteListener: function setCompleteListener(listener) {
        this._ensureListener();
        this._listener.complete = listener;
      },
      setEventListener: function setEventListener(listener) {
        this._ensureListener();
        this._listener.event = listener;
      },
      setTrackStartListener: function setTrackStartListener(entry, listener) {
        TrackEntryListeners.getListeners(entry).start = listener;
      },
      setTrackInterruptListener: function setTrackInterruptListener(entry, listener) {
        TrackEntryListeners.getListeners(entry).interrupt = listener;
      },
      setTrackEndListener: function setTrackEndListener(entry, listener) {
        TrackEntryListeners.getListeners(entry).end = listener;
      },
      setTrackDisposeListener: function setTrackDisposeListener(entry, listener) {
        TrackEntryListeners.getListeners(entry).dispose = listener;
      },
      setTrackCompleteListener: function setTrackCompleteListener(entry, listener) {
        TrackEntryListeners.getListeners(entry).complete = function(trackEntry) {
          var loopCount = Math.floor(trackEntry.trackTime / trackEntry.animationEnd);
          listener(trackEntry, loopCount);
        };
      },
      setTrackEventListener: function setTrackEventListener(entry, listener) {
        TrackEntryListeners.getListeners(entry).event = listener;
      },
      getState: function getState() {
        return this._state;
      },
      _updateAnimEnum: false,
      _updateSkinEnum: false,
      _ensureListener: function _ensureListener() {
        if (!this._listener) {
          this._listener = new TrackEntryListeners();
          this._state && this._state.addListener(this._listener);
        }
      },
      _updateSkeletonData: function _updateSkeletonData() {
        if (!this.skeletonData) {
          this.disableRender();
          return;
        }
        var data = this.skeletonData.getRuntimeData();
        if (!data) {
          this.disableRender();
          return;
        }
        try {
          this.setSkeletonData(data);
          this.isAnimationCached() || this.setAnimationStateData(new spine.AnimationStateData(this._skeleton.data));
          this.defaultSkin && this.setSkin(this.defaultSkin);
        } catch (e) {
          cc.warn(e);
        }
        this.attachUtil.init(this);
        this.attachUtil._associateAttachedNode();
        this._preCacheMode = this._cacheMode;
        this.animation = this.defaultAnimation;
      },
      _refreshInspector: function _refreshInspector() {
        this._updateAnimEnum();
        this._updateSkinEnum();
        Editor.Utils.refreshSelectedInspector("node", this.node.uuid);
      },
      _updateDebugDraw: function _updateDebugDraw() {
        if (this.debugBones || this.debugSlots) {
          if (!this._debugRenderer) {
            var debugDrawNode = new cc.PrivateNode();
            debugDrawNode.name = "DEBUG_DRAW_NODE";
            var debugDraw = debugDrawNode.addComponent(Graphics);
            debugDraw.lineWidth = 1;
            debugDraw.strokeColor = cc.color(255, 0, 0, 255);
            this._debugRenderer = debugDraw;
          }
          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);
      }
    });
    module.exports = sp.Skeleton;
  }), {
    "../../cocos2d/core/components/CCRenderComponent": 100,
    "../../cocos2d/core/graphics/graphics": 127,
    "../../cocos2d/core/renderer/render-flow": 169,
    "./AttachUtil": 290,
    "./lib/spine": 293,
    "./skeleton-cache": 294,
    "./track-entry-listeners": 298
  } ],
  292: [ (function(require, module, exports) {
    "use strict";
    var _global = "undefined" === typeof window ? global : window;
    var _isUseSpine = true;
    true;
    _global.spine = require("./lib/spine");
    if (_isUseSpine) {
      _global.sp = {};
      sp._timeScale = 1;
      Object.defineProperty(sp, "timeScale", {
        get: function get() {
          return this._timeScale;
        },
        set: function set(value) {
          this._timeScale = value;
        },
        configurable: true
      });
      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
      });
      true;
      sp.spine = _global.spine;
      true;
      require("./skeleton-texture");
      require("./skeleton-data");
      require("./vertex-effect-delegate");
      require("./Skeleton");
      require("./spine-assembler");
    }
  }), {
    "./Skeleton": 291,
    "./lib/spine": 293,
    "./skeleton-data": 295,
    "./skeleton-texture": 296,
    "./spine-assembler": 297,
    "./vertex-effect-delegate": 299
  } ],
  293: [ (function(require, module, exports) {
    "use strict";
    var __extends = (void 0, (function() {
      var _extendStatics = function extendStatics(d, b) {
        _extendStatics = Object.setPrototypeOf || {
          __proto__: []
        } instanceof Array && function(d, b) {
          d.__proto__ = b;
        } || function(d, b) {
          for (var p in b) b.hasOwnProperty(p) && (d[p] = b[p]);
        };
        return _extendStatics(d, b);
      };
      return function(d, b) {
        _extendStatics(d, b);
        function __() {
          this.constructor = d;
        }
        d.prototype = null === b ? Object.create(b) : (__.prototype = b.prototype, new __());
      };
    })());
    var spine;
    (function(spine) {
      var Animation = (function() {
        function Animation(name, timelines, duration) {
          if (null == name) throw new Error("name cannot be null.");
          if (null == timelines) throw new Error("timelines cannot be null.");
          this.name = name;
          this.timelines = timelines;
          this.timelineIds = [];
          for (var i = 0; i < timelines.length; i++) this.timelineIds[timelines[i].getPropertyId()] = true;
          this.duration = duration;
        }
        Animation.prototype.hasTimeline = function(id) {
          return true == this.timelineIds[id];
        };
        Animation.prototype.apply = function(skeleton, lastTime, time, loop, events, alpha, blend, direction) {
          if (null == skeleton) throw new Error("skeleton cannot be null.");
          if (loop && 0 != this.duration) {
            time %= this.duration;
            lastTime > 0 && (lastTime %= this.duration);
          }
          var timelines = this.timelines;
          for (var i = 0, n = timelines.length; i < n; i++) timelines[i].apply(skeleton, lastTime, time, events, alpha, blend, direction);
        };
        Animation.binarySearch = function(values, target, step) {
          void 0 === step && (step = 1);
          var low = 0;
          var high = values.length / step - 2;
          if (0 == high) return step;
          var current = high >>> 1;
          while (true) {
            values[(current + 1) * step] <= target ? low = current + 1 : high = current;
            if (low == high) return (low + 1) * step;
            current = low + high >>> 1;
          }
        };
        Animation.linearSearch = function(values, target, step) {
          for (var i = 0, last = values.length - step; i <= last; i += step) if (values[i] > target) return i;
          return -1;
        };
        return Animation;
      })();
      spine.Animation = Animation;
      var MixBlend;
      (function(MixBlend) {
        MixBlend[MixBlend["setup"] = 0] = "setup";
        MixBlend[MixBlend["first"] = 1] = "first";
        MixBlend[MixBlend["replace"] = 2] = "replace";
        MixBlend[MixBlend["add"] = 3] = "add";
      })(MixBlend = spine.MixBlend || (spine.MixBlend = {}));
      var MixDirection;
      (function(MixDirection) {
        MixDirection[MixDirection["mixIn"] = 0] = "mixIn";
        MixDirection[MixDirection["mixOut"] = 1] = "mixOut";
      })(MixDirection = spine.MixDirection || (spine.MixDirection = {}));
      var TimelineType;
      (function(TimelineType) {
        TimelineType[TimelineType["rotate"] = 0] = "rotate";
        TimelineType[TimelineType["translate"] = 1] = "translate";
        TimelineType[TimelineType["scale"] = 2] = "scale";
        TimelineType[TimelineType["shear"] = 3] = "shear";
        TimelineType[TimelineType["attachment"] = 4] = "attachment";
        TimelineType[TimelineType["color"] = 5] = "color";
        TimelineType[TimelineType["deform"] = 6] = "deform";
        TimelineType[TimelineType["event"] = 7] = "event";
        TimelineType[TimelineType["drawOrder"] = 8] = "drawOrder";
        TimelineType[TimelineType["ikConstraint"] = 9] = "ikConstraint";
        TimelineType[TimelineType["transformConstraint"] = 10] = "transformConstraint";
        TimelineType[TimelineType["pathConstraintPosition"] = 11] = "pathConstraintPosition";
        TimelineType[TimelineType["pathConstraintSpacing"] = 12] = "pathConstraintSpacing";
        TimelineType[TimelineType["pathConstraintMix"] = 13] = "pathConstraintMix";
        TimelineType[TimelineType["twoColor"] = 14] = "twoColor";
      })(TimelineType = spine.TimelineType || (spine.TimelineType = {}));
      var CurveTimeline = (function() {
        function CurveTimeline(frameCount) {
          if (frameCount <= 0) throw new Error("frameCount must be > 0: " + frameCount);
          this.curves = spine.Utils.newFloatArray((frameCount - 1) * CurveTimeline.BEZIER_SIZE);
        }
        CurveTimeline.prototype.getFrameCount = function() {
          return this.curves.length / CurveTimeline.BEZIER_SIZE + 1;
        };
        CurveTimeline.prototype.setLinear = function(frameIndex) {
          this.curves[frameIndex * CurveTimeline.BEZIER_SIZE] = CurveTimeline.LINEAR;
        };
        CurveTimeline.prototype.setStepped = function(frameIndex) {
          this.curves[frameIndex * CurveTimeline.BEZIER_SIZE] = CurveTimeline.STEPPED;
        };
        CurveTimeline.prototype.getCurveType = function(frameIndex) {
          var index = frameIndex * CurveTimeline.BEZIER_SIZE;
          if (index == this.curves.length) return CurveTimeline.LINEAR;
          var type = this.curves[index];
          if (type == CurveTimeline.LINEAR) return CurveTimeline.LINEAR;
          if (type == CurveTimeline.STEPPED) return CurveTimeline.STEPPED;
          return CurveTimeline.BEZIER;
        };
        CurveTimeline.prototype.setCurve = function(frameIndex, cx1, cy1, cx2, cy2) {
          var tmpx = .03 * (2 * -cx1 + cx2), tmpy = .03 * (2 * -cy1 + cy2);
          var dddfx = .006 * (3 * (cx1 - cx2) + 1), dddfy = .006 * (3 * (cy1 - cy2) + 1);
          var ddfx = 2 * tmpx + dddfx, ddfy = 2 * tmpy + dddfy;
          var dfx = .3 * cx1 + tmpx + .16666667 * dddfx, dfy = .3 * cy1 + tmpy + .16666667 * dddfy;
          var i = frameIndex * CurveTimeline.BEZIER_SIZE;
          var curves = this.curves;
          curves[i++] = CurveTimeline.BEZIER;
          var x = dfx, y = dfy;
          for (var n = i + CurveTimeline.BEZIER_SIZE - 1; i < n; i += 2) {
            curves[i] = x;
            curves[i + 1] = y;
            dfx += ddfx;
            dfy += ddfy;
            ddfx += dddfx;
            ddfy += dddfy;
            x += dfx;
            y += dfy;
          }
        };
        CurveTimeline.prototype.getCurvePercent = function(frameIndex, percent) {
          percent = spine.MathUtils.clamp(percent, 0, 1);
          var curves = this.curves;
          var i = frameIndex * CurveTimeline.BEZIER_SIZE;
          var type = curves[i];
          if (type == CurveTimeline.LINEAR) return percent;
          if (type == CurveTimeline.STEPPED) return 0;
          i++;
          var x = 0;
          for (var start = i, n = i + CurveTimeline.BEZIER_SIZE - 1; i < n; i += 2) {
            x = curves[i];
            if (x >= percent) {
              var prevX = void 0, prevY = void 0;
              if (i == start) {
                prevX = 0;
                prevY = 0;
              } else {
                prevX = curves[i - 2];
                prevY = curves[i - 1];
              }
              return prevY + (curves[i + 1] - prevY) * (percent - prevX) / (x - prevX);
            }
          }
          var y = curves[i - 1];
          return y + (1 - y) * (percent - x) / (1 - x);
        };
        CurveTimeline.LINEAR = 0;
        CurveTimeline.STEPPED = 1;
        CurveTimeline.BEZIER = 2;
        CurveTimeline.BEZIER_SIZE = 19;
        return CurveTimeline;
      })();
      spine.CurveTimeline = CurveTimeline;
      var RotateTimeline = (function(_super) {
        __extends(RotateTimeline, _super);
        function RotateTimeline(frameCount) {
          var _this = _super.call(this, frameCount) || this;
          _this.frames = spine.Utils.newFloatArray(frameCount << 1);
          return _this;
        }
        RotateTimeline.prototype.getPropertyId = function() {
          return (TimelineType.rotate << 24) + this.boneIndex;
        };
        RotateTimeline.prototype.setFrame = function(frameIndex, time, degrees) {
          frameIndex <<= 1;
          this.frames[frameIndex] = time;
          this.frames[frameIndex + RotateTimeline.ROTATION] = degrees;
        };
        RotateTimeline.prototype.apply = function(skeleton, lastTime, time, events, alpha, blend, direction) {
          var frames = this.frames;
          var bone = skeleton.bones[this.boneIndex];
          if (!bone.active) return;
          if (time < frames[0]) {
            switch (blend) {
             case MixBlend.setup:
              bone.rotation = bone.data.rotation;
              return;

             case MixBlend.first:
              var r_1 = bone.data.rotation - bone.rotation;
              bone.rotation += (r_1 - 360 * (16384 - (16384.499999999996 - r_1 / 360 | 0))) * alpha;
            }
            return;
          }
          if (time >= frames[frames.length - RotateTimeline.ENTRIES]) {
            var r_2 = frames[frames.length + RotateTimeline.PREV_ROTATION];
            switch (blend) {
             case MixBlend.setup:
              bone.rotation = bone.data.rotation + r_2 * alpha;
              break;

             case MixBlend.first:
             case MixBlend.replace:
              r_2 += bone.data.rotation - bone.rotation;
              r_2 -= 360 * (16384 - (16384.499999999996 - r_2 / 360 | 0));

             case MixBlend.add:
              bone.rotation += r_2 * alpha;
            }
            return;
          }
          var frame = Animation.binarySearch(frames, time, RotateTimeline.ENTRIES);
          var prevRotation = frames[frame + RotateTimeline.PREV_ROTATION];
          var frameTime = frames[frame];
          var percent = this.getCurvePercent((frame >> 1) - 1, 1 - (time - frameTime) / (frames[frame + RotateTimeline.PREV_TIME] - frameTime));
          var r = frames[frame + RotateTimeline.ROTATION] - prevRotation;
          r = prevRotation + (r - 360 * (16384 - (16384.499999999996 - r / 360 | 0))) * percent;
          switch (blend) {
           case MixBlend.setup:
            bone.rotation = bone.data.rotation + (r - 360 * (16384 - (16384.499999999996 - r / 360 | 0))) * alpha;
            break;

           case MixBlend.first:
           case MixBlend.replace:
            r += bone.data.rotation - bone.rotation;

           case MixBlend.add:
            bone.rotation += (r - 360 * (16384 - (16384.499999999996 - r / 360 | 0))) * alpha;
          }
        };
        RotateTimeline.ENTRIES = 2;
        RotateTimeline.PREV_TIME = -2;
        RotateTimeline.PREV_ROTATION = -1;
        RotateTimeline.ROTATION = 1;
        return RotateTimeline;
      })(CurveTimeline);
      spine.RotateTimeline = RotateTimeline;
      var TranslateTimeline = (function(_super) {
        __extends(TranslateTimeline, _super);
        function TranslateTimeline(frameCount) {
          var _this = _super.call(this, frameCount) || this;
          _this.frames = spine.Utils.newFloatArray(frameCount * TranslateTimeline.ENTRIES);
          return _this;
        }
        TranslateTimeline.prototype.getPropertyId = function() {
          return (TimelineType.translate << 24) + this.boneIndex;
        };
        TranslateTimeline.prototype.setFrame = function(frameIndex, time, x, y) {
          frameIndex *= TranslateTimeline.ENTRIES;
          this.frames[frameIndex] = time;
          this.frames[frameIndex + TranslateTimeline.X] = x;
          this.frames[frameIndex + TranslateTimeline.Y] = y;
        };
        TranslateTimeline.prototype.apply = function(skeleton, lastTime, time, events, alpha, blend, direction) {
          var frames = this.frames;
          var bone = skeleton.bones[this.boneIndex];
          if (!bone.active) return;
          if (time < frames[0]) {
            switch (blend) {
             case MixBlend.setup:
              bone.x = bone.data.x;
              bone.y = bone.data.y;
              return;

             case MixBlend.first:
              bone.x += (bone.data.x - bone.x) * alpha;
              bone.y += (bone.data.y - bone.y) * alpha;
            }
            return;
          }
          var x = 0, y = 0;
          if (time >= frames[frames.length - TranslateTimeline.ENTRIES]) {
            x = frames[frames.length + TranslateTimeline.PREV_X];
            y = frames[frames.length + TranslateTimeline.PREV_Y];
          } else {
            var frame = Animation.binarySearch(frames, time, TranslateTimeline.ENTRIES);
            x = frames[frame + TranslateTimeline.PREV_X];
            y = frames[frame + TranslateTimeline.PREV_Y];
            var frameTime = frames[frame];
            var percent = this.getCurvePercent(frame / TranslateTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + TranslateTimeline.PREV_TIME] - frameTime));
            x += (frames[frame + TranslateTimeline.X] - x) * percent;
            y += (frames[frame + TranslateTimeline.Y] - y) * percent;
          }
          switch (blend) {
           case MixBlend.setup:
            bone.x = bone.data.x + x * alpha;
            bone.y = bone.data.y + y * alpha;
            break;

           case MixBlend.first:
           case MixBlend.replace:
            bone.x += (bone.data.x + x - bone.x) * alpha;
            bone.y += (bone.data.y + y - bone.y) * alpha;
            break;

           case MixBlend.add:
            bone.x += x * alpha;
            bone.y += y * alpha;
          }
        };
        TranslateTimeline.ENTRIES = 3;
        TranslateTimeline.PREV_TIME = -3;
        TranslateTimeline.PREV_X = -2;
        TranslateTimeline.PREV_Y = -1;
        TranslateTimeline.X = 1;
        TranslateTimeline.Y = 2;
        return TranslateTimeline;
      })(CurveTimeline);
      spine.TranslateTimeline = TranslateTimeline;
      var ScaleTimeline = (function(_super) {
        __extends(ScaleTimeline, _super);
        function ScaleTimeline(frameCount) {
          return _super.call(this, frameCount) || this;
        }
        ScaleTimeline.prototype.getPropertyId = function() {
          return (TimelineType.scale << 24) + this.boneIndex;
        };
        ScaleTimeline.prototype.apply = function(skeleton, lastTime, time, events, alpha, blend, direction) {
          var frames = this.frames;
          var bone = skeleton.bones[this.boneIndex];
          if (!bone.active) return;
          if (time < frames[0]) {
            switch (blend) {
             case MixBlend.setup:
              bone.scaleX = bone.data.scaleX;
              bone.scaleY = bone.data.scaleY;
              return;

             case MixBlend.first:
              bone.scaleX += (bone.data.scaleX - bone.scaleX) * alpha;
              bone.scaleY += (bone.data.scaleY - bone.scaleY) * alpha;
            }
            return;
          }
          var x = 0, y = 0;
          if (time >= frames[frames.length - ScaleTimeline.ENTRIES]) {
            x = frames[frames.length + ScaleTimeline.PREV_X] * bone.data.scaleX;
            y = frames[frames.length + ScaleTimeline.PREV_Y] * bone.data.scaleY;
          } else {
            var frame = Animation.binarySearch(frames, time, ScaleTimeline.ENTRIES);
            x = frames[frame + ScaleTimeline.PREV_X];
            y = frames[frame + ScaleTimeline.PREV_Y];
            var frameTime = frames[frame];
            var percent = this.getCurvePercent(frame / ScaleTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + ScaleTimeline.PREV_TIME] - frameTime));
            x = (x + (frames[frame + ScaleTimeline.X] - x) * percent) * bone.data.scaleX;
            y = (y + (frames[frame + ScaleTimeline.Y] - y) * percent) * bone.data.scaleY;
          }
          if (1 == alpha) if (blend == MixBlend.add) {
            bone.scaleX += x - bone.data.scaleX;
            bone.scaleY += y - bone.data.scaleY;
          } else {
            bone.scaleX = x;
            bone.scaleY = y;
          } else {
            var bx = 0, by = 0;
            if (direction == MixDirection.mixOut) switch (blend) {
             case MixBlend.setup:
              bx = bone.data.scaleX;
              by = bone.data.scaleY;
              bone.scaleX = bx + (Math.abs(x) * spine.MathUtils.signum(bx) - bx) * alpha;
              bone.scaleY = by + (Math.abs(y) * spine.MathUtils.signum(by) - by) * alpha;
              break;

             case MixBlend.first:
             case MixBlend.replace:
              bx = bone.scaleX;
              by = bone.scaleY;
              bone.scaleX = bx + (Math.abs(x) * spine.MathUtils.signum(bx) - bx) * alpha;
              bone.scaleY = by + (Math.abs(y) * spine.MathUtils.signum(by) - by) * alpha;
              break;

             case MixBlend.add:
              bx = bone.scaleX;
              by = bone.scaleY;
              bone.scaleX = bx + (Math.abs(x) * spine.MathUtils.signum(bx) - bone.data.scaleX) * alpha;
              bone.scaleY = by + (Math.abs(y) * spine.MathUtils.signum(by) - bone.data.scaleY) * alpha;
            } else switch (blend) {
             case MixBlend.setup:
              bx = Math.abs(bone.data.scaleX) * spine.MathUtils.signum(x);
              by = Math.abs(bone.data.scaleY) * spine.MathUtils.signum(y);
              bone.scaleX = bx + (x - bx) * alpha;
              bone.scaleY = by + (y - by) * alpha;
              break;

             case MixBlend.first:
             case MixBlend.replace:
              bx = Math.abs(bone.scaleX) * spine.MathUtils.signum(x);
              by = Math.abs(bone.scaleY) * spine.MathUtils.signum(y);
              bone.scaleX = bx + (x - bx) * alpha;
              bone.scaleY = by + (y - by) * alpha;
              break;

             case MixBlend.add:
              bx = spine.MathUtils.signum(x);
              by = spine.MathUtils.signum(y);
              bone.scaleX = Math.abs(bone.scaleX) * bx + (x - Math.abs(bone.data.scaleX) * bx) * alpha;
              bone.scaleY = Math.abs(bone.scaleY) * by + (y - Math.abs(bone.data.scaleY) * by) * alpha;
            }
          }
        };
        return ScaleTimeline;
      })(TranslateTimeline);
      spine.ScaleTimeline = ScaleTimeline;
      var ShearTimeline = (function(_super) {
        __extends(ShearTimeline, _super);
        function ShearTimeline(frameCount) {
          return _super.call(this, frameCount) || this;
        }
        ShearTimeline.prototype.getPropertyId = function() {
          return (TimelineType.shear << 24) + this.boneIndex;
        };
        ShearTimeline.prototype.apply = function(skeleton, lastTime, time, events, alpha, blend, direction) {
          var frames = this.frames;
          var bone = skeleton.bones[this.boneIndex];
          if (!bone.active) return;
          if (time < frames[0]) {
            switch (blend) {
             case MixBlend.setup:
              bone.shearX = bone.data.shearX;
              bone.shearY = bone.data.shearY;
              return;

             case MixBlend.first:
              bone.shearX += (bone.data.shearX - bone.shearX) * alpha;
              bone.shearY += (bone.data.shearY - bone.shearY) * alpha;
            }
            return;
          }
          var x = 0, y = 0;
          if (time >= frames[frames.length - ShearTimeline.ENTRIES]) {
            x = frames[frames.length + ShearTimeline.PREV_X];
            y = frames[frames.length + ShearTimeline.PREV_Y];
          } else {
            var frame = Animation.binarySearch(frames, time, ShearTimeline.ENTRIES);
            x = frames[frame + ShearTimeline.PREV_X];
            y = frames[frame + ShearTimeline.PREV_Y];
            var frameTime = frames[frame];
            var percent = this.getCurvePercent(frame / ShearTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + ShearTimeline.PREV_TIME] - frameTime));
            x += (frames[frame + ShearTimeline.X] - x) * percent;
            y += (frames[frame + ShearTimeline.Y] - y) * percent;
          }
          switch (blend) {
           case MixBlend.setup:
            bone.shearX = bone.data.shearX + x * alpha;
            bone.shearY = bone.data.shearY + y * alpha;
            break;

           case MixBlend.first:
           case MixBlend.replace:
            bone.shearX += (bone.data.shearX + x - bone.shearX) * alpha;
            bone.shearY += (bone.data.shearY + y - bone.shearY) * alpha;
            break;

           case MixBlend.add:
            bone.shearX += x * alpha;
            bone.shearY += y * alpha;
          }
        };
        return ShearTimeline;
      })(TranslateTimeline);
      spine.ShearTimeline = ShearTimeline;
      var ColorTimeline = (function(_super) {
        __extends(ColorTimeline, _super);
        function ColorTimeline(frameCount) {
          var _this = _super.call(this, frameCount) || this;
          _this.frames = spine.Utils.newFloatArray(frameCount * ColorTimeline.ENTRIES);
          return _this;
        }
        ColorTimeline.prototype.getPropertyId = function() {
          return (TimelineType.color << 24) + this.slotIndex;
        };
        ColorTimeline.prototype.setFrame = function(frameIndex, time, r, g, b, a) {
          frameIndex *= ColorTimeline.ENTRIES;
          this.frames[frameIndex] = time;
          this.frames[frameIndex + ColorTimeline.R] = r;
          this.frames[frameIndex + ColorTimeline.G] = g;
          this.frames[frameIndex + ColorTimeline.B] = b;
          this.frames[frameIndex + ColorTimeline.A] = a;
        };
        ColorTimeline.prototype.apply = function(skeleton, lastTime, time, events, alpha, blend, direction) {
          var slot = skeleton.slots[this.slotIndex];
          if (!slot.bone.active) return;
          var frames = this.frames;
          if (time < frames[0]) {
            switch (blend) {
             case MixBlend.setup:
              slot.color.setFromColor(slot.data.color);
              return;

             case MixBlend.first:
              var color = slot.color, setup = slot.data.color;
              color.add((setup.r - color.r) * alpha, (setup.g - color.g) * alpha, (setup.b - color.b) * alpha, (setup.a - color.a) * alpha);
            }
            return;
          }
          var r = 0, g = 0, b = 0, a = 0;
          if (time >= frames[frames.length - ColorTimeline.ENTRIES]) {
            var i = frames.length;
            r = frames[i + ColorTimeline.PREV_R];
            g = frames[i + ColorTimeline.PREV_G];
            b = frames[i + ColorTimeline.PREV_B];
            a = frames[i + ColorTimeline.PREV_A];
          } else {
            var frame = Animation.binarySearch(frames, time, ColorTimeline.ENTRIES);
            r = frames[frame + ColorTimeline.PREV_R];
            g = frames[frame + ColorTimeline.PREV_G];
            b = frames[frame + ColorTimeline.PREV_B];
            a = frames[frame + ColorTimeline.PREV_A];
            var frameTime = frames[frame];
            var percent = this.getCurvePercent(frame / ColorTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + ColorTimeline.PREV_TIME] - frameTime));
            r += (frames[frame + ColorTimeline.R] - r) * percent;
            g += (frames[frame + ColorTimeline.G] - g) * percent;
            b += (frames[frame + ColorTimeline.B] - b) * percent;
            a += (frames[frame + ColorTimeline.A] - a) * percent;
          }
          if (1 == alpha) slot.color.set(r, g, b, a); else {
            var color = slot.color;
            blend == MixBlend.setup && color.setFromColor(slot.data.color);
            color.add((r - color.r) * alpha, (g - color.g) * alpha, (b - color.b) * alpha, (a - color.a) * alpha);
          }
        };
        ColorTimeline.ENTRIES = 5;
        ColorTimeline.PREV_TIME = -5;
        ColorTimeline.PREV_R = -4;
        ColorTimeline.PREV_G = -3;
        ColorTimeline.PREV_B = -2;
        ColorTimeline.PREV_A = -1;
        ColorTimeline.R = 1;
        ColorTimeline.G = 2;
        ColorTimeline.B = 3;
        ColorTimeline.A = 4;
        return ColorTimeline;
      })(CurveTimeline);
      spine.ColorTimeline = ColorTimeline;
      var TwoColorTimeline = (function(_super) {
        __extends(TwoColorTimeline, _super);
        function TwoColorTimeline(frameCount) {
          var _this = _super.call(this, frameCount) || this;
          _this.frames = spine.Utils.newFloatArray(frameCount * TwoColorTimeline.ENTRIES);
          return _this;
        }
        TwoColorTimeline.prototype.getPropertyId = function() {
          return (TimelineType.twoColor << 24) + this.slotIndex;
        };
        TwoColorTimeline.prototype.setFrame = function(frameIndex, time, r, g, b, a, r2, g2, b2) {
          frameIndex *= TwoColorTimeline.ENTRIES;
          this.frames[frameIndex] = time;
          this.frames[frameIndex + TwoColorTimeline.R] = r;
          this.frames[frameIndex + TwoColorTimeline.G] = g;
          this.frames[frameIndex + TwoColorTimeline.B] = b;
          this.frames[frameIndex + TwoColorTimeline.A] = a;
          this.frames[frameIndex + TwoColorTimeline.R2] = r2;
          this.frames[frameIndex + TwoColorTimeline.G2] = g2;
          this.frames[frameIndex + TwoColorTimeline.B2] = b2;
        };
        TwoColorTimeline.prototype.apply = function(skeleton, lastTime, time, events, alpha, blend, direction) {
          var slot = skeleton.slots[this.slotIndex];
          if (!slot.bone.active) return;
          var frames = this.frames;
          if (time < frames[0]) {
            switch (blend) {
             case MixBlend.setup:
              slot.color.setFromColor(slot.data.color);
              slot.darkColor.setFromColor(slot.data.darkColor);
              return;

             case MixBlend.first:
              var light = slot.color, dark = slot.darkColor, setupLight = slot.data.color, setupDark = slot.data.darkColor;
              light.add((setupLight.r - light.r) * alpha, (setupLight.g - light.g) * alpha, (setupLight.b - light.b) * alpha, (setupLight.a - light.a) * alpha);
              dark.add((setupDark.r - dark.r) * alpha, (setupDark.g - dark.g) * alpha, (setupDark.b - dark.b) * alpha, 0);
            }
            return;
          }
          var r = 0, g = 0, b = 0, a = 0, r2 = 0, g2 = 0, b2 = 0;
          if (time >= frames[frames.length - TwoColorTimeline.ENTRIES]) {
            var i = frames.length;
            r = frames[i + TwoColorTimeline.PREV_R];
            g = frames[i + TwoColorTimeline.PREV_G];
            b = frames[i + TwoColorTimeline.PREV_B];
            a = frames[i + TwoColorTimeline.PREV_A];
            r2 = frames[i + TwoColorTimeline.PREV_R2];
            g2 = frames[i + TwoColorTimeline.PREV_G2];
            b2 = frames[i + TwoColorTimeline.PREV_B2];
          } else {
            var frame = Animation.binarySearch(frames, time, TwoColorTimeline.ENTRIES);
            r = frames[frame + TwoColorTimeline.PREV_R];
            g = frames[frame + TwoColorTimeline.PREV_G];
            b = frames[frame + TwoColorTimeline.PREV_B];
            a = frames[frame + TwoColorTimeline.PREV_A];
            r2 = frames[frame + TwoColorTimeline.PREV_R2];
            g2 = frames[frame + TwoColorTimeline.PREV_G2];
            b2 = frames[frame + TwoColorTimeline.PREV_B2];
            var frameTime = frames[frame];
            var percent = this.getCurvePercent(frame / TwoColorTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + TwoColorTimeline.PREV_TIME] - frameTime));
            r += (frames[frame + TwoColorTimeline.R] - r) * percent;
            g += (frames[frame + TwoColorTimeline.G] - g) * percent;
            b += (frames[frame + TwoColorTimeline.B] - b) * percent;
            a += (frames[frame + TwoColorTimeline.A] - a) * percent;
            r2 += (frames[frame + TwoColorTimeline.R2] - r2) * percent;
            g2 += (frames[frame + TwoColorTimeline.G2] - g2) * percent;
            b2 += (frames[frame + TwoColorTimeline.B2] - b2) * percent;
          }
          if (1 == alpha) {
            slot.color.set(r, g, b, a);
            slot.darkColor.set(r2, g2, b2, 1);
          } else {
            var light = slot.color, dark = slot.darkColor;
            if (blend == MixBlend.setup) {
              light.setFromColor(slot.data.color);
              dark.setFromColor(slot.data.darkColor);
            }
            light.add((r - light.r) * alpha, (g - light.g) * alpha, (b - light.b) * alpha, (a - light.a) * alpha);
            dark.add((r2 - dark.r) * alpha, (g2 - dark.g) * alpha, (b2 - dark.b) * alpha, 0);
          }
        };
        TwoColorTimeline.ENTRIES = 8;
        TwoColorTimeline.PREV_TIME = -8;
        TwoColorTimeline.PREV_R = -7;
        TwoColorTimeline.PREV_G = -6;
        TwoColorTimeline.PREV_B = -5;
        TwoColorTimeline.PREV_A = -4;
        TwoColorTimeline.PREV_R2 = -3;
        TwoColorTimeline.PREV_G2 = -2;
        TwoColorTimeline.PREV_B2 = -1;
        TwoColorTimeline.R = 1;
        TwoColorTimeline.G = 2;
        TwoColorTimeline.B = 3;
        TwoColorTimeline.A = 4;
        TwoColorTimeline.R2 = 5;
        TwoColorTimeline.G2 = 6;
        TwoColorTimeline.B2 = 7;
        return TwoColorTimeline;
      })(CurveTimeline);
      spine.TwoColorTimeline = TwoColorTimeline;
      var AttachmentTimeline = (function() {
        function AttachmentTimeline(frameCount) {
          this.frames = spine.Utils.newFloatArray(frameCount);
          this.attachmentNames = new Array(frameCount);
        }
        AttachmentTimeline.prototype.getPropertyId = function() {
          return (TimelineType.attachment << 24) + this.slotIndex;
        };
        AttachmentTimeline.prototype.getFrameCount = function() {
          return this.frames.length;
        };
        AttachmentTimeline.prototype.setFrame = function(frameIndex, time, attachmentName) {
          this.frames[frameIndex] = time;
          this.attachmentNames[frameIndex] = attachmentName;
        };
        AttachmentTimeline.prototype.apply = function(skeleton, lastTime, time, events, alpha, blend, direction) {
          var slot = skeleton.slots[this.slotIndex];
          if (!slot.bone.active) return;
          if (direction == MixDirection.mixOut && blend == MixBlend.setup) {
            var attachmentName_1 = slot.data.attachmentName;
            slot.setAttachment(null == attachmentName_1 ? null : skeleton.getAttachment(this.slotIndex, attachmentName_1));
            return;
          }
          var frames = this.frames;
          if (time < frames[0]) {
            if (blend == MixBlend.setup || blend == MixBlend.first) {
              var attachmentName_2 = slot.data.attachmentName;
              slot.setAttachment(null == attachmentName_2 ? null : skeleton.getAttachment(this.slotIndex, attachmentName_2));
            }
            return;
          }
          var frameIndex = 0;
          frameIndex = time >= frames[frames.length - 1] ? frames.length - 1 : Animation.binarySearch(frames, time, 1) - 1;
          var attachmentName = this.attachmentNames[frameIndex];
          skeleton.slots[this.slotIndex].setAttachment(null == attachmentName ? null : skeleton.getAttachment(this.slotIndex, attachmentName));
        };
        return AttachmentTimeline;
      })();
      spine.AttachmentTimeline = AttachmentTimeline;
      var zeros = null;
      var DeformTimeline = (function(_super) {
        __extends(DeformTimeline, _super);
        function DeformTimeline(frameCount) {
          var _this = _super.call(this, frameCount) || this;
          _this.frames = spine.Utils.newFloatArray(frameCount);
          _this.frameVertices = new Array(frameCount);
          null == zeros && (zeros = spine.Utils.newFloatArray(64));
          return _this;
        }
        DeformTimeline.prototype.getPropertyId = function() {
          return (TimelineType.deform << 27) + +this.attachment.id + this.slotIndex;
        };
        DeformTimeline.prototype.setFrame = function(frameIndex, time, vertices) {
          this.frames[frameIndex] = time;
          this.frameVertices[frameIndex] = vertices;
        };
        DeformTimeline.prototype.apply = function(skeleton, lastTime, time, firedEvents, alpha, blend, direction) {
          var slot = skeleton.slots[this.slotIndex];
          if (!slot.bone.active) return;
          var slotAttachment = slot.getAttachment();
          if (!(slotAttachment instanceof spine.VertexAttachment) || !(slotAttachment.deformAttachment == this.attachment)) return;
          var deformArray = slot.deform;
          0 == deformArray.length && (blend = MixBlend.setup);
          var frameVertices = this.frameVertices;
          var vertexCount = frameVertices[0].length;
          var frames = this.frames;
          if (time < frames[0]) {
            var vertexAttachment = slotAttachment;
            switch (blend) {
             case MixBlend.setup:
              deformArray.length = 0;
              return;

             case MixBlend.first:
              if (1 == alpha) {
                deformArray.length = 0;
                break;
              }
              var deform_1 = spine.Utils.setArraySize(deformArray, vertexCount);
              if (null == vertexAttachment.bones) {
                var setupVertices = vertexAttachment.vertices;
                for (var i = 0; i < vertexCount; i++) deform_1[i] += (setupVertices[i] - deform_1[i]) * alpha;
              } else {
                alpha = 1 - alpha;
                for (var i = 0; i < vertexCount; i++) deform_1[i] *= alpha;
              }
            }
            return;
          }
          var deform = spine.Utils.setArraySize(deformArray, vertexCount);
          if (time >= frames[frames.length - 1]) {
            var lastVertices = frameVertices[frames.length - 1];
            if (1 == alpha) if (blend == MixBlend.add) {
              var vertexAttachment = slotAttachment;
              if (null == vertexAttachment.bones) {
                var setupVertices = vertexAttachment.vertices;
                for (var i_1 = 0; i_1 < vertexCount; i_1++) deform[i_1] += lastVertices[i_1] - setupVertices[i_1];
              } else for (var i_2 = 0; i_2 < vertexCount; i_2++) deform[i_2] += lastVertices[i_2];
            } else spine.Utils.arrayCopy(lastVertices, 0, deform, 0, vertexCount); else switch (blend) {
             case MixBlend.setup:
              var vertexAttachment_1 = slotAttachment;
              if (null == vertexAttachment_1.bones) {
                var setupVertices = vertexAttachment_1.vertices;
                for (var i_3 = 0; i_3 < vertexCount; i_3++) {
                  var setup = setupVertices[i_3];
                  deform[i_3] = setup + (lastVertices[i_3] - setup) * alpha;
                }
              } else for (var i_4 = 0; i_4 < vertexCount; i_4++) deform[i_4] = lastVertices[i_4] * alpha;
              break;

             case MixBlend.first:
             case MixBlend.replace:
              for (var i_5 = 0; i_5 < vertexCount; i_5++) deform[i_5] += (lastVertices[i_5] - deform[i_5]) * alpha;

             case MixBlend.add:
              var vertexAttachment = slotAttachment;
              if (null == vertexAttachment.bones) {
                var setupVertices = vertexAttachment.vertices;
                for (var i_6 = 0; i_6 < vertexCount; i_6++) deform[i_6] += (lastVertices[i_6] - setupVertices[i_6]) * alpha;
              } else for (var i_7 = 0; i_7 < vertexCount; i_7++) deform[i_7] += lastVertices[i_7] * alpha;
            }
            return;
          }
          var frame = Animation.binarySearch(frames, time);
          var prevVertices = frameVertices[frame - 1];
          var nextVertices = frameVertices[frame];
          var frameTime = frames[frame];
          var percent = this.getCurvePercent(frame - 1, 1 - (time - frameTime) / (frames[frame - 1] - frameTime));
          if (1 == alpha) if (blend == MixBlend.add) {
            var vertexAttachment = slotAttachment;
            if (null == vertexAttachment.bones) {
              var setupVertices = vertexAttachment.vertices;
              for (var i_8 = 0; i_8 < vertexCount; i_8++) {
                var prev = prevVertices[i_8];
                deform[i_8] += prev + (nextVertices[i_8] - prev) * percent - setupVertices[i_8];
              }
            } else for (var i_9 = 0; i_9 < vertexCount; i_9++) {
              var prev = prevVertices[i_9];
              deform[i_9] += prev + (nextVertices[i_9] - prev) * percent;
            }
          } else for (var i_10 = 0; i_10 < vertexCount; i_10++) {
            var prev = prevVertices[i_10];
            deform[i_10] = prev + (nextVertices[i_10] - prev) * percent;
          } else switch (blend) {
           case MixBlend.setup:
            var vertexAttachment_2 = slotAttachment;
            if (null == vertexAttachment_2.bones) {
              var setupVertices = vertexAttachment_2.vertices;
              for (var i_11 = 0; i_11 < vertexCount; i_11++) {
                var prev = prevVertices[i_11], setup = setupVertices[i_11];
                deform[i_11] = setup + (prev + (nextVertices[i_11] - prev) * percent - setup) * alpha;
              }
            } else for (var i_12 = 0; i_12 < vertexCount; i_12++) {
              var prev = prevVertices[i_12];
              deform[i_12] = (prev + (nextVertices[i_12] - prev) * percent) * alpha;
            }
            break;

           case MixBlend.first:
           case MixBlend.replace:
            for (var i_13 = 0; i_13 < vertexCount; i_13++) {
              var prev = prevVertices[i_13];
              deform[i_13] += (prev + (nextVertices[i_13] - prev) * percent - deform[i_13]) * alpha;
            }
            break;

           case MixBlend.add:
            var vertexAttachment = slotAttachment;
            if (null == vertexAttachment.bones) {
              var setupVertices = vertexAttachment.vertices;
              for (var i_14 = 0; i_14 < vertexCount; i_14++) {
                var prev = prevVertices[i_14];
                deform[i_14] += (prev + (nextVertices[i_14] - prev) * percent - setupVertices[i_14]) * alpha;
              }
            } else for (var i_15 = 0; i_15 < vertexCount; i_15++) {
              var prev = prevVertices[i_15];
              deform[i_15] += (prev + (nextVertices[i_15] - prev) * percent) * alpha;
            }
          }
        };
        return DeformTimeline;
      })(CurveTimeline);
      spine.DeformTimeline = DeformTimeline;
      var EventTimeline = (function() {
        function EventTimeline(frameCount) {
          this.frames = spine.Utils.newFloatArray(frameCount);
          this.events = new Array(frameCount);
        }
        EventTimeline.prototype.getPropertyId = function() {
          return TimelineType.event << 24;
        };
        EventTimeline.prototype.getFrameCount = function() {
          return this.frames.length;
        };
        EventTimeline.prototype.setFrame = function(frameIndex, event) {
          this.frames[frameIndex] = event.time;
          this.events[frameIndex] = event;
        };
        EventTimeline.prototype.apply = function(skeleton, lastTime, time, firedEvents, alpha, blend, direction) {
          if (null == firedEvents) return;
          var frames = this.frames;
          var frameCount = this.frames.length;
          if (lastTime > time) {
            this.apply(skeleton, lastTime, Number.MAX_VALUE, firedEvents, alpha, blend, direction);
            lastTime = -1;
          } else if (lastTime >= frames[frameCount - 1]) return;
          if (time < frames[0]) return;
          var frame = 0;
          if (lastTime < frames[0]) frame = 0; else {
            frame = Animation.binarySearch(frames, lastTime);
            var frameTime = frames[frame];
            while (frame > 0) {
              if (frames[frame - 1] != frameTime) break;
              frame--;
            }
          }
          for (;frame < frameCount && time >= frames[frame]; frame++) firedEvents.push(this.events[frame]);
        };
        return EventTimeline;
      })();
      spine.EventTimeline = EventTimeline;
      var DrawOrderTimeline = (function() {
        function DrawOrderTimeline(frameCount) {
          this.frames = spine.Utils.newFloatArray(frameCount);
          this.drawOrders = new Array(frameCount);
        }
        DrawOrderTimeline.prototype.getPropertyId = function() {
          return TimelineType.drawOrder << 24;
        };
        DrawOrderTimeline.prototype.getFrameCount = function() {
          return this.frames.length;
        };
        DrawOrderTimeline.prototype.setFrame = function(frameIndex, time, drawOrder) {
          this.frames[frameIndex] = time;
          this.drawOrders[frameIndex] = drawOrder;
        };
        DrawOrderTimeline.prototype.apply = function(skeleton, lastTime, time, firedEvents, alpha, blend, direction) {
          var drawOrder = skeleton.drawOrder;
          var slots = skeleton.slots;
          if (direction == MixDirection.mixOut && blend == MixBlend.setup) {
            spine.Utils.arrayCopy(skeleton.slots, 0, skeleton.drawOrder, 0, skeleton.slots.length);
            return;
          }
          var frames = this.frames;
          if (time < frames[0]) {
            blend != MixBlend.setup && blend != MixBlend.first || spine.Utils.arrayCopy(skeleton.slots, 0, skeleton.drawOrder, 0, skeleton.slots.length);
            return;
          }
          var frame = 0;
          frame = time >= frames[frames.length - 1] ? frames.length - 1 : Animation.binarySearch(frames, time) - 1;
          var drawOrderToSetupIndex = this.drawOrders[frame];
          if (null == drawOrderToSetupIndex) spine.Utils.arrayCopy(slots, 0, drawOrder, 0, slots.length); else for (var i = 0, n = drawOrderToSetupIndex.length; i < n; i++) drawOrder[i] = slots[drawOrderToSetupIndex[i]];
        };
        return DrawOrderTimeline;
      })();
      spine.DrawOrderTimeline = DrawOrderTimeline;
      var IkConstraintTimeline = (function(_super) {
        __extends(IkConstraintTimeline, _super);
        function IkConstraintTimeline(frameCount) {
          var _this = _super.call(this, frameCount) || this;
          _this.frames = spine.Utils.newFloatArray(frameCount * IkConstraintTimeline.ENTRIES);
          return _this;
        }
        IkConstraintTimeline.prototype.getPropertyId = function() {
          return (TimelineType.ikConstraint << 24) + this.ikConstraintIndex;
        };
        IkConstraintTimeline.prototype.setFrame = function(frameIndex, time, mix, softness, bendDirection, compress, stretch) {
          frameIndex *= IkConstraintTimeline.ENTRIES;
          this.frames[frameIndex] = time;
          this.frames[frameIndex + IkConstraintTimeline.MIX] = mix;
          this.frames[frameIndex + IkConstraintTimeline.SOFTNESS] = softness;
          this.frames[frameIndex + IkConstraintTimeline.BEND_DIRECTION] = bendDirection;
          this.frames[frameIndex + IkConstraintTimeline.COMPRESS] = compress ? 1 : 0;
          this.frames[frameIndex + IkConstraintTimeline.STRETCH] = stretch ? 1 : 0;
        };
        IkConstraintTimeline.prototype.apply = function(skeleton, lastTime, time, firedEvents, alpha, blend, direction) {
          var frames = this.frames;
          var constraint = skeleton.ikConstraints[this.ikConstraintIndex];
          if (!constraint.active) return;
          if (time < frames[0]) {
            switch (blend) {
             case MixBlend.setup:
              constraint.mix = constraint.data.mix;
              constraint.softness = constraint.data.softness;
              constraint.bendDirection = constraint.data.bendDirection;
              constraint.compress = constraint.data.compress;
              constraint.stretch = constraint.data.stretch;
              return;

             case MixBlend.first:
              constraint.mix += (constraint.data.mix - constraint.mix) * alpha;
              constraint.softness += (constraint.data.softness - constraint.softness) * alpha;
              constraint.bendDirection = constraint.data.bendDirection;
              constraint.compress = constraint.data.compress;
              constraint.stretch = constraint.data.stretch;
            }
            return;
          }
          if (time >= frames[frames.length - IkConstraintTimeline.ENTRIES]) {
            if (blend == MixBlend.setup) {
              constraint.mix = constraint.data.mix + (frames[frames.length + IkConstraintTimeline.PREV_MIX] - constraint.data.mix) * alpha;
              constraint.softness = constraint.data.softness + (frames[frames.length + IkConstraintTimeline.PREV_SOFTNESS] - constraint.data.softness) * alpha;
              if (direction == MixDirection.mixOut) {
                constraint.bendDirection = constraint.data.bendDirection;
                constraint.compress = constraint.data.compress;
                constraint.stretch = constraint.data.stretch;
              } else {
                constraint.bendDirection = frames[frames.length + IkConstraintTimeline.PREV_BEND_DIRECTION];
                constraint.compress = 0 != frames[frames.length + IkConstraintTimeline.PREV_COMPRESS];
                constraint.stretch = 0 != frames[frames.length + IkConstraintTimeline.PREV_STRETCH];
              }
            } else {
              constraint.mix += (frames[frames.length + IkConstraintTimeline.PREV_MIX] - constraint.mix) * alpha;
              constraint.softness += (frames[frames.length + IkConstraintTimeline.PREV_SOFTNESS] - constraint.softness) * alpha;
              if (direction == MixDirection.mixIn) {
                constraint.bendDirection = frames[frames.length + IkConstraintTimeline.PREV_BEND_DIRECTION];
                constraint.compress = 0 != frames[frames.length + IkConstraintTimeline.PREV_COMPRESS];
                constraint.stretch = 0 != frames[frames.length + IkConstraintTimeline.PREV_STRETCH];
              }
            }
            return;
          }
          var frame = Animation.binarySearch(frames, time, IkConstraintTimeline.ENTRIES);
          var mix = frames[frame + IkConstraintTimeline.PREV_MIX];
          var softness = frames[frame + IkConstraintTimeline.PREV_SOFTNESS];
          var frameTime = frames[frame];
          var percent = this.getCurvePercent(frame / IkConstraintTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + IkConstraintTimeline.PREV_TIME] - frameTime));
          if (blend == MixBlend.setup) {
            constraint.mix = constraint.data.mix + (mix + (frames[frame + IkConstraintTimeline.MIX] - mix) * percent - constraint.data.mix) * alpha;
            constraint.softness = constraint.data.softness + (softness + (frames[frame + IkConstraintTimeline.SOFTNESS] - softness) * percent - constraint.data.softness) * alpha;
            if (direction == MixDirection.mixOut) {
              constraint.bendDirection = constraint.data.bendDirection;
              constraint.compress = constraint.data.compress;
              constraint.stretch = constraint.data.stretch;
            } else {
              constraint.bendDirection = frames[frame + IkConstraintTimeline.PREV_BEND_DIRECTION];
              constraint.compress = 0 != frames[frame + IkConstraintTimeline.PREV_COMPRESS];
              constraint.stretch = 0 != frames[frame + IkConstraintTimeline.PREV_STRETCH];
            }
          } else {
            constraint.mix += (mix + (frames[frame + IkConstraintTimeline.MIX] - mix) * percent - constraint.mix) * alpha;
            constraint.softness += (softness + (frames[frame + IkConstraintTimeline.SOFTNESS] - softness) * percent - constraint.softness) * alpha;
            if (direction == MixDirection.mixIn) {
              constraint.bendDirection = frames[frame + IkConstraintTimeline.PREV_BEND_DIRECTION];
              constraint.compress = 0 != frames[frame + IkConstraintTimeline.PREV_COMPRESS];
              constraint.stretch = 0 != frames[frame + IkConstraintTimeline.PREV_STRETCH];
            }
          }
        };
        IkConstraintTimeline.ENTRIES = 6;
        IkConstraintTimeline.PREV_TIME = -6;
        IkConstraintTimeline.PREV_MIX = -5;
        IkConstraintTimeline.PREV_SOFTNESS = -4;
        IkConstraintTimeline.PREV_BEND_DIRECTION = -3;
        IkConstraintTimeline.PREV_COMPRESS = -2;
        IkConstraintTimeline.PREV_STRETCH = -1;
        IkConstraintTimeline.MIX = 1;
        IkConstraintTimeline.SOFTNESS = 2;
        IkConstraintTimeline.BEND_DIRECTION = 3;
        IkConstraintTimeline.COMPRESS = 4;
        IkConstraintTimeline.STRETCH = 5;
        return IkConstraintTimeline;
      })(CurveTimeline);
      spine.IkConstraintTimeline = IkConstraintTimeline;
      var TransformConstraintTimeline = (function(_super) {
        __extends(TransformConstraintTimeline, _super);
        function TransformConstraintTimeline(frameCount) {
          var _this = _super.call(this, frameCount) || this;
          _this.frames = spine.Utils.newFloatArray(frameCount * TransformConstraintTimeline.ENTRIES);
          return _this;
        }
        TransformConstraintTimeline.prototype.getPropertyId = function() {
          return (TimelineType.transformConstraint << 24) + this.transformConstraintIndex;
        };
        TransformConstraintTimeline.prototype.setFrame = function(frameIndex, time, rotateMix, translateMix, scaleMix, shearMix) {
          frameIndex *= TransformConstraintTimeline.ENTRIES;
          this.frames[frameIndex] = time;
          this.frames[frameIndex + TransformConstraintTimeline.ROTATE] = rotateMix;
          this.frames[frameIndex + TransformConstraintTimeline.TRANSLATE] = translateMix;
          this.frames[frameIndex + TransformConstraintTimeline.SCALE] = scaleMix;
          this.frames[frameIndex + TransformConstraintTimeline.SHEAR] = shearMix;
        };
        TransformConstraintTimeline.prototype.apply = function(skeleton, lastTime, time, firedEvents, alpha, blend, direction) {
          var frames = this.frames;
          var constraint = skeleton.transformConstraints[this.transformConstraintIndex];
          if (!constraint.active) return;
          if (time < frames[0]) {
            var data = constraint.data;
            switch (blend) {
             case MixBlend.setup:
              constraint.rotateMix = data.rotateMix;
              constraint.translateMix = data.translateMix;
              constraint.scaleMix = data.scaleMix;
              constraint.shearMix = data.shearMix;
              return;

             case MixBlend.first:
              constraint.rotateMix += (data.rotateMix - constraint.rotateMix) * alpha;
              constraint.translateMix += (data.translateMix - constraint.translateMix) * alpha;
              constraint.scaleMix += (data.scaleMix - constraint.scaleMix) * alpha;
              constraint.shearMix += (data.shearMix - constraint.shearMix) * alpha;
            }
            return;
          }
          var rotate = 0, translate = 0, scale = 0, shear = 0;
          if (time >= frames[frames.length - TransformConstraintTimeline.ENTRIES]) {
            var i = frames.length;
            rotate = frames[i + TransformConstraintTimeline.PREV_ROTATE];
            translate = frames[i + TransformConstraintTimeline.PREV_TRANSLATE];
            scale = frames[i + TransformConstraintTimeline.PREV_SCALE];
            shear = frames[i + TransformConstraintTimeline.PREV_SHEAR];
          } else {
            var frame = Animation.binarySearch(frames, time, TransformConstraintTimeline.ENTRIES);
            rotate = frames[frame + TransformConstraintTimeline.PREV_ROTATE];
            translate = frames[frame + TransformConstraintTimeline.PREV_TRANSLATE];
            scale = frames[frame + TransformConstraintTimeline.PREV_SCALE];
            shear = frames[frame + TransformConstraintTimeline.PREV_SHEAR];
            var frameTime = frames[frame];
            var percent = this.getCurvePercent(frame / TransformConstraintTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + TransformConstraintTimeline.PREV_TIME] - frameTime));
            rotate += (frames[frame + TransformConstraintTimeline.ROTATE] - rotate) * percent;
            translate += (frames[frame + TransformConstraintTimeline.TRANSLATE] - translate) * percent;
            scale += (frames[frame + TransformConstraintTimeline.SCALE] - scale) * percent;
            shear += (frames[frame + TransformConstraintTimeline.SHEAR] - shear) * percent;
          }
          if (blend == MixBlend.setup) {
            var data = constraint.data;
            constraint.rotateMix = data.rotateMix + (rotate - data.rotateMix) * alpha;
            constraint.translateMix = data.translateMix + (translate - data.translateMix) * alpha;
            constraint.scaleMix = data.scaleMix + (scale - data.scaleMix) * alpha;
            constraint.shearMix = data.shearMix + (shear - data.shearMix) * alpha;
          } else {
            constraint.rotateMix += (rotate - constraint.rotateMix) * alpha;
            constraint.translateMix += (translate - constraint.translateMix) * alpha;
            constraint.scaleMix += (scale - constraint.scaleMix) * alpha;
            constraint.shearMix += (shear - constraint.shearMix) * alpha;
          }
        };
        TransformConstraintTimeline.ENTRIES = 5;
        TransformConstraintTimeline.PREV_TIME = -5;
        TransformConstraintTimeline.PREV_ROTATE = -4;
        TransformConstraintTimeline.PREV_TRANSLATE = -3;
        TransformConstraintTimeline.PREV_SCALE = -2;
        TransformConstraintTimeline.PREV_SHEAR = -1;
        TransformConstraintTimeline.ROTATE = 1;
        TransformConstraintTimeline.TRANSLATE = 2;
        TransformConstraintTimeline.SCALE = 3;
        TransformConstraintTimeline.SHEAR = 4;
        return TransformConstraintTimeline;
      })(CurveTimeline);
      spine.TransformConstraintTimeline = TransformConstraintTimeline;
      var PathConstraintPositionTimeline = (function(_super) {
        __extends(PathConstraintPositionTimeline, _super);
        function PathConstraintPositionTimeline(frameCount) {
          var _this = _super.call(this, frameCount) || this;
          _this.frames = spine.Utils.newFloatArray(frameCount * PathConstraintPositionTimeline.ENTRIES);
          return _this;
        }
        PathConstraintPositionTimeline.prototype.getPropertyId = function() {
          return (TimelineType.pathConstraintPosition << 24) + this.pathConstraintIndex;
        };
        PathConstraintPositionTimeline.prototype.setFrame = function(frameIndex, time, value) {
          frameIndex *= PathConstraintPositionTimeline.ENTRIES;
          this.frames[frameIndex] = time;
          this.frames[frameIndex + PathConstraintPositionTimeline.VALUE] = value;
        };
        PathConstraintPositionTimeline.prototype.apply = function(skeleton, lastTime, time, firedEvents, alpha, blend, direction) {
          var frames = this.frames;
          var constraint = skeleton.pathConstraints[this.pathConstraintIndex];
          if (!constraint.active) return;
          if (time < frames[0]) {
            switch (blend) {
             case MixBlend.setup:
              constraint.position = constraint.data.position;
              return;

             case MixBlend.first:
              constraint.position += (constraint.data.position - constraint.position) * alpha;
            }
            return;
          }
          var position = 0;
          if (time >= frames[frames.length - PathConstraintPositionTimeline.ENTRIES]) position = frames[frames.length + PathConstraintPositionTimeline.PREV_VALUE]; else {
            var frame = Animation.binarySearch(frames, time, PathConstraintPositionTimeline.ENTRIES);
            position = frames[frame + PathConstraintPositionTimeline.PREV_VALUE];
            var frameTime = frames[frame];
            var percent = this.getCurvePercent(frame / PathConstraintPositionTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + PathConstraintPositionTimeline.PREV_TIME] - frameTime));
            position += (frames[frame + PathConstraintPositionTimeline.VALUE] - position) * percent;
          }
          blend == MixBlend.setup ? constraint.position = constraint.data.position + (position - constraint.data.position) * alpha : constraint.position += (position - constraint.position) * alpha;
        };
        PathConstraintPositionTimeline.ENTRIES = 2;
        PathConstraintPositionTimeline.PREV_TIME = -2;
        PathConstraintPositionTimeline.PREV_VALUE = -1;
        PathConstraintPositionTimeline.VALUE = 1;
        return PathConstraintPositionTimeline;
      })(CurveTimeline);
      spine.PathConstraintPositionTimeline = PathConstraintPositionTimeline;
      var PathConstraintSpacingTimeline = (function(_super) {
        __extends(PathConstraintSpacingTimeline, _super);
        function PathConstraintSpacingTimeline(frameCount) {
          return _super.call(this, frameCount) || this;
        }
        PathConstraintSpacingTimeline.prototype.getPropertyId = function() {
          return (TimelineType.pathConstraintSpacing << 24) + this.pathConstraintIndex;
        };
        PathConstraintSpacingTimeline.prototype.apply = function(skeleton, lastTime, time, firedEvents, alpha, blend, direction) {
          var frames = this.frames;
          var constraint = skeleton.pathConstraints[this.pathConstraintIndex];
          if (!constraint.active) return;
          if (time < frames[0]) {
            switch (blend) {
             case MixBlend.setup:
              constraint.spacing = constraint.data.spacing;
              return;

             case MixBlend.first:
              constraint.spacing += (constraint.data.spacing - constraint.spacing) * alpha;
            }
            return;
          }
          var spacing = 0;
          if (time >= frames[frames.length - PathConstraintSpacingTimeline.ENTRIES]) spacing = frames[frames.length + PathConstraintSpacingTimeline.PREV_VALUE]; else {
            var frame = Animation.binarySearch(frames, time, PathConstraintSpacingTimeline.ENTRIES);
            spacing = frames[frame + PathConstraintSpacingTimeline.PREV_VALUE];
            var frameTime = frames[frame];
            var percent = this.getCurvePercent(frame / PathConstraintSpacingTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + PathConstraintSpacingTimeline.PREV_TIME] - frameTime));
            spacing += (frames[frame + PathConstraintSpacingTimeline.VALUE] - spacing) * percent;
          }
          blend == MixBlend.setup ? constraint.spacing = constraint.data.spacing + (spacing - constraint.data.spacing) * alpha : constraint.spacing += (spacing - constraint.spacing) * alpha;
        };
        return PathConstraintSpacingTimeline;
      })(PathConstraintPositionTimeline);
      spine.PathConstraintSpacingTimeline = PathConstraintSpacingTimeline;
      var PathConstraintMixTimeline = (function(_super) {
        __extends(PathConstraintMixTimeline, _super);
        function PathConstraintMixTimeline(frameCount) {
          var _this = _super.call(this, frameCount) || this;
          _this.frames = spine.Utils.newFloatArray(frameCount * PathConstraintMixTimeline.ENTRIES);
          return _this;
        }
        PathConstraintMixTimeline.prototype.getPropertyId = function() {
          return (TimelineType.pathConstraintMix << 24) + this.pathConstraintIndex;
        };
        PathConstraintMixTimeline.prototype.setFrame = function(frameIndex, time, rotateMix, translateMix) {
          frameIndex *= PathConstraintMixTimeline.ENTRIES;
          this.frames[frameIndex] = time;
          this.frames[frameIndex + PathConstraintMixTimeline.ROTATE] = rotateMix;
          this.frames[frameIndex + PathConstraintMixTimeline.TRANSLATE] = translateMix;
        };
        PathConstraintMixTimeline.prototype.apply = function(skeleton, lastTime, time, firedEvents, alpha, blend, direction) {
          var frames = this.frames;
          var constraint = skeleton.pathConstraints[this.pathConstraintIndex];
          if (!constraint.active) return;
          if (time < frames[0]) {
            switch (blend) {
             case MixBlend.setup:
              constraint.rotateMix = constraint.data.rotateMix;
              constraint.translateMix = constraint.data.translateMix;
              return;

             case MixBlend.first:
              constraint.rotateMix += (constraint.data.rotateMix - constraint.rotateMix) * alpha;
              constraint.translateMix += (constraint.data.translateMix - constraint.translateMix) * alpha;
            }
            return;
          }
          var rotate = 0, translate = 0;
          if (time >= frames[frames.length - PathConstraintMixTimeline.ENTRIES]) {
            rotate = frames[frames.length + PathConstraintMixTimeline.PREV_ROTATE];
            translate = frames[frames.length + PathConstraintMixTimeline.PREV_TRANSLATE];
          } else {
            var frame = Animation.binarySearch(frames, time, PathConstraintMixTimeline.ENTRIES);
            rotate = frames[frame + PathConstraintMixTimeline.PREV_ROTATE];
            translate = frames[frame + PathConstraintMixTimeline.PREV_TRANSLATE];
            var frameTime = frames[frame];
            var percent = this.getCurvePercent(frame / PathConstraintMixTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + PathConstraintMixTimeline.PREV_TIME] - frameTime));
            rotate += (frames[frame + PathConstraintMixTimeline.ROTATE] - rotate) * percent;
            translate += (frames[frame + PathConstraintMixTimeline.TRANSLATE] - translate) * percent;
          }
          if (blend == MixBlend.setup) {
            constraint.rotateMix = constraint.data.rotateMix + (rotate - constraint.data.rotateMix) * alpha;
            constraint.translateMix = constraint.data.translateMix + (translate - constraint.data.translateMix) * alpha;
          } else {
            constraint.rotateMix += (rotate - constraint.rotateMix) * alpha;
            constraint.translateMix += (translate - constraint.translateMix) * alpha;
          }
        };
        PathConstraintMixTimeline.ENTRIES = 3;
        PathConstraintMixTimeline.PREV_TIME = -3;
        PathConstraintMixTimeline.PREV_ROTATE = -2;
        PathConstraintMixTimeline.PREV_TRANSLATE = -1;
        PathConstraintMixTimeline.ROTATE = 1;
        PathConstraintMixTimeline.TRANSLATE = 2;
        return PathConstraintMixTimeline;
      })(CurveTimeline);
      spine.PathConstraintMixTimeline = PathConstraintMixTimeline;
    })(spine || (spine = {}));
    var spine;
    (function(spine) {
      var AnimationState = (function() {
        function AnimationState(data) {
          this.tracks = new Array();
          this.timeScale = 1;
          this.events = new Array();
          this.listeners = new Array();
          this.queue = new EventQueue(this);
          this.propertyIDs = new spine.IntSet();
          this.animationsChanged = false;
          this.trackEntryPool = new spine.Pool(function() {
            return new TrackEntry();
          });
          this.data = data;
        }
        AnimationState.prototype.update = function(delta) {
          delta *= this.timeScale;
          var tracks = this.tracks;
          for (var i = 0, n = tracks.length; i < n; i++) {
            var current = tracks[i];
            if (null == current) continue;
            current.animationLast = current.nextAnimationLast;
            current.trackLast = current.nextTrackLast;
            var currentDelta = delta * current.timeScale;
            if (current.delay > 0) {
              current.delay -= currentDelta;
              if (current.delay > 0) continue;
              currentDelta = -current.delay;
              current.delay = 0;
            }
            var next = current.next;
            if (null != next) {
              var nextTime = current.trackLast - next.delay;
              if (nextTime >= 0) {
                next.delay = 0;
                next.trackTime += 0 == current.timeScale ? 0 : (nextTime / current.timeScale + delta) * next.timeScale;
                current.trackTime += currentDelta;
                this.setCurrent(i, next, true);
                while (null != next.mixingFrom) {
                  next.mixTime += delta;
                  next = next.mixingFrom;
                }
                continue;
              }
            } else if (current.trackLast >= current.trackEnd && null == current.mixingFrom) {
              tracks[i] = null;
              this.queue.end(current);
              this.disposeNext(current);
              continue;
            }
            if (null != current.mixingFrom && this.updateMixingFrom(current, delta)) {
              var from = current.mixingFrom;
              current.mixingFrom = null;
              null != from && (from.mixingTo = null);
              while (null != from) {
                this.queue.end(from);
                from = from.mixingFrom;
              }
            }
            current.trackTime += currentDelta;
          }
          this.queue.drain();
        };
        AnimationState.prototype.updateMixingFrom = function(to, delta) {
          var from = to.mixingFrom;
          if (null == from) return true;
          var finished = this.updateMixingFrom(from, delta);
          from.animationLast = from.nextAnimationLast;
          from.trackLast = from.nextTrackLast;
          if (to.mixTime > 0 && to.mixTime >= to.mixDuration) {
            if (0 == from.totalAlpha || 0 == to.mixDuration) {
              to.mixingFrom = from.mixingFrom;
              null != from.mixingFrom && (from.mixingFrom.mixingTo = to);
              to.interruptAlpha = from.interruptAlpha;
              this.queue.end(from);
            }
            return finished;
          }
          from.trackTime += delta * from.timeScale;
          to.mixTime += delta;
          return false;
        };
        AnimationState.prototype.apply = function(skeleton) {
          if (null == skeleton) throw new Error("skeleton cannot be null.");
          this.animationsChanged && this._animationsChanged();
          var events = this.events;
          var tracks = this.tracks;
          var applied = false;
          for (var i = 0, n = tracks.length; i < n; i++) {
            var current = tracks[i];
            if (null == current || current.delay > 0) continue;
            applied = true;
            var blend = 0 == i ? spine.MixBlend.first : current.mixBlend;
            var mix = current.alpha;
            null != current.mixingFrom ? mix *= this.applyMixingFrom(current, skeleton, blend) : current.trackTime >= current.trackEnd && null == current.next && (mix = 0);
            var animationLast = current.animationLast, animationTime = current.getAnimationTime();
            var timelineCount = current.animation.timelines.length;
            var timelines = current.animation.timelines;
            if (0 == i && 1 == mix || blend == spine.MixBlend.add) for (var ii = 0; ii < timelineCount; ii++) {
              spine.Utils.webkit602BugfixHelper(mix, blend);
              timelines[ii].apply(skeleton, animationLast, animationTime, events, mix, blend, spine.MixDirection.mixIn);
            } else {
              var timelineMode = current.timelineMode;
              var firstFrame = 0 == current.timelinesRotation.length;
              firstFrame && spine.Utils.setArraySize(current.timelinesRotation, timelineCount << 1, null);
              var timelinesRotation = current.timelinesRotation;
              for (var ii = 0; ii < timelineCount; ii++) {
                var timeline = timelines[ii];
                var timelineBlend = (timelineMode[ii] & AnimationState.NOT_LAST - 1) == AnimationState.SUBSEQUENT ? blend : spine.MixBlend.setup;
                if (timeline instanceof spine.RotateTimeline) this.applyRotateTimeline(timeline, skeleton, animationTime, mix, timelineBlend, timelinesRotation, ii << 1, firstFrame); else {
                  spine.Utils.webkit602BugfixHelper(mix, blend);
                  timeline.apply(skeleton, animationLast, animationTime, events, mix, timelineBlend, spine.MixDirection.mixIn);
                }
              }
            }
            this.queueEvents(current, animationTime);
            events.length = 0;
            current.nextAnimationLast = animationTime;
            current.nextTrackLast = current.trackTime;
          }
          this.queue.drain();
          return applied;
        };
        AnimationState.prototype.applyMixingFrom = function(to, skeleton, blend) {
          var from = to.mixingFrom;
          null != from.mixingFrom && this.applyMixingFrom(from, skeleton, blend);
          var mix = 0;
          if (0 == to.mixDuration) {
            mix = 1;
            blend == spine.MixBlend.first && (blend = spine.MixBlend.setup);
          } else {
            mix = to.mixTime / to.mixDuration;
            mix > 1 && (mix = 1);
            blend != spine.MixBlend.first && (blend = from.mixBlend);
          }
          var events = mix < from.eventThreshold ? this.events : null;
          var attachments = mix < from.attachmentThreshold, drawOrder = mix < from.drawOrderThreshold;
          var animationLast = from.animationLast, animationTime = from.getAnimationTime();
          var timelineCount = from.animation.timelines.length;
          var timelines = from.animation.timelines;
          var alphaHold = from.alpha * to.interruptAlpha, alphaMix = alphaHold * (1 - mix);
          if (blend == spine.MixBlend.add) for (var i = 0; i < timelineCount; i++) timelines[i].apply(skeleton, animationLast, animationTime, events, alphaMix, blend, spine.MixDirection.mixOut); else {
            var timelineMode = from.timelineMode;
            var timelineHoldMix = from.timelineHoldMix;
            var firstFrame = 0 == from.timelinesRotation.length;
            firstFrame && spine.Utils.setArraySize(from.timelinesRotation, timelineCount << 1, null);
            var timelinesRotation = from.timelinesRotation;
            from.totalAlpha = 0;
            for (var i = 0; i < timelineCount; i++) {
              var timeline = timelines[i];
              var direction = spine.MixDirection.mixOut;
              var timelineBlend = void 0;
              var alpha = 0;
              switch (timelineMode[i] & AnimationState.NOT_LAST - 1) {
               case AnimationState.SUBSEQUENT:
                timelineBlend = blend;
                if (!attachments && timeline instanceof spine.AttachmentTimeline) {
                  if ((timelineMode[i] & AnimationState.NOT_LAST) == AnimationState.NOT_LAST) continue;
                  timelineBlend = spine.MixBlend.setup;
                }
                if (!drawOrder && timeline instanceof spine.DrawOrderTimeline) continue;
                alpha = alphaMix;
                break;

               case AnimationState.FIRST:
                timelineBlend = spine.MixBlend.setup;
                alpha = alphaMix;
                break;

               case AnimationState.HOLD:
                timelineBlend = spine.MixBlend.setup;
                alpha = alphaHold;
                break;

               default:
                timelineBlend = spine.MixBlend.setup;
                var holdMix = timelineHoldMix[i];
                alpha = alphaHold * Math.max(0, 1 - holdMix.mixTime / holdMix.mixDuration);
              }
              from.totalAlpha += alpha;
              if (timeline instanceof spine.RotateTimeline) this.applyRotateTimeline(timeline, skeleton, animationTime, alpha, timelineBlend, timelinesRotation, i << 1, firstFrame); else {
                spine.Utils.webkit602BugfixHelper(alpha, blend);
                timelineBlend == spine.MixBlend.setup && (timeline instanceof spine.AttachmentTimeline ? (attachments || (timelineMode[i] & AnimationState.NOT_LAST) == AnimationState.NOT_LAST) && (direction = spine.MixDirection.mixIn) : timeline instanceof spine.DrawOrderTimeline && drawOrder && (direction = spine.MixDirection.mixIn));
                timeline.apply(skeleton, animationLast, animationTime, events, alpha, timelineBlend, direction);
              }
            }
          }
          to.mixDuration > 0 && this.queueEvents(from, animationTime);
          this.events.length = 0;
          from.nextAnimationLast = animationTime;
          from.nextTrackLast = from.trackTime;
          return mix;
        };
        AnimationState.prototype.applyRotateTimeline = function(timeline, skeleton, time, alpha, blend, timelinesRotation, i, firstFrame) {
          firstFrame && (timelinesRotation[i] = 0);
          if (1 == alpha) {
            timeline.apply(skeleton, 0, time, null, 1, blend, spine.MixDirection.mixIn);
            return;
          }
          var rotateTimeline = timeline;
          var frames = rotateTimeline.frames;
          var bone = skeleton.bones[rotateTimeline.boneIndex];
          if (!bone.active) return;
          var r1 = 0, r2 = 0;
          if (time < frames[0]) switch (blend) {
           case spine.MixBlend.setup:
            bone.rotation = bone.data.rotation;

           default:
            return;

           case spine.MixBlend.first:
            r1 = bone.rotation;
            r2 = bone.data.rotation;
          } else {
            r1 = blend == spine.MixBlend.setup ? bone.data.rotation : bone.rotation;
            if (time >= frames[frames.length - spine.RotateTimeline.ENTRIES]) r2 = bone.data.rotation + frames[frames.length + spine.RotateTimeline.PREV_ROTATION]; else {
              var frame = spine.Animation.binarySearch(frames, time, spine.RotateTimeline.ENTRIES);
              var prevRotation = frames[frame + spine.RotateTimeline.PREV_ROTATION];
              var frameTime = frames[frame];
              var percent = rotateTimeline.getCurvePercent((frame >> 1) - 1, 1 - (time - frameTime) / (frames[frame + spine.RotateTimeline.PREV_TIME] - frameTime));
              r2 = frames[frame + spine.RotateTimeline.ROTATION] - prevRotation;
              r2 -= 360 * (16384 - (16384.499999999996 - r2 / 360 | 0));
              r2 = prevRotation + r2 * percent + bone.data.rotation;
              r2 -= 360 * (16384 - (16384.499999999996 - r2 / 360 | 0));
            }
          }
          var total = 0, diff = r2 - r1;
          diff -= 360 * (16384 - (16384.499999999996 - diff / 360 | 0));
          if (0 == diff) total = timelinesRotation[i]; else {
            var lastTotal = 0, lastDiff = 0;
            if (firstFrame) {
              lastTotal = 0;
              lastDiff = diff;
            } else {
              lastTotal = timelinesRotation[i];
              lastDiff = timelinesRotation[i + 1];
            }
            var current = diff > 0, dir = lastTotal >= 0;
            if (spine.MathUtils.signum(lastDiff) != spine.MathUtils.signum(diff) && Math.abs(lastDiff) <= 90) {
              Math.abs(lastTotal) > 180 && (lastTotal += 360 * spine.MathUtils.signum(lastTotal));
              dir = current;
            }
            total = diff + lastTotal - lastTotal % 360;
            dir != current && (total += 360 * spine.MathUtils.signum(lastTotal));
            timelinesRotation[i] = total;
          }
          timelinesRotation[i + 1] = diff;
          r1 += total * alpha;
          bone.rotation = r1 - 360 * (16384 - (16384.499999999996 - r1 / 360 | 0));
        };
        AnimationState.prototype.queueEvents = function(entry, animationTime) {
          var animationStart = entry.animationStart, animationEnd = entry.animationEnd;
          var duration = animationEnd - animationStart;
          var trackLastWrapped = entry.trackLast % duration;
          var events = this.events;
          var i = 0, n = events.length;
          for (;i < n; i++) {
            var event_1 = events[i];
            if (event_1.time < trackLastWrapped) break;
            if (event_1.time > animationEnd) continue;
            this.queue.event(entry, event_1);
          }
          var complete = false;
          complete = entry.loop ? 0 == duration || trackLastWrapped > entry.trackTime % duration : animationTime >= animationEnd && entry.animationLast < animationEnd;
          complete && this.queue.complete(entry);
          for (;i < n; i++) {
            var event_2 = events[i];
            if (event_2.time < animationStart) continue;
            this.queue.event(entry, events[i]);
          }
        };
        AnimationState.prototype.clearTracks = function() {
          var oldDrainDisabled = this.queue.drainDisabled;
          this.queue.drainDisabled = true;
          for (var i = 0, n = this.tracks.length; i < n; i++) this.clearTrack(i);
          this.tracks.length = 0;
          this.queue.drainDisabled = oldDrainDisabled;
          this.queue.drain();
        };
        AnimationState.prototype.clearTrack = function(trackIndex) {
          if (trackIndex >= this.tracks.length) return;
          var current = this.tracks[trackIndex];
          if (null == current) return;
          this.queue.end(current);
          this.disposeNext(current);
          var entry = current;
          while (true) {
            var from = entry.mixingFrom;
            if (null == from) break;
            this.queue.end(from);
            entry.mixingFrom = null;
            entry.mixingTo = null;
            entry = from;
          }
          this.tracks[current.trackIndex] = null;
          this.queue.drain();
        };
        AnimationState.prototype.setCurrent = function(index, current, interrupt) {
          var from = this.expandToIndex(index);
          this.tracks[index] = current;
          if (null != from) {
            interrupt && this.queue.interrupt(from);
            current.mixingFrom = from;
            from.mixingTo = current;
            current.mixTime = 0;
            null != from.mixingFrom && from.mixDuration > 0 && (current.interruptAlpha *= Math.min(1, from.mixTime / from.mixDuration));
            from.timelinesRotation.length = 0;
          }
          this.queue.start(current);
        };
        AnimationState.prototype.setAnimation = function(trackIndex, animationName, loop) {
          var animation = this.data.skeletonData.findAnimation(animationName);
          if (null == animation) throw new Error("Animation not found: " + animationName);
          return this.setAnimationWith(trackIndex, animation, loop);
        };
        AnimationState.prototype.setAnimationWith = function(trackIndex, animation, loop) {
          if (null == animation) throw new Error("animation cannot be null.");
          var interrupt = true;
          var current = this.expandToIndex(trackIndex);
          if (null != current) if (-1 == current.nextTrackLast) {
            this.tracks[trackIndex] = current.mixingFrom;
            this.queue.interrupt(current);
            this.queue.end(current);
            this.disposeNext(current);
            current = current.mixingFrom;
            interrupt = false;
          } else this.disposeNext(current);
          var entry = this.trackEntry(trackIndex, animation, loop, current);
          this.setCurrent(trackIndex, entry, interrupt);
          this.queue.drain();
          return entry;
        };
        AnimationState.prototype.addAnimation = function(trackIndex, animationName, loop, delay) {
          var animation = this.data.skeletonData.findAnimation(animationName);
          if (null == animation) throw new Error("Animation not found: " + animationName);
          return this.addAnimationWith(trackIndex, animation, loop, delay);
        };
        AnimationState.prototype.addAnimationWith = function(trackIndex, animation, loop, delay) {
          if (null == animation) throw new Error("animation cannot be null.");
          var last = this.expandToIndex(trackIndex);
          if (null != last) while (null != last.next) last = last.next;
          var entry = this.trackEntry(trackIndex, animation, loop, last);
          if (null == last) {
            this.setCurrent(trackIndex, entry, true);
            this.queue.drain();
          } else {
            last.next = entry;
            if (delay <= 0) {
              var duration = last.animationEnd - last.animationStart;
              if (0 != duration) {
                last.loop ? delay += duration * (1 + (last.trackTime / duration | 0)) : delay += Math.max(duration, last.trackTime);
                delay -= this.data.getMix(last.animation, animation);
              } else delay = last.trackTime;
            }
          }
          entry.delay = delay;
          return entry;
        };
        AnimationState.prototype.setEmptyAnimation = function(trackIndex, mixDuration) {
          var entry = this.setAnimationWith(trackIndex, AnimationState.emptyAnimation, false);
          entry.mixDuration = mixDuration;
          entry.trackEnd = mixDuration;
          return entry;
        };
        AnimationState.prototype.addEmptyAnimation = function(trackIndex, mixDuration, delay) {
          delay <= 0 && (delay -= mixDuration);
          var entry = this.addAnimationWith(trackIndex, AnimationState.emptyAnimation, false, delay);
          entry.mixDuration = mixDuration;
          entry.trackEnd = mixDuration;
          return entry;
        };
        AnimationState.prototype.setEmptyAnimations = function(mixDuration) {
          var oldDrainDisabled = this.queue.drainDisabled;
          this.queue.drainDisabled = true;
          for (var i = 0, n = this.tracks.length; i < n; i++) {
            var current = this.tracks[i];
            null != current && this.setEmptyAnimation(current.trackIndex, mixDuration);
          }
          this.queue.drainDisabled = oldDrainDisabled;
          this.queue.drain();
        };
        AnimationState.prototype.expandToIndex = function(index) {
          if (index < this.tracks.length) return this.tracks[index];
          spine.Utils.ensureArrayCapacity(this.tracks, index + 1, null);
          this.tracks.length = index + 1;
          return null;
        };
        AnimationState.prototype.trackEntry = function(trackIndex, animation, loop, last) {
          var entry = this.trackEntryPool.obtain();
          entry.trackIndex = trackIndex;
          entry.animation = animation;
          entry.loop = loop;
          entry.holdPrevious = false;
          entry.eventThreshold = 0;
          entry.attachmentThreshold = 0;
          entry.drawOrderThreshold = 0;
          entry.animationStart = 0;
          entry.animationEnd = animation.duration;
          entry.animationLast = -1;
          entry.nextAnimationLast = -1;
          entry.delay = 0;
          entry.trackTime = 0;
          entry.trackLast = -1;
          entry.nextTrackLast = -1;
          entry.trackEnd = Number.MAX_VALUE;
          entry.timeScale = 1;
          entry.alpha = 1;
          entry.interruptAlpha = 1;
          entry.mixTime = 0;
          entry.mixDuration = null == last ? 0 : this.data.getMix(last.animation, animation);
          return entry;
        };
        AnimationState.prototype.disposeNext = function(entry) {
          var next = entry.next;
          while (null != next) {
            this.queue.dispose(next);
            next = next.next;
          }
          entry.next = null;
        };
        AnimationState.prototype._animationsChanged = function() {
          this.animationsChanged = false;
          this.propertyIDs.clear();
          for (var i = 0, n = this.tracks.length; i < n; i++) {
            var entry = this.tracks[i];
            if (null == entry) continue;
            while (null != entry.mixingFrom) entry = entry.mixingFrom;
            do {
              null != entry.mixingFrom && entry.mixBlend == spine.MixBlend.add || this.computeHold(entry);
              entry = entry.mixingTo;
            } while (null != entry);
          }
          this.propertyIDs.clear();
          for (var i = this.tracks.length - 1; i >= 0; i--) {
            var entry = this.tracks[i];
            while (null != entry) {
              this.computeNotLast(entry);
              entry = entry.mixingFrom;
            }
          }
        };
        AnimationState.prototype.computeHold = function(entry) {
          var to = entry.mixingTo;
          var timelines = entry.animation.timelines;
          var timelinesCount = entry.animation.timelines.length;
          var timelineMode = spine.Utils.setArraySize(entry.timelineMode, timelinesCount);
          entry.timelineHoldMix.length = 0;
          var timelineDipMix = spine.Utils.setArraySize(entry.timelineHoldMix, timelinesCount);
          var propertyIDs = this.propertyIDs;
          if (null != to && to.holdPrevious) {
            for (var i = 0; i < timelinesCount; i++) {
              propertyIDs.add(timelines[i].getPropertyId());
              timelineMode[i] = AnimationState.HOLD;
            }
            return;
          }
          outer: for (var i = 0; i < timelinesCount; i++) {
            var timeline = timelines[i];
            var id = timeline.getPropertyId();
            if (propertyIDs.add(id)) if (null == to || timeline instanceof spine.AttachmentTimeline || timeline instanceof spine.DrawOrderTimeline || timeline instanceof spine.EventTimeline || !to.animation.hasTimeline(id)) timelineMode[i] = AnimationState.FIRST; else {
              for (var next = to.mixingTo; null != next; next = next.mixingTo) {
                if (next.animation.hasTimeline(id)) continue;
                if (entry.mixDuration > 0) {
                  timelineMode[i] = AnimationState.HOLD_MIX;
                  timelineDipMix[i] = next;
                  continue outer;
                }
                break;
              }
              timelineMode[i] = AnimationState.HOLD;
            } else timelineMode[i] = AnimationState.SUBSEQUENT;
          }
        };
        AnimationState.prototype.computeNotLast = function(entry) {
          var timelines = entry.animation.timelines;
          var timelinesCount = entry.animation.timelines.length;
          var timelineMode = entry.timelineMode;
          var propertyIDs = this.propertyIDs;
          for (var i = 0; i < timelinesCount; i++) if (timelines[i] instanceof spine.AttachmentTimeline) {
            var timeline = timelines[i];
            propertyIDs.add(timeline.slotIndex) || (timelineMode[i] |= AnimationState.NOT_LAST);
          }
        };
        AnimationState.prototype.getCurrent = function(trackIndex) {
          if (trackIndex >= this.tracks.length) return null;
          return this.tracks[trackIndex];
        };
        AnimationState.prototype.addListener = function(listener) {
          if (null == listener) throw new Error("listener cannot be null.");
          this.listeners.push(listener);
        };
        AnimationState.prototype.removeListener = function(listener) {
          var index = this.listeners.indexOf(listener);
          index >= 0 && this.listeners.splice(index, 1);
        };
        AnimationState.prototype.clearListeners = function() {
          this.listeners.length = 0;
        };
        AnimationState.prototype.clearListenerNotifications = function() {
          this.queue.clear();
        };
        AnimationState.emptyAnimation = new spine.Animation("<empty>", [], 0);
        AnimationState.SUBSEQUENT = 0;
        AnimationState.FIRST = 1;
        AnimationState.HOLD = 2;
        AnimationState.HOLD_MIX = 3;
        AnimationState.NOT_LAST = 4;
        return AnimationState;
      })();
      spine.AnimationState = AnimationState;
      var TrackEntry = (function() {
        function TrackEntry() {
          this.mixBlend = spine.MixBlend.replace;
          this.timelineMode = new Array();
          this.timelineHoldMix = new Array();
          this.timelinesRotation = new Array();
        }
        TrackEntry.prototype.reset = function() {
          this.next = null;
          this.mixingFrom = null;
          this.mixingTo = null;
          this.animation = null;
          this.listener = null;
          this.timelineMode.length = 0;
          this.timelineHoldMix.length = 0;
          this.timelinesRotation.length = 0;
        };
        TrackEntry.prototype.getAnimationTime = function() {
          if (this.loop) {
            var duration = this.animationEnd - this.animationStart;
            if (0 == duration) return this.animationStart;
            return this.trackTime % duration + this.animationStart;
          }
          return Math.min(this.trackTime + this.animationStart, this.animationEnd);
        };
        TrackEntry.prototype.setAnimationLast = function(animationLast) {
          this.animationLast = animationLast;
          this.nextAnimationLast = animationLast;
        };
        TrackEntry.prototype.isComplete = function() {
          return this.trackTime >= this.animationEnd - this.animationStart;
        };
        TrackEntry.prototype.resetRotationDirections = function() {
          this.timelinesRotation.length = 0;
        };
        return TrackEntry;
      })();
      spine.TrackEntry = TrackEntry;
      var EventQueue = (function() {
        function EventQueue(animState) {
          this.objects = [];
          this.drainDisabled = false;
          this.animState = animState;
        }
        EventQueue.prototype.start = function(entry) {
          this.objects.push(EventType.start);
          this.objects.push(entry);
          this.animState.animationsChanged = true;
        };
        EventQueue.prototype.interrupt = function(entry) {
          this.objects.push(EventType.interrupt);
          this.objects.push(entry);
        };
        EventQueue.prototype.end = function(entry) {
          this.objects.push(EventType.end);
          this.objects.push(entry);
          this.animState.animationsChanged = true;
        };
        EventQueue.prototype.dispose = function(entry) {
          this.objects.push(EventType.dispose);
          this.objects.push(entry);
        };
        EventQueue.prototype.complete = function(entry) {
          this.objects.push(EventType.complete);
          this.objects.push(entry);
        };
        EventQueue.prototype.event = function(entry, event) {
          this.objects.push(EventType.event);
          this.objects.push(entry);
          this.objects.push(event);
        };
        EventQueue.prototype.drain = function() {
          if (this.drainDisabled) return;
          this.drainDisabled = true;
          var objects = this.objects;
          var listeners = this.animState.listeners;
          for (var i = 0; i < objects.length; i += 2) {
            var type = objects[i];
            var entry = objects[i + 1];
            switch (type) {
             case EventType.start:
              null != entry.listener && entry.listener.start && entry.listener.start(entry);
              for (var ii = 0; ii < listeners.length; ii++) listeners[ii].start && listeners[ii].start(entry);
              break;

             case EventType.interrupt:
              null != entry.listener && entry.listener.interrupt && entry.listener.interrupt(entry);
              for (var ii = 0; ii < listeners.length; ii++) listeners[ii].interrupt && listeners[ii].interrupt(entry);
              break;

             case EventType.end:
              null != entry.listener && entry.listener.end && entry.listener.end(entry);
              for (var ii = 0; ii < listeners.length; ii++) listeners[ii].end && listeners[ii].end(entry);

             case EventType.dispose:
              null != entry.listener && entry.listener.dispose && entry.listener.dispose(entry);
              for (var ii = 0; ii < listeners.length; ii++) listeners[ii].dispose && listeners[ii].dispose(entry);
              this.animState.trackEntryPool.free(entry);
              break;

             case EventType.complete:
              null != entry.listener && entry.listener.complete && entry.listener.complete(entry);
              for (var ii = 0; ii < listeners.length; ii++) listeners[ii].complete && listeners[ii].complete(entry);
              break;

             case EventType.event:
              var event_3 = objects[2 + i++];
              null != entry.listener && entry.listener.event && entry.listener.event(entry, event_3);
              for (var ii = 0; ii < listeners.length; ii++) listeners[ii].event && listeners[ii].event(entry, event_3);
            }
          }
          this.clear();
          this.drainDisabled = false;
        };
        EventQueue.prototype.clear = function() {
          this.objects.length = 0;
        };
        return EventQueue;
      })();
      spine.EventQueue = EventQueue;
      var EventType;
      (function(EventType) {
        EventType[EventType["start"] = 0] = "start";
        EventType[EventType["interrupt"] = 1] = "interrupt";
        EventType[EventType["end"] = 2] = "end";
        EventType[EventType["dispose"] = 3] = "dispose";
        EventType[EventType["complete"] = 4] = "complete";
        EventType[EventType["event"] = 5] = "event";
      })(EventType = spine.EventType || (spine.EventType = {}));
      var AnimationStateAdapter = (function() {
        function AnimationStateAdapter() {}
        AnimationStateAdapter.prototype.start = function(entry) {};
        AnimationStateAdapter.prototype.interrupt = function(entry) {};
        AnimationStateAdapter.prototype.end = function(entry) {};
        AnimationStateAdapter.prototype.dispose = function(entry) {};
        AnimationStateAdapter.prototype.complete = function(entry) {};
        AnimationStateAdapter.prototype.event = function(entry, event) {};
        return AnimationStateAdapter;
      })();
      spine.AnimationStateAdapter = AnimationStateAdapter;
    })(spine || (spine = {}));
    var spine;
    (function(spine) {
      var AnimationStateData = (function() {
        function AnimationStateData(skeletonData) {
          this.animationToMixTime = {};
          this.defaultMix = 0;
          if (null == skeletonData) throw new Error("skeletonData cannot be null.");
          this.skeletonData = skeletonData;
        }
        AnimationStateData.prototype.setMix = function(fromName, toName, duration) {
          var from = this.skeletonData.findAnimation(fromName);
          if (null == from) throw new Error("Animation not found: " + fromName);
          var to = this.skeletonData.findAnimation(toName);
          if (null == to) throw new Error("Animation not found: " + toName);
          this.setMixWith(from, to, duration);
        };
        AnimationStateData.prototype.setMixWith = function(from, to, duration) {
          if (null == from) throw new Error("from cannot be null.");
          if (null == to) throw new Error("to cannot be null.");
          var key = from.name + "." + to.name;
          this.animationToMixTime[key] = duration;
        };
        AnimationStateData.prototype.getMix = function(from, to) {
          var key = from.name + "." + to.name;
          var value = this.animationToMixTime[key];
          return void 0 === value ? this.defaultMix : value;
        };
        return AnimationStateData;
      })();
      spine.AnimationStateData = AnimationStateData;
    })(spine || (spine = {}));
    var spine;
    (function(spine) {
      var AssetManager = (function() {
        function AssetManager(textureLoader, pathPrefix) {
          void 0 === pathPrefix && (pathPrefix = "");
          this.assets = {};
          this.errors = {};
          this.toLoad = 0;
          this.loaded = 0;
          this.textureLoader = textureLoader;
          this.pathPrefix = pathPrefix;
        }
        AssetManager.downloadText = function(url, success, error) {
          var request = new XMLHttpRequest();
          request.open("GET", url, true);
          request.onload = function() {
            200 == request.status ? success(request.responseText) : error(request.status, request.responseText);
          };
          request.onerror = function() {
            error(request.status, request.responseText);
          };
          request.send();
        };
        AssetManager.downloadBinary = function(url, success, error) {
          var request = new XMLHttpRequest();
          request.open("GET", url, true);
          request.responseType = "arraybuffer";
          request.onload = function() {
            200 == request.status ? success(new Uint8Array(request.response)) : error(request.status, request.responseText);
          };
          request.onerror = function() {
            error(request.status, request.responseText);
          };
          request.send();
        };
        AssetManager.prototype.loadBinary = function(path, success, error) {
          var _this = this;
          void 0 === success && (success = null);
          void 0 === error && (error = null);
          path = this.pathPrefix + path;
          this.toLoad++;
          AssetManager.downloadBinary(path, (function(data) {
            _this.assets[path] = data;
            success && success(path, data);
            _this.toLoad--;
            _this.loaded++;
          }), (function(state, responseText) {
            _this.errors[path] = "Couldn't load binary " + path + ": status " + status + ", " + responseText;
            error && error(path, "Couldn't load binary " + path + ": status " + status + ", " + responseText);
            _this.toLoad--;
            _this.loaded++;
          }));
        };
        AssetManager.prototype.loadText = function(path, success, error) {
          var _this = this;
          void 0 === success && (success = null);
          void 0 === error && (error = null);
          path = this.pathPrefix + path;
          this.toLoad++;
          AssetManager.downloadText(path, (function(data) {
            _this.assets[path] = data;
            success && success(path, data);
            _this.toLoad--;
            _this.loaded++;
          }), (function(state, responseText) {
            _this.errors[path] = "Couldn't load text " + path + ": status " + status + ", " + responseText;
            error && error(path, "Couldn't load text " + path + ": status " + status + ", " + responseText);
            _this.toLoad--;
            _this.loaded++;
          }));
        };
        AssetManager.prototype.loadTexture = function(path, success, error) {
          var _this = this;
          void 0 === success && (success = null);
          void 0 === error && (error = null);
          path = this.pathPrefix + path;
          this.toLoad++;
          var img = new Image();
          img.crossOrigin = "anonymous";
          img.onload = function(ev) {
            var texture = _this.textureLoader(img);
            _this.assets[path] = texture;
            _this.toLoad--;
            _this.loaded++;
            success && success(path, img);
          };
          img.onerror = function(ev) {
            _this.errors[path] = "Couldn't load image " + path;
            _this.toLoad--;
            _this.loaded++;
            error && error(path, "Couldn't load image " + path);
          };
          img.src = path;
        };
        AssetManager.prototype.loadTextureData = function(path, data, success, error) {
          var _this = this;
          void 0 === success && (success = null);
          void 0 === error && (error = null);
          path = this.pathPrefix + path;
          this.toLoad++;
          var img = new Image();
          img.onload = function(ev) {
            var texture = _this.textureLoader(img);
            _this.assets[path] = texture;
            _this.toLoad--;
            _this.loaded++;
            success && success(path, img);
          };
          img.onerror = function(ev) {
            _this.errors[path] = "Couldn't load image " + path;
            _this.toLoad--;
            _this.loaded++;
            error && error(path, "Couldn't load image " + path);
          };
          img.src = data;
        };
        AssetManager.prototype.loadTextureAtlas = function(path, success, error) {
          var _this = this;
          void 0 === success && (success = null);
          void 0 === error && (error = null);
          var parent = path.lastIndexOf("/") >= 0 ? path.substring(0, path.lastIndexOf("/")) : "";
          path = this.pathPrefix + path;
          this.toLoad++;
          AssetManager.downloadText(path, (function(atlasData) {
            var pagesLoaded = {
              count: 0
            };
            var atlasPages = new Array();
            try {
              var atlas = new spine.TextureAtlas(atlasData, function(path) {
                atlasPages.push(parent + "/" + path);
                var image = document.createElement("img");
                image.width = 16;
                image.height = 16;
                return new spine.FakeTexture(image);
              });
            } catch (e) {
              var ex = e;
              _this.errors[path] = "Couldn't load texture atlas " + path + ": " + ex.message;
              error && error(path, "Couldn't load texture atlas " + path + ": " + ex.message);
              _this.toLoad--;
              _this.loaded++;
              return;
            }
            var _loop_1 = function _loop_1(atlasPage) {
              var pageLoadError = false;
              _this.loadTexture(atlasPage, (function(imagePath, image) {
                pagesLoaded.count++;
                if (pagesLoaded.count == atlasPages.length) if (pageLoadError) {
                  _this.errors[path] = "Couldn't load texture atlas page " + imagePath + "} of atlas " + path;
                  error && error(path, "Couldn't load texture atlas page " + imagePath + " of atlas " + path);
                  _this.toLoad--;
                  _this.loaded++;
                } else try {
                  var atlas = new spine.TextureAtlas(atlasData, function(path) {
                    return _this.get(parent + "/" + path);
                  });
                  _this.assets[path] = atlas;
                  success && success(path, atlas);
                  _this.toLoad--;
                  _this.loaded++;
                } catch (e) {
                  var ex = e;
                  _this.errors[path] = "Couldn't load texture atlas " + path + ": " + ex.message;
                  error && error(path, "Couldn't load texture atlas " + path + ": " + ex.message);
                  _this.toLoad--;
                  _this.loaded++;
                }
              }), (function(imagePath, errorMessage) {
                pageLoadError = true;
                pagesLoaded.count++;
                if (pagesLoaded.count == atlasPages.length) {
                  _this.errors[path] = "Couldn't load texture atlas page " + imagePath + "} of atlas " + path;
                  error && error(path, "Couldn't load texture atlas page " + imagePath + " of atlas " + path);
                  _this.toLoad--;
                  _this.loaded++;
                }
              }));
            };
            for (var _i = 0, atlasPages_1 = atlasPages; _i < atlasPages_1.length; _i++) {
              var atlasPage = atlasPages_1[_i];
              _loop_1(atlasPage);
            }
          }), (function(state, responseText) {
            _this.errors[path] = "Couldn't load texture atlas " + path + ": status " + status + ", " + responseText;
            error && error(path, "Couldn't load texture atlas " + path + ": status " + status + ", " + responseText);
            _this.toLoad--;
            _this.loaded++;
          }));
        };
        AssetManager.prototype.get = function(path) {
          path = this.pathPrefix + path;
          return this.assets[path];
        };
        AssetManager.prototype.remove = function(path) {
          path = this.pathPrefix + path;
          var asset = this.assets[path];
          asset.dispose && asset.dispose();
          this.assets[path] = null;
        };
        AssetManager.prototype.removeAll = function() {
          for (var key in this.assets) {
            var asset = this.assets[key];
            asset.dispose && asset.dispose();
          }
          this.assets = {};
        };
        AssetManager.prototype.isLoadingComplete = function() {
          return 0 == this.toLoad;
        };
        AssetManager.prototype.getToLoad = function() {
          return this.toLoad;
        };
        AssetManager.prototype.getLoaded = function() {
          return this.loaded;
        };
        AssetManager.prototype.dispose = function() {
          this.removeAll();
        };
        AssetManager.prototype.hasErrors = function() {
          return Object.keys(this.errors).length > 0;
        };
        AssetManager.prototype.getErrors = function() {
          return this.errors;
        };
        return AssetManager;
      })();
      spine.AssetManager = AssetManager;
    })(spine || (spine = {}));
    var spine;
    (function(spine) {
      var AtlasAttachmentLoader = (function() {
        function AtlasAttachmentLoader(atlas) {
          this.atlas = atlas;
        }
        AtlasAttachmentLoader.prototype.newRegionAttachment = function(skin, name, path) {
          var region = this.atlas.findRegion(path);
          if (null == region) return null;
          region.renderObject = region;
          var attachment = new spine.RegionAttachment(name);
          attachment.setRegion(region);
          return attachment;
        };
        AtlasAttachmentLoader.prototype.newMeshAttachment = function(skin, name, path) {
          var region = this.atlas.findRegion(path);
          if (null == region) return null;
          region.renderObject = region;
          var attachment = new spine.MeshAttachment(name);
          attachment.region = region;
          return attachment;
        };
        AtlasAttachmentLoader.prototype.newBoundingBoxAttachment = function(skin, name) {
          return new spine.BoundingBoxAttachment(name);
        };
        AtlasAttachmentLoader.prototype.newPathAttachment = function(skin, name) {
          return new spine.PathAttachment(name);
        };
        AtlasAttachmentLoader.prototype.newPointAttachment = function(skin, name) {
          return new spine.PointAttachment(name);
        };
        AtlasAttachmentLoader.prototype.newClippingAttachment = function(skin, name) {
          return new spine.ClippingAttachment(name);
        };
        return AtlasAttachmentLoader;
      })();
      spine.AtlasAttachmentLoader = AtlasAttachmentLoader;
    })(spine || (spine = {}));
    var spine;
    (function(spine) {
      var BlendMode;
      (function(BlendMode) {
        BlendMode[BlendMode["Normal"] = 0] = "Normal";
        BlendMode[BlendMode["Additive"] = 1] = "Additive";
        BlendMode[BlendMode["Multiply"] = 2] = "Multiply";
        BlendMode[BlendMode["Screen"] = 3] = "Screen";
      })(BlendMode = spine.BlendMode || (spine.BlendMode = {}));
    })(spine || (spine = {}));
    var spine;
    (function(spine) {
      var Bone = (function() {
        function Bone(data, skeleton, parent) {
          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 = false;
          this.a = 0;
          this.b = 0;
          this.c = 0;
          this.d = 0;
          this.worldY = 0;
          this.worldX = 0;
          this.sorted = false;
          this.active = false;
          if (null == data) throw new Error("data cannot be null.");
          if (null == skeleton) throw new Error("skeleton cannot be null.");
          this.data = data;
          this.skeleton = skeleton;
          this.parent = parent;
          this.setToSetupPose();
        }
        Bone.prototype.isActive = function() {
          return this.active;
        };
        Bone.prototype.update = function() {
          this.updateWorldTransformWith(this.x, this.y, this.rotation, this.scaleX, this.scaleY, this.shearX, this.shearY);
        };
        Bone.prototype.updateWorldTransform = function() {
          this.updateWorldTransformWith(this.x, this.y, this.rotation, this.scaleX, this.scaleY, this.shearX, this.shearY);
        };
        Bone.prototype.updateWorldTransformWith = function(x, y, rotation, scaleX, scaleY, shearX, shearY) {
          this.ax = x;
          this.ay = y;
          this.arotation = rotation;
          this.ascaleX = scaleX;
          this.ascaleY = scaleY;
          this.ashearX = shearX;
          this.ashearY = shearY;
          this.appliedValid = true;
          var parent = this.parent;
          if (null == parent) {
            var skeleton = this.skeleton;
            var rotationY = rotation + 90 + shearY;
            var sx = skeleton.scaleX;
            var sy = skeleton.scaleY;
            this.a = spine.MathUtils.cosDeg(rotation + shearX) * scaleX * sx;
            this.b = spine.MathUtils.cosDeg(rotationY) * scaleY * sx;
            this.c = spine.MathUtils.sinDeg(rotation + shearX) * scaleX * sy;
            this.d = spine.MathUtils.sinDeg(rotationY) * scaleY * sy;
            this.worldX = x * sx + skeleton.x;
            this.worldY = y * sy + skeleton.y;
            return;
          }
          var pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d;
          this.worldX = pa * x + pb * y + parent.worldX;
          this.worldY = pc * x + pd * y + parent.worldY;
          switch (this.data.transformMode) {
           case spine.TransformMode.Normal:
            var rotationY = rotation + 90 + shearY;
            var la = spine.MathUtils.cosDeg(rotation + shearX) * scaleX;
            var lb = spine.MathUtils.cosDeg(rotationY) * scaleY;
            var lc = spine.MathUtils.sinDeg(rotation + shearX) * scaleX;
            var ld = spine.MathUtils.sinDeg(rotationY) * scaleY;
            this.a = pa * la + pb * lc;
            this.b = pa * lb + pb * ld;
            this.c = pc * la + pd * lc;
            this.d = pc * lb + pd * ld;
            return;

           case spine.TransformMode.OnlyTranslation:
            var rotationY = rotation + 90 + shearY;
            this.a = spine.MathUtils.cosDeg(rotation + shearX) * scaleX;
            this.b = spine.MathUtils.cosDeg(rotationY) * scaleY;
            this.c = spine.MathUtils.sinDeg(rotation + shearX) * scaleX;
            this.d = spine.MathUtils.sinDeg(rotationY) * scaleY;
            break;

           case spine.TransformMode.NoRotationOrReflection:
            var s = pa * pa + pc * pc;
            var prx = 0;
            if (s > 1e-4) {
              s = Math.abs(pa * pd - pb * pc) / s;
              pb = pc * s;
              pd = pa * s;
              prx = Math.atan2(pc, pa) * spine.MathUtils.radDeg;
            } else {
              pa = 0;
              pc = 0;
              prx = 90 - Math.atan2(pd, pb) * spine.MathUtils.radDeg;
            }
            var rx = rotation + shearX - prx;
            var ry = rotation + shearY - prx + 90;
            var la = spine.MathUtils.cosDeg(rx) * scaleX;
            var lb = spine.MathUtils.cosDeg(ry) * scaleY;
            var lc = spine.MathUtils.sinDeg(rx) * scaleX;
            var ld = spine.MathUtils.sinDeg(ry) * scaleY;
            this.a = pa * la - pb * lc;
            this.b = pa * lb - pb * ld;
            this.c = pc * la + pd * lc;
            this.d = pc * lb + pd * ld;
            break;

           case spine.TransformMode.NoScale:
           case spine.TransformMode.NoScaleOrReflection:
            var cos = spine.MathUtils.cosDeg(rotation);
            var sin = spine.MathUtils.sinDeg(rotation);
            var za = (pa * cos + pb * sin) / this.skeleton.scaleX;
            var zc = (pc * cos + pd * sin) / this.skeleton.scaleY;
            var s = Math.sqrt(za * za + zc * zc);
            s > 1e-5 && (s = 1 / s);
            za *= s;
            zc *= s;
            s = Math.sqrt(za * za + zc * zc);
            this.data.transformMode == spine.TransformMode.NoScale && pa * pd - pb * pc < 0 != (this.skeleton.scaleX < 0 != this.skeleton.scaleY < 0) && (s = -s);
            var r = Math.PI / 2 + Math.atan2(zc, za);
            var zb = Math.cos(r) * s;
            var zd = Math.sin(r) * s;
            var la = spine.MathUtils.cosDeg(shearX) * scaleX;
            var lb = spine.MathUtils.cosDeg(90 + shearY) * scaleY;
            var lc = spine.MathUtils.sinDeg(shearX) * scaleX;
            var ld = spine.MathUtils.sinDeg(90 + shearY) * scaleY;
            this.a = za * la + zb * lc;
            this.b = za * lb + zb * ld;
            this.c = zc * la + zd * lc;
            this.d = zc * lb + zd * ld;
          }
          this.a *= this.skeleton.scaleX;
          this.b *= this.skeleton.scaleX;
          this.c *= this.skeleton.scaleY;
          this.d *= this.skeleton.scaleY;
        };
        Bone.prototype.setToSetupPose = function() {
          var data = this.data;
          this.x = data.x;
          this.y = data.y;
          this.rotation = data.rotation;
          this.scaleX = data.scaleX;
          this.scaleY = data.scaleY;
          this.shearX = data.shearX;
          this.shearY = data.shearY;
        };
        Bone.prototype.getWorldRotationX = function() {
          return Math.atan2(this.c, this.a) * spine.MathUtils.radDeg;
        };
        Bone.prototype.getWorldRotationY = function() {
          return Math.atan2(this.d, this.b) * spine.MathUtils.radDeg;
        };
        Bone.prototype.getWorldScaleX = function() {
          return Math.sqrt(this.a * this.a + this.c * this.c);
        };
        Bone.prototype.getWorldScaleY = function() {
          return Math.sqrt(this.b * this.b + this.d * this.d);
        };
        Bone.prototype.updateAppliedTransform = function() {
          this.appliedValid = true;
          var parent = this.parent;
          if (null == parent) {
            this.ax = this.worldX;
            this.ay = this.worldY;
            this.arotation = Math.atan2(this.c, this.a) * spine.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;
            this.ashearY = Math.atan2(this.a * this.b + this.c * this.d, this.a * this.d - this.b * this.c) * spine.MathUtils.radDeg;
            return;
          }
          var pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d;
          var pid = 1 / (pa * pd - pb * pc);
          var dx = this.worldX - parent.worldX, dy = this.worldY - parent.worldY;
          this.ax = dx * pd * pid - dy * pb * pid;
          this.ay = dy * pa * pid - dx * pc * pid;
          var ia = pid * pd;
          var id = pid * pa;
          var ib = pid * pb;
          var ic = pid * pc;
          var ra = ia * this.a - ib * this.c;
          var rb = ia * this.b - ib * this.d;
          var rc = id * this.c - ic * this.a;
          var rd = id * this.d - ic * this.b;
          this.ashearX = 0;
          this.ascaleX = Math.sqrt(ra * ra + rc * rc);
          if (this.ascaleX > 1e-4) {
            var det = ra * rd - rb * rc;
            this.ascaleY = det / this.ascaleX;
            this.ashearY = Math.atan2(ra * rb + rc * rd, det) * spine.MathUtils.radDeg;
            this.arotation = Math.atan2(rc, ra) * spine.MathUtils.radDeg;
          } else {
            this.ascaleX = 0;
            this.ascaleY = Math.sqrt(rb * rb + rd * rd);
            this.ashearY = 0;
            this.arotation = 90 - Math.atan2(rd, rb) * spine.MathUtils.radDeg;
          }
        };
        Bone.prototype.worldToLocal = function(world) {
          var a = this.a, b = this.b, c = this.c, d = this.d;
          var invDet = 1 / (a * d - b * c);
          var x = world.x - this.worldX, y = world.y - this.worldY;
          world.x = x * d * invDet - y * b * invDet;
          world.y = y * a * invDet - x * c * invDet;
          return world;
        };
        Bone.prototype.localToWorld = function(local) {
          var x = local.x, y = local.y;
          local.x = x * this.a + y * this.b + this.worldX;
          local.y = x * this.c + y * this.d + this.worldY;
          return local;
        };
        Bone.prototype.worldToLocalRotation = function(worldRotation) {
          var sin = spine.MathUtils.sinDeg(worldRotation), cos = spine.MathUtils.cosDeg(worldRotation);
          return Math.atan2(this.a * sin - this.c * cos, this.d * cos - this.b * sin) * spine.MathUtils.radDeg + this.rotation - this.shearX;
        };
        Bone.prototype.localToWorldRotation = function(localRotation) {
          localRotation -= this.rotation - this.shearX;
          var sin = spine.MathUtils.sinDeg(localRotation), cos = spine.MathUtils.cosDeg(localRotation);
          return Math.atan2(cos * this.c + sin * this.d, cos * this.a + sin * this.b) * spine.MathUtils.radDeg;
        };
        Bone.prototype.rotateWorld = function(degrees) {
          var a = this.a, b = this.b, c = this.c, d = this.d;
          var cos = spine.MathUtils.cosDeg(degrees), sin = spine.MathUtils.sinDeg(degrees);
          this.a = cos * a - sin * c;
          this.b = cos * b - sin * d;
          this.c = sin * a + cos * c;
          this.d = sin * b + cos * d;
          this.appliedValid = false;
        };
        return Bone;
      })();
      spine.Bone = Bone;
    })(spine || (spine = {}));
    var spine;
    (function(spine) {
      var BoneData = (function() {
        function BoneData(index, name, parent) {
          this.x = 0;
          this.y = 0;
          this.rotation = 0;
          this.scaleX = 1;
          this.scaleY = 1;
          this.shearX = 0;
          this.shearY = 0;
          this.transformMode = TransformMode.Normal;
          this.skinRequired = false;
          this.color = new spine.Color();
          if (index < 0) throw new Error("index must be >= 0.");
          if (null == name) throw new Error("name cannot be null.");
          this.index = index;
          this.name = name;
          this.parent = parent;
        }
        return BoneData;
      })();
      spine.BoneData = BoneData;
      var TransformMode;
      (function(TransformMode) {
        TransformMode[TransformMode["Normal"] = 0] = "Normal";
        TransformMode[TransformMode["OnlyTranslation"] = 1] = "OnlyTranslation";
        TransformMode[TransformMode["NoRotationOrReflection"] = 2] = "NoRotationOrReflection";
        TransformMode[TransformMode["NoScale"] = 3] = "NoScale";
        TransformMode[TransformMode["NoScaleOrReflection"] = 4] = "NoScaleOrReflection";
      })(TransformMode = spine.TransformMode || (spine.TransformMode = {}));
    })(spine || (spine = {}));
    var spine;
    (function(spine) {
      var ConstraintData = (function() {
        function ConstraintData(name, order, skinRequired) {
          this.name = name;
          this.order = order;
          this.skinRequired = skinRequired;
        }
        return ConstraintData;
      })();
      spine.ConstraintData = ConstraintData;
    })(spine || (spine = {}));
    var spine;
    (function(spine) {
      var Event = (function() {
        function Event(time, data) {
          if (null == data) throw new Error("data cannot be null.");
          this.time = time;
          this.data = data;
        }
        return Event;
      })();
      spine.Event = Event;
    })(spine || (spine = {}));
    var spine;
    (function(spine) {
      var EventData = (function() {
        function EventData(name) {
          this.name = name;
        }
        return EventData;
      })();
      spine.EventData = EventData;
    })(spine || (spine = {}));
    var spine;
    (function(spine) {
      var IkConstraint = (function() {
        function IkConstraint(data, skeleton) {
          this.bendDirection = 0;
          this.compress = false;
          this.stretch = false;
          this.mix = 1;
          this.softness = 0;
          this.active = false;
          if (null == data) throw new Error("data cannot be null.");
          if (null == skeleton) throw new Error("skeleton cannot be null.");
          this.data = data;
          this.mix = data.mix;
          this.softness = data.softness;
          this.bendDirection = data.bendDirection;
          this.compress = data.compress;
          this.stretch = data.stretch;
          this.bones = new Array();
          for (var i = 0; i < data.bones.length; i++) this.bones.push(skeleton.findBone(data.bones[i].name));
          this.target = skeleton.findBone(data.target.name);
        }
        IkConstraint.prototype.isActive = function() {
          return this.active;
        };
        IkConstraint.prototype.apply = function() {
          this.update();
        };
        IkConstraint.prototype.update = function() {
          var target = this.target;
          var bones = this.bones;
          switch (bones.length) {
           case 1:
            this.apply1(bones[0], target.worldX, target.worldY, this.compress, this.stretch, this.data.uniform, this.mix);
            break;

           case 2:
            this.apply2(bones[0], bones[1], target.worldX, target.worldY, this.bendDirection, this.stretch, this.softness, this.mix);
          }
        };
        IkConstraint.prototype.apply1 = function(bone, targetX, targetY, compress, stretch, uniform, alpha) {
          bone.appliedValid || bone.updateAppliedTransform();
          var p = bone.parent;
          var id = 1 / (p.a * p.d - p.b * p.c);
          var x = targetX - p.worldX, y = targetY - p.worldY;
          var tx = (x * p.d - y * p.b) * id - bone.ax, ty = (y * p.a - x * p.c) * id - bone.ay;
          var rotationIK = Math.atan2(ty, tx) * spine.MathUtils.radDeg - bone.ashearX - bone.arotation;
          bone.ascaleX < 0 && (rotationIK += 180);
          rotationIK > 180 ? rotationIK -= 360 : rotationIK < -180 && (rotationIK += 360);
          var sx = bone.ascaleX, sy = bone.ascaleY;
          if (compress || stretch) {
            var b = bone.data.length * sx, dd = Math.sqrt(tx * tx + ty * ty);
            if (compress && dd < b || stretch && dd > b && b > 1e-4) {
              var s = (dd / b - 1) * alpha + 1;
              sx *= s;
              uniform && (sy *= s);
            }
          }
          bone.updateWorldTransformWith(bone.ax, bone.ay, bone.arotation + rotationIK * alpha, sx, sy, bone.ashearX, bone.ashearY);
        };
        IkConstraint.prototype.apply2 = function(parent, child, targetX, targetY, bendDir, stretch, softness, alpha) {
          if (0 == alpha) {
            child.updateWorldTransform();
            return;
          }
          parent.appliedValid || parent.updateAppliedTransform();
          child.appliedValid || child.updateAppliedTransform();
          var px = parent.ax, py = parent.ay, psx = parent.ascaleX, sx = psx, psy = parent.ascaleY, csx = child.ascaleX;
          var os1 = 0, os2 = 0, s2 = 0;
          if (psx < 0) {
            psx = -psx;
            os1 = 180;
            s2 = -1;
          } else {
            os1 = 0;
            s2 = 1;
          }
          if (psy < 0) {
            psy = -psy;
            s2 = -s2;
          }
          if (csx < 0) {
            csx = -csx;
            os2 = 180;
          } else os2 = 0;
          var cx = child.ax, cy = 0, cwx = 0, cwy = 0, a = parent.a, b = parent.b, c = parent.c, d = parent.d;
          var u = Math.abs(psx - psy) <= 1e-4;
          if (u) {
            cy = child.ay;
            cwx = a * cx + b * cy + parent.worldX;
            cwy = c * cx + d * cy + parent.worldY;
          } else {
            cy = 0;
            cwx = a * cx + parent.worldX;
            cwy = c * cx + parent.worldY;
          }
          var pp = parent.parent;
          a = pp.a;
          b = pp.b;
          c = pp.c;
          d = pp.d;
          var id = 1 / (a * d - b * c), x = cwx - pp.worldX, y = cwy - pp.worldY;
          var dx = (x * d - y * b) * id - px, dy = (y * a - x * c) * id - py;
          var l1 = Math.sqrt(dx * dx + dy * dy), l2 = child.data.length * csx, a1, a2;
          if (l1 < 1e-4) {
            this.apply1(parent, targetX, targetY, false, stretch, false, alpha);
            child.updateWorldTransformWith(cx, cy, 0, child.ascaleX, child.ascaleY, child.ashearX, child.ashearY);
            return;
          }
          x = targetX - pp.worldX;
          y = targetY - pp.worldY;
          var tx = (x * d - y * b) * id - px, ty = (y * a - x * c) * id - py;
          var dd = tx * tx + ty * ty;
          if (0 != softness) {
            softness *= psx * (csx + 1) / 2;
            var td = Math.sqrt(dd), sd = td - l1 - l2 * psx + softness;
            if (sd > 0) {
              var p = Math.min(1, sd / (2 * softness)) - 1;
              p = (sd - softness * (1 - p * p)) / td;
              tx -= p * tx;
              ty -= p * ty;
              dd = tx * tx + ty * ty;
            }
          }
          outer: if (u) {
            l2 *= psx;
            var cos = (dd - l1 * l1 - l2 * l2) / (2 * l1 * l2);
            if (cos < -1) cos = -1; else if (cos > 1) {
              cos = 1;
              stretch && (sx *= (Math.sqrt(dd) / (l1 + l2) - 1) * alpha + 1);
            }
            a2 = Math.acos(cos) * bendDir;
            a = l1 + l2 * cos;
            b = l2 * Math.sin(a2);
            a1 = Math.atan2(ty * a - tx * b, tx * a + ty * b);
          } else {
            a = psx * l2;
            b = psy * l2;
            var aa = a * a, bb = b * b, ta = Math.atan2(ty, tx);
            c = bb * l1 * l1 + aa * dd - aa * bb;
            var c1 = -2 * bb * l1, c2 = bb - aa;
            d = c1 * c1 - 4 * c2 * c;
            if (d >= 0) {
              var q = Math.sqrt(d);
              c1 < 0 && (q = -q);
              q = -(c1 + q) / 2;
              var r0 = q / c2, r1 = c / q;
              var r = Math.abs(r0) < Math.abs(r1) ? r0 : r1;
              if (r * r <= dd) {
                y = Math.sqrt(dd - r * r) * bendDir;
                a1 = ta - Math.atan2(y, r);
                a2 = Math.atan2(y / psy, (r - l1) / psx);
                break outer;
              }
            }
            var minAngle = spine.MathUtils.PI, minX = l1 - a, minDist = minX * minX, minY = 0;
            var maxAngle = 0, maxX = l1 + a, maxDist = maxX * maxX, maxY = 0;
            c = -a * l1 / (aa - bb);
            if (c >= -1 && c <= 1) {
              c = Math.acos(c);
              x = a * Math.cos(c) + l1;
              y = b * Math.sin(c);
              d = x * x + y * y;
              if (d < minDist) {
                minAngle = c;
                minDist = d;
                minX = x;
                minY = y;
              }
              if (d > maxDist) {
                maxAngle = c;
                maxDist = d;
                maxX = x;
                maxY = y;
              }
            }
            if (dd <= (minDist + maxDist) / 2) {
              a1 = ta - Math.atan2(minY * bendDir, minX);
              a2 = minAngle * bendDir;
            } else {
              a1 = ta - Math.atan2(maxY * bendDir, maxX);
              a2 = maxAngle * bendDir;
            }
          }
          var os = Math.atan2(cy, cx) * s2;
          var rotation = parent.arotation;
          a1 = (a1 - os) * spine.MathUtils.radDeg + os1 - rotation;
          a1 > 180 ? a1 -= 360 : a1 < -180 && (a1 += 360);
          parent.updateWorldTransformWith(px, py, rotation + a1 * alpha, sx, parent.ascaleY, 0, 0);
          rotation = child.arotation;
          a2 = ((a2 + os) * spine.MathUtils.radDeg - child.ashearX) * s2 + os2 - rotation;
          a2 > 180 ? a2 -= 360 : a2 < -180 && (a2 += 360);
          child.updateWorldTransformWith(cx, cy, rotation + a2 * alpha, child.ascaleX, child.ascaleY, child.ashearX, child.ashearY);
        };
        return IkConstraint;
      })();
      spine.IkConstraint = IkConstraint;
    })(spine || (spine = {}));
    var spine;
    (function(spine) {
      var IkConstraintData = (function(_super) {
        __extends(IkConstraintData, _super);
        function IkConstraintData(name) {
          var _this = _super.call(this, name, 0, false) || this;
          _this.bones = new Array();
          _this.bendDirection = 1;
          _this.compress = false;
          _this.stretch = false;
          _this.uniform = false;
          _this.mix = 1;
          _this.softness = 0;
          return _this;
        }
        return IkConstraintData;
      })(spine.ConstraintData);
      spine.IkConstraintData = IkConstraintData;
    })(spine || (spine = {}));
    var spine;
    (function(spine) {
      var PathConstraint = (function() {
        function PathConstraint(data, skeleton) {
          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();
          this.active = false;
          if (null == data) throw new Error("data cannot be null.");
          if (null == skeleton) throw new Error("skeleton cannot be null.");
          this.data = data;
          this.bones = new Array();
          for (var i = 0, n = data.bones.length; i < n; i++) this.bones.push(skeleton.findBone(data.bones[i].name));
          this.target = skeleton.findSlot(data.target.name);
          this.position = data.position;
          this.spacing = data.spacing;
          this.rotateMix = data.rotateMix;
          this.translateMix = data.translateMix;
        }
        PathConstraint.prototype.isActive = function() {
          return this.active;
        };
        PathConstraint.prototype.apply = function() {
          this.update();
        };
        PathConstraint.prototype.update = function() {
          var attachment = this.target.getAttachment();
          if (!(attachment instanceof spine.PathAttachment)) return;
          var rotateMix = this.rotateMix, translateMix = this.translateMix;
          var translate = translateMix > 0, rotate = rotateMix > 0;
          if (!translate && !rotate) return;
          var data = this.data;
          var percentSpacing = data.spacingMode == spine.SpacingMode.Percent;
          var rotateMode = data.rotateMode;
          var tangents = rotateMode == spine.RotateMode.Tangent, scale = rotateMode == spine.RotateMode.ChainScale;
          var boneCount = this.bones.length, spacesCount = tangents ? boneCount : boneCount + 1;
          var bones = this.bones;
          var spaces = spine.Utils.setArraySize(this.spaces, spacesCount), lengths = null;
          var spacing = this.spacing;
          if (scale || !percentSpacing) {
            scale && (lengths = spine.Utils.setArraySize(this.lengths, boneCount));
            var lengthSpacing = data.spacingMode == spine.SpacingMode.Length;
            for (var i = 0, n = spacesCount - 1; i < n; ) {
              var bone = bones[i];
              var setupLength = bone.data.length;
              if (setupLength < PathConstraint.epsilon) {
                scale && (lengths[i] = 0);
                spaces[++i] = 0;
              } else if (percentSpacing) {
                if (scale) {
                  var x = setupLength * bone.a, y = setupLength * bone.c;
                  var length_1 = Math.sqrt(x * x + y * y);
                  lengths[i] = length_1;
                }
                spaces[++i] = spacing;
              } else {
                var x = setupLength * bone.a, y = setupLength * bone.c;
                var length_2 = Math.sqrt(x * x + y * y);
                scale && (lengths[i] = length_2);
                spaces[++i] = (lengthSpacing ? setupLength + spacing : spacing) * length_2 / setupLength;
              }
            }
          } else for (var i = 1; i < spacesCount; i++) spaces[i] = spacing;
          var positions = this.computeWorldPositions(attachment, spacesCount, tangents, data.positionMode == spine.PositionMode.Percent, percentSpacing);
          var boneX = positions[0], boneY = positions[1], offsetRotation = data.offsetRotation;
          var tip = false;
          if (0 == offsetRotation) tip = rotateMode == spine.RotateMode.Chain; else {
            tip = false;
            var p = this.target.bone;
            offsetRotation *= p.a * p.d - p.b * p.c > 0 ? spine.MathUtils.degRad : -spine.MathUtils.degRad;
          }
          for (var i = 0, p = 3; i < boneCount; i++, p += 3) {
            var bone = bones[i];
            bone.worldX += (boneX - bone.worldX) * translateMix;
            bone.worldY += (boneY - bone.worldY) * translateMix;
            var x = positions[p], y = positions[p + 1], dx = x - boneX, dy = y - boneY;
            if (scale) {
              var length_3 = lengths[i];
              if (0 != length_3) {
                var s = (Math.sqrt(dx * dx + dy * dy) / length_3 - 1) * rotateMix + 1;
                bone.a *= s;
                bone.c *= s;
              }
            }
            boneX = x;
            boneY = y;
            if (rotate) {
              var a = bone.a, b = bone.b, c = bone.c, d = bone.d, r = 0, cos = 0, sin = 0;
              r = tangents ? positions[p - 1] : 0 == spaces[i + 1] ? positions[p + 2] : Math.atan2(dy, dx);
              r -= Math.atan2(c, a);
              if (tip) {
                cos = Math.cos(r);
                sin = Math.sin(r);
                var length_4 = bone.data.length;
                boneX += (length_4 * (cos * a - sin * c) - dx) * rotateMix;
                boneY += (length_4 * (sin * a + cos * c) - dy) * rotateMix;
              } else r += offsetRotation;
              r > spine.MathUtils.PI ? r -= spine.MathUtils.PI2 : r < -spine.MathUtils.PI && (r += spine.MathUtils.PI2);
              r *= rotateMix;
              cos = Math.cos(r);
              sin = Math.sin(r);
              bone.a = cos * a - sin * c;
              bone.b = cos * b - sin * d;
              bone.c = sin * a + cos * c;
              bone.d = sin * b + cos * d;
            }
            bone.appliedValid = false;
          }
        };
        PathConstraint.prototype.computeWorldPositions = function(path, spacesCount, tangents, percentPosition, percentSpacing) {
          var target = this.target;
          var position = this.position;
          var spaces = this.spaces, out = spine.Utils.setArraySize(this.positions, 3 * spacesCount + 2), world = null;
          var closed = path.closed;
          var verticesLength = path.worldVerticesLength, curveCount = verticesLength / 6, prevCurve = PathConstraint.NONE;
          if (!path.constantSpeed) {
            var lengths = path.lengths;
            curveCount -= closed ? 1 : 2;
            var pathLength_1 = lengths[curveCount];
            percentPosition && (position *= pathLength_1);
            if (percentSpacing) for (var i = 1; i < spacesCount; i++) spaces[i] *= pathLength_1;
            world = spine.Utils.setArraySize(this.world, 8);
            for (var i = 0, o = 0, curve = 0; i < spacesCount; i++, o += 3) {
              var space = spaces[i];
              position += space;
              var p = position;
              if (closed) {
                p %= pathLength_1;
                p < 0 && (p += pathLength_1);
                curve = 0;
              } else {
                if (p < 0) {
                  if (prevCurve != PathConstraint.BEFORE) {
                    prevCurve = PathConstraint.BEFORE;
                    path.computeWorldVertices(target, 2, 4, world, 0, 2);
                  }
                  this.addBeforePosition(p, world, 0, out, o);
                  continue;
                }
                if (p > pathLength_1) {
                  if (prevCurve != PathConstraint.AFTER) {
                    prevCurve = PathConstraint.AFTER;
                    path.computeWorldVertices(target, verticesLength - 6, 4, world, 0, 2);
                  }
                  this.addAfterPosition(p - pathLength_1, world, 0, out, o);
                  continue;
                }
              }
              for (;;curve++) {
                var length_5 = lengths[curve];
                if (p > length_5) continue;
                if (0 == curve) p /= length_5; else {
                  var prev = lengths[curve - 1];
                  p = (p - prev) / (length_5 - prev);
                }
                break;
              }
              if (curve != prevCurve) {
                prevCurve = curve;
                if (closed && curve == curveCount) {
                  path.computeWorldVertices(target, verticesLength - 4, 4, world, 0, 2);
                  path.computeWorldVertices(target, 0, 4, world, 4, 2);
                } else path.computeWorldVertices(target, 6 * curve + 2, 8, world, 0, 2);
              }
              this.addCurvePosition(p, world[0], world[1], world[2], world[3], world[4], world[5], world[6], world[7], out, o, tangents || i > 0 && 0 == space);
            }
            return out;
          }
          if (closed) {
            verticesLength += 2;
            world = spine.Utils.setArraySize(this.world, verticesLength);
            path.computeWorldVertices(target, 2, verticesLength - 4, world, 0, 2);
            path.computeWorldVertices(target, 0, 2, world, verticesLength - 4, 2);
            world[verticesLength - 2] = world[0];
            world[verticesLength - 1] = world[1];
          } else {
            curveCount--;
            verticesLength -= 4;
            world = spine.Utils.setArraySize(this.world, verticesLength);
            path.computeWorldVertices(target, 2, verticesLength, world, 0, 2);
          }
          var curves = spine.Utils.setArraySize(this.curves, curveCount);
          var pathLength = 0;
          var x1 = world[0], y1 = world[1], cx1 = 0, cy1 = 0, cx2 = 0, cy2 = 0, x2 = 0, y2 = 0;
          var tmpx = 0, tmpy = 0, dddfx = 0, dddfy = 0, ddfx = 0, ddfy = 0, dfx = 0, dfy = 0;
          for (var i = 0, w = 2; i < curveCount; i++, w += 6) {
            cx1 = world[w];
            cy1 = world[w + 1];
            cx2 = world[w + 2];
            cy2 = world[w + 3];
            x2 = world[w + 4];
            y2 = world[w + 5];
            tmpx = .1875 * (x1 - 2 * cx1 + cx2);
            tmpy = .1875 * (y1 - 2 * cy1 + cy2);
            dddfx = .09375 * (3 * (cx1 - cx2) - x1 + x2);
            dddfy = .09375 * (3 * (cy1 - cy2) - y1 + y2);
            ddfx = 2 * tmpx + dddfx;
            ddfy = 2 * tmpy + dddfy;
            dfx = .75 * (cx1 - x1) + tmpx + .16666667 * dddfx;
            dfy = .75 * (cy1 - y1) + tmpy + .16666667 * dddfy;
            pathLength += Math.sqrt(dfx * dfx + dfy * dfy);
            dfx += ddfx;
            dfy += ddfy;
            ddfx += dddfx;
            ddfy += dddfy;
            pathLength += Math.sqrt(dfx * dfx + dfy * dfy);
            dfx += ddfx;
            dfy += ddfy;
            pathLength += Math.sqrt(dfx * dfx + dfy * dfy);
            dfx += ddfx + dddfx;
            dfy += ddfy + dddfy;
            pathLength += Math.sqrt(dfx * dfx + dfy * dfy);
            curves[i] = pathLength;
            x1 = x2;
            y1 = y2;
          }
          position *= percentPosition ? pathLength : pathLength / path.lengths[curveCount - 1];
          if (percentSpacing) for (var i = 1; i < spacesCount; i++) spaces[i] *= pathLength;
          var segments = this.segments;
          var curveLength = 0;
          for (var i = 0, o = 0, curve = 0, segment = 0; i < spacesCount; i++, o += 3) {
            var space = spaces[i];
            position += space;
            var p = position;
            if (closed) {
              p %= pathLength;
              p < 0 && (p += pathLength);
              curve = 0;
            } else {
              if (p < 0) {
                this.addBeforePosition(p, world, 0, out, o);
                continue;
              }
              if (p > pathLength) {
                this.addAfterPosition(p - pathLength, world, verticesLength - 4, out, o);
                continue;
              }
            }
            for (;;curve++) {
              var length_6 = curves[curve];
              if (p > length_6) continue;
              if (0 == curve) p /= length_6; else {
                var prev = curves[curve - 1];
                p = (p - prev) / (length_6 - prev);
              }
              break;
            }
            if (curve != prevCurve) {
              prevCurve = curve;
              var ii = 6 * curve;
              x1 = world[ii];
              y1 = world[ii + 1];
              cx1 = world[ii + 2];
              cy1 = world[ii + 3];
              cx2 = world[ii + 4];
              cy2 = world[ii + 5];
              x2 = world[ii + 6];
              y2 = world[ii + 7];
              tmpx = .03 * (x1 - 2 * cx1 + cx2);
              tmpy = .03 * (y1 - 2 * cy1 + cy2);
              dddfx = .006 * (3 * (cx1 - cx2) - x1 + x2);
              dddfy = .006 * (3 * (cy1 - cy2) - y1 + y2);
              ddfx = 2 * tmpx + dddfx;
              ddfy = 2 * tmpy + dddfy;
              dfx = .3 * (cx1 - x1) + tmpx + .16666667 * dddfx;
              dfy = .3 * (cy1 - y1) + tmpy + .16666667 * dddfy;
              curveLength = Math.sqrt(dfx * dfx + dfy * dfy);
              segments[0] = curveLength;
              for (ii = 1; ii < 8; ii++) {
                dfx += ddfx;
                dfy += ddfy;
                ddfx += dddfx;
                ddfy += dddfy;
                curveLength += Math.sqrt(dfx * dfx + dfy * dfy);
                segments[ii] = curveLength;
              }
              dfx += ddfx;
              dfy += ddfy;
              curveLength += Math.sqrt(dfx * dfx + dfy * dfy);
              segments[8] = curveLength;
              dfx += ddfx + dddfx;
              dfy += ddfy + dddfy;
              curveLength += Math.sqrt(dfx * dfx + dfy * dfy);
              segments[9] = curveLength;
              segment = 0;
            }
            p *= curveLength;
            for (;;segment++) {
              var length_7 = segments[segment];
              if (p > length_7) continue;
              if (0 == segment) p /= length_7; else {
                var prev = segments[segment - 1];
                p = segment + (p - prev) / (length_7 - prev);
              }
              break;
            }
            this.addCurvePosition(.1 * p, x1, y1, cx1, cy1, cx2, cy2, x2, y2, out, o, tangents || i > 0 && 0 == space);
          }
          return out;
        };
        PathConstraint.prototype.addBeforePosition = function(p, temp, i, out, o) {
          var x1 = temp[i], y1 = temp[i + 1], dx = temp[i + 2] - x1, dy = temp[i + 3] - y1, r = Math.atan2(dy, dx);
          out[o] = x1 + p * Math.cos(r);
          out[o + 1] = y1 + p * Math.sin(r);
          out[o + 2] = r;
        };
        PathConstraint.prototype.addAfterPosition = function(p, temp, i, out, o) {
          var x1 = temp[i + 2], y1 = temp[i + 3], dx = x1 - temp[i], dy = y1 - temp[i + 1], r = Math.atan2(dy, dx);
          out[o] = x1 + p * Math.cos(r);
          out[o + 1] = y1 + p * Math.sin(r);
          out[o + 2] = r;
        };
        PathConstraint.prototype.addCurvePosition = function(p, x1, y1, cx1, cy1, cx2, cy2, x2, y2, out, o, tangents) {
          if (0 == p || isNaN(p)) {
            out[o] = x1;
            out[o + 1] = y1;
            out[o + 2] = Math.atan2(cy1 - y1, cx1 - x1);
            return;
          }
          var tt = p * p, ttt = tt * p, u = 1 - p, uu = u * u, uuu = uu * u;
          var ut = u * p, ut3 = 3 * ut, uut3 = u * ut3, utt3 = ut3 * p;
          var x = x1 * uuu + cx1 * uut3 + cx2 * utt3 + x2 * ttt, y = y1 * uuu + cy1 * uut3 + cy2 * utt3 + y2 * ttt;
          out[o] = x;
          out[o + 1] = y;
          tangents && (out[o + 2] = p < .001 ? Math.atan2(cy1 - y1, cx1 - x1) : Math.atan2(y - (y1 * uu + cy1 * ut * 2 + cy2 * tt), x - (x1 * uu + cx1 * ut * 2 + cx2 * tt)));
        };
        PathConstraint.NONE = -1;
        PathConstraint.BEFORE = -2;
        PathConstraint.AFTER = -3;
        PathConstraint.epsilon = 1e-5;
        return PathConstraint;
      })();
      spine.PathConstraint = PathConstraint;
    })(spine || (spine = {}));
    var spine;
    (function(spine) {
      var PathConstraintData = (function(_super) {
        __extends(PathConstraintData, _super);
        function PathConstraintData(name) {
          var _this = _super.call(this, name, 0, false) || this;
          _this.bones = new Array();
          return _this;
        }
        return PathConstraintData;
      })(spine.ConstraintData);
      spine.PathConstraintData = PathConstraintData;
      var PositionMode;
      (function(PositionMode) {
        PositionMode[PositionMode["Fixed"] = 0] = "Fixed";
        PositionMode[PositionMode["Percent"] = 1] = "Percent";
      })(PositionMode = spine.PositionMode || (spine.PositionMode = {}));
      var SpacingMode;
      (function(SpacingMode) {
        SpacingMode[SpacingMode["Length"] = 0] = "Length";
        SpacingMode[SpacingMode["Fixed"] = 1] = "Fixed";
        SpacingMode[SpacingMode["Percent"] = 2] = "Percent";
      })(SpacingMode = spine.SpacingMode || (spine.SpacingMode = {}));
      var RotateMode;
      (function(RotateMode) {
        RotateMode[RotateMode["Tangent"] = 0] = "Tangent";
        RotateMode[RotateMode["Chain"] = 1] = "Chain";
        RotateMode[RotateMode["ChainScale"] = 2] = "ChainScale";
      })(RotateMode = spine.RotateMode || (spine.RotateMode = {}));
    })(spine || (spine = {}));
    var spine;
    (function(spine) {
      var Assets = (function() {
        function Assets(clientId) {
          this.toLoad = new Array();
          this.assets = {};
          this.clientId = clientId;
        }
        Assets.prototype.loaded = function() {
          var i = 0;
          for (var v in this.assets) i++;
          return i;
        };
        return Assets;
      })();
      var SharedAssetManager = (function() {
        function SharedAssetManager(pathPrefix) {
          void 0 === pathPrefix && (pathPrefix = "");
          this.clientAssets = {};
          this.queuedAssets = {};
          this.rawAssets = {};
          this.errors = {};
          this.pathPrefix = pathPrefix;
        }
        SharedAssetManager.prototype.queueAsset = function(clientId, textureLoader, path) {
          var clientAssets = this.clientAssets[clientId];
          if (null === clientAssets || void 0 === clientAssets) {
            clientAssets = new Assets(clientId);
            this.clientAssets[clientId] = clientAssets;
          }
          null !== textureLoader && (clientAssets.textureLoader = textureLoader);
          clientAssets.toLoad.push(path);
          if (this.queuedAssets[path] === path) return false;
          this.queuedAssets[path] = path;
          return true;
        };
        SharedAssetManager.prototype.loadText = function(clientId, path) {
          var _this = this;
          path = this.pathPrefix + path;
          if (!this.queueAsset(clientId, null, path)) return;
          var request = new XMLHttpRequest();
          request.onreadystatechange = function() {
            request.readyState == XMLHttpRequest.DONE && (request.status >= 200 && request.status < 300 ? _this.rawAssets[path] = request.responseText : _this.errors[path] = "Couldn't load text " + path + ": status " + request.status + ", " + request.responseText);
          };
          request.open("GET", path, true);
          request.send();
        };
        SharedAssetManager.prototype.loadJson = function(clientId, path) {
          var _this = this;
          path = this.pathPrefix + path;
          if (!this.queueAsset(clientId, null, path)) return;
          var request = new XMLHttpRequest();
          request.onreadystatechange = function() {
            request.readyState == XMLHttpRequest.DONE && (request.status >= 200 && request.status < 300 ? _this.rawAssets[path] = JSON.parse(request.responseText) : _this.errors[path] = "Couldn't load text " + path + ": status " + request.status + ", " + request.responseText);
          };
          request.open("GET", path, true);
          request.send();
        };
        SharedAssetManager.prototype.loadTexture = function(clientId, textureLoader, path) {
          var _this = this;
          path = this.pathPrefix + path;
          if (!this.queueAsset(clientId, textureLoader, path)) return;
          var img = new Image();
          img.src = path;
          img.crossOrigin = "anonymous";
          img.onload = function(ev) {
            _this.rawAssets[path] = img;
          };
          img.onerror = function(ev) {
            _this.errors[path] = "Couldn't load image " + path;
          };
        };
        SharedAssetManager.prototype.get = function(clientId, path) {
          path = this.pathPrefix + path;
          var clientAssets = this.clientAssets[clientId];
          if (null === clientAssets || void 0 === clientAssets) return true;
          return clientAssets.assets[path];
        };
        SharedAssetManager.prototype.updateClientAssets = function(clientAssets) {
          for (var i = 0; i < clientAssets.toLoad.length; i++) {
            var path = clientAssets.toLoad[i];
            var asset = clientAssets.assets[path];
            if (null === asset || void 0 === asset) {
              var rawAsset = this.rawAssets[path];
              if (null === rawAsset || void 0 === rawAsset) continue;
              rawAsset instanceof HTMLImageElement ? clientAssets.assets[path] = clientAssets.textureLoader(rawAsset) : clientAssets.assets[path] = rawAsset;
            }
          }
        };
        SharedAssetManager.prototype.isLoadingComplete = function(clientId) {
          var clientAssets = this.clientAssets[clientId];
          if (null === clientAssets || void 0 === clientAssets) return true;
          this.updateClientAssets(clientAssets);
          return clientAssets.toLoad.length == clientAssets.loaded();
        };
        SharedAssetManager.prototype.dispose = function() {};
        SharedAssetManager.prototype.hasErrors = function() {
          return Object.keys(this.errors).length > 0;
        };
        SharedAssetManager.prototype.getErrors = function() {
          return this.errors;
        };
        return SharedAssetManager;
      })();
      spine.SharedAssetManager = SharedAssetManager;
    })(spine || (spine = {}));
    var spine;
    (function(spine) {
      var Skeleton = (function() {
        function Skeleton(data) {
          this._updateCache = new Array();
          this.updateCacheReset = new Array();
          this.time = 0;
          this.scaleX = 1;
          this.scaleY = 1;
          this.x = 0;
          this.y = 0;
          if (null == data) throw new Error("data cannot be null.");
          this.data = data;
          this.bones = new Array();
          for (var i = 0; i < data.bones.length; i++) {
            var boneData = data.bones[i];
            var bone = void 0;
            if (null == boneData.parent) bone = new spine.Bone(boneData, this, null); else {
              var parent_1 = this.bones[boneData.parent.index];
              bone = new spine.Bone(boneData, this, parent_1);
              parent_1.children.push(bone);
            }
            this.bones.push(bone);
          }
          this.slots = new Array();
          this.drawOrder = new Array();
          for (var i = 0; i < data.slots.length; i++) {
            var slotData = data.slots[i];
            var bone = this.bones[slotData.boneData.index];
            var slot = new spine.Slot(slotData, bone);
            this.slots.push(slot);
            this.drawOrder.push(slot);
          }
          this.ikConstraints = new Array();
          for (var i = 0; i < data.ikConstraints.length; i++) {
            var ikConstraintData = data.ikConstraints[i];
            this.ikConstraints.push(new spine.IkConstraint(ikConstraintData, this));
          }
          this.transformConstraints = new Array();
          for (var i = 0; i < data.transformConstraints.length; i++) {
            var transformConstraintData = data.transformConstraints[i];
            this.transformConstraints.push(new spine.TransformConstraint(transformConstraintData, this));
          }
          this.pathConstraints = new Array();
          for (var i = 0; i < data.pathConstraints.length; i++) {
            var pathConstraintData = data.pathConstraints[i];
            this.pathConstraints.push(new spine.PathConstraint(pathConstraintData, this));
          }
          this.color = new spine.Color(1, 1, 1, 1);
          this.updateCache();
        }
        Skeleton.prototype.updateCache = function() {
          var updateCache = this._updateCache;
          updateCache.length = 0;
          this.updateCacheReset.length = 0;
          var bones = this.bones;
          for (var i = 0, n = bones.length; i < n; i++) {
            var bone = bones[i];
            bone.sorted = bone.data.skinRequired;
            bone.active = !bone.sorted;
          }
          if (null != this.skin) {
            var skinBones = this.skin.bones;
            for (var i = 0, n = this.skin.bones.length; i < n; i++) {
              var bone = this.bones[skinBones[i].index];
              do {
                bone.sorted = false;
                bone.active = true;
                bone = bone.parent;
              } while (null != bone);
            }
          }
          var ikConstraints = this.ikConstraints;
          var transformConstraints = this.transformConstraints;
          var pathConstraints = this.pathConstraints;
          var ikCount = ikConstraints.length, transformCount = transformConstraints.length, pathCount = pathConstraints.length;
          var constraintCount = ikCount + transformCount + pathCount;
          outer: for (var i = 0; i < constraintCount; i++) {
            for (var ii = 0; ii < ikCount; ii++) {
              var constraint = ikConstraints[ii];
              if (constraint.data.order == i) {
                this.sortIkConstraint(constraint);
                continue outer;
              }
            }
            for (var ii = 0; ii < transformCount; ii++) {
              var constraint = transformConstraints[ii];
              if (constraint.data.order == i) {
                this.sortTransformConstraint(constraint);
                continue outer;
              }
            }
            for (var ii = 0; ii < pathCount; ii++) {
              var constraint = pathConstraints[ii];
              if (constraint.data.order == i) {
                this.sortPathConstraint(constraint);
                continue outer;
              }
            }
          }
          for (var i = 0, n = bones.length; i < n; i++) this.sortBone(bones[i]);
        };
        Skeleton.prototype.sortIkConstraint = function(constraint) {
          constraint.active = constraint.target.isActive() && (!constraint.data.skinRequired || null != this.skin && spine.Utils.contains(this.skin.constraints, constraint.data, true));
          if (!constraint.active) return;
          var target = constraint.target;
          this.sortBone(target);
          var constrained = constraint.bones;
          var parent = constrained[0];
          this.sortBone(parent);
          if (constrained.length > 1) {
            var child = constrained[constrained.length - 1];
            this._updateCache.indexOf(child) > -1 || this.updateCacheReset.push(child);
          }
          this._updateCache.push(constraint);
          this.sortReset(parent.children);
          constrained[constrained.length - 1].sorted = true;
        };
        Skeleton.prototype.sortPathConstraint = function(constraint) {
          constraint.active = constraint.target.bone.isActive() && (!constraint.data.skinRequired || null != this.skin && spine.Utils.contains(this.skin.constraints, constraint.data, true));
          if (!constraint.active) return;
          var slot = constraint.target;
          var slotIndex = slot.data.index;
          var slotBone = slot.bone;
          null != this.skin && this.sortPathConstraintAttachment(this.skin, slotIndex, slotBone);
          null != this.data.defaultSkin && this.data.defaultSkin != this.skin && this.sortPathConstraintAttachment(this.data.defaultSkin, slotIndex, slotBone);
          for (var i = 0, n = this.data.skins.length; i < n; i++) this.sortPathConstraintAttachment(this.data.skins[i], slotIndex, slotBone);
          var attachment = slot.getAttachment();
          attachment instanceof spine.PathAttachment && this.sortPathConstraintAttachmentWith(attachment, slotBone);
          var constrained = constraint.bones;
          var boneCount = constrained.length;
          for (var i = 0; i < boneCount; i++) this.sortBone(constrained[i]);
          this._updateCache.push(constraint);
          for (var i = 0; i < boneCount; i++) this.sortReset(constrained[i].children);
          for (var i = 0; i < boneCount; i++) constrained[i].sorted = true;
        };
        Skeleton.prototype.sortTransformConstraint = function(constraint) {
          constraint.active = constraint.target.isActive() && (!constraint.data.skinRequired || null != this.skin && spine.Utils.contains(this.skin.constraints, constraint.data, true));
          if (!constraint.active) return;
          this.sortBone(constraint.target);
          var constrained = constraint.bones;
          var boneCount = constrained.length;
          if (constraint.data.local) for (var i = 0; i < boneCount; i++) {
            var child = constrained[i];
            this.sortBone(child.parent);
            this._updateCache.indexOf(child) > -1 || this.updateCacheReset.push(child);
          } else for (var i = 0; i < boneCount; i++) this.sortBone(constrained[i]);
          this._updateCache.push(constraint);
          for (var ii = 0; ii < boneCount; ii++) this.sortReset(constrained[ii].children);
          for (var ii = 0; ii < boneCount; ii++) constrained[ii].sorted = true;
        };
        Skeleton.prototype.sortPathConstraintAttachment = function(skin, slotIndex, slotBone) {
          var attachments = skin.attachments[slotIndex];
          if (!attachments) return;
          for (var key in attachments) this.sortPathConstraintAttachmentWith(attachments[key], slotBone);
        };
        Skeleton.prototype.sortPathConstraintAttachmentWith = function(attachment, slotBone) {
          if (!(attachment instanceof spine.PathAttachment)) return;
          var pathBones = attachment.bones;
          if (null == pathBones) this.sortBone(slotBone); else {
            var bones = this.bones;
            var i = 0;
            while (i < pathBones.length) {
              var boneCount = pathBones[i++];
              for (var n = i + boneCount; i < n; i++) {
                var boneIndex = pathBones[i];
                this.sortBone(bones[boneIndex]);
              }
            }
          }
        };
        Skeleton.prototype.sortBone = function(bone) {
          if (bone.sorted) return;
          var parent = bone.parent;
          null != parent && this.sortBone(parent);
          bone.sorted = true;
          this._updateCache.push(bone);
        };
        Skeleton.prototype.sortReset = function(bones) {
          for (var i = 0, n = bones.length; i < n; i++) {
            var bone = bones[i];
            if (!bone.active) continue;
            bone.sorted && this.sortReset(bone.children);
            bone.sorted = false;
          }
        };
        Skeleton.prototype.updateWorldTransform = function() {
          var updateCacheReset = this.updateCacheReset;
          for (var i = 0, n = updateCacheReset.length; i < n; i++) {
            var bone = updateCacheReset[i];
            bone.ax = bone.x;
            bone.ay = bone.y;
            bone.arotation = bone.rotation;
            bone.ascaleX = bone.scaleX;
            bone.ascaleY = bone.scaleY;
            bone.ashearX = bone.shearX;
            bone.ashearY = bone.shearY;
            bone.appliedValid = true;
          }
          var updateCache = this._updateCache;
          for (var i = 0, n = updateCache.length; i < n; i++) updateCache[i].update();
        };
        Skeleton.prototype.setToSetupPose = function() {
          this.setBonesToSetupPose();
          this.setSlotsToSetupPose();
        };
        Skeleton.prototype.setBonesToSetupPose = function() {
          var bones = this.bones;
          for (var i = 0, n = bones.length; i < n; i++) bones[i].setToSetupPose();
          var ikConstraints = this.ikConstraints;
          for (var i = 0, n = ikConstraints.length; i < n; i++) {
            var constraint = ikConstraints[i];
            constraint.mix = constraint.data.mix;
            constraint.softness = constraint.data.softness;
            constraint.bendDirection = constraint.data.bendDirection;
            constraint.compress = constraint.data.compress;
            constraint.stretch = constraint.data.stretch;
          }
          var transformConstraints = this.transformConstraints;
          for (var i = 0, n = transformConstraints.length; i < n; i++) {
            var constraint = transformConstraints[i];
            var data = constraint.data;
            constraint.rotateMix = data.rotateMix;
            constraint.translateMix = data.translateMix;
            constraint.scaleMix = data.scaleMix;
            constraint.shearMix = data.shearMix;
          }
          var pathConstraints = this.pathConstraints;
          for (var i = 0, n = pathConstraints.length; i < n; i++) {
            var constraint = pathConstraints[i];
            var data = constraint.data;
            constraint.position = data.position;
            constraint.spacing = data.spacing;
            constraint.rotateMix = data.rotateMix;
            constraint.translateMix = data.translateMix;
          }
        };
        Skeleton.prototype.setSlotsToSetupPose = function() {
          var slots = this.slots;
          spine.Utils.arrayCopy(slots, 0, this.drawOrder, 0, slots.length);
          for (var i = 0, n = slots.length; i < n; i++) slots[i].setToSetupPose();
        };
        Skeleton.prototype.getRootBone = function() {
          if (0 == this.bones.length) return null;
          return this.bones[0];
        };
        Skeleton.prototype.findBone = function(boneName) {
          if (null == boneName) throw new Error("boneName cannot be null.");
          var bones = this.bones;
          for (var i = 0, n = bones.length; i < n; i++) {
            var bone = bones[i];
            if (bone.data.name == boneName) return bone;
          }
          return null;
        };
        Skeleton.prototype.findBoneIndex = function(boneName) {
          if (null == boneName) throw new Error("boneName cannot be null.");
          var bones = this.bones;
          for (var i = 0, n = bones.length; i < n; i++) if (bones[i].data.name == boneName) return i;
          return -1;
        };
        Skeleton.prototype.findSlot = function(slotName) {
          if (null == slotName) throw new Error("slotName cannot be null.");
          var slots = this.slots;
          for (var i = 0, n = slots.length; i < n; i++) {
            var slot = slots[i];
            if (slot.data.name == slotName) return slot;
          }
          return null;
        };
        Skeleton.prototype.findSlotIndex = function(slotName) {
          if (null == slotName) throw new Error("slotName cannot be null.");
          var slots = this.slots;
          for (var i = 0, n = slots.length; i < n; i++) if (slots[i].data.name == slotName) return i;
          return -1;
        };
        Skeleton.prototype.setSkinByName = function(skinName) {
          var skin = this.data.findSkin(skinName);
          if (null == skin) throw new Error("Skin not found: " + skinName);
          this.setSkin(skin);
        };
        Skeleton.prototype.setSkin = function(newSkin) {
          if (newSkin == this.skin) return;
          if (null != newSkin) if (null != this.skin) newSkin.attachAll(this, this.skin); else {
            var slots = this.slots;
            for (var i = 0, n = slots.length; i < n; i++) {
              var slot = slots[i];
              var name_1 = slot.data.attachmentName;
              if (null != name_1) {
                var attachment = newSkin.getAttachment(i, name_1);
                null != attachment && slot.setAttachment(attachment);
              }
            }
          }
          this.skin = newSkin;
          this.updateCache();
        };
        Skeleton.prototype.getAttachmentByName = function(slotName, attachmentName) {
          return this.getAttachment(this.data.findSlotIndex(slotName), attachmentName);
        };
        Skeleton.prototype.getAttachment = function(slotIndex, attachmentName) {
          if (null == attachmentName) throw new Error("attachmentName cannot be null.");
          if (null != this.skin) {
            var attachment = this.skin.getAttachment(slotIndex, attachmentName);
            if (null != attachment) return attachment;
          }
          if (null != this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName);
          return null;
        };
        Skeleton.prototype.setAttachment = function(slotName, attachmentName) {
          if (null == slotName) throw new Error("slotName cannot be null.");
          var slots = this.slots;
          for (var i = 0, n = slots.length; i < n; i++) {
            var slot = slots[i];
            if (slot.data.name == slotName) {
              var attachment = null;
              if (null != attachmentName) {
                attachment = this.getAttachment(i, attachmentName);
                if (null == attachment) throw new Error("Attachment not found: " + attachmentName + ", for slot: " + slotName);
              }
              slot.setAttachment(attachment);
              return;
            }
          }
          throw new Error("Slot not found: " + slotName);
        };
        Skeleton.prototype.findIkConstraint = function(constraintName) {
          if (null == constraintName) throw new Error("constraintName cannot be null.");
          var ikConstraints = this.ikConstraints;
          for (var i = 0, n = ikConstraints.length; i < n; i++) {
            var ikConstraint = ikConstraints[i];
            if (ikConstraint.data.name == constraintName) return ikConstraint;
          }
          return null;
        };
        Skeleton.prototype.findTransformConstraint = function(constraintName) {
          if (null == constraintName) throw new Error("constraintName cannot be null.");
          var transformConstraints = this.transformConstraints;
          for (var i = 0, n = transformConstraints.length; i < n; i++) {
            var constraint = transformConstraints[i];
            if (constraint.data.name == constraintName) return constraint;
          }
          return null;
        };
        Skeleton.prototype.findPathConstraint = function(constraintName) {
          if (null == constraintName) throw new Error("constraintName cannot be null.");
          var pathConstraints = this.pathConstraints;
          for (var i = 0, n = pathConstraints.length; i < n; i++) {
            var constraint = pathConstraints[i];
            if (constraint.data.name == constraintName) return constraint;
          }
          return null;
        };
        Skeleton.prototype.getBounds = function(offset, size, temp) {
          void 0 === temp && (temp = new Array(2));
          if (null == offset) throw new Error("offset cannot be null.");
          if (null == size) throw new Error("size cannot be null.");
          var drawOrder = this.drawOrder;
          var minX = Number.POSITIVE_INFINITY, minY = Number.POSITIVE_INFINITY, maxX = Number.NEGATIVE_INFINITY, maxY = Number.NEGATIVE_INFINITY;
          for (var i = 0, n = drawOrder.length; i < n; i++) {
            var slot = drawOrder[i];
            if (!slot.bone.active) continue;
            var verticesLength = 0;
            var vertices = null;
            var attachment = slot.getAttachment();
            if (attachment instanceof spine.RegionAttachment) {
              verticesLength = 8;
              vertices = spine.Utils.setArraySize(temp, verticesLength, 0);
              attachment.computeWorldVertices(slot.bone, vertices, 0, 2);
            } else if (attachment instanceof spine.MeshAttachment) {
              var mesh = attachment;
              verticesLength = mesh.worldVerticesLength;
              vertices = spine.Utils.setArraySize(temp, verticesLength, 0);
              mesh.computeWorldVertices(slot, 0, verticesLength, vertices, 0, 2);
            }
            if (null != vertices) for (var ii = 0, nn = vertices.length; ii < nn; ii += 2) {
              var x = vertices[ii], y = vertices[ii + 1];
              minX = Math.min(minX, x);
              minY = Math.min(minY, y);
              maxX = Math.max(maxX, x);
              maxY = Math.max(maxY, y);
            }
          }
          offset.set(minX, minY);
          size.set(maxX - minX, maxY - minY);
        };
        Skeleton.prototype.update = function(delta) {
          this.time += delta;
        };
        return Skeleton;
      })();
      spine.Skeleton = Skeleton;
    })(spine || (spine = {}));
    var spine;
    (function(spine) {
      var SkeletonBinary = (function() {
        function SkeletonBinary(attachmentLoader) {
          this.scale = 1;
          this.linkedMeshes = new Array();
          this.attachmentLoader = attachmentLoader;
        }
        SkeletonBinary.prototype.readSkeletonData = function(binary) {
          var scale = this.scale;
          var skeletonData = new spine.SkeletonData();
          skeletonData.name = "";
          var input = new BinaryInput(binary);
          skeletonData.hash = input.readString();
          skeletonData.version = input.readString();
          skeletonData.x = input.readFloat();
          skeletonData.y = input.readFloat();
          skeletonData.width = input.readFloat();
          skeletonData.height = input.readFloat();
          var nonessential = input.readBoolean();
          if (nonessential) {
            skeletonData.fps = input.readFloat();
            skeletonData.imagesPath = input.readString();
            skeletonData.audioPath = input.readString();
          }
          var n = 0;
          n = input.readInt(true);
          for (var i = 0; i < n; i++) input.strings.push(input.readString());
          n = input.readInt(true);
          for (var i = 0; i < n; i++) {
            var name_2 = input.readString();
            var parent_2 = 0 == i ? null : skeletonData.bones[input.readInt(true)];
            var data = new spine.BoneData(i, name_2, parent_2);
            data.rotation = input.readFloat();
            data.x = input.readFloat() * scale;
            data.y = input.readFloat() * scale;
            data.scaleX = input.readFloat();
            data.scaleY = input.readFloat();
            data.shearX = input.readFloat();
            data.shearY = input.readFloat();
            data.length = input.readFloat() * scale;
            data.transformMode = SkeletonBinary.TransformModeValues[input.readInt(true)];
            data.skinRequired = input.readBoolean();
            nonessential && spine.Color.rgba8888ToColor(data.color, input.readInt32());
            skeletonData.bones.push(data);
          }
          n = input.readInt(true);
          for (var i = 0; i < n; i++) {
            var slotName = input.readString();
            var boneData = skeletonData.bones[input.readInt(true)];
            var data = new spine.SlotData(i, slotName, boneData);
            spine.Color.rgba8888ToColor(data.color, input.readInt32());
            var darkColor = input.readInt32();
            -1 != darkColor && spine.Color.rgb888ToColor(data.darkColor = new spine.Color(), darkColor);
            data.attachmentName = input.readStringRef();
            data.blendMode = SkeletonBinary.BlendModeValues[input.readInt(true)];
            skeletonData.slots.push(data);
          }
          n = input.readInt(true);
          for (var i = 0, nn = void 0; i < n; i++) {
            var data = new spine.IkConstraintData(input.readString());
            data.order = input.readInt(true);
            data.skinRequired = input.readBoolean();
            nn = input.readInt(true);
            for (var ii = 0; ii < nn; ii++) data.bones.push(skeletonData.bones[input.readInt(true)]);
            data.target = skeletonData.bones[input.readInt(true)];
            data.mix = input.readFloat();
            data.softness = input.readFloat() * scale;
            data.bendDirection = input.readByte();
            data.compress = input.readBoolean();
            data.stretch = input.readBoolean();
            data.uniform = input.readBoolean();
            skeletonData.ikConstraints.push(data);
          }
          n = input.readInt(true);
          for (var i = 0, nn = void 0; i < n; i++) {
            var data = new spine.TransformConstraintData(input.readString());
            data.order = input.readInt(true);
            data.skinRequired = input.readBoolean();
            nn = input.readInt(true);
            for (var ii = 0; ii < nn; ii++) data.bones.push(skeletonData.bones[input.readInt(true)]);
            data.target = skeletonData.bones[input.readInt(true)];
            data.local = input.readBoolean();
            data.relative = input.readBoolean();
            data.offsetRotation = input.readFloat();
            data.offsetX = input.readFloat() * scale;
            data.offsetY = input.readFloat() * scale;
            data.offsetScaleX = input.readFloat();
            data.offsetScaleY = input.readFloat();
            data.offsetShearY = input.readFloat();
            data.rotateMix = input.readFloat();
            data.translateMix = input.readFloat();
            data.scaleMix = input.readFloat();
            data.shearMix = input.readFloat();
            skeletonData.transformConstraints.push(data);
          }
          n = input.readInt(true);
          for (var i = 0, nn = void 0; i < n; i++) {
            var data = new spine.PathConstraintData(input.readString());
            data.order = input.readInt(true);
            data.skinRequired = input.readBoolean();
            nn = input.readInt(true);
            for (var ii = 0; ii < nn; ii++) data.bones.push(skeletonData.bones[input.readInt(true)]);
            data.target = skeletonData.slots[input.readInt(true)];
            data.positionMode = SkeletonBinary.PositionModeValues[input.readInt(true)];
            data.spacingMode = SkeletonBinary.SpacingModeValues[input.readInt(true)];
            data.rotateMode = SkeletonBinary.RotateModeValues[input.readInt(true)];
            data.offsetRotation = input.readFloat();
            data.position = input.readFloat();
            data.positionMode == spine.PositionMode.Fixed && (data.position *= scale);
            data.spacing = input.readFloat();
            data.spacingMode != spine.SpacingMode.Length && data.spacingMode != spine.SpacingMode.Fixed || (data.spacing *= scale);
            data.rotateMix = input.readFloat();
            data.translateMix = input.readFloat();
            skeletonData.pathConstraints.push(data);
          }
          var defaultSkin = this.readSkin(input, skeletonData, true, nonessential);
          if (null != defaultSkin) {
            skeletonData.defaultSkin = defaultSkin;
            skeletonData.skins.push(defaultSkin);
          }
          var i = skeletonData.skins.length;
          spine.Utils.setArraySize(skeletonData.skins, n = i + input.readInt(true));
          for (;i < n; i++) skeletonData.skins[i] = this.readSkin(input, skeletonData, false, nonessential);
          n = this.linkedMeshes.length;
          for (var i = 0; i < n; i++) {
            var linkedMesh = this.linkedMeshes[i];
            var skin = null == linkedMesh.skin ? skeletonData.defaultSkin : skeletonData.findSkin(linkedMesh.skin);
            if (null == skin) throw new Error("Skin not found: " + linkedMesh.skin);
            var parent_3 = skin.getAttachment(linkedMesh.slotIndex, linkedMesh.parent);
            if (null == parent_3) throw new Error("Parent mesh not found: " + linkedMesh.parent);
            linkedMesh.mesh.deformAttachment = linkedMesh.inheritDeform ? parent_3 : linkedMesh.mesh;
            linkedMesh.mesh.setParentMesh(parent_3);
            linkedMesh.mesh.updateUVs();
          }
          this.linkedMeshes.length = 0;
          n = input.readInt(true);
          for (var i = 0; i < n; i++) {
            var data = new spine.EventData(input.readStringRef());
            data.intValue = input.readInt(false);
            data.floatValue = input.readFloat();
            data.stringValue = input.readString();
            data.audioPath = input.readString();
            if (null != data.audioPath) {
              data.volume = input.readFloat();
              data.balance = input.readFloat();
            }
            skeletonData.events.push(data);
          }
          n = input.readInt(true);
          for (var i = 0; i < n; i++) skeletonData.animations.push(this.readAnimation(input, input.readString(), skeletonData));
          return skeletonData;
        };
        SkeletonBinary.prototype.readSkin = function(input, skeletonData, defaultSkin, nonessential) {
          var skin = null;
          var slotCount = 0;
          if (defaultSkin) {
            slotCount = input.readInt(true);
            if (0 == slotCount) return null;
            skin = new spine.Skin("default");
          } else {
            skin = new spine.Skin(input.readStringRef());
            skin.bones.length = input.readInt(true);
            for (var i = 0, n = skin.bones.length; i < n; i++) skin.bones[i] = skeletonData.bones[input.readInt(true)];
            for (var i = 0, n = input.readInt(true); i < n; i++) skin.constraints.push(skeletonData.ikConstraints[input.readInt(true)]);
            for (var i = 0, n = input.readInt(true); i < n; i++) skin.constraints.push(skeletonData.transformConstraints[input.readInt(true)]);
            for (var i = 0, n = input.readInt(true); i < n; i++) skin.constraints.push(skeletonData.pathConstraints[input.readInt(true)]);
            slotCount = input.readInt(true);
          }
          for (var i = 0; i < slotCount; i++) {
            var slotIndex = input.readInt(true);
            for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) {
              var name_3 = input.readStringRef();
              var attachment = this.readAttachment(input, skeletonData, skin, slotIndex, name_3, nonessential);
              null != attachment && skin.setAttachment(slotIndex, name_3, attachment);
            }
          }
          return skin;
        };
        SkeletonBinary.prototype.readAttachment = function(input, skeletonData, skin, slotIndex, attachmentName, nonessential) {
          var scale = this.scale;
          var name = input.readStringRef();
          null == name && (name = attachmentName);
          var typeIndex = input.readByte();
          var type = SkeletonBinary.AttachmentTypeValues[typeIndex];
          switch (type) {
           case spine.AttachmentType.Region:
            var path = input.readStringRef();
            var rotation = input.readFloat();
            var x = input.readFloat();
            var y = input.readFloat();
            var scaleX = input.readFloat();
            var scaleY = input.readFloat();
            var width = input.readFloat();
            var height = input.readFloat();
            var color = input.readInt32();
            null == path && (path = name);
            var region = this.attachmentLoader.newRegionAttachment(skin, name, path);
            if (null == region) return null;
            region.path = path;
            region.x = x * scale;
            region.y = y * scale;
            region.scaleX = scaleX;
            region.scaleY = scaleY;
            region.rotation = rotation;
            region.width = width * scale;
            region.height = height * scale;
            spine.Color.rgba8888ToColor(region.color, color);
            region.updateOffset();
            return region;

           case spine.AttachmentType.BoundingBox:
            var vertexCount = input.readInt(true);
            var vertices = this.readVertices(input, vertexCount);
            var color = nonessential ? input.readInt32() : 0;
            var box = this.attachmentLoader.newBoundingBoxAttachment(skin, name);
            if (null == box) return null;
            box.worldVerticesLength = vertexCount << 1;
            box.vertices = vertices.vertices;
            box.bones = vertices.bones;
            nonessential && spine.Color.rgba8888ToColor(box.color, color);
            return box;

           case spine.AttachmentType.Mesh:
            var path = input.readStringRef();
            var color = input.readInt32();
            var vertexCount = input.readInt(true);
            var uvs = this.readFloatArray(input, vertexCount << 1, 1);
            var triangles = this.readShortArray(input);
            var vertices = this.readVertices(input, vertexCount);
            var hullLength = input.readInt(true);
            var edges = null;
            var width = 0, height = 0;
            if (nonessential) {
              edges = this.readShortArray(input);
              width = input.readFloat();
              height = input.readFloat();
            }
            null == path && (path = name);
            var mesh = this.attachmentLoader.newMeshAttachment(skin, name, path);
            if (null == mesh) return null;
            mesh.path = path;
            spine.Color.rgba8888ToColor(mesh.color, color);
            mesh.bones = vertices.bones;
            mesh.vertices = vertices.vertices;
            mesh.worldVerticesLength = vertexCount << 1;
            mesh.triangles = triangles;
            mesh.regionUVs = uvs;
            mesh.updateUVs();
            mesh.hullLength = hullLength << 1;
            if (nonessential) {
              mesh.edges = edges;
              mesh.width = width * scale;
              mesh.height = height * scale;
            }
            return mesh;

           case spine.AttachmentType.LinkedMesh:
            var path = input.readStringRef();
            var color = input.readInt32();
            var skinName = input.readStringRef();
            var parent_4 = input.readStringRef();
            var inheritDeform = input.readBoolean();
            var width = 0, height = 0;
            if (nonessential) {
              width = input.readFloat();
              height = input.readFloat();
            }
            null == path && (path = name);
            var mesh = this.attachmentLoader.newMeshAttachment(skin, name, path);
            if (null == mesh) return null;
            mesh.path = path;
            spine.Color.rgba8888ToColor(mesh.color, color);
            if (nonessential) {
              mesh.width = width * scale;
              mesh.height = height * scale;
            }
            this.linkedMeshes.push(new LinkedMesh(mesh, skinName, slotIndex, parent_4, inheritDeform));
            return mesh;

           case spine.AttachmentType.Path:
            var closed_1 = input.readBoolean();
            var constantSpeed = input.readBoolean();
            var vertexCount = input.readInt(true);
            var vertices = this.readVertices(input, vertexCount);
            var lengths = spine.Utils.newArray(vertexCount / 3, 0);
            for (var i = 0, n = lengths.length; i < n; i++) lengths[i] = input.readFloat() * scale;
            var color = nonessential ? input.readInt32() : 0;
            var path = this.attachmentLoader.newPathAttachment(skin, name);
            if (null == path) return null;
            path.closed = closed_1;
            path.constantSpeed = constantSpeed;
            path.worldVerticesLength = vertexCount << 1;
            path.vertices = vertices.vertices;
            path.bones = vertices.bones;
            path.lengths = lengths;
            nonessential && spine.Color.rgba8888ToColor(path.color, color);
            return path;

           case spine.AttachmentType.Point:
            var rotation = input.readFloat();
            var x = input.readFloat();
            var y = input.readFloat();
            var color = nonessential ? input.readInt32() : 0;
            var point = this.attachmentLoader.newPointAttachment(skin, name);
            if (null == point) return null;
            point.x = x * scale;
            point.y = y * scale;
            point.rotation = rotation;
            nonessential && spine.Color.rgba8888ToColor(point.color, color);
            return point;

           case spine.AttachmentType.Clipping:
            var endSlotIndex = input.readInt(true);
            var vertexCount = input.readInt(true);
            var vertices = this.readVertices(input, vertexCount);
            var color = nonessential ? input.readInt32() : 0;
            var clip = this.attachmentLoader.newClippingAttachment(skin, name);
            if (null == clip) return null;
            clip.endSlot = skeletonData.slots[endSlotIndex];
            clip.worldVerticesLength = vertexCount << 1;
            clip.vertices = vertices.vertices;
            clip.bones = vertices.bones;
            nonessential && spine.Color.rgba8888ToColor(clip.color, color);
            return clip;
          }
          return null;
        };
        SkeletonBinary.prototype.readVertices = function(input, vertexCount) {
          var verticesLength = vertexCount << 1;
          var vertices = new Vertices();
          var scale = this.scale;
          if (!input.readBoolean()) {
            vertices.vertices = this.readFloatArray(input, verticesLength, scale);
            return vertices;
          }
          var weights = new Array();
          var bonesArray = new Array();
          for (var i = 0; i < vertexCount; i++) {
            var boneCount = input.readInt(true);
            bonesArray.push(boneCount);
            for (var ii = 0; ii < boneCount; ii++) {
              bonesArray.push(input.readInt(true));
              weights.push(input.readFloat() * scale);
              weights.push(input.readFloat() * scale);
              weights.push(input.readFloat());
            }
          }
          vertices.vertices = spine.Utils.toFloatArray(weights);
          vertices.bones = bonesArray;
          return vertices;
        };
        SkeletonBinary.prototype.readFloatArray = function(input, n, scale) {
          var array = new Array(n);
          if (1 == scale) for (var i = 0; i < n; i++) array[i] = input.readFloat(); else for (var i = 0; i < n; i++) array[i] = input.readFloat() * scale;
          return array;
        };
        SkeletonBinary.prototype.readShortArray = function(input) {
          var n = input.readInt(true);
          var array = new Array(n);
          for (var i = 0; i < n; i++) array[i] = input.readShort();
          return array;
        };
        SkeletonBinary.prototype.readAnimation = function(input, name, skeletonData) {
          var timelines = new Array();
          var scale = this.scale;
          var duration = 0;
          var tempColor1 = new spine.Color();
          var tempColor2 = new spine.Color();
          for (var i = 0, n = input.readInt(true); i < n; i++) {
            var slotIndex = input.readInt(true);
            for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) {
              var timelineType = input.readByte();
              var frameCount = input.readInt(true);
              switch (timelineType) {
               case SkeletonBinary.SLOT_ATTACHMENT:
                var timeline = new spine.AttachmentTimeline(frameCount);
                timeline.slotIndex = slotIndex;
                for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) timeline.setFrame(frameIndex, input.readFloat(), input.readStringRef());
                timelines.push(timeline);
                duration = Math.max(duration, timeline.frames[frameCount - 1]);
                break;

               case SkeletonBinary.SLOT_COLOR:
                var timeline = new spine.ColorTimeline(frameCount);
                timeline.slotIndex = slotIndex;
                for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) {
                  var time = input.readFloat();
                  spine.Color.rgba8888ToColor(tempColor1, input.readInt32());
                  timeline.setFrame(frameIndex, time, tempColor1.r, tempColor1.g, tempColor1.b, tempColor1.a);
                  frameIndex < frameCount - 1 && this.readCurve(input, frameIndex, timeline);
                }
                timelines.push(timeline);
                duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.ColorTimeline.ENTRIES]);
                break;

               case SkeletonBinary.SLOT_TWO_COLOR:
                var timeline = new spine.TwoColorTimeline(frameCount);
                timeline.slotIndex = slotIndex;
                for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) {
                  var time = input.readFloat();
                  spine.Color.rgba8888ToColor(tempColor1, input.readInt32());
                  spine.Color.rgb888ToColor(tempColor2, input.readInt32());
                  timeline.setFrame(frameIndex, time, tempColor1.r, tempColor1.g, tempColor1.b, tempColor1.a, tempColor2.r, tempColor2.g, tempColor2.b);
                  frameIndex < frameCount - 1 && this.readCurve(input, frameIndex, timeline);
                }
                timelines.push(timeline);
                duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.TwoColorTimeline.ENTRIES]);
              }
            }
          }
          for (var i = 0, n = input.readInt(true); i < n; i++) {
            var boneIndex = input.readInt(true);
            for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) {
              var timelineType = input.readByte();
              var frameCount = input.readInt(true);
              switch (timelineType) {
               case SkeletonBinary.BONE_ROTATE:
                var timeline = new spine.RotateTimeline(frameCount);
                timeline.boneIndex = boneIndex;
                for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) {
                  timeline.setFrame(frameIndex, input.readFloat(), input.readFloat());
                  frameIndex < frameCount - 1 && this.readCurve(input, frameIndex, timeline);
                }
                timelines.push(timeline);
                duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.RotateTimeline.ENTRIES]);
                break;

               case SkeletonBinary.BONE_TRANSLATE:
               case SkeletonBinary.BONE_SCALE:
               case SkeletonBinary.BONE_SHEAR:
                var timeline = void 0;
                var timelineScale = 1;
                if (timelineType == SkeletonBinary.BONE_SCALE) timeline = new spine.ScaleTimeline(frameCount); else if (timelineType == SkeletonBinary.BONE_SHEAR) timeline = new spine.ShearTimeline(frameCount); else {
                  timeline = new spine.TranslateTimeline(frameCount);
                  timelineScale = scale;
                }
                timeline.boneIndex = boneIndex;
                for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) {
                  timeline.setFrame(frameIndex, input.readFloat(), input.readFloat() * timelineScale, input.readFloat() * timelineScale);
                  frameIndex < frameCount - 1 && this.readCurve(input, frameIndex, timeline);
                }
                timelines.push(timeline);
                duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.TranslateTimeline.ENTRIES]);
              }
            }
          }
          for (var i = 0, n = input.readInt(true); i < n; i++) {
            var index = input.readInt(true);
            var frameCount = input.readInt(true);
            var timeline = new spine.IkConstraintTimeline(frameCount);
            timeline.ikConstraintIndex = index;
            for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) {
              timeline.setFrame(frameIndex, input.readFloat(), input.readFloat(), input.readFloat() * scale, input.readByte(), input.readBoolean(), input.readBoolean());
              frameIndex < frameCount - 1 && this.readCurve(input, frameIndex, timeline);
            }
            timelines.push(timeline);
            duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.IkConstraintTimeline.ENTRIES]);
          }
          for (var i = 0, n = input.readInt(true); i < n; i++) {
            var index = input.readInt(true);
            var frameCount = input.readInt(true);
            var timeline = new spine.TransformConstraintTimeline(frameCount);
            timeline.transformConstraintIndex = index;
            for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) {
              timeline.setFrame(frameIndex, input.readFloat(), input.readFloat(), input.readFloat(), input.readFloat(), input.readFloat());
              frameIndex < frameCount - 1 && this.readCurve(input, frameIndex, timeline);
            }
            timelines.push(timeline);
            duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.TransformConstraintTimeline.ENTRIES]);
          }
          for (var i = 0, n = input.readInt(true); i < n; i++) {
            var index = input.readInt(true);
            var data = skeletonData.pathConstraints[index];
            for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) {
              var timelineType = input.readByte();
              var frameCount = input.readInt(true);
              switch (timelineType) {
               case SkeletonBinary.PATH_POSITION:
               case SkeletonBinary.PATH_SPACING:
                var timeline = void 0;
                var timelineScale = 1;
                if (timelineType == SkeletonBinary.PATH_SPACING) {
                  timeline = new spine.PathConstraintSpacingTimeline(frameCount);
                  data.spacingMode != spine.SpacingMode.Length && data.spacingMode != spine.SpacingMode.Fixed || (timelineScale = scale);
                } else {
                  timeline = new spine.PathConstraintPositionTimeline(frameCount);
                  data.positionMode == spine.PositionMode.Fixed && (timelineScale = scale);
                }
                timeline.pathConstraintIndex = index;
                for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) {
                  timeline.setFrame(frameIndex, input.readFloat(), input.readFloat() * timelineScale);
                  frameIndex < frameCount - 1 && this.readCurve(input, frameIndex, timeline);
                }
                timelines.push(timeline);
                duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.PathConstraintPositionTimeline.ENTRIES]);
                break;

               case SkeletonBinary.PATH_MIX:
                var timeline = new spine.PathConstraintMixTimeline(frameCount);
                timeline.pathConstraintIndex = index;
                for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) {
                  timeline.setFrame(frameIndex, input.readFloat(), input.readFloat(), input.readFloat());
                  frameIndex < frameCount - 1 && this.readCurve(input, frameIndex, timeline);
                }
                timelines.push(timeline);
                duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.PathConstraintMixTimeline.ENTRIES]);
              }
            }
          }
          for (var i = 0, n = input.readInt(true); i < n; i++) {
            var skin = skeletonData.skins[input.readInt(true)];
            for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) {
              var slotIndex = input.readInt(true);
              for (var iii = 0, nnn = input.readInt(true); iii < nnn; iii++) {
                var attachment = skin.getAttachment(slotIndex, input.readStringRef());
                var weighted = null != attachment.bones;
                var vertices = attachment.vertices;
                var deformLength = weighted ? vertices.length / 3 * 2 : vertices.length;
                var frameCount = input.readInt(true);
                var timeline = new spine.DeformTimeline(frameCount);
                timeline.slotIndex = slotIndex;
                timeline.attachment = attachment;
                for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) {
                  var time = input.readFloat();
                  var deform = void 0;
                  var end = input.readInt(true);
                  if (0 == end) deform = weighted ? spine.Utils.newFloatArray(deformLength) : vertices; else {
                    deform = spine.Utils.newFloatArray(deformLength);
                    var start = input.readInt(true);
                    end += start;
                    if (1 == scale) for (var v = start; v < end; v++) deform[v] = input.readFloat(); else for (var v = start; v < end; v++) deform[v] = input.readFloat() * scale;
                    if (!weighted) for (var v = 0, vn = deform.length; v < vn; v++) deform[v] += vertices[v];
                  }
                  timeline.setFrame(frameIndex, time, deform);
                  frameIndex < frameCount - 1 && this.readCurve(input, frameIndex, timeline);
                }
                timelines.push(timeline);
                duration = Math.max(duration, timeline.frames[frameCount - 1]);
              }
            }
          }
          var drawOrderCount = input.readInt(true);
          if (drawOrderCount > 0) {
            var timeline = new spine.DrawOrderTimeline(drawOrderCount);
            var slotCount = skeletonData.slots.length;
            for (var i = 0; i < drawOrderCount; i++) {
              var time = input.readFloat();
              var offsetCount = input.readInt(true);
              var drawOrder = spine.Utils.newArray(slotCount, 0);
              for (var ii = slotCount - 1; ii >= 0; ii--) drawOrder[ii] = -1;
              var unchanged = spine.Utils.newArray(slotCount - offsetCount, 0);
              var originalIndex = 0, unchangedIndex = 0;
              for (var ii = 0; ii < offsetCount; ii++) {
                var slotIndex = input.readInt(true);
                while (originalIndex != slotIndex) unchanged[unchangedIndex++] = originalIndex++;
                drawOrder[originalIndex + input.readInt(true)] = originalIndex++;
              }
              while (originalIndex < slotCount) unchanged[unchangedIndex++] = originalIndex++;
              for (var ii = slotCount - 1; ii >= 0; ii--) -1 == drawOrder[ii] && (drawOrder[ii] = unchanged[--unchangedIndex]);
              timeline.setFrame(i, time, drawOrder);
            }
            timelines.push(timeline);
            duration = Math.max(duration, timeline.frames[drawOrderCount - 1]);
          }
          var eventCount = input.readInt(true);
          if (eventCount > 0) {
            var timeline = new spine.EventTimeline(eventCount);
            for (var i = 0; i < eventCount; i++) {
              var time = input.readFloat();
              var eventData = skeletonData.events[input.readInt(true)];
              var event_4 = new spine.Event(time, eventData);
              event_4.intValue = input.readInt(false);
              event_4.floatValue = input.readFloat();
              event_4.stringValue = input.readBoolean() ? input.readString() : eventData.stringValue;
              if (null != event_4.data.audioPath) {
                event_4.volume = input.readFloat();
                event_4.balance = input.readFloat();
              }
              timeline.setFrame(i, event_4);
            }
            timelines.push(timeline);
            duration = Math.max(duration, timeline.frames[eventCount - 1]);
          }
          return new spine.Animation(name, timelines, duration);
        };
        SkeletonBinary.prototype.readCurve = function(input, frameIndex, timeline) {
          switch (input.readByte()) {
           case SkeletonBinary.CURVE_STEPPED:
            timeline.setStepped(frameIndex);
            break;

           case SkeletonBinary.CURVE_BEZIER:
            this.setCurve(timeline, frameIndex, input.readFloat(), input.readFloat(), input.readFloat(), input.readFloat());
          }
        };
        SkeletonBinary.prototype.setCurve = function(timeline, frameIndex, cx1, cy1, cx2, cy2) {
          timeline.setCurve(frameIndex, cx1, cy1, cx2, cy2);
        };
        SkeletonBinary.AttachmentTypeValues = [ 0, 1, 2, 3, 4, 5, 6 ];
        SkeletonBinary.TransformModeValues = [ spine.TransformMode.Normal, spine.TransformMode.OnlyTranslation, spine.TransformMode.NoRotationOrReflection, spine.TransformMode.NoScale, spine.TransformMode.NoScaleOrReflection ];
        SkeletonBinary.PositionModeValues = [ spine.PositionMode.Fixed, spine.PositionMode.Percent ];
        SkeletonBinary.SpacingModeValues = [ spine.SpacingMode.Length, spine.SpacingMode.Fixed, spine.SpacingMode.Percent ];
        SkeletonBinary.RotateModeValues = [ spine.RotateMode.Tangent, spine.RotateMode.Chain, spine.RotateMode.ChainScale ];
        SkeletonBinary.BlendModeValues = [ spine.BlendMode.Normal, spine.BlendMode.Additive, spine.BlendMode.Multiply, spine.BlendMode.Screen ];
        SkeletonBinary.BONE_ROTATE = 0;
        SkeletonBinary.BONE_TRANSLATE = 1;
        SkeletonBinary.BONE_SCALE = 2;
        SkeletonBinary.BONE_SHEAR = 3;
        SkeletonBinary.SLOT_ATTACHMENT = 0;
        SkeletonBinary.SLOT_COLOR = 1;
        SkeletonBinary.SLOT_TWO_COLOR = 2;
        SkeletonBinary.PATH_POSITION = 0;
        SkeletonBinary.PATH_SPACING = 1;
        SkeletonBinary.PATH_MIX = 2;
        SkeletonBinary.CURVE_LINEAR = 0;
        SkeletonBinary.CURVE_STEPPED = 1;
        SkeletonBinary.CURVE_BEZIER = 2;
        return SkeletonBinary;
      })();
      spine.SkeletonBinary = SkeletonBinary;
      var BinaryInput = (function() {
        function BinaryInput(data, strings, index, buffer) {
          void 0 === strings && (strings = new Array());
          void 0 === index && (index = 0);
          void 0 === buffer && (buffer = new DataView(data.buffer));
          this.strings = strings;
          this.index = index;
          this.buffer = buffer;
        }
        BinaryInput.prototype.readByte = function() {
          return this.buffer.getInt8(this.index++);
        };
        BinaryInput.prototype.readShort = function() {
          var value = this.buffer.getInt16(this.index);
          this.index += 2;
          return value;
        };
        BinaryInput.prototype.readInt32 = function() {
          var value = this.buffer.getInt32(this.index);
          this.index += 4;
          return value;
        };
        BinaryInput.prototype.readInt = function(optimizePositive) {
          var b = this.readByte();
          var result = 127 & b;
          if (0 != (128 & b)) {
            b = this.readByte();
            result |= (127 & b) << 7;
            if (0 != (128 & b)) {
              b = this.readByte();
              result |= (127 & b) << 14;
              if (0 != (128 & b)) {
                b = this.readByte();
                result |= (127 & b) << 21;
                if (0 != (128 & b)) {
                  b = this.readByte();
                  result |= (127 & b) << 28;
                }
              }
            }
          }
          return optimizePositive ? result : result >>> 1 ^ -(1 & result);
        };
        BinaryInput.prototype.readStringRef = function() {
          var index = this.readInt(true);
          return 0 == index ? null : this.strings[index - 1];
        };
        BinaryInput.prototype.readString = function() {
          var byteCount = this.readInt(true);
          switch (byteCount) {
           case 0:
            return null;

           case 1:
            return "";
          }
          byteCount--;
          var chars = "";
          var charCount = 0;
          for (var i = 0; i < byteCount; ) {
            var b = this.readByte();
            switch (b >> 4) {
             case 12:
             case 13:
              chars += String.fromCharCode((31 & b) << 6 | 63 & this.readByte());
              i += 2;
              break;

             case 14:
              chars += String.fromCharCode((15 & b) << 12 | (63 & this.readByte()) << 6 | 63 & this.readByte());
              i += 3;
              break;

             default:
              chars += String.fromCharCode(b);
              i++;
            }
          }
          return chars;
        };
        BinaryInput.prototype.readFloat = function() {
          var value = this.buffer.getFloat32(this.index);
          this.index += 4;
          return value;
        };
        BinaryInput.prototype.readBoolean = function() {
          return 0 != this.readByte();
        };
        return BinaryInput;
      })();
      var LinkedMesh = (function() {
        function LinkedMesh(mesh, skin, slotIndex, parent, inheritDeform) {
          this.mesh = mesh;
          this.skin = skin;
          this.slotIndex = slotIndex;
          this.parent = parent;
          this.inheritDeform = inheritDeform;
        }
        return LinkedMesh;
      })();
      var Vertices = (function() {
        function Vertices(bones, vertices) {
          void 0 === bones && (bones = null);
          void 0 === vertices && (vertices = null);
          this.bones = bones;
          this.vertices = vertices;
        }
        return Vertices;
      })();
    })(spine || (spine = {}));
    var spine;
    (function(spine) {
      var SkeletonBounds = (function() {
        function SkeletonBounds() {
          this.minX = 0;
          this.minY = 0;
          this.maxX = 0;
          this.maxY = 0;
          this.boundingBoxes = new Array();
          this.polygons = new Array();
          this.polygonPool = new spine.Pool(function() {
            return spine.Utils.newFloatArray(16);
          });
        }
        SkeletonBounds.prototype.update = function(skeleton, updateAabb) {
          if (null == skeleton) throw new Error("skeleton cannot be null.");
          var boundingBoxes = this.boundingBoxes;
          var polygons = this.polygons;
          var polygonPool = this.polygonPool;
          var slots = skeleton.slots;
          var slotCount = slots.length;
          boundingBoxes.length = 0;
          polygonPool.freeAll(polygons);
          polygons.length = 0;
          for (var i = 0; i < slotCount; i++) {
            var slot = slots[i];
            if (!slot.bone.active) continue;
            var attachment = slot.getAttachment();
            if (attachment instanceof spine.BoundingBoxAttachment) {
              var boundingBox = attachment;
              boundingBoxes.push(boundingBox);
              var polygon = polygonPool.obtain();
              polygon.length != boundingBox.worldVerticesLength && (polygon = spine.Utils.newFloatArray(boundingBox.worldVerticesLength));
              polygons.push(polygon);
              boundingBox.computeWorldVertices(slot, 0, boundingBox.worldVerticesLength, polygon, 0, 2);
            }
          }
          if (updateAabb) this.aabbCompute(); else {
            this.minX = Number.POSITIVE_INFINITY;
            this.minY = Number.POSITIVE_INFINITY;
            this.maxX = Number.NEGATIVE_INFINITY;
            this.maxY = Number.NEGATIVE_INFINITY;
          }
        };
        SkeletonBounds.prototype.aabbCompute = function() {
          var minX = Number.POSITIVE_INFINITY, minY = Number.POSITIVE_INFINITY, maxX = Number.NEGATIVE_INFINITY, maxY = Number.NEGATIVE_INFINITY;
          var polygons = this.polygons;
          for (var i = 0, n = polygons.length; i < n; i++) {
            var polygon = polygons[i];
            var vertices = polygon;
            for (var ii = 0, nn = polygon.length; ii < nn; ii += 2) {
              var x = vertices[ii];
              var y = vertices[ii + 1];
              minX = Math.min(minX, x);
              minY = Math.min(minY, y);
              maxX = Math.max(maxX, x);
              maxY = Math.max(maxY, y);
            }
          }
          this.minX = minX;
          this.minY = minY;
          this.maxX = maxX;
          this.maxY = maxY;
        };
        SkeletonBounds.prototype.aabbContainsPoint = function(x, y) {
          return x >= this.minX && x <= this.maxX && y >= this.minY && y <= this.maxY;
        };
        SkeletonBounds.prototype.aabbIntersectsSegment = function(x1, y1, x2, y2) {
          var minX = this.minX;
          var minY = this.minY;
          var maxX = this.maxX;
          var maxY = this.maxY;
          if (x1 <= minX && x2 <= minX || y1 <= minY && y2 <= minY || x1 >= maxX && x2 >= maxX || y1 >= maxY && y2 >= maxY) return false;
          var m = (y2 - y1) / (x2 - x1);
          var y = m * (minX - x1) + y1;
          if (y > minY && y < maxY) return true;
          y = m * (maxX - x1) + y1;
          if (y > minY && y < maxY) return true;
          var x = (minY - y1) / m + x1;
          if (x > minX && x < maxX) return true;
          x = (maxY - y1) / m + x1;
          if (x > minX && x < maxX) return true;
          return false;
        };
        SkeletonBounds.prototype.aabbIntersectsSkeleton = function(bounds) {
          return this.minX < bounds.maxX && this.maxX > bounds.minX && this.minY < bounds.maxY && this.maxY > bounds.minY;
        };
        SkeletonBounds.prototype.containsPoint = function(x, y) {
          var polygons = this.polygons;
          for (var i = 0, n = polygons.length; i < n; i++) if (this.containsPointPolygon(polygons[i], x, y)) return this.boundingBoxes[i];
          return null;
        };
        SkeletonBounds.prototype.containsPointPolygon = function(polygon, x, y) {
          var vertices = polygon;
          var nn = polygon.length;
          var prevIndex = nn - 2;
          var inside = false;
          for (var ii = 0; ii < nn; ii += 2) {
            var vertexY = vertices[ii + 1];
            var prevY = vertices[prevIndex + 1];
            if (vertexY < y && prevY >= y || prevY < y && vertexY >= y) {
              var vertexX = vertices[ii];
              vertexX + (y - vertexY) / (prevY - vertexY) * (vertices[prevIndex] - vertexX) < x && (inside = !inside);
            }
            prevIndex = ii;
          }
          return inside;
        };
        SkeletonBounds.prototype.intersectsSegment = function(x1, y1, x2, y2) {
          var polygons = this.polygons;
          for (var i = 0, n = polygons.length; i < n; i++) if (this.intersectsSegmentPolygon(polygons[i], x1, y1, x2, y2)) return this.boundingBoxes[i];
          return null;
        };
        SkeletonBounds.prototype.intersectsSegmentPolygon = function(polygon, x1, y1, x2, y2) {
          var vertices = polygon;
          var nn = polygon.length;
          var width12 = x1 - x2, height12 = y1 - y2;
          var det1 = x1 * y2 - y1 * x2;
          var x3 = vertices[nn - 2], y3 = vertices[nn - 1];
          for (var ii = 0; ii < nn; ii += 2) {
            var x4 = vertices[ii], y4 = vertices[ii + 1];
            var det2 = x3 * y4 - y3 * x4;
            var width34 = x3 - x4, height34 = y3 - y4;
            var det3 = width12 * height34 - height12 * width34;
            var x = (det1 * width34 - width12 * det2) / det3;
            if ((x >= x3 && x <= x4 || x >= x4 && x <= x3) && (x >= x1 && x <= x2 || x >= x2 && x <= x1)) {
              var y = (det1 * height34 - height12 * det2) / det3;
              if ((y >= y3 && y <= y4 || y >= y4 && y <= y3) && (y >= y1 && y <= y2 || y >= y2 && y <= y1)) return true;
            }
            x3 = x4;
            y3 = y4;
          }
          return false;
        };
        SkeletonBounds.prototype.getPolygon = function(boundingBox) {
          if (null == boundingBox) throw new Error("boundingBox cannot be null.");
          var index = this.boundingBoxes.indexOf(boundingBox);
          return -1 == index ? null : this.polygons[index];
        };
        SkeletonBounds.prototype.getWidth = function() {
          return this.maxX - this.minX;
        };
        SkeletonBounds.prototype.getHeight = function() {
          return this.maxY - this.minY;
        };
        return SkeletonBounds;
      })();
      spine.SkeletonBounds = SkeletonBounds;
    })(spine || (spine = {}));
    var spine;
    (function(spine) {
      var SkeletonClipping = (function() {
        function SkeletonClipping() {
          this.triangulator = new spine.Triangulator();
          this.clippingPolygon = new Array();
          this.clipOutput = new Array();
          this.clippedVertices = new Array();
          this.clippedTriangles = new Array();
          this.scratch = new Array();
        }
        SkeletonClipping.prototype.clipStart = function(slot, clip) {
          if (null != this.clipAttachment) return 0;
          this.clipAttachment = clip;
          var n = clip.worldVerticesLength;
          var vertices = spine.Utils.setArraySize(this.clippingPolygon, n);
          clip.computeWorldVertices(slot, 0, n, vertices, 0, 2);
          var clippingPolygon = this.clippingPolygon;
          SkeletonClipping.makeClockwise(clippingPolygon);
          var clippingPolygons = this.clippingPolygons = this.triangulator.decompose(clippingPolygon, this.triangulator.triangulate(clippingPolygon));
          for (var i = 0, n_1 = clippingPolygons.length; i < n_1; i++) {
            var polygon = clippingPolygons[i];
            SkeletonClipping.makeClockwise(polygon);
            polygon.push(polygon[0]);
            polygon.push(polygon[1]);
          }
          return clippingPolygons.length;
        };
        SkeletonClipping.prototype.clipEndWithSlot = function(slot) {
          null != this.clipAttachment && this.clipAttachment.endSlot == slot.data && this.clipEnd();
        };
        SkeletonClipping.prototype.clipEnd = function() {
          if (null == this.clipAttachment) return;
          this.clipAttachment = null;
          this.clippingPolygons = null;
          this.clippedVertices.length = 0;
          this.clippedTriangles.length = 0;
          this.clippingPolygon.length = 0;
        };
        SkeletonClipping.prototype.isClipping = function() {
          return null != this.clipAttachment;
        };
        SkeletonClipping.prototype.clipTriangles = function(vertices, verticesLength, triangles, trianglesLength, uvs, light, dark, twoColor, stride, originIndexOffset, originVertOffset, originUVSOffset) {
          var clipOutput = this.clipOutput, clippedVertices = this.clippedVertices;
          var clippedTriangles = this.clippedTriangles;
          var polygons = this.clippingPolygons;
          var polygonsCount = this.clippingPolygons.length;
          var vertexSize = twoColor ? 12 : 8;
          var index = 0;
          originIndexOffset = originIndexOffset || 0;
          originVertOffset = originVertOffset || 0;
          originUVSOffset = originUVSOffset || 0;
          clippedVertices.length = 0;
          clippedTriangles.length = 0;
          outer: for (var i = originIndexOffset, n = originIndexOffset + trianglesLength; i < n; i += 3) {
            var vertexOffset = triangles[i] * stride;
            var xyOffset = vertexOffset + originVertOffset;
            var uvOffset = vertexOffset + originUVSOffset;
            var x1 = vertices[xyOffset], y1 = vertices[xyOffset + 1];
            var u1 = uvs[uvOffset], v1 = uvs[uvOffset + 1];
            vertexOffset = triangles[i + 1] * stride;
            xyOffset = vertexOffset + originVertOffset;
            uvOffset = vertexOffset + originUVSOffset;
            var x2 = vertices[xyOffset], y2 = vertices[xyOffset + 1];
            var u2 = uvs[uvOffset], v2 = uvs[uvOffset + 1];
            vertexOffset = triangles[i + 2] * stride;
            xyOffset = vertexOffset + originVertOffset;
            uvOffset = vertexOffset + originUVSOffset;
            var x3 = vertices[xyOffset], y3 = vertices[xyOffset + 1];
            var u3 = uvs[uvOffset], v3 = uvs[uvOffset + 1];
            for (var p = 0; p < polygonsCount; p++) {
              var s = clippedVertices.length;
              if (!this.clip(x1, y1, x2, y2, x3, y3, polygons[p], clipOutput)) {
                var clippedVerticesItems = spine.Utils.setArraySize(clippedVertices, s + 3 * vertexSize);
                clippedVerticesItems[s] = x1;
                clippedVerticesItems[s + 1] = y1;
                clippedVerticesItems[s + 2] = light.r;
                clippedVerticesItems[s + 3] = light.g;
                clippedVerticesItems[s + 4] = light.b;
                clippedVerticesItems[s + 5] = light.a;
                if (twoColor) {
                  clippedVerticesItems[s + 6] = u1;
                  clippedVerticesItems[s + 7] = v1;
                  clippedVerticesItems[s + 8] = dark.r;
                  clippedVerticesItems[s + 9] = dark.g;
                  clippedVerticesItems[s + 10] = dark.b;
                  clippedVerticesItems[s + 11] = dark.a;
                  clippedVerticesItems[s + 12] = x2;
                  clippedVerticesItems[s + 13] = y2;
                  clippedVerticesItems[s + 14] = light.r;
                  clippedVerticesItems[s + 15] = light.g;
                  clippedVerticesItems[s + 16] = light.b;
                  clippedVerticesItems[s + 17] = light.a;
                  clippedVerticesItems[s + 18] = u2;
                  clippedVerticesItems[s + 19] = v2;
                  clippedVerticesItems[s + 20] = dark.r;
                  clippedVerticesItems[s + 21] = dark.g;
                  clippedVerticesItems[s + 22] = dark.b;
                  clippedVerticesItems[s + 23] = dark.a;
                  clippedVerticesItems[s + 24] = x3;
                  clippedVerticesItems[s + 25] = y3;
                  clippedVerticesItems[s + 26] = light.r;
                  clippedVerticesItems[s + 27] = light.g;
                  clippedVerticesItems[s + 28] = light.b;
                  clippedVerticesItems[s + 29] = light.a;
                  clippedVerticesItems[s + 30] = u3;
                  clippedVerticesItems[s + 31] = v3;
                  clippedVerticesItems[s + 32] = dark.r;
                  clippedVerticesItems[s + 33] = dark.g;
                  clippedVerticesItems[s + 34] = dark.b;
                  clippedVerticesItems[s + 35] = dark.a;
                } else {
                  clippedVerticesItems[s + 6] = u1;
                  clippedVerticesItems[s + 7] = v1;
                  clippedVerticesItems[s + 8] = x2;
                  clippedVerticesItems[s + 9] = y2;
                  clippedVerticesItems[s + 10] = light.r;
                  clippedVerticesItems[s + 11] = light.g;
                  clippedVerticesItems[s + 12] = light.b;
                  clippedVerticesItems[s + 13] = light.a;
                  clippedVerticesItems[s + 14] = u2;
                  clippedVerticesItems[s + 15] = v2;
                  clippedVerticesItems[s + 16] = x3;
                  clippedVerticesItems[s + 17] = y3;
                  clippedVerticesItems[s + 18] = light.r;
                  clippedVerticesItems[s + 19] = light.g;
                  clippedVerticesItems[s + 20] = light.b;
                  clippedVerticesItems[s + 21] = light.a;
                  clippedVerticesItems[s + 22] = u3;
                  clippedVerticesItems[s + 23] = v3;
                }
                s = clippedTriangles.length;
                var clippedTrianglesItems = spine.Utils.setArraySize(clippedTriangles, s + 3);
                clippedTrianglesItems[s] = index;
                clippedTrianglesItems[s + 1] = index + 1;
                clippedTrianglesItems[s + 2] = index + 2;
                index += 3;
                continue outer;
              }
              var clipOutputLength = clipOutput.length;
              if (0 == clipOutputLength) continue;
              var d0 = y2 - y3, d1 = x3 - x2, d2 = x1 - x3, d4 = y3 - y1;
              var d = 1 / (d0 * d2 + d1 * (y1 - y3));
              var clipOutputCount = clipOutputLength >> 1;
              var clipOutputItems = this.clipOutput;
              var clippedVerticesItems = spine.Utils.setArraySize(clippedVertices, s + clipOutputCount * vertexSize);
              for (var ii = 0; ii < clipOutputLength; ii += 2) {
                var x = clipOutputItems[ii], y = clipOutputItems[ii + 1];
                clippedVerticesItems[s] = x;
                clippedVerticesItems[s + 1] = y;
                clippedVerticesItems[s + 2] = light.r;
                clippedVerticesItems[s + 3] = light.g;
                clippedVerticesItems[s + 4] = light.b;
                clippedVerticesItems[s + 5] = light.a;
                var c0 = x - x3, c1 = y - y3;
                var a = (d0 * c0 + d1 * c1) * d;
                var b = (d4 * c0 + d2 * c1) * d;
                var c = 1 - a - b;
                clippedVerticesItems[s + 6] = u1 * a + u2 * b + u3 * c;
                clippedVerticesItems[s + 7] = v1 * a + v2 * b + v3 * c;
                if (twoColor) {
                  clippedVerticesItems[s + 8] = dark.r;
                  clippedVerticesItems[s + 9] = dark.g;
                  clippedVerticesItems[s + 10] = dark.b;
                  clippedVerticesItems[s + 11] = dark.a;
                }
                s += vertexSize;
              }
              s = clippedTriangles.length;
              var clippedTrianglesItems = spine.Utils.setArraySize(clippedTriangles, s + 3 * (clipOutputCount - 2));
              clipOutputCount--;
              for (var ii = 1; ii < clipOutputCount; ii++) {
                clippedTrianglesItems[s] = index;
                clippedTrianglesItems[s + 1] = index + ii;
                clippedTrianglesItems[s + 2] = index + ii + 1;
                s += 3;
              }
              index += clipOutputCount + 1;
            }
          }
        };
        SkeletonClipping.prototype.clip = function(x1, y1, x2, y2, x3, y3, clippingArea, output) {
          var originalOutput = output;
          var clipped = false;
          var input = null;
          if (clippingArea.length % 4 >= 2) {
            input = output;
            output = this.scratch;
          } else input = this.scratch;
          input.length = 0;
          input.push(x1);
          input.push(y1);
          input.push(x2);
          input.push(y2);
          input.push(x3);
          input.push(y3);
          input.push(x1);
          input.push(y1);
          output.length = 0;
          var clippingVertices = clippingArea;
          var clippingVerticesLast = clippingArea.length - 4;
          for (var i = 0; ;i += 2) {
            var edgeX = clippingVertices[i], edgeY = clippingVertices[i + 1];
            var edgeX2 = clippingVertices[i + 2], edgeY2 = clippingVertices[i + 3];
            var deltaX = edgeX - edgeX2, deltaY = edgeY - edgeY2;
            var inputVertices = input;
            var inputVerticesLength = input.length - 2, outputStart = output.length;
            for (var ii = 0; ii < inputVerticesLength; ii += 2) {
              var inputX = inputVertices[ii], inputY = inputVertices[ii + 1];
              var inputX2 = inputVertices[ii + 2], inputY2 = inputVertices[ii + 3];
              var side2 = deltaX * (inputY2 - edgeY2) - deltaY * (inputX2 - edgeX2) > 0;
              if (deltaX * (inputY - edgeY2) - deltaY * (inputX - edgeX2) > 0) {
                if (side2) {
                  output.push(inputX2);
                  output.push(inputY2);
                  continue;
                }
                var c0 = inputY2 - inputY, c2 = inputX2 - inputX;
                var s = c0 * (edgeX2 - edgeX) - c2 * (edgeY2 - edgeY);
                if (Math.abs(s) > 1e-6) {
                  var ua = (c2 * (edgeY - inputY) - c0 * (edgeX - inputX)) / s;
                  output.push(edgeX + (edgeX2 - edgeX) * ua);
                  output.push(edgeY + (edgeY2 - edgeY) * ua);
                } else {
                  output.push(edgeX);
                  output.push(edgeY);
                }
              } else if (side2) {
                var c0 = inputY2 - inputY, c2 = inputX2 - inputX;
                var s = c0 * (edgeX2 - edgeX) - c2 * (edgeY2 - edgeY);
                if (Math.abs(s) > 1e-6) {
                  var ua = (c2 * (edgeY - inputY) - c0 * (edgeX - inputX)) / s;
                  output.push(edgeX + (edgeX2 - edgeX) * ua);
                  output.push(edgeY + (edgeY2 - edgeY) * ua);
                } else {
                  output.push(edgeX);
                  output.push(edgeY);
                }
                output.push(inputX2);
                output.push(inputY2);
              }
              clipped = true;
            }
            if (outputStart == output.length) {
              originalOutput.length = 0;
              return true;
            }
            output.push(output[0]);
            output.push(output[1]);
            if (i == clippingVerticesLast) break;
            var temp = output;
            output = input;
            output.length = 0;
            input = temp;
          }
          if (originalOutput != output) {
            originalOutput.length = 0;
            for (var i = 0, n = output.length - 2; i < n; i++) originalOutput[i] = output[i];
          } else originalOutput.length = originalOutput.length - 2;
          return clipped;
        };
        SkeletonClipping.makeClockwise = function(polygon) {
          var vertices = polygon;
          var verticeslength = polygon.length;
          var area = vertices[verticeslength - 2] * vertices[1] - vertices[0] * vertices[verticeslength - 1], p1x = 0, p1y = 0, p2x = 0, p2y = 0;
          for (var i = 0, n = verticeslength - 3; i < n; i += 2) {
            p1x = vertices[i];
            p1y = vertices[i + 1];
            p2x = vertices[i + 2];
            p2y = vertices[i + 3];
            area += p1x * p2y - p2x * p1y;
          }
          if (area < 0) return;
          for (var i = 0, lastX = verticeslength - 2, n = verticeslength >> 1; i < n; i += 2) {
            var x = vertices[i], y = vertices[i + 1];
            var other = lastX - i;
            vertices[i] = vertices[other];
            vertices[i + 1] = vertices[other + 1];
            vertices[other] = x;
            vertices[other + 1] = y;
          }
        };
        return SkeletonClipping;
      })();
      spine.SkeletonClipping = SkeletonClipping;
    })(spine || (spine = {}));
    var spine;
    (function(spine) {
      var SkeletonData = (function() {
        function SkeletonData() {
          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;
        }
        SkeletonData.prototype.findBone = function(boneName) {
          if (null == boneName) throw new Error("boneName cannot be null.");
          var bones = this.bones;
          for (var i = 0, n = bones.length; i < n; i++) {
            var bone = bones[i];
            if (bone.name == boneName) return bone;
          }
          return null;
        };
        SkeletonData.prototype.findBoneIndex = function(boneName) {
          if (null == boneName) throw new Error("boneName cannot be null.");
          var bones = this.bones;
          for (var i = 0, n = bones.length; i < n; i++) if (bones[i].name == boneName) return i;
          return -1;
        };
        SkeletonData.prototype.findSlot = function(slotName) {
          if (null == slotName) throw new Error("slotName cannot be null.");
          var slots = this.slots;
          for (var i = 0, n = slots.length; i < n; i++) {
            var slot = slots[i];
            if (slot.name == slotName) return slot;
          }
          return null;
        };
        SkeletonData.prototype.findSlotIndex = function(slotName) {
          if (null == slotName) throw new Error("slotName cannot be null.");
          var slots = this.slots;
          for (var i = 0, n = slots.length; i < n; i++) if (slots[i].name == slotName) return i;
          return -1;
        };
        SkeletonData.prototype.findSkin = function(skinName) {
          if (null == skinName) throw new Error("skinName cannot be null.");
          var skins = this.skins;
          for (var i = 0, n = skins.length; i < n; i++) {
            var skin = skins[i];
            if (skin.name == skinName) return skin;
          }
          return null;
        };
        SkeletonData.prototype.findEvent = function(eventDataName) {
          if (null == eventDataName) throw new Error("eventDataName cannot be null.");
          var events = this.events;
          for (var i = 0, n = events.length; i < n; i++) {
            var event_5 = events[i];
            if (event_5.name == eventDataName) return event_5;
          }
          return null;
        };
        SkeletonData.prototype.findAnimation = function(animationName) {
          if (null == animationName) throw new Error("animationName cannot be null.");
          var animations = this.animations;
          for (var i = 0, n = animations.length; i < n; i++) {
            var animation = animations[i];
            if (animation.name == animationName) return animation;
          }
          return null;
        };
        SkeletonData.prototype.findIkConstraint = function(constraintName) {
          if (null == constraintName) throw new Error("constraintName cannot be null.");
          var ikConstraints = this.ikConstraints;
          for (var i = 0, n = ikConstraints.length; i < n; i++) {
            var constraint = ikConstraints[i];
            if (constraint.name == constraintName) return constraint;
          }
          return null;
        };
        SkeletonData.prototype.findTransformConstraint = function(constraintName) {
          if (null == constraintName) throw new Error("constraintName cannot be null.");
          var transformConstraints = this.transformConstraints;
          for (var i = 0, n = transformConstraints.length; i < n; i++) {
            var constraint = transformConstraints[i];
            if (constraint.name == constraintName) return constraint;
          }
          return null;
        };
        SkeletonData.prototype.findPathConstraint = function(constraintName) {
          if (null == constraintName) throw new Error("constraintName cannot be null.");
          var pathConstraints = this.pathConstraints;
          for (var i = 0, n = pathConstraints.length; i < n; i++) {
            var constraint = pathConstraints[i];
            if (constraint.name == constraintName) return constraint;
          }
          return null;
        };
        SkeletonData.prototype.findPathConstraintIndex = function(pathConstraintName) {
          if (null == pathConstraintName) throw new Error("pathConstraintName cannot be null.");
          var pathConstraints = this.pathConstraints;
          for (var i = 0, n = pathConstraints.length; i < n; i++) if (pathConstraints[i].name == pathConstraintName) return i;
          return -1;
        };
        return SkeletonData;
      })();
      spine.SkeletonData = SkeletonData;
    })(spine || (spine = {}));
    var spine;
    (function(spine) {
      var SkeletonJson = (function() {
        function SkeletonJson(attachmentLoader) {
          this.scale = 1;
          this.linkedMeshes = new Array();
          this.attachmentLoader = attachmentLoader;
        }
        SkeletonJson.prototype.readSkeletonData = function(json) {
          var scale = this.scale;
          var skeletonData = new spine.SkeletonData();
          var root = "string" === typeof json ? JSON.parse(json) : json;
          var skeletonMap = root.skeleton;
          if (null != skeletonMap) {
            skeletonData.hash = skeletonMap.hash;
            skeletonData.version = skeletonMap.spine;
            skeletonData.x = skeletonMap.x;
            skeletonData.y = skeletonMap.y;
            skeletonData.width = skeletonMap.width;
            skeletonData.height = skeletonMap.height;
            skeletonData.fps = skeletonMap.fps;
            skeletonData.imagesPath = skeletonMap.images;
          }
          if (root.bones) for (var i = 0; i < root.bones.length; i++) {
            var boneMap = root.bones[i];
            var parent_5 = null;
            var parentName = this.getValue(boneMap, "parent", null);
            if (null != parentName) {
              parent_5 = skeletonData.findBone(parentName);
              if (null == parent_5) throw new Error("Parent bone not found: " + parentName);
            }
            var data = new spine.BoneData(skeletonData.bones.length, boneMap.name, parent_5);
            data.length = this.getValue(boneMap, "length", 0) * scale;
            data.x = this.getValue(boneMap, "x", 0) * scale;
            data.y = this.getValue(boneMap, "y", 0) * scale;
            data.rotation = this.getValue(boneMap, "rotation", 0);
            data.scaleX = this.getValue(boneMap, "scaleX", 1);
            data.scaleY = this.getValue(boneMap, "scaleY", 1);
            data.shearX = this.getValue(boneMap, "shearX", 0);
            data.shearY = this.getValue(boneMap, "shearY", 0);
            data.transformMode = SkeletonJson.transformModeFromString(this.getValue(boneMap, "transform", "normal"));
            data.skinRequired = this.getValue(boneMap, "skin", false);
            skeletonData.bones.push(data);
          }
          if (root.slots) for (var i = 0; i < root.slots.length; i++) {
            var slotMap = root.slots[i];
            var slotName = slotMap.name;
            var boneName = slotMap.bone;
            var boneData = skeletonData.findBone(boneName);
            if (null == boneData) throw new Error("Slot bone not found: " + boneName);
            var data = new spine.SlotData(skeletonData.slots.length, slotName, boneData);
            var color = this.getValue(slotMap, "color", null);
            null != color && data.color.setFromString(color);
            var dark = this.getValue(slotMap, "dark", null);
            if (null != dark) {
              data.darkColor = new spine.Color(1, 1, 1, 1);
              data.darkColor.setFromString(dark);
            }
            data.attachmentName = this.getValue(slotMap, "attachment", null);
            data.blendMode = SkeletonJson.blendModeFromString(this.getValue(slotMap, "blend", "normal"));
            skeletonData.slots.push(data);
          }
          if (root.ik) for (var i = 0; i < root.ik.length; i++) {
            var constraintMap = root.ik[i];
            var data = new spine.IkConstraintData(constraintMap.name);
            data.order = this.getValue(constraintMap, "order", 0);
            data.skinRequired = this.getValue(constraintMap, "skin", false);
            for (var j = 0; j < constraintMap.bones.length; j++) {
              var boneName = constraintMap.bones[j];
              var bone = skeletonData.findBone(boneName);
              if (null == bone) throw new Error("IK bone not found: " + boneName);
              data.bones.push(bone);
            }
            var targetName = constraintMap.target;
            data.target = skeletonData.findBone(targetName);
            if (null == data.target) throw new Error("IK target bone not found: " + targetName);
            data.mix = this.getValue(constraintMap, "mix", 1);
            data.softness = this.getValue(constraintMap, "softness", 0) * scale;
            data.bendDirection = this.getValue(constraintMap, "bendPositive", true) ? 1 : -1;
            data.compress = this.getValue(constraintMap, "compress", false);
            data.stretch = this.getValue(constraintMap, "stretch", false);
            data.uniform = this.getValue(constraintMap, "uniform", false);
            skeletonData.ikConstraints.push(data);
          }
          if (root.transform) for (var i = 0; i < root.transform.length; i++) {
            var constraintMap = root.transform[i];
            var data = new spine.TransformConstraintData(constraintMap.name);
            data.order = this.getValue(constraintMap, "order", 0);
            data.skinRequired = this.getValue(constraintMap, "skin", false);
            for (var j = 0; j < constraintMap.bones.length; j++) {
              var boneName = constraintMap.bones[j];
              var bone = skeletonData.findBone(boneName);
              if (null == bone) throw new Error("Transform constraint bone not found: " + boneName);
              data.bones.push(bone);
            }
            var targetName = constraintMap.target;
            data.target = skeletonData.findBone(targetName);
            if (null == data.target) throw new Error("Transform constraint target bone not found: " + targetName);
            data.local = this.getValue(constraintMap, "local", false);
            data.relative = this.getValue(constraintMap, "relative", false);
            data.offsetRotation = this.getValue(constraintMap, "rotation", 0);
            data.offsetX = this.getValue(constraintMap, "x", 0) * scale;
            data.offsetY = this.getValue(constraintMap, "y", 0) * scale;
            data.offsetScaleX = this.getValue(constraintMap, "scaleX", 0);
            data.offsetScaleY = this.getValue(constraintMap, "scaleY", 0);
            data.offsetShearY = this.getValue(constraintMap, "shearY", 0);
            data.rotateMix = this.getValue(constraintMap, "rotateMix", 1);
            data.translateMix = this.getValue(constraintMap, "translateMix", 1);
            data.scaleMix = this.getValue(constraintMap, "scaleMix", 1);
            data.shearMix = this.getValue(constraintMap, "shearMix", 1);
            skeletonData.transformConstraints.push(data);
          }
          if (root.path) for (var i = 0; i < root.path.length; i++) {
            var constraintMap = root.path[i];
            var data = new spine.PathConstraintData(constraintMap.name);
            data.order = this.getValue(constraintMap, "order", 0);
            data.skinRequired = this.getValue(constraintMap, "skin", false);
            for (var j = 0; j < constraintMap.bones.length; j++) {
              var boneName = constraintMap.bones[j];
              var bone = skeletonData.findBone(boneName);
              if (null == bone) throw new Error("Transform constraint bone not found: " + boneName);
              data.bones.push(bone);
            }
            var targetName = constraintMap.target;
            data.target = skeletonData.findSlot(targetName);
            if (null == data.target) throw new Error("Path target slot not found: " + targetName);
            data.positionMode = SkeletonJson.positionModeFromString(this.getValue(constraintMap, "positionMode", "percent"));
            data.spacingMode = SkeletonJson.spacingModeFromString(this.getValue(constraintMap, "spacingMode", "length"));
            data.rotateMode = SkeletonJson.rotateModeFromString(this.getValue(constraintMap, "rotateMode", "tangent"));
            data.offsetRotation = this.getValue(constraintMap, "rotation", 0);
            data.position = this.getValue(constraintMap, "position", 0);
            data.positionMode == spine.PositionMode.Fixed && (data.position *= scale);
            data.spacing = this.getValue(constraintMap, "spacing", 0);
            data.spacingMode != spine.SpacingMode.Length && data.spacingMode != spine.SpacingMode.Fixed || (data.spacing *= scale);
            data.rotateMix = this.getValue(constraintMap, "rotateMix", 1);
            data.translateMix = this.getValue(constraintMap, "translateMix", 1);
            skeletonData.pathConstraints.push(data);
          }
          if (root.skins) {
            var skins = root.skins;
            var isArray = skins instanceof Array;
            if (!isArray) {
              var skinArr = [];
              for (var skinName in skins) skinArr.push({
                name: skinName,
                attachments: skins[skinName]
              });
              skins = skinArr;
            }
            for (var i = 0; i < skins.length; i++) {
              var skinMap = skins[i];
              var skin = new spine.Skin(skinMap.name);
              if (skinMap.bones) for (var ii = 0; ii < skinMap.bones.length; ii++) {
                var bone = skeletonData.findBone(skinMap.bones[ii]);
                if (null == bone) throw new Error("Skin bone not found: " + skinMap.bones[i]);
                skin.bones.push(bone);
              }
              if (skinMap.ik) for (var ii = 0; ii < skinMap.ik.length; ii++) {
                var constraint = skeletonData.findIkConstraint(skinMap.ik[ii]);
                if (null == constraint) throw new Error("Skin IK constraint not found: " + skinMap.ik[i]);
                skin.constraints.push(constraint);
              }
              if (skinMap.transform) for (var ii = 0; ii < skinMap.transform.length; ii++) {
                var constraint = skeletonData.findTransformConstraint(skinMap.transform[ii]);
                if (null == constraint) throw new Error("Skin transform constraint not found: " + skinMap.transform[i]);
                skin.constraints.push(constraint);
              }
              if (skinMap.path) for (var ii = 0; ii < skinMap.path.length; ii++) {
                var constraint = skeletonData.findPathConstraint(skinMap.path[ii]);
                if (null == constraint) throw new Error("Skin path constraint not found: " + skinMap.path[i]);
                skin.constraints.push(constraint);
              }
              for (var slotName in skinMap.attachments) {
                var slot = skeletonData.findSlot(slotName);
                if (null == slot) throw new Error("Slot not found: " + slotName);
                var slotMap = skinMap.attachments[slotName];
                for (var entryName in slotMap) {
                  var attachment = this.readAttachment(slotMap[entryName], skin, slot.index, entryName, skeletonData);
                  null != attachment && skin.setAttachment(slot.index, entryName, attachment);
                }
              }
              skeletonData.skins.push(skin);
              "default" == skin.name && (skeletonData.defaultSkin = skin);
            }
          }
          for (var i = 0, n = this.linkedMeshes.length; i < n; i++) {
            var linkedMesh = this.linkedMeshes[i];
            var skin = null == linkedMesh.skin ? skeletonData.defaultSkin : skeletonData.findSkin(linkedMesh.skin);
            if (null == skin) throw new Error("Skin not found: " + linkedMesh.skin);
            var parent_6 = skin.getAttachment(linkedMesh.slotIndex, linkedMesh.parent);
            if (null == parent_6) throw new Error("Parent mesh not found: " + linkedMesh.parent);
            linkedMesh.mesh.deformAttachment = linkedMesh.inheritDeform ? parent_6 : linkedMesh.mesh;
            linkedMesh.mesh.setParentMesh(parent_6);
            linkedMesh.mesh.updateUVs();
          }
          this.linkedMeshes.length = 0;
          if (root.events) for (var eventName in root.events) {
            var eventMap = root.events[eventName];
            var data = new spine.EventData(eventName);
            data.intValue = this.getValue(eventMap, "int", 0);
            data.floatValue = this.getValue(eventMap, "float", 0);
            data.stringValue = this.getValue(eventMap, "string", "");
            data.audioPath = this.getValue(eventMap, "audio", null);
            if (null != data.audioPath) {
              data.volume = this.getValue(eventMap, "volume", 1);
              data.balance = this.getValue(eventMap, "balance", 0);
            }
            skeletonData.events.push(data);
          }
          if (root.animations) for (var animationName in root.animations) {
            var animationMap = root.animations[animationName];
            this.readAnimation(animationMap, animationName, skeletonData);
          }
          return skeletonData;
        };
        SkeletonJson.prototype.readAttachment = function(map, skin, slotIndex, name, skeletonData) {
          var scale = this.scale;
          name = this.getValue(map, "name", name);
          var type = this.getValue(map, "type", "region");
          switch (type) {
           case "region":
            var path = this.getValue(map, "path", name);
            var region = this.attachmentLoader.newRegionAttachment(skin, name, path);
            if (null == region) return null;
            region.path = path;
            region.x = this.getValue(map, "x", 0) * scale;
            region.y = this.getValue(map, "y", 0) * scale;
            region.scaleX = this.getValue(map, "scaleX", 1);
            region.scaleY = this.getValue(map, "scaleY", 1);
            region.rotation = this.getValue(map, "rotation", 0);
            region.width = map.width * scale;
            region.height = map.height * scale;
            var color = this.getValue(map, "color", null);
            null != color && region.color.setFromString(color);
            region.updateOffset();
            return region;

           case "boundingbox":
            var box = this.attachmentLoader.newBoundingBoxAttachment(skin, name);
            if (null == box) return null;
            this.readVertices(map, box, map.vertexCount << 1);
            var color = this.getValue(map, "color", null);
            null != color && box.color.setFromString(color);
            return box;

           case "mesh":
           case "linkedmesh":
            var path = this.getValue(map, "path", name);
            var mesh = this.attachmentLoader.newMeshAttachment(skin, name, path);
            if (null == mesh) return null;
            mesh.path = path;
            var color = this.getValue(map, "color", null);
            null != color && mesh.color.setFromString(color);
            mesh.width = this.getValue(map, "width", 0) * scale;
            mesh.height = this.getValue(map, "height", 0) * scale;
            var parent_7 = this.getValue(map, "parent", null);
            if (null != parent_7) {
              this.linkedMeshes.push(new LinkedMesh(mesh, this.getValue(map, "skin", null), slotIndex, parent_7, this.getValue(map, "deform", true)));
              return mesh;
            }
            var uvs = map.uvs;
            this.readVertices(map, mesh, uvs.length);
            mesh.triangles = map.triangles;
            mesh.regionUVs = uvs;
            mesh.updateUVs();
            mesh.edges = this.getValue(map, "edges", null);
            mesh.hullLength = 2 * this.getValue(map, "hull", 0);
            return mesh;

           case "path":
            var path = this.attachmentLoader.newPathAttachment(skin, name);
            if (null == path) return null;
            path.closed = this.getValue(map, "closed", false);
            path.constantSpeed = this.getValue(map, "constantSpeed", true);
            var vertexCount = map.vertexCount;
            this.readVertices(map, path, vertexCount << 1);
            var lengths = spine.Utils.newArray(vertexCount / 3, 0);
            for (var i = 0; i < map.lengths.length; i++) lengths[i] = map.lengths[i] * scale;
            path.lengths = lengths;
            var color = this.getValue(map, "color", null);
            null != color && path.color.setFromString(color);
            return path;

           case "point":
            var point = this.attachmentLoader.newPointAttachment(skin, name);
            if (null == point) return null;
            point.x = this.getValue(map, "x", 0) * scale;
            point.y = this.getValue(map, "y", 0) * scale;
            point.rotation = this.getValue(map, "rotation", 0);
            var color = this.getValue(map, "color", null);
            null != color && point.color.setFromString(color);
            return point;

           case "clipping":
            var clip = this.attachmentLoader.newClippingAttachment(skin, name);
            if (null == clip) return null;
            var end = this.getValue(map, "end", null);
            if (null != end) {
              var slot = skeletonData.findSlot(end);
              if (null == slot) throw new Error("Clipping end slot not found: " + end);
              clip.endSlot = slot;
            }
            var vertexCount = map.vertexCount;
            this.readVertices(map, clip, vertexCount << 1);
            var color = this.getValue(map, "color", null);
            null != color && clip.color.setFromString(color);
            return clip;
          }
          return null;
        };
        SkeletonJson.prototype.readVertices = function(map, attachment, verticesLength) {
          var scale = this.scale;
          attachment.worldVerticesLength = verticesLength;
          var vertices = map.vertices;
          if (verticesLength == vertices.length) {
            var scaledVertices = spine.Utils.toFloatArray(vertices);
            if (1 != scale) for (var i = 0, n = vertices.length; i < n; i++) scaledVertices[i] *= scale;
            attachment.vertices = scaledVertices;
            return;
          }
          var weights = new Array();
          var bones = new Array();
          for (var i = 0, n = vertices.length; i < n; ) {
            var boneCount = vertices[i++];
            bones.push(boneCount);
            for (var nn = i + 4 * boneCount; i < nn; i += 4) {
              bones.push(vertices[i]);
              weights.push(vertices[i + 1] * scale);
              weights.push(vertices[i + 2] * scale);
              weights.push(vertices[i + 3]);
            }
          }
          attachment.bones = bones;
          attachment.vertices = spine.Utils.toFloatArray(weights);
        };
        SkeletonJson.prototype.readAnimation = function(map, name, skeletonData) {
          var scale = this.scale;
          var timelines = new Array();
          var duration = 0;
          if (map.slots) for (var slotName in map.slots) {
            var slotMap = map.slots[slotName];
            var slotIndex = skeletonData.findSlotIndex(slotName);
            if (-1 == slotIndex) throw new Error("Slot not found: " + slotName);
            for (var timelineName in slotMap) {
              var timelineMap = slotMap[timelineName];
              if ("attachment" == timelineName) {
                var timeline = new spine.AttachmentTimeline(timelineMap.length);
                timeline.slotIndex = slotIndex;
                var frameIndex = 0;
                for (var i = 0; i < timelineMap.length; i++) {
                  var valueMap = timelineMap[i];
                  timeline.setFrame(frameIndex++, this.getValue(valueMap, "time", 0), valueMap.name);
                }
                timelines.push(timeline);
                duration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]);
              } else if ("color" == timelineName) {
                var timeline = new spine.ColorTimeline(timelineMap.length);
                timeline.slotIndex = slotIndex;
                var frameIndex = 0;
                for (var i = 0; i < timelineMap.length; i++) {
                  var valueMap = timelineMap[i];
                  var color = new spine.Color();
                  color.setFromString(valueMap.color);
                  timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), color.r, color.g, color.b, color.a);
                  this.readCurve(valueMap, timeline, frameIndex);
                  frameIndex++;
                }
                timelines.push(timeline);
                duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.ColorTimeline.ENTRIES]);
              } else {
                if ("twoColor" != timelineName) throw new Error("Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")");
                var timeline = new spine.TwoColorTimeline(timelineMap.length);
                timeline.slotIndex = slotIndex;
                var frameIndex = 0;
                for (var i = 0; i < timelineMap.length; i++) {
                  var valueMap = timelineMap[i];
                  var light = new spine.Color();
                  var dark = new spine.Color();
                  light.setFromString(valueMap.light);
                  dark.setFromString(valueMap.dark);
                  timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), light.r, light.g, light.b, light.a, dark.r, dark.g, dark.b);
                  this.readCurve(valueMap, timeline, frameIndex);
                  frameIndex++;
                }
                timelines.push(timeline);
                duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.TwoColorTimeline.ENTRIES]);
              }
            }
          }
          if (map.bones) for (var boneName in map.bones) {
            var boneMap = map.bones[boneName];
            var boneIndex = skeletonData.findBoneIndex(boneName);
            if (-1 == boneIndex) throw new Error("Bone not found: " + boneName);
            for (var timelineName in boneMap) {
              var timelineMap = boneMap[timelineName];
              if ("rotate" === timelineName) {
                var timeline = new spine.RotateTimeline(timelineMap.length);
                timeline.boneIndex = boneIndex;
                var frameIndex = 0;
                for (var i = 0; i < timelineMap.length; i++) {
                  var valueMap = timelineMap[i];
                  timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), this.getValue(valueMap, "angle", 0));
                  this.readCurve(valueMap, timeline, frameIndex);
                  frameIndex++;
                }
                timelines.push(timeline);
                duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.RotateTimeline.ENTRIES]);
              } else {
                if ("translate" !== timelineName && "scale" !== timelineName && "shear" !== timelineName) throw new Error("Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")");
                var timeline = null;
                var timelineScale = 1, defaultValue = 0;
                if ("scale" === timelineName) {
                  timeline = new spine.ScaleTimeline(timelineMap.length);
                  defaultValue = 1;
                } else if ("shear" === timelineName) timeline = new spine.ShearTimeline(timelineMap.length); else {
                  timeline = new spine.TranslateTimeline(timelineMap.length);
                  timelineScale = scale;
                }
                timeline.boneIndex = boneIndex;
                var frameIndex = 0;
                for (var i = 0; i < timelineMap.length; i++) {
                  var valueMap = timelineMap[i];
                  var x = this.getValue(valueMap, "x", defaultValue), y = this.getValue(valueMap, "y", defaultValue);
                  timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), x * timelineScale, y * timelineScale);
                  this.readCurve(valueMap, timeline, frameIndex);
                  frameIndex++;
                }
                timelines.push(timeline);
                duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.TranslateTimeline.ENTRIES]);
              }
            }
          }
          if (map.ik) for (var constraintName in map.ik) {
            var constraintMap = map.ik[constraintName];
            var constraint = skeletonData.findIkConstraint(constraintName);
            var timeline = new spine.IkConstraintTimeline(constraintMap.length);
            timeline.ikConstraintIndex = skeletonData.ikConstraints.indexOf(constraint);
            var frameIndex = 0;
            for (var i = 0; i < constraintMap.length; i++) {
              var valueMap = constraintMap[i];
              timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), this.getValue(valueMap, "mix", 1), this.getValue(valueMap, "softness", 0) * scale, this.getValue(valueMap, "bendPositive", true) ? 1 : -1, this.getValue(valueMap, "compress", false), this.getValue(valueMap, "stretch", false));
              this.readCurve(valueMap, timeline, frameIndex);
              frameIndex++;
            }
            timelines.push(timeline);
            duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.IkConstraintTimeline.ENTRIES]);
          }
          if (map.transform) for (var constraintName in map.transform) {
            var constraintMap = map.transform[constraintName];
            var constraint = skeletonData.findTransformConstraint(constraintName);
            var timeline = new spine.TransformConstraintTimeline(constraintMap.length);
            timeline.transformConstraintIndex = skeletonData.transformConstraints.indexOf(constraint);
            var frameIndex = 0;
            for (var i = 0; i < constraintMap.length; i++) {
              var valueMap = constraintMap[i];
              timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), this.getValue(valueMap, "rotateMix", 1), this.getValue(valueMap, "translateMix", 1), this.getValue(valueMap, "scaleMix", 1), this.getValue(valueMap, "shearMix", 1));
              this.readCurve(valueMap, timeline, frameIndex);
              frameIndex++;
            }
            timelines.push(timeline);
            duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.TransformConstraintTimeline.ENTRIES]);
          }
          var mapPath = map.path || map.paths;
          if (mapPath) for (var constraintName in mapPath) {
            var constraintMap = mapPath[constraintName];
            var index = skeletonData.findPathConstraintIndex(constraintName);
            if (-1 == index) throw new Error("Path constraint not found: " + constraintName);
            var data = skeletonData.pathConstraints[index];
            for (var timelineName in constraintMap) {
              var timelineMap = constraintMap[timelineName];
              if ("position" === timelineName || "spacing" === timelineName) {
                var timeline = null;
                var timelineScale = 1;
                if ("spacing" === timelineName) {
                  timeline = new spine.PathConstraintSpacingTimeline(timelineMap.length);
                  data.spacingMode != spine.SpacingMode.Length && data.spacingMode != spine.SpacingMode.Fixed || (timelineScale = scale);
                } else {
                  timeline = new spine.PathConstraintPositionTimeline(timelineMap.length);
                  data.positionMode == spine.PositionMode.Fixed && (timelineScale = scale);
                }
                timeline.pathConstraintIndex = index;
                var frameIndex = 0;
                for (var i = 0; i < timelineMap.length; i++) {
                  var valueMap = timelineMap[i];
                  timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), this.getValue(valueMap, timelineName, 0) * timelineScale);
                  this.readCurve(valueMap, timeline, frameIndex);
                  frameIndex++;
                }
                timelines.push(timeline);
                duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.PathConstraintPositionTimeline.ENTRIES]);
              } else if ("mix" === timelineName) {
                var timeline = new spine.PathConstraintMixTimeline(timelineMap.length);
                timeline.pathConstraintIndex = index;
                var frameIndex = 0;
                for (var i = 0; i < timelineMap.length; i++) {
                  var valueMap = timelineMap[i];
                  timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), this.getValue(valueMap, "rotateMix", 1), this.getValue(valueMap, "translateMix", 1));
                  this.readCurve(valueMap, timeline, frameIndex);
                  frameIndex++;
                }
                timelines.push(timeline);
                duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.PathConstraintMixTimeline.ENTRIES]);
              }
            }
          }
          if (map.deform) for (var deformName in map.deform) {
            var deformMap = map.deform[deformName];
            var skin = skeletonData.findSkin(deformName);
            if (null == skin) throw new Error("Skin not found: " + deformName);
            for (var slotName in deformMap) {
              var slotMap = deformMap[slotName];
              var slotIndex = skeletonData.findSlotIndex(slotName);
              if (-1 == slotIndex) throw new Error("Slot not found: " + slotMap.name);
              for (var timelineName in slotMap) {
                var timelineMap = slotMap[timelineName];
                var attachment = skin.getAttachment(slotIndex, timelineName);
                if (null == attachment) continue;
                var weighted = null != attachment.bones;
                var vertices = attachment.vertices;
                var deformLength = weighted ? vertices.length / 3 * 2 : vertices.length;
                var timeline = new spine.DeformTimeline(timelineMap.length);
                timeline.slotIndex = slotIndex;
                timeline.attachment = attachment;
                var frameIndex = 0;
                for (var j = 0; j < timelineMap.length; j++) {
                  var valueMap = timelineMap[j];
                  var deform = void 0;
                  var verticesValue = this.getValue(valueMap, "vertices", null);
                  if (null == verticesValue) deform = weighted ? spine.Utils.newFloatArray(deformLength) : vertices; else {
                    deform = spine.Utils.newFloatArray(deformLength);
                    var start = this.getValue(valueMap, "offset", 0);
                    spine.Utils.arrayCopy(verticesValue, 0, deform, start, verticesValue.length);
                    if (1 != scale) for (var i = start, n = i + verticesValue.length; i < n; i++) deform[i] *= scale;
                    if (!weighted) for (var i = 0; i < deformLength; i++) deform[i] += vertices[i];
                  }
                  timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), deform);
                  this.readCurve(valueMap, timeline, frameIndex);
                  frameIndex++;
                }
                timelines.push(timeline);
                duration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]);
              }
            }
          }
          var drawOrderNode = map.drawOrder;
          null == drawOrderNode && (drawOrderNode = map.draworder);
          if (null != drawOrderNode) {
            var timeline = new spine.DrawOrderTimeline(drawOrderNode.length);
            var slotCount = skeletonData.slots.length;
            var frameIndex = 0;
            for (var j = 0; j < drawOrderNode.length; j++) {
              var drawOrderMap = drawOrderNode[j];
              var drawOrder = null;
              var offsets = this.getValue(drawOrderMap, "offsets", null);
              if (null != offsets) {
                drawOrder = spine.Utils.newArray(slotCount, -1);
                var unchanged = spine.Utils.newArray(slotCount - offsets.length, 0);
                var originalIndex = 0, unchangedIndex = 0;
                for (var i = 0; i < offsets.length; i++) {
                  var offsetMap = offsets[i];
                  var slotIndex = skeletonData.findSlotIndex(offsetMap.slot);
                  if (-1 == slotIndex) throw new Error("Slot not found: " + offsetMap.slot);
                  while (originalIndex != slotIndex) unchanged[unchangedIndex++] = originalIndex++;
                  drawOrder[originalIndex + offsetMap.offset] = originalIndex++;
                }
                while (originalIndex < slotCount) unchanged[unchangedIndex++] = originalIndex++;
                for (var i = slotCount - 1; i >= 0; i--) -1 == drawOrder[i] && (drawOrder[i] = unchanged[--unchangedIndex]);
              }
              timeline.setFrame(frameIndex++, this.getValue(drawOrderMap, "time", 0), drawOrder);
            }
            timelines.push(timeline);
            duration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]);
          }
          if (map.events) {
            var timeline = new spine.EventTimeline(map.events.length);
            var frameIndex = 0;
            for (var i = 0; i < map.events.length; i++) {
              var eventMap = map.events[i];
              var eventData = skeletonData.findEvent(eventMap.name);
              if (null == eventData) throw new Error("Event not found: " + eventMap.name);
              var event_6 = new spine.Event(spine.Utils.toSinglePrecision(this.getValue(eventMap, "time", 0)), eventData);
              event_6.intValue = this.getValue(eventMap, "int", eventData.intValue);
              event_6.floatValue = this.getValue(eventMap, "float", eventData.floatValue);
              event_6.stringValue = this.getValue(eventMap, "string", eventData.stringValue);
              if (null != event_6.data.audioPath) {
                event_6.volume = this.getValue(eventMap, "volume", 1);
                event_6.balance = this.getValue(eventMap, "balance", 0);
              }
              timeline.setFrame(frameIndex++, event_6);
            }
            timelines.push(timeline);
            duration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]);
          }
          if (isNaN(duration)) throw new Error("Error while parsing animation, duration is NaN");
          skeletonData.animations.push(new spine.Animation(name, timelines, duration));
        };
        SkeletonJson.prototype.readCurve = function(map, timeline, frameIndex) {
          var curve = map.curve;
          if (!curve) return;
          "stepped" == curve ? timeline.setStepped(frameIndex) : "[object Array]" === Object.prototype.toString.call(curve) ? timeline.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]) : timeline.setCurve(frameIndex, curve, this.getValue(map, "c2", 0), this.getValue(map, "c3", 1), this.getValue(map, "c4", 1));
        };
        SkeletonJson.prototype.getValue = function(map, prop, defaultValue) {
          return void 0 !== map[prop] ? map[prop] : defaultValue;
        };
        SkeletonJson.blendModeFromString = function(str) {
          str = str.toLowerCase();
          if ("normal" == str) return spine.BlendMode.Normal;
          if ("additive" == str) return spine.BlendMode.Additive;
          if ("multiply" == str) return spine.BlendMode.Multiply;
          if ("screen" == str) return spine.BlendMode.Screen;
          throw new Error("Unknown blend mode: " + str);
        };
        SkeletonJson.positionModeFromString = function(str) {
          str = str.toLowerCase();
          if ("fixed" == str) return spine.PositionMode.Fixed;
          if ("percent" == str) return spine.PositionMode.Percent;
          throw new Error("Unknown position mode: " + str);
        };
        SkeletonJson.spacingModeFromString = function(str) {
          str = str.toLowerCase();
          if ("length" == str) return spine.SpacingMode.Length;
          if ("fixed" == str) return spine.SpacingMode.Fixed;
          if ("percent" == str) return spine.SpacingMode.Percent;
          throw new Error("Unknown position mode: " + str);
        };
        SkeletonJson.rotateModeFromString = function(str) {
          str = str.toLowerCase();
          if ("tangent" == str) return spine.RotateMode.Tangent;
          if ("chain" == str) return spine.RotateMode.Chain;
          if ("chainscale" == str) return spine.RotateMode.ChainScale;
          throw new Error("Unknown rotate mode: " + str);
        };
        SkeletonJson.transformModeFromString = function(str) {
          str = str.toLowerCase();
          if ("normal" == str) return spine.TransformMode.Normal;
          if ("onlytranslation" == str) return spine.TransformMode.OnlyTranslation;
          if ("norotationorreflection" == str) return spine.TransformMode.NoRotationOrReflection;
          if ("noscale" == str) return spine.TransformMode.NoScale;
          if ("noscaleorreflection" == str) return spine.TransformMode.NoScaleOrReflection;
          throw new Error("Unknown transform mode: " + str);
        };
        return SkeletonJson;
      })();
      spine.SkeletonJson = SkeletonJson;
      var LinkedMesh = (function() {
        function LinkedMesh(mesh, skin, slotIndex, parent, inheritDeform) {
          this.mesh = mesh;
          this.skin = skin;
          this.slotIndex = slotIndex;
          this.parent = parent;
          this.inheritDeform = inheritDeform;
        }
        return LinkedMesh;
      })();
    })(spine || (spine = {}));
    var spine;
    (function(spine) {
      var SkinEntry = (function() {
        function SkinEntry(slotIndex, name, attachment) {
          this.slotIndex = slotIndex;
          this.name = name;
          this.attachment = attachment;
        }
        return SkinEntry;
      })();
      spine.SkinEntry = SkinEntry;
      var Skin = (function() {
        function Skin(name) {
          this.attachments = new Array();
          this.bones = Array();
          this.constraints = new Array();
          if (null == name) throw new Error("name cannot be null.");
          this.name = name;
        }
        Skin.prototype.setAttachment = function(slotIndex, name, attachment) {
          if (null == attachment) throw new Error("attachment cannot be null.");
          var attachments = this.attachments;
          slotIndex >= attachments.length && (attachments.length = slotIndex + 1);
          attachments[slotIndex] || (attachments[slotIndex] = {});
          attachments[slotIndex][name] = attachment;
        };
        Skin.prototype.addSkin = function(skin) {
          for (var i = 0; i < skin.bones.length; i++) {
            var bone = skin.bones[i];
            var contained = false;
            for (var j = 0; j < this.bones.length; j++) if (this.bones[j] == bone) {
              contained = true;
              break;
            }
            contained || this.bones.push(bone);
          }
          for (var i = 0; i < skin.constraints.length; i++) {
            var constraint = skin.constraints[i];
            var contained = false;
            for (var j = 0; j < this.constraints.length; j++) if (this.constraints[j] == constraint) {
              contained = true;
              break;
            }
            contained || this.constraints.push(constraint);
          }
          var attachments = skin.getAttachments();
          for (var i = 0; i < attachments.length; i++) {
            var attachment = attachments[i];
            this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment);
          }
        };
        Skin.prototype.copySkin = function(skin) {
          for (var i = 0; i < skin.bones.length; i++) {
            var bone = skin.bones[i];
            var contained = false;
            for (var j = 0; j < this.bones.length; j++) if (this.bones[j] == bone) {
              contained = true;
              break;
            }
            contained || this.bones.push(bone);
          }
          for (var i = 0; i < skin.constraints.length; i++) {
            var constraint = skin.constraints[i];
            var contained = false;
            for (var j = 0; j < this.constraints.length; j++) if (this.constraints[j] == constraint) {
              contained = true;
              break;
            }
            contained || this.constraints.push(constraint);
          }
          var attachments = skin.getAttachments();
          for (var i = 0; i < attachments.length; i++) {
            var attachment = attachments[i];
            if (null == attachment.attachment) continue;
            if (attachment.attachment instanceof spine.MeshAttachment) {
              attachment.attachment = attachment.attachment.newLinkedMesh();
              this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment);
            } else {
              attachment.attachment = attachment.attachment.copy();
              this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment);
            }
          }
        };
        Skin.prototype.getAttachment = function(slotIndex, name) {
          var dictionary = this.attachments[slotIndex];
          return dictionary ? dictionary[name] : null;
        };
        Skin.prototype.removeAttachment = function(slotIndex, name) {
          var dictionary = this.attachments[slotIndex];
          dictionary && (dictionary[name] = null);
        };
        Skin.prototype.getAttachments = function() {
          var entries = new Array();
          for (var i = 0; i < this.attachments.length; i++) {
            var slotAttachments = this.attachments[i];
            if (slotAttachments) for (var name_4 in slotAttachments) {
              var attachment = slotAttachments[name_4];
              attachment && entries.push(new SkinEntry(i, name_4, attachment));
            }
          }
          return entries;
        };
        Skin.prototype.getAttachmentsForSlot = function(slotIndex, attachments) {
          var slotAttachments = this.attachments[slotIndex];
          if (slotAttachments) for (var name_5 in slotAttachments) {
            var attachment = slotAttachments[name_5];
            attachment && attachments.push(new SkinEntry(slotIndex, name_5, attachment));
          }
        };
        Skin.prototype.clear = function() {
          this.attachments.length = 0;
          this.bones.length = 0;
          this.constraints.length = 0;
        };
        Skin.prototype.attachAll = function(skeleton, oldSkin) {
          var slotIndex = 0;
          for (var i = 0; i < skeleton.slots.length; i++) {
            var slot = skeleton.slots[i];
            var slotAttachment = slot.getAttachment();
            if (slotAttachment && slotIndex < oldSkin.attachments.length) {
              var dictionary = oldSkin.attachments[slotIndex];
              for (var key in dictionary) {
                var skinAttachment = dictionary[key];
                if (slotAttachment == skinAttachment) {
                  var attachment = this.getAttachment(slotIndex, key);
                  null != attachment && slot.setAttachment(attachment);
                  break;
                }
              }
            }
            slotIndex++;
          }
        };
        return Skin;
      })();
      spine.Skin = Skin;
    })(spine || (spine = {}));
    var spine;
    (function(spine) {
      var Slot = (function() {
        function Slot(data, bone) {
          this.deform = new Array();
          if (null == data) throw new Error("data cannot be null.");
          if (null == bone) throw new Error("bone cannot be null.");
          this.data = data;
          this.bone = bone;
          this.color = new spine.Color();
          this.darkColor = null == data.darkColor ? null : new spine.Color();
          this.setToSetupPose();
        }
        Slot.prototype.getSkeleton = function() {
          return this.bone.skeleton;
        };
        Slot.prototype.getAttachment = function() {
          return this.attachment;
        };
        Slot.prototype.setAttachment = function(attachment) {
          if (this.attachment == attachment) return;
          this.attachment = attachment;
          this.attachmentTime = this.bone.skeleton.time;
          this.deform.length = 0;
        };
        Slot.prototype.setAttachmentTime = function(time) {
          this.attachmentTime = this.bone.skeleton.time - time;
        };
        Slot.prototype.getAttachmentTime = function() {
          return this.bone.skeleton.time - this.attachmentTime;
        };
        Slot.prototype.setToSetupPose = function() {
          this.color.setFromColor(this.data.color);
          null != this.darkColor && this.darkColor.setFromColor(this.data.darkColor);
          if (null == this.data.attachmentName) this.attachment = null; else {
            this.attachment = null;
            this.setAttachment(this.bone.skeleton.getAttachment(this.data.index, this.data.attachmentName));
          }
        };
        return Slot;
      })();
      spine.Slot = Slot;
    })(spine || (spine = {}));
    var spine;
    (function(spine) {
      var SlotData = (function() {
        function SlotData(index, name, boneData) {
          this.color = new spine.Color(1, 1, 1, 1);
          if (index < 0) throw new Error("index must be >= 0.");
          if (null == name) throw new Error("name cannot be null.");
          if (null == boneData) throw new Error("boneData cannot be null.");
          this.index = index;
          this.name = name;
          this.boneData = boneData;
        }
        return SlotData;
      })();
      spine.SlotData = SlotData;
    })(spine || (spine = {}));
    var spine;
    (function(spine) {
      var Texture = (function() {
        function Texture(image) {
          this._image = image;
        }
        Texture.prototype.getImage = function() {
          return this._image;
        };
        Texture.filterFromString = function(text) {
          switch (text.toLowerCase()) {
           case "nearest":
            return TextureFilter.Nearest;

           case "linear":
            return TextureFilter.Linear;

           case "mipmap":
            return TextureFilter.MipMap;

           case "mipmapnearestnearest":
            return TextureFilter.MipMapNearestNearest;

           case "mipmaplinearnearest":
            return TextureFilter.MipMapLinearNearest;

           case "mipmapnearestlinear":
            return TextureFilter.MipMapNearestLinear;

           case "mipmaplinearlinear":
            return TextureFilter.MipMapLinearLinear;

           default:
            throw new Error("Unknown texture filter " + text);
          }
        };
        Texture.wrapFromString = function(text) {
          switch (text.toLowerCase()) {
           case "mirroredtepeat":
            return TextureWrap.MirroredRepeat;

           case "clamptoedge":
            return TextureWrap.ClampToEdge;

           case "repeat":
            return TextureWrap.Repeat;

           default:
            throw new Error("Unknown texture wrap " + text);
          }
        };
        return Texture;
      })();
      spine.Texture = Texture;
      var TextureFilter;
      (function(TextureFilter) {
        TextureFilter[TextureFilter["Nearest"] = 9728] = "Nearest";
        TextureFilter[TextureFilter["Linear"] = 9729] = "Linear";
        TextureFilter[TextureFilter["MipMap"] = 9987] = "MipMap";
        TextureFilter[TextureFilter["MipMapNearestNearest"] = 9984] = "MipMapNearestNearest";
        TextureFilter[TextureFilter["MipMapLinearNearest"] = 9985] = "MipMapLinearNearest";
        TextureFilter[TextureFilter["MipMapNearestLinear"] = 9986] = "MipMapNearestLinear";
        TextureFilter[TextureFilter["MipMapLinearLinear"] = 9987] = "MipMapLinearLinear";
      })(TextureFilter = spine.TextureFilter || (spine.TextureFilter = {}));
      var TextureWrap;
      (function(TextureWrap) {
        TextureWrap[TextureWrap["MirroredRepeat"] = 33648] = "MirroredRepeat";
        TextureWrap[TextureWrap["ClampToEdge"] = 33071] = "ClampToEdge";
        TextureWrap[TextureWrap["Repeat"] = 10497] = "Repeat";
      })(TextureWrap = spine.TextureWrap || (spine.TextureWrap = {}));
      var TextureRegion = (function() {
        function TextureRegion() {
          this.u = 0;
          this.v = 0;
          this.u2 = 0;
          this.v2 = 0;
          this.width = 0;
          this.height = 0;
          this.rotate = false;
          this.offsetX = 0;
          this.offsetY = 0;
          this.originalWidth = 0;
          this.originalHeight = 0;
        }
        return TextureRegion;
      })();
      spine.TextureRegion = TextureRegion;
      var FakeTexture = (function(_super) {
        __extends(FakeTexture, _super);
        function FakeTexture() {
          return null !== _super && _super.apply(this, arguments) || this;
        }
        FakeTexture.prototype.setFilters = function(minFilter, magFilter) {};
        FakeTexture.prototype.setWraps = function(uWrap, vWrap) {};
        FakeTexture.prototype.dispose = function() {};
        return FakeTexture;
      })(Texture);
      spine.FakeTexture = FakeTexture;
    })(spine || (spine = {}));
    var spine;
    (function(spine) {
      var TextureAtlas = (function() {
        function TextureAtlas(atlasText, textureLoader) {
          this.pages = new Array();
          this.regions = new Array();
          this.load(atlasText, textureLoader);
        }
        TextureAtlas.prototype.load = function(atlasText, textureLoader) {
          if (null == textureLoader) throw new Error("textureLoader cannot be null.");
          var reader = new TextureAtlasReader(atlasText);
          var tuple = new Array(4);
          var page = null;
          while (true) {
            var line = reader.readLine();
            if (null == line) break;
            line = line.trim();
            if (0 == line.length) page = null; else if (page) {
              var region = new TextureAtlasRegion();
              region.name = line;
              region.page = page;
              var rotateValue = reader.readValue();
              "true" == rotateValue.toLocaleLowerCase() ? region.degrees = 90 : "false" == rotateValue.toLocaleLowerCase() ? region.degrees = 0 : region.degrees = parseFloat(rotateValue);
              region.rotate = 90 == region.degrees;
              reader.readTuple(tuple);
              var x = parseInt(tuple[0]);
              var y = parseInt(tuple[1]);
              reader.readTuple(tuple);
              var width = parseInt(tuple[0]);
              var height = parseInt(tuple[1]);
              region.u = x / page.width;
              region.v = y / page.height;
              if (region.rotate) {
                region.u2 = (x + height) / page.width;
                region.v2 = (y + width) / page.height;
              } else {
                region.u2 = (x + width) / page.width;
                region.v2 = (y + height) / page.height;
              }
              region.x = x;
              region.y = y;
              region.width = Math.abs(width);
              region.height = Math.abs(height);
              4 == reader.readTuple(tuple) && 4 == reader.readTuple(tuple) && reader.readTuple(tuple);
              region.originalWidth = parseInt(tuple[0]);
              region.originalHeight = parseInt(tuple[1]);
              reader.readTuple(tuple);
              region.offsetX = parseInt(tuple[0]);
              region.offsetY = parseInt(tuple[1]);
              region.index = parseInt(reader.readValue());
              region.texture = page.texture;
              this.regions.push(region);
            } else {
              page = new TextureAtlasPage();
              page.name = line;
              if (2 == reader.readTuple(tuple)) {
                page.width = parseInt(tuple[0]);
                page.height = parseInt(tuple[1]);
                reader.readTuple(tuple);
              }
              reader.readTuple(tuple);
              page.minFilter = spine.Texture.filterFromString(tuple[0]);
              page.magFilter = spine.Texture.filterFromString(tuple[1]);
              var direction = reader.readValue();
              page.uWrap = spine.TextureWrap.ClampToEdge;
              page.vWrap = spine.TextureWrap.ClampToEdge;
              "x" == direction ? page.uWrap = spine.TextureWrap.Repeat : "y" == direction ? page.vWrap = spine.TextureWrap.Repeat : "xy" == direction && (page.uWrap = page.vWrap = spine.TextureWrap.Repeat);
              page.texture = textureLoader(line);
              page.texture.setFilters(page.minFilter, page.magFilter);
              page.texture.setWraps(page.uWrap, page.vWrap);
              page.width = page.texture.getImage().width;
              page.height = page.texture.getImage().height;
              this.pages.push(page);
            }
          }
        };
        TextureAtlas.prototype.findRegion = function(name) {
          for (var i = 0; i < this.regions.length; i++) if (this.regions[i].name == name) return this.regions[i];
          return null;
        };
        TextureAtlas.prototype.dispose = function() {
          for (var i = 0; i < this.pages.length; i++) this.pages[i].texture.dispose();
        };
        return TextureAtlas;
      })();
      spine.TextureAtlas = TextureAtlas;
      var TextureAtlasReader = (function() {
        function TextureAtlasReader(text) {
          this.index = 0;
          this.lines = text.split(/\r\n|\r|\n/);
        }
        TextureAtlasReader.prototype.readLine = function() {
          if (this.index >= this.lines.length) return null;
          return this.lines[this.index++];
        };
        TextureAtlasReader.prototype.readValue = function() {
          var line = this.readLine();
          var colon = line.indexOf(":");
          if (-1 == colon) throw new Error("Invalid line: " + line);
          return line.substring(colon + 1).trim();
        };
        TextureAtlasReader.prototype.readTuple = function(tuple) {
          var line = this.readLine();
          var colon = line.indexOf(":");
          if (-1 == colon) throw new Error("Invalid line: " + line);
          var i = 0, lastMatch = colon + 1;
          for (;i < 3; i++) {
            var comma = line.indexOf(",", lastMatch);
            if (-1 == comma) break;
            tuple[i] = line.substr(lastMatch, comma - lastMatch).trim();
            lastMatch = comma + 1;
          }
          tuple[i] = line.substring(lastMatch).trim();
          return i + 1;
        };
        return TextureAtlasReader;
      })();
      var TextureAtlasPage = (function() {
        function TextureAtlasPage() {}
        return TextureAtlasPage;
      })();
      spine.TextureAtlasPage = TextureAtlasPage;
      var TextureAtlasRegion = (function(_super) {
        __extends(TextureAtlasRegion, _super);
        function TextureAtlasRegion() {
          return null !== _super && _super.apply(this, arguments) || this;
        }
        return TextureAtlasRegion;
      })(spine.TextureRegion);
      spine.TextureAtlasRegion = TextureAtlasRegion;
    })(spine || (spine = {}));
    var spine;
    (function(spine) {
      var TransformConstraint = (function() {
        function TransformConstraint(data, skeleton) {
          this.rotateMix = 0;
          this.translateMix = 0;
          this.scaleMix = 0;
          this.shearMix = 0;
          this.temp = new spine.Vector2();
          this.active = false;
          if (null == data) throw new Error("data cannot be null.");
          if (null == skeleton) throw new Error("skeleton cannot be null.");
          this.data = data;
          this.rotateMix = data.rotateMix;
          this.translateMix = data.translateMix;
          this.scaleMix = data.scaleMix;
          this.shearMix = data.shearMix;
          this.bones = new Array();
          for (var i = 0; i < data.bones.length; i++) this.bones.push(skeleton.findBone(data.bones[i].name));
          this.target = skeleton.findBone(data.target.name);
        }
        TransformConstraint.prototype.isActive = function() {
          return this.active;
        };
        TransformConstraint.prototype.apply = function() {
          this.update();
        };
        TransformConstraint.prototype.update = function() {
          this.data.local ? this.data.relative ? this.applyRelativeLocal() : this.applyAbsoluteLocal() : this.data.relative ? this.applyRelativeWorld() : this.applyAbsoluteWorld();
        };
        TransformConstraint.prototype.applyAbsoluteWorld = function() {
          var rotateMix = this.rotateMix, translateMix = this.translateMix, scaleMix = this.scaleMix, shearMix = this.shearMix;
          var target = this.target;
          var ta = target.a, tb = target.b, tc = target.c, td = target.d;
          var degRadReflect = ta * td - tb * tc > 0 ? spine.MathUtils.degRad : -spine.MathUtils.degRad;
          var offsetRotation = this.data.offsetRotation * degRadReflect;
          var offsetShearY = this.data.offsetShearY * degRadReflect;
          var bones = this.bones;
          for (var i = 0, n = bones.length; i < n; i++) {
            var bone = bones[i];
            var modified = false;
            if (0 != rotateMix) {
              var a = bone.a, b = bone.b, c = bone.c, d = bone.d;
              var r = Math.atan2(tc, ta) - Math.atan2(c, a) + offsetRotation;
              r > spine.MathUtils.PI ? r -= spine.MathUtils.PI2 : r < -spine.MathUtils.PI && (r += spine.MathUtils.PI2);
              r *= rotateMix;
              var cos = Math.cos(r), sin = Math.sin(r);
              bone.a = cos * a - sin * c;
              bone.b = cos * b - sin * d;
              bone.c = sin * a + cos * c;
              bone.d = sin * b + cos * d;
              modified = true;
            }
            if (0 != translateMix) {
              var temp = this.temp;
              target.localToWorld(temp.set(this.data.offsetX, this.data.offsetY));
              bone.worldX += (temp.x - bone.worldX) * translateMix;
              bone.worldY += (temp.y - bone.worldY) * translateMix;
              modified = true;
            }
            if (scaleMix > 0) {
              var s = Math.sqrt(bone.a * bone.a + bone.c * bone.c);
              var ts = Math.sqrt(ta * ta + tc * tc);
              s > 1e-5 && (s = (s + (ts - s + this.data.offsetScaleX) * scaleMix) / s);
              bone.a *= s;
              bone.c *= s;
              s = Math.sqrt(bone.b * bone.b + bone.d * bone.d);
              ts = Math.sqrt(tb * tb + td * td);
              s > 1e-5 && (s = (s + (ts - s + this.data.offsetScaleY) * scaleMix) / s);
              bone.b *= s;
              bone.d *= s;
              modified = true;
            }
            if (shearMix > 0) {
              var b = bone.b, d = bone.d;
              var by = Math.atan2(d, b);
              var r = Math.atan2(td, tb) - Math.atan2(tc, ta) - (by - Math.atan2(bone.c, bone.a));
              r > spine.MathUtils.PI ? r -= spine.MathUtils.PI2 : r < -spine.MathUtils.PI && (r += spine.MathUtils.PI2);
              r = by + (r + offsetShearY) * shearMix;
              var s = Math.sqrt(b * b + d * d);
              bone.b = Math.cos(r) * s;
              bone.d = Math.sin(r) * s;
              modified = true;
            }
            modified && (bone.appliedValid = false);
          }
        };
        TransformConstraint.prototype.applyRelativeWorld = function() {
          var rotateMix = this.rotateMix, translateMix = this.translateMix, scaleMix = this.scaleMix, shearMix = this.shearMix;
          var target = this.target;
          var ta = target.a, tb = target.b, tc = target.c, td = target.d;
          var degRadReflect = ta * td - tb * tc > 0 ? spine.MathUtils.degRad : -spine.MathUtils.degRad;
          var offsetRotation = this.data.offsetRotation * degRadReflect, offsetShearY = this.data.offsetShearY * degRadReflect;
          var bones = this.bones;
          for (var i = 0, n = bones.length; i < n; i++) {
            var bone = bones[i];
            var modified = false;
            if (0 != rotateMix) {
              var a = bone.a, b = bone.b, c = bone.c, d = bone.d;
              var r = Math.atan2(tc, ta) + offsetRotation;
              r > spine.MathUtils.PI ? r -= spine.MathUtils.PI2 : r < -spine.MathUtils.PI && (r += spine.MathUtils.PI2);
              r *= rotateMix;
              var cos = Math.cos(r), sin = Math.sin(r);
              bone.a = cos * a - sin * c;
              bone.b = cos * b - sin * d;
              bone.c = sin * a + cos * c;
              bone.d = sin * b + cos * d;
              modified = true;
            }
            if (0 != translateMix) {
              var temp = this.temp;
              target.localToWorld(temp.set(this.data.offsetX, this.data.offsetY));
              bone.worldX += temp.x * translateMix;
              bone.worldY += temp.y * translateMix;
              modified = true;
            }
            if (scaleMix > 0) {
              var s = (Math.sqrt(ta * ta + tc * tc) - 1 + this.data.offsetScaleX) * scaleMix + 1;
              bone.a *= s;
              bone.c *= s;
              s = (Math.sqrt(tb * tb + td * td) - 1 + this.data.offsetScaleY) * scaleMix + 1;
              bone.b *= s;
              bone.d *= s;
              modified = true;
            }
            if (shearMix > 0) {
              var r = Math.atan2(td, tb) - Math.atan2(tc, ta);
              r > spine.MathUtils.PI ? r -= spine.MathUtils.PI2 : r < -spine.MathUtils.PI && (r += spine.MathUtils.PI2);
              var b = bone.b, d = bone.d;
              r = Math.atan2(d, b) + (r - spine.MathUtils.PI / 2 + offsetShearY) * shearMix;
              var s = Math.sqrt(b * b + d * d);
              bone.b = Math.cos(r) * s;
              bone.d = Math.sin(r) * s;
              modified = true;
            }
            modified && (bone.appliedValid = false);
          }
        };
        TransformConstraint.prototype.applyAbsoluteLocal = function() {
          var rotateMix = this.rotateMix, translateMix = this.translateMix, scaleMix = this.scaleMix, shearMix = this.shearMix;
          var target = this.target;
          target.appliedValid || target.updateAppliedTransform();
          var bones = this.bones;
          for (var i = 0, n = bones.length; i < n; i++) {
            var bone = bones[i];
            bone.appliedValid || bone.updateAppliedTransform();
            var rotation = bone.arotation;
            if (0 != rotateMix) {
              var r = target.arotation - rotation + this.data.offsetRotation;
              r -= 360 * (16384 - (16384.499999999996 - r / 360 | 0));
              rotation += r * rotateMix;
            }
            var x = bone.ax, y = bone.ay;
            if (0 != translateMix) {
              x += (target.ax - x + this.data.offsetX) * translateMix;
              y += (target.ay - y + this.data.offsetY) * translateMix;
            }
            var scaleX = bone.ascaleX, scaleY = bone.ascaleY;
            if (0 != scaleMix) {
              scaleX > 1e-5 && (scaleX = (scaleX + (target.ascaleX - scaleX + this.data.offsetScaleX) * scaleMix) / scaleX);
              scaleY > 1e-5 && (scaleY = (scaleY + (target.ascaleY - scaleY + this.data.offsetScaleY) * scaleMix) / scaleY);
            }
            var shearY = bone.ashearY;
            if (0 != shearMix) {
              var r = target.ashearY - shearY + this.data.offsetShearY;
              r -= 360 * (16384 - (16384.499999999996 - r / 360 | 0));
              bone.shearY += r * shearMix;
            }
            bone.updateWorldTransformWith(x, y, rotation, scaleX, scaleY, bone.ashearX, shearY);
          }
        };
        TransformConstraint.prototype.applyRelativeLocal = function() {
          var rotateMix = this.rotateMix, translateMix = this.translateMix, scaleMix = this.scaleMix, shearMix = this.shearMix;
          var target = this.target;
          target.appliedValid || target.updateAppliedTransform();
          var bones = this.bones;
          for (var i = 0, n = bones.length; i < n; i++) {
            var bone = bones[i];
            bone.appliedValid || bone.updateAppliedTransform();
            var rotation = bone.arotation;
            0 != rotateMix && (rotation += (target.arotation + this.data.offsetRotation) * rotateMix);
            var x = bone.ax, y = bone.ay;
            if (0 != translateMix) {
              x += (target.ax + this.data.offsetX) * translateMix;
              y += (target.ay + this.data.offsetY) * translateMix;
            }
            var scaleX = bone.ascaleX, scaleY = bone.ascaleY;
            if (0 != scaleMix) {
              scaleX > 1e-5 && (scaleX *= (target.ascaleX - 1 + this.data.offsetScaleX) * scaleMix + 1);
              scaleY > 1e-5 && (scaleY *= (target.ascaleY - 1 + this.data.offsetScaleY) * scaleMix + 1);
            }
            var shearY = bone.ashearY;
            0 != shearMix && (shearY += (target.ashearY + this.data.offsetShearY) * shearMix);
            bone.updateWorldTransformWith(x, y, rotation, scaleX, scaleY, bone.ashearX, shearY);
          }
        };
        return TransformConstraint;
      })();
      spine.TransformConstraint = TransformConstraint;
    })(spine || (spine = {}));
    var spine;
    (function(spine) {
      var TransformConstraintData = (function(_super) {
        __extends(TransformConstraintData, _super);
        function TransformConstraintData(name) {
          var _this = _super.call(this, name, 0, false) || this;
          _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 = false;
          _this.local = false;
          return _this;
        }
        return TransformConstraintData;
      })(spine.ConstraintData);
      spine.TransformConstraintData = TransformConstraintData;
    })(spine || (spine = {}));
    var spine;
    (function(spine) {
      var Triangulator = (function() {
        function Triangulator() {
          this.convexPolygons = new Array();
          this.convexPolygonsIndices = new Array();
          this.indicesArray = new Array();
          this.isConcaveArray = new Array();
          this.triangles = new Array();
          this.polygonPool = new spine.Pool(function() {
            return new Array();
          });
          this.polygonIndicesPool = new spine.Pool(function() {
            return new Array();
          });
        }
        Triangulator.prototype.triangulate = function(verticesArray) {
          var vertices = verticesArray;
          var vertexCount = verticesArray.length >> 1;
          var indices = this.indicesArray;
          indices.length = 0;
          for (var i = 0; i < vertexCount; i++) indices[i] = i;
          var isConcave = this.isConcaveArray;
          isConcave.length = 0;
          for (var i = 0, n = vertexCount; i < n; ++i) isConcave[i] = Triangulator.isConcave(i, vertexCount, vertices, indices);
          var triangles = this.triangles;
          triangles.length = 0;
          while (vertexCount > 3) {
            var previous = vertexCount - 1, i = 0, next = 1;
            while (true) {
              outer: if (!isConcave[i]) {
                var p1 = indices[previous] << 1, p2 = indices[i] << 1, p3 = indices[next] << 1;
                var p1x = vertices[p1], p1y = vertices[p1 + 1];
                var p2x = vertices[p2], p2y = vertices[p2 + 1];
                var p3x = vertices[p3], p3y = vertices[p3 + 1];
                for (var ii = (next + 1) % vertexCount; ii != previous; ii = (ii + 1) % vertexCount) {
                  if (!isConcave[ii]) continue;
                  var v = indices[ii] << 1;
                  var vx = vertices[v], vy = vertices[v + 1];
                  if (Triangulator.positiveArea(p3x, p3y, p1x, p1y, vx, vy) && Triangulator.positiveArea(p1x, p1y, p2x, p2y, vx, vy) && Triangulator.positiveArea(p2x, p2y, p3x, p3y, vx, vy)) break outer;
                }
                break;
              }
              if (0 == next) {
                do {
                  if (!isConcave[i]) break;
                  i--;
                } while (i > 0);
                break;
              }
              previous = i;
              i = next;
              next = (next + 1) % vertexCount;
            }
            triangles.push(indices[(vertexCount + i - 1) % vertexCount]);
            triangles.push(indices[i]);
            triangles.push(indices[(i + 1) % vertexCount]);
            indices.splice(i, 1);
            isConcave.splice(i, 1);
            vertexCount--;
            var previousIndex = (vertexCount + i - 1) % vertexCount;
            var nextIndex = i == vertexCount ? 0 : i;
            isConcave[previousIndex] = Triangulator.isConcave(previousIndex, vertexCount, vertices, indices);
            isConcave[nextIndex] = Triangulator.isConcave(nextIndex, vertexCount, vertices, indices);
          }
          if (3 == vertexCount) {
            triangles.push(indices[2]);
            triangles.push(indices[0]);
            triangles.push(indices[1]);
          }
          return triangles;
        };
        Triangulator.prototype.decompose = function(verticesArray, triangles) {
          var vertices = verticesArray;
          var convexPolygons = this.convexPolygons;
          this.polygonPool.freeAll(convexPolygons);
          convexPolygons.length = 0;
          var convexPolygonsIndices = this.convexPolygonsIndices;
          this.polygonIndicesPool.freeAll(convexPolygonsIndices);
          convexPolygonsIndices.length = 0;
          var polygonIndices = this.polygonIndicesPool.obtain();
          polygonIndices.length = 0;
          var polygon = this.polygonPool.obtain();
          polygon.length = 0;
          var fanBaseIndex = -1, lastWinding = 0;
          for (var i = 0, n = triangles.length; i < n; i += 3) {
            var t1 = triangles[i] << 1, t2 = triangles[i + 1] << 1, t3 = triangles[i + 2] << 1;
            var x1 = vertices[t1], y1 = vertices[t1 + 1];
            var x2 = vertices[t2], y2 = vertices[t2 + 1];
            var x3 = vertices[t3], y3 = vertices[t3 + 1];
            var merged = false;
            if (fanBaseIndex == t1) {
              var o = polygon.length - 4;
              var winding1 = Triangulator.winding(polygon[o], polygon[o + 1], polygon[o + 2], polygon[o + 3], x3, y3);
              var winding2 = Triangulator.winding(x3, y3, polygon[0], polygon[1], polygon[2], polygon[3]);
              if (winding1 == lastWinding && winding2 == lastWinding) {
                polygon.push(x3);
                polygon.push(y3);
                polygonIndices.push(t3);
                merged = true;
              }
            }
            if (!merged) {
              if (polygon.length > 0) {
                convexPolygons.push(polygon);
                convexPolygonsIndices.push(polygonIndices);
              } else {
                this.polygonPool.free(polygon);
                this.polygonIndicesPool.free(polygonIndices);
              }
              polygon = this.polygonPool.obtain();
              polygon.length = 0;
              polygon.push(x1);
              polygon.push(y1);
              polygon.push(x2);
              polygon.push(y2);
              polygon.push(x3);
              polygon.push(y3);
              polygonIndices = this.polygonIndicesPool.obtain();
              polygonIndices.length = 0;
              polygonIndices.push(t1);
              polygonIndices.push(t2);
              polygonIndices.push(t3);
              lastWinding = Triangulator.winding(x1, y1, x2, y2, x3, y3);
              fanBaseIndex = t1;
            }
          }
          if (polygon.length > 0) {
            convexPolygons.push(polygon);
            convexPolygonsIndices.push(polygonIndices);
          }
          for (var i = 0, n = convexPolygons.length; i < n; i++) {
            polygonIndices = convexPolygonsIndices[i];
            if (0 == polygonIndices.length) continue;
            var firstIndex = polygonIndices[0];
            var lastIndex = polygonIndices[polygonIndices.length - 1];
            polygon = convexPolygons[i];
            var o = polygon.length - 4;
            var prevPrevX = polygon[o], prevPrevY = polygon[o + 1];
            var prevX = polygon[o + 2], prevY = polygon[o + 3];
            var firstX = polygon[0], firstY = polygon[1];
            var secondX = polygon[2], secondY = polygon[3];
            var winding = Triangulator.winding(prevPrevX, prevPrevY, prevX, prevY, firstX, firstY);
            for (var ii = 0; ii < n; ii++) {
              if (ii == i) continue;
              var otherIndices = convexPolygonsIndices[ii];
              if (3 != otherIndices.length) continue;
              var otherFirstIndex = otherIndices[0];
              var otherSecondIndex = otherIndices[1];
              var otherLastIndex = otherIndices[2];
              var otherPoly = convexPolygons[ii];
              var x3 = otherPoly[otherPoly.length - 2], y3 = otherPoly[otherPoly.length - 1];
              if (otherFirstIndex != firstIndex || otherSecondIndex != lastIndex) continue;
              var winding1 = Triangulator.winding(prevPrevX, prevPrevY, prevX, prevY, x3, y3);
              var winding2 = Triangulator.winding(x3, y3, firstX, firstY, secondX, secondY);
              if (winding1 == winding && winding2 == winding) {
                otherPoly.length = 0;
                otherIndices.length = 0;
                polygon.push(x3);
                polygon.push(y3);
                polygonIndices.push(otherLastIndex);
                prevPrevX = prevX;
                prevPrevY = prevY;
                prevX = x3;
                prevY = y3;
                ii = 0;
              }
            }
          }
          for (var i = convexPolygons.length - 1; i >= 0; i--) {
            polygon = convexPolygons[i];
            if (0 == polygon.length) {
              convexPolygons.splice(i, 1);
              this.polygonPool.free(polygon);
              polygonIndices = convexPolygonsIndices[i];
              convexPolygonsIndices.splice(i, 1);
              this.polygonIndicesPool.free(polygonIndices);
            }
          }
          return convexPolygons;
        };
        Triangulator.isConcave = function(index, vertexCount, vertices, indices) {
          var previous = indices[(vertexCount + index - 1) % vertexCount] << 1;
          var current = indices[index] << 1;
          var next = indices[(index + 1) % vertexCount] << 1;
          return !this.positiveArea(vertices[previous], vertices[previous + 1], vertices[current], vertices[current + 1], vertices[next], vertices[next + 1]);
        };
        Triangulator.positiveArea = function(p1x, p1y, p2x, p2y, p3x, p3y) {
          return p1x * (p3y - p2y) + p2x * (p1y - p3y) + p3x * (p2y - p1y) >= 0;
        };
        Triangulator.winding = function(p1x, p1y, p2x, p2y, p3x, p3y) {
          var px = p2x - p1x, py = p2y - p1y;
          return p3x * py - p3y * px + px * p1y - p1x * py >= 0 ? 1 : -1;
        };
        return Triangulator;
      })();
      spine.Triangulator = Triangulator;
    })(spine || (spine = {}));
    var spine;
    (function(spine) {
      var IntSet = (function() {
        function IntSet() {
          this.array = new Array();
        }
        IntSet.prototype.add = function(value) {
          var contains = this.contains(value);
          this.array[0 | value] = 0 | value;
          return !contains;
        };
        IntSet.prototype.contains = function(value) {
          return void 0 != this.array[0 | value];
        };
        IntSet.prototype.remove = function(value) {
          this.array[0 | value] = void 0;
        };
        IntSet.prototype.clear = function() {
          this.array.length = 0;
        };
        return IntSet;
      })();
      spine.IntSet = IntSet;
      var Color = (function() {
        function Color(r, g, b, a) {
          void 0 === r && (r = 0);
          void 0 === g && (g = 0);
          void 0 === b && (b = 0);
          void 0 === a && (a = 0);
          this.r = r;
          this.g = g;
          this.b = b;
          this.a = a;
        }
        Color.prototype.set = function(r, g, b, a) {
          this.r = r;
          this.g = g;
          this.b = b;
          this.a = a;
          this.clamp();
          return this;
        };
        Color.prototype.setFromColor = function(c) {
          this.r = c.r;
          this.g = c.g;
          this.b = c.b;
          this.a = c.a;
          return this;
        };
        Color.prototype.setFromString = function(hex) {
          hex = "#" == hex.charAt(0) ? hex.substr(1) : hex;
          this.r = parseInt(hex.substr(0, 2), 16) / 255;
          this.g = parseInt(hex.substr(2, 2), 16) / 255;
          this.b = parseInt(hex.substr(4, 2), 16) / 255;
          this.a = (8 != hex.length ? 255 : parseInt(hex.substr(6, 2), 16)) / 255;
          return this;
        };
        Color.prototype.add = function(r, g, b, a) {
          this.r += r;
          this.g += g;
          this.b += b;
          this.a += a;
          this.clamp();
          return this;
        };
        Color.prototype.clamp = function() {
          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);
          return this;
        };
        Color.rgba8888ToColor = function(color, value) {
          color.r = ((4278190080 & value) >>> 24) / 255;
          color.g = ((16711680 & value) >>> 16) / 255;
          color.b = ((65280 & value) >>> 8) / 255;
          color.a = (255 & value) / 255;
        };
        Color.rgb888ToColor = function(color, value) {
          color.r = ((16711680 & value) >>> 16) / 255;
          color.g = ((65280 & value) >>> 8) / 255;
          color.b = (255 & value) / 255;
        };
        Color.WHITE = new Color(1, 1, 1, 1);
        Color.RED = new Color(1, 0, 0, 1);
        Color.GREEN = new Color(0, 1, 0, 1);
        Color.BLUE = new Color(0, 0, 1, 1);
        Color.MAGENTA = new Color(1, 0, 1, 1);
        return Color;
      })();
      spine.Color = Color;
      var MathUtils = (function() {
        function MathUtils() {}
        MathUtils.clamp = function(value, min, max) {
          if (value < min) return min;
          if (value > max) return max;
          return value;
        };
        MathUtils.cosDeg = function(degrees) {
          return Math.cos(degrees * MathUtils.degRad);
        };
        MathUtils.sinDeg = function(degrees) {
          return Math.sin(degrees * MathUtils.degRad);
        };
        MathUtils.signum = function(value) {
          return value > 0 ? 1 : value < 0 ? -1 : 0;
        };
        MathUtils.toInt = function(x) {
          return x > 0 ? Math.floor(x) : Math.ceil(x);
        };
        MathUtils.cbrt = function(x) {
          var y = Math.pow(Math.abs(x), 1 / 3);
          return x < 0 ? -y : y;
        };
        MathUtils.randomTriangular = function(min, max) {
          return MathUtils.randomTriangularWith(min, max, .5 * (min + max));
        };
        MathUtils.randomTriangularWith = function(min, max, mode) {
          var u = Math.random();
          var d = max - min;
          if (u <= (mode - min) / d) return min + Math.sqrt(u * d * (mode - min));
          return max - Math.sqrt((1 - u) * d * (max - mode));
        };
        MathUtils.PI = 3.1415927;
        MathUtils.PI2 = 2 * MathUtils.PI;
        MathUtils.radiansToDegrees = 180 / MathUtils.PI;
        MathUtils.radDeg = MathUtils.radiansToDegrees;
        MathUtils.degreesToRadians = MathUtils.PI / 180;
        MathUtils.degRad = MathUtils.degreesToRadians;
        return MathUtils;
      })();
      spine.MathUtils = MathUtils;
      var Interpolation = (function() {
        function Interpolation() {}
        Interpolation.prototype.apply = function(start, end, a) {
          return start + (end - start) * this.applyInternal(a);
        };
        return Interpolation;
      })();
      spine.Interpolation = Interpolation;
      var Pow = (function(_super) {
        __extends(Pow, _super);
        function Pow(power) {
          var _this = _super.call(this) || this;
          _this.power = 2;
          _this.power = power;
          return _this;
        }
        Pow.prototype.applyInternal = function(a) {
          if (a <= .5) return Math.pow(2 * a, this.power) / 2;
          return Math.pow(2 * (a - 1), this.power) / (this.power % 2 == 0 ? -2 : 2) + 1;
        };
        return Pow;
      })(Interpolation);
      spine.Pow = Pow;
      var PowOut = (function(_super) {
        __extends(PowOut, _super);
        function PowOut(power) {
          return _super.call(this, power) || this;
        }
        PowOut.prototype.applyInternal = function(a) {
          return Math.pow(a - 1, this.power) * (this.power % 2 == 0 ? -1 : 1) + 1;
        };
        return PowOut;
      })(Pow);
      spine.PowOut = PowOut;
      var Utils = (function() {
        function Utils() {}
        Utils.arrayCopy = function(source, sourceStart, dest, destStart, numElements) {
          for (var i = sourceStart, j = destStart; i < sourceStart + numElements; i++, j++) dest[j] = source[i];
        };
        Utils.setArraySize = function(array, size, value) {
          void 0 === value && (value = 0);
          var oldSize = array.length;
          if (oldSize == size) return array;
          array.length = size;
          if (oldSize < size) for (var i = oldSize; i < size; i++) array[i] = value;
          return array;
        };
        Utils.ensureArrayCapacity = function(array, size, value) {
          void 0 === value && (value = 0);
          if (array.length >= size) return array;
          return Utils.setArraySize(array, size, value);
        };
        Utils.newArray = function(size, defaultValue) {
          var array = new Array(size);
          for (var i = 0; i < size; i++) array[i] = defaultValue;
          return array;
        };
        Utils.newFloatArray = function(size) {
          if (Utils.SUPPORTS_TYPED_ARRAYS) return new Float32Array(size);
          var array = new Array(size);
          for (var i = 0; i < array.length; i++) array[i] = 0;
          return array;
        };
        Utils.newShortArray = function(size) {
          if (Utils.SUPPORTS_TYPED_ARRAYS) return new Int16Array(size);
          var array = new Array(size);
          for (var i = 0; i < array.length; i++) array[i] = 0;
          return array;
        };
        Utils.toFloatArray = function(array) {
          return Utils.SUPPORTS_TYPED_ARRAYS ? new Float32Array(array) : array;
        };
        Utils.toSinglePrecision = function(value) {
          return Utils.SUPPORTS_TYPED_ARRAYS ? Math.fround(value) : value;
        };
        Utils.webkit602BugfixHelper = function(alpha, blend) {};
        Utils.contains = function(array, element, identity) {
          void 0 === identity && (identity = true);
          for (var i = 0; i < array.length; i++) if (array[i] == element) return true;
          return false;
        };
        Utils.SUPPORTS_TYPED_ARRAYS = "undefined" !== typeof Float32Array;
        return Utils;
      })();
      spine.Utils = Utils;
      var DebugUtils = (function() {
        function DebugUtils() {}
        DebugUtils.logBones = function(skeleton) {
          for (var i = 0; i < skeleton.bones.length; i++) {
            var bone = skeleton.bones[i];
            console.log(bone.data.name + ", " + bone.a + ", " + bone.b + ", " + bone.c + ", " + bone.d + ", " + bone.worldX + ", " + bone.worldY);
          }
        };
        return DebugUtils;
      })();
      spine.DebugUtils = DebugUtils;
      var Pool = (function() {
        function Pool(instantiator) {
          this.items = new Array();
          this.instantiator = instantiator;
        }
        Pool.prototype.obtain = function() {
          return this.items.length > 0 ? this.items.pop() : this.instantiator();
        };
        Pool.prototype.free = function(item) {
          item.reset && item.reset();
          this.items.push(item);
        };
        Pool.prototype.freeAll = function(items) {
          for (var i = 0; i < items.length; i++) {
            items[i].reset && items[i].reset();
            this.items[i] = items[i];
          }
        };
        Pool.prototype.clear = function() {
          this.items.length = 0;
        };
        return Pool;
      })();
      spine.Pool = Pool;
      var Vector2 = (function() {
        function Vector2(x, y) {
          void 0 === x && (x = 0);
          void 0 === y && (y = 0);
          this.x = x;
          this.y = y;
        }
        Vector2.prototype.set = function(x, y) {
          this.x = x;
          this.y = y;
          return this;
        };
        Vector2.prototype.length = function() {
          var x = this.x;
          var y = this.y;
          return Math.sqrt(x * x + y * y);
        };
        Vector2.prototype.normalize = function() {
          var len = this.length();
          if (0 != len) {
            this.x /= len;
            this.y /= len;
          }
          return this;
        };
        return Vector2;
      })();
      spine.Vector2 = Vector2;
      var TimeKeeper = (function() {
        function TimeKeeper() {
          this.maxDelta = .064;
          this.framesPerSecond = 0;
          this.delta = 0;
          this.totalTime = 0;
          this.lastTime = Date.now() / 1e3;
          this.frameCount = 0;
          this.frameTime = 0;
        }
        TimeKeeper.prototype.update = function() {
          var now = Date.now() / 1e3;
          this.delta = now - this.lastTime;
          this.frameTime += this.delta;
          this.totalTime += this.delta;
          this.delta > this.maxDelta && (this.delta = this.maxDelta);
          this.lastTime = now;
          this.frameCount++;
          if (this.frameTime > 1) {
            this.framesPerSecond = this.frameCount / this.frameTime;
            this.frameTime = 0;
            this.frameCount = 0;
          }
        };
        return TimeKeeper;
      })();
      spine.TimeKeeper = TimeKeeper;
      var WindowedMean = (function() {
        function WindowedMean(windowSize) {
          void 0 === windowSize && (windowSize = 32);
          this.addedValues = 0;
          this.lastValue = 0;
          this.mean = 0;
          this.dirty = true;
          this.values = new Array(windowSize);
        }
        WindowedMean.prototype.hasEnoughData = function() {
          return this.addedValues >= this.values.length;
        };
        WindowedMean.prototype.addValue = function(value) {
          this.addedValues < this.values.length && this.addedValues++;
          this.values[this.lastValue++] = value;
          this.lastValue > this.values.length - 1 && (this.lastValue = 0);
          this.dirty = true;
        };
        WindowedMean.prototype.getMean = function() {
          if (this.hasEnoughData()) {
            if (this.dirty) {
              var mean = 0;
              for (var i = 0; i < this.values.length; i++) mean += this.values[i];
              this.mean = mean / this.values.length;
              this.dirty = false;
            }
            return this.mean;
          }
          return 0;
        };
        return WindowedMean;
      })();
      spine.WindowedMean = WindowedMean;
    })(spine || (spine = {}));
    (function() {
      Math.fround || (Math.fround = (function(array) {
        return function(x) {
          return array[0] = x, array[0];
        };
      })(new Float32Array(1)));
    })();
    var spine;
    (function(spine) {
      var Attachment = (function() {
        function Attachment(name) {
          if (null == name) throw new Error("name cannot be null.");
          this.name = name;
        }
        return Attachment;
      })();
      spine.Attachment = Attachment;
      var VertexAttachment = (function(_super) {
        __extends(VertexAttachment, _super);
        function VertexAttachment(name) {
          var _this = _super.call(this, name) || this;
          _this.id = (65535 & VertexAttachment.nextID++) << 11;
          _this.worldVerticesLength = 0;
          _this.deformAttachment = _this;
          return _this;
        }
        VertexAttachment.prototype.computeWorldVertices = function(slot, start, count, worldVertices, offset, stride) {
          count = offset + (count >> 1) * stride;
          var skeleton = slot.bone.skeleton;
          var deformArray = slot.deform;
          var vertices = this.vertices;
          var bones = this.bones;
          if (null == bones) {
            deformArray.length > 0 && (vertices = deformArray);
            var bone = slot.bone;
            var x = bone.worldX;
            var y = bone.worldY;
            var a = bone.a, b = bone.b, c = bone.c, d = bone.d;
            for (var v_1 = start, w = offset; w < count; v_1 += 2, w += stride) {
              var vx = vertices[v_1], vy = vertices[v_1 + 1];
              worldVertices[w] = vx * a + vy * b + x;
              worldVertices[w + 1] = vx * c + vy * d + y;
            }
            return;
          }
          var v = 0, skip = 0;
          for (var i = 0; i < start; i += 2) {
            var n = bones[v];
            v += n + 1;
            skip += n;
          }
          var skeletonBones = skeleton.bones;
          if (0 == deformArray.length) for (var w = offset, b = 3 * skip; w < count; w += stride) {
            var wx = 0, wy = 0;
            var n = bones[v++];
            n += v;
            for (;v < n; v++, b += 3) {
              var bone = skeletonBones[bones[v]];
              var vx = vertices[b], vy = vertices[b + 1], weight = vertices[b + 2];
              wx += (vx * bone.a + vy * bone.b + bone.worldX) * weight;
              wy += (vx * bone.c + vy * bone.d + bone.worldY) * weight;
            }
            worldVertices[w] = wx;
            worldVertices[w + 1] = wy;
          } else {
            var deform = deformArray;
            for (var w = offset, b = 3 * skip, f = skip << 1; w < count; w += stride) {
              var wx = 0, wy = 0;
              var n = bones[v++];
              n += v;
              for (;v < n; v++, b += 3, f += 2) {
                var bone = skeletonBones[bones[v]];
                var vx = vertices[b] + deform[f], vy = vertices[b + 1] + deform[f + 1], weight = vertices[b + 2];
                wx += (vx * bone.a + vy * bone.b + bone.worldX) * weight;
                wy += (vx * bone.c + vy * bone.d + bone.worldY) * weight;
              }
              worldVertices[w] = wx;
              worldVertices[w + 1] = wy;
            }
          }
        };
        VertexAttachment.prototype.copyTo = function(attachment) {
          if (null != this.bones) {
            attachment.bones = new Array(this.bones.length);
            spine.Utils.arrayCopy(this.bones, 0, attachment.bones, 0, this.bones.length);
          } else attachment.bones = null;
          if (null != this.vertices) {
            attachment.vertices = spine.Utils.newFloatArray(this.vertices.length);
            spine.Utils.arrayCopy(this.vertices, 0, attachment.vertices, 0, this.vertices.length);
          } else attachment.vertices = null;
          attachment.worldVerticesLength = this.worldVerticesLength;
          attachment.deformAttachment = this.deformAttachment;
        };
        VertexAttachment.nextID = 0;
        return VertexAttachment;
      })(Attachment);
      spine.VertexAttachment = VertexAttachment;
    })(spine || (spine = {}));
    var spine;
    (function(spine) {
      var AttachmentType;
      (function(AttachmentType) {
        AttachmentType[AttachmentType["Region"] = 0] = "Region";
        AttachmentType[AttachmentType["BoundingBox"] = 1] = "BoundingBox";
        AttachmentType[AttachmentType["Mesh"] = 2] = "Mesh";
        AttachmentType[AttachmentType["LinkedMesh"] = 3] = "LinkedMesh";
        AttachmentType[AttachmentType["Path"] = 4] = "Path";
        AttachmentType[AttachmentType["Point"] = 5] = "Point";
        AttachmentType[AttachmentType["Clipping"] = 6] = "Clipping";
      })(AttachmentType = spine.AttachmentType || (spine.AttachmentType = {}));
    })(spine || (spine = {}));
    var spine;
    (function(spine) {
      var BoundingBoxAttachment = (function(_super) {
        __extends(BoundingBoxAttachment, _super);
        function BoundingBoxAttachment(name) {
          var _this = _super.call(this, name) || this;
          _this.color = new spine.Color(1, 1, 1, 1);
          return _this;
        }
        BoundingBoxAttachment.prototype.copy = function() {
          var copy = new BoundingBoxAttachment(name);
          this.copyTo(copy);
          copy.color.setFromColor(this.color);
          return copy;
        };
        return BoundingBoxAttachment;
      })(spine.VertexAttachment);
      spine.BoundingBoxAttachment = BoundingBoxAttachment;
    })(spine || (spine = {}));
    var spine;
    (function(spine) {
      var ClippingAttachment = (function(_super) {
        __extends(ClippingAttachment, _super);
        function ClippingAttachment(name) {
          var _this = _super.call(this, name) || this;
          _this.color = new spine.Color(.2275, .2275, .8078, 1);
          return _this;
        }
        ClippingAttachment.prototype.copy = function() {
          var copy = new ClippingAttachment(name);
          this.copyTo(copy);
          copy.endSlot = this.endSlot;
          copy.color.setFromColor(this.color);
          return copy;
        };
        return ClippingAttachment;
      })(spine.VertexAttachment);
      spine.ClippingAttachment = ClippingAttachment;
    })(spine || (spine = {}));
    var spine;
    (function(spine) {
      var MeshAttachment = (function(_super) {
        __extends(MeshAttachment, _super);
        function MeshAttachment(name) {
          var _this = _super.call(this, name) || this;
          _this.color = new spine.Color(1, 1, 1, 1);
          _this.tempColor = new spine.Color(0, 0, 0, 0);
          return _this;
        }
        MeshAttachment.prototype.updateUVs = function() {
          var regionUVs = this.regionUVs;
          null != this.uvs && this.uvs.length == regionUVs.length || (this.uvs = spine.Utils.newFloatArray(regionUVs.length));
          var uvs = this.uvs;
          var n = this.uvs.length;
          var u = this.region.u, v = this.region.v, width = 0, height = 0;
          if (this.region instanceof spine.TextureAtlasRegion) {
            var region = this.region;
            var textureWidth = region.texture.getImage().width, textureHeight = region.texture.getImage().height;
            switch (region.degrees) {
             case 90:
              u -= (region.originalHeight - region.offsetY - region.height) / textureWidth;
              v -= (region.originalWidth - region.offsetX - region.width) / textureHeight;
              width = region.originalHeight / textureWidth;
              height = region.originalWidth / textureHeight;
              for (var i = 0; i < n; i += 2) {
                uvs[i] = u + regionUVs[i + 1] * width;
                uvs[i + 1] = v + (1 - regionUVs[i]) * height;
              }
              return;

             case 180:
              u -= (region.originalWidth - region.offsetX - region.width) / textureWidth;
              v -= region.offsetY / textureHeight;
              width = region.originalWidth / textureWidth;
              height = region.originalHeight / textureHeight;
              for (var i = 0; i < n; i += 2) {
                uvs[i] = u + (1 - regionUVs[i]) * width;
                uvs[i + 1] = v + (1 - regionUVs[i + 1]) * height;
              }
              return;

             case 270:
              u -= region.offsetY / textureWidth;
              v -= region.offsetX / textureHeight;
              width = region.originalHeight / textureWidth;
              height = region.originalWidth / textureHeight;
              for (var i = 0; i < n; i += 2) {
                uvs[i] = u + (1 - regionUVs[i + 1]) * width;
                uvs[i + 1] = v + regionUVs[i] * height;
              }
              return;
            }
            u -= region.offsetX / textureWidth;
            v -= (region.originalHeight - region.offsetY - region.height) / textureHeight;
            width = region.originalWidth / textureWidth;
            height = region.originalHeight / textureHeight;
          } else if (null == this.region) {
            u = v = 0;
            width = height = 1;
          } else {
            width = this.region.u2 - u;
            height = this.region.v2 - v;
          }
          for (var i = 0; i < n; i += 2) {
            uvs[i] = u + regionUVs[i] * width;
            uvs[i + 1] = v + regionUVs[i + 1] * height;
          }
        };
        MeshAttachment.prototype.getParentMesh = function() {
          return this.parentMesh;
        };
        MeshAttachment.prototype.setParentMesh = function(parentMesh) {
          this.parentMesh = parentMesh;
          if (null != parentMesh) {
            this.bones = parentMesh.bones;
            this.vertices = parentMesh.vertices;
            this.worldVerticesLength = parentMesh.worldVerticesLength;
            this.regionUVs = parentMesh.regionUVs;
            this.triangles = parentMesh.triangles;
            this.hullLength = parentMesh.hullLength;
            this.worldVerticesLength = parentMesh.worldVerticesLength;
          }
        };
        MeshAttachment.prototype.copy = function() {
          if (null != this.parentMesh) return this.newLinkedMesh();
          var copy = new MeshAttachment(this.name);
          copy.region = this.region;
          copy.path = this.path;
          copy.color.setFromColor(this.color);
          this.copyTo(copy);
          copy.regionUVs = new Array(this.regionUVs.length);
          spine.Utils.arrayCopy(this.regionUVs, 0, copy.regionUVs, 0, this.regionUVs.length);
          copy.uvs = new Array(this.uvs.length);
          spine.Utils.arrayCopy(this.uvs, 0, copy.uvs, 0, this.uvs.length);
          copy.triangles = new Array(this.triangles.length);
          spine.Utils.arrayCopy(this.triangles, 0, copy.triangles, 0, this.triangles.length);
          copy.hullLength = this.hullLength;
          if (null != this.edges) {
            copy.edges = new Array(this.edges.length);
            spine.Utils.arrayCopy(this.edges, 0, copy.edges, 0, this.edges.length);
          }
          copy.width = this.width;
          copy.height = this.height;
          return copy;
        };
        MeshAttachment.prototype.newLinkedMesh = function() {
          var copy = new MeshAttachment(this.name);
          copy.region = this.region;
          copy.path = this.path;
          copy.color.setFromColor(this.color);
          copy.deformAttachment = this.deformAttachment;
          copy.setParentMesh(null != this.parentMesh ? this.parentMesh : this);
          copy.updateUVs();
          return copy;
        };
        return MeshAttachment;
      })(spine.VertexAttachment);
      spine.MeshAttachment = MeshAttachment;
    })(spine || (spine = {}));
    var spine;
    (function(spine) {
      var PathAttachment = (function(_super) {
        __extends(PathAttachment, _super);
        function PathAttachment(name) {
          var _this = _super.call(this, name) || this;
          _this.closed = false;
          _this.constantSpeed = false;
          _this.color = new spine.Color(1, 1, 1, 1);
          return _this;
        }
        PathAttachment.prototype.copy = function() {
          var copy = new PathAttachment(name);
          this.copyTo(copy);
          copy.lengths = new Array(this.lengths.length);
          spine.Utils.arrayCopy(this.lengths, 0, copy.lengths, 0, this.lengths.length);
          copy.closed = closed;
          copy.constantSpeed = this.constantSpeed;
          copy.color.setFromColor(this.color);
          return copy;
        };
        return PathAttachment;
      })(spine.VertexAttachment);
      spine.PathAttachment = PathAttachment;
    })(spine || (spine = {}));
    var spine;
    (function(spine) {
      var PointAttachment = (function(_super) {
        __extends(PointAttachment, _super);
        function PointAttachment(name) {
          var _this = _super.call(this, name) || this;
          _this.color = new spine.Color(.38, .94, 0, 1);
          return _this;
        }
        PointAttachment.prototype.computeWorldPosition = function(bone, point) {
          point.x = this.x * bone.a + this.y * bone.b + bone.worldX;
          point.y = this.x * bone.c + this.y * bone.d + bone.worldY;
          return point;
        };
        PointAttachment.prototype.computeWorldRotation = function(bone) {
          var cos = spine.MathUtils.cosDeg(this.rotation), sin = spine.MathUtils.sinDeg(this.rotation);
          var x = cos * bone.a + sin * bone.b;
          var y = cos * bone.c + sin * bone.d;
          return Math.atan2(y, x) * spine.MathUtils.radDeg;
        };
        PointAttachment.prototype.copy = function() {
          var copy = new PointAttachment(name);
          copy.x = this.x;
          copy.y = this.y;
          copy.rotation = this.rotation;
          copy.color.setFromColor(this.color);
          return copy;
        };
        return PointAttachment;
      })(spine.VertexAttachment);
      spine.PointAttachment = PointAttachment;
    })(spine || (spine = {}));
    var spine;
    (function(spine) {
      var RegionAttachment = (function(_super) {
        __extends(RegionAttachment, _super);
        function RegionAttachment(name) {
          var _this = _super.call(this, name) || this;
          _this.x = 0;
          _this.y = 0;
          _this.scaleX = 1;
          _this.scaleY = 1;
          _this.rotation = 0;
          _this.width = 0;
          _this.height = 0;
          _this.color = new spine.Color(1, 1, 1, 1);
          _this.offset = spine.Utils.newFloatArray(8);
          _this.uvs = spine.Utils.newFloatArray(8);
          _this.tempColor = new spine.Color(1, 1, 1, 1);
          return _this;
        }
        RegionAttachment.prototype.updateOffset = function() {
          var regionScaleX = this.width / this.region.originalWidth * this.scaleX;
          var regionScaleY = this.height / this.region.originalHeight * this.scaleY;
          var localX = -this.width / 2 * this.scaleX + this.region.offsetX * regionScaleX;
          var localY = -this.height / 2 * this.scaleY + this.region.offsetY * regionScaleY;
          var localX2 = localX + this.region.width * regionScaleX;
          var localY2 = localY + this.region.height * regionScaleY;
          var radians = this.rotation * Math.PI / 180;
          var cos = Math.cos(radians);
          var sin = Math.sin(radians);
          var localXCos = localX * cos + this.x;
          var localXSin = localX * sin;
          var localYCos = localY * cos + this.y;
          var localYSin = localY * sin;
          var localX2Cos = localX2 * cos + this.x;
          var localX2Sin = localX2 * sin;
          var localY2Cos = localY2 * cos + this.y;
          var localY2Sin = localY2 * sin;
          var offset = this.offset;
          offset[RegionAttachment.OX1] = localXCos - localYSin;
          offset[RegionAttachment.OY1] = localYCos + localXSin;
          offset[RegionAttachment.OX2] = localXCos - localY2Sin;
          offset[RegionAttachment.OY2] = localY2Cos + localXSin;
          offset[RegionAttachment.OX3] = localX2Cos - localY2Sin;
          offset[RegionAttachment.OY3] = localY2Cos + localX2Sin;
          offset[RegionAttachment.OX4] = localX2Cos - localYSin;
          offset[RegionAttachment.OY4] = localYCos + localX2Sin;
        };
        RegionAttachment.prototype.setRegion = function(region) {
          this.region = region;
          var uvs = this.uvs;
          if (region.rotate) {
            uvs[2] = region.u;
            uvs[3] = region.v2;
            uvs[4] = region.u;
            uvs[5] = region.v;
            uvs[6] = region.u2;
            uvs[7] = region.v;
            uvs[0] = region.u2;
            uvs[1] = region.v2;
          } else {
            uvs[0] = region.u;
            uvs[1] = region.v2;
            uvs[2] = region.u;
            uvs[3] = region.v;
            uvs[4] = region.u2;
            uvs[5] = region.v;
            uvs[6] = region.u2;
            uvs[7] = region.v2;
          }
        };
        RegionAttachment.prototype.computeWorldVertices = function(bone, worldVertices, offset, stride) {
          var vertexOffset = this.offset;
          var x = bone.worldX, y = bone.worldY;
          var a = bone.a, b = bone.b, c = bone.c, d = bone.d;
          var offsetX = 0, offsetY = 0;
          offsetX = vertexOffset[RegionAttachment.OX1];
          offsetY = vertexOffset[RegionAttachment.OY1];
          worldVertices[offset] = offsetX * a + offsetY * b + x;
          worldVertices[offset + 1] = offsetX * c + offsetY * d + y;
          offset += stride;
          offsetX = vertexOffset[RegionAttachment.OX2];
          offsetY = vertexOffset[RegionAttachment.OY2];
          worldVertices[offset] = offsetX * a + offsetY * b + x;
          worldVertices[offset + 1] = offsetX * c + offsetY * d + y;
          offset += stride;
          offsetX = vertexOffset[RegionAttachment.OX3];
          offsetY = vertexOffset[RegionAttachment.OY3];
          worldVertices[offset] = offsetX * a + offsetY * b + x;
          worldVertices[offset + 1] = offsetX * c + offsetY * d + y;
          offset += stride;
          offsetX = vertexOffset[RegionAttachment.OX4];
          offsetY = vertexOffset[RegionAttachment.OY4];
          worldVertices[offset] = offsetX * a + offsetY * b + x;
          worldVertices[offset + 1] = offsetX * c + offsetY * d + y;
        };
        RegionAttachment.prototype.copy = function() {
          var copy = new RegionAttachment(name);
          copy.region = this.region;
          copy.rendererObject = this.rendererObject;
          copy.path = this.path;
          copy.x = this.x;
          copy.y = this.y;
          copy.scaleX = this.scaleX;
          copy.scaleY = this.scaleY;
          copy.rotation = this.rotation;
          copy.width = this.width;
          copy.height = this.height;
          spine.Utils.arrayCopy(this.uvs, 0, copy.uvs, 0, 8);
          spine.Utils.arrayCopy(this.offset, 0, copy.offset, 0, 8);
          copy.color.setFromColor(this.color);
          return copy;
        };
        RegionAttachment.OX1 = 0;
        RegionAttachment.OY1 = 1;
        RegionAttachment.OX2 = 2;
        RegionAttachment.OY2 = 3;
        RegionAttachment.OX3 = 4;
        RegionAttachment.OY3 = 5;
        RegionAttachment.OX4 = 6;
        RegionAttachment.OY4 = 7;
        RegionAttachment.X1 = 0;
        RegionAttachment.Y1 = 1;
        RegionAttachment.C1R = 2;
        RegionAttachment.C1G = 3;
        RegionAttachment.C1B = 4;
        RegionAttachment.C1A = 5;
        RegionAttachment.U1 = 6;
        RegionAttachment.V1 = 7;
        RegionAttachment.X2 = 8;
        RegionAttachment.Y2 = 9;
        RegionAttachment.C2R = 10;
        RegionAttachment.C2G = 11;
        RegionAttachment.C2B = 12;
        RegionAttachment.C2A = 13;
        RegionAttachment.U2 = 14;
        RegionAttachment.V2 = 15;
        RegionAttachment.X3 = 16;
        RegionAttachment.Y3 = 17;
        RegionAttachment.C3R = 18;
        RegionAttachment.C3G = 19;
        RegionAttachment.C3B = 20;
        RegionAttachment.C3A = 21;
        RegionAttachment.U3 = 22;
        RegionAttachment.V3 = 23;
        RegionAttachment.X4 = 24;
        RegionAttachment.Y4 = 25;
        RegionAttachment.C4R = 26;
        RegionAttachment.C4G = 27;
        RegionAttachment.C4B = 28;
        RegionAttachment.C4A = 29;
        RegionAttachment.U4 = 30;
        RegionAttachment.V4 = 31;
        return RegionAttachment;
      })(spine.Attachment);
      spine.RegionAttachment = RegionAttachment;
    })(spine || (spine = {}));
    var spine;
    (function(spine) {
      var JitterEffect = (function() {
        function JitterEffect(jitterX, jitterY) {
          this.jitterX = 0;
          this.jitterY = 0;
          this.jitterX = jitterX;
          this.jitterY = jitterY;
        }
        JitterEffect.prototype.begin = function(skeleton) {};
        JitterEffect.prototype.transform = function(position, uv, light, dark) {
          position.x += spine.MathUtils.randomTriangular(-this.jitterX, this.jitterY);
          position.y += spine.MathUtils.randomTriangular(-this.jitterX, this.jitterY);
        };
        JitterEffect.prototype.end = function() {};
        return JitterEffect;
      })();
      spine.JitterEffect = JitterEffect;
    })(spine || (spine = {}));
    var spine;
    (function(spine) {
      var SwirlEffect = (function() {
        function SwirlEffect(radius, interpolation) {
          this.centerX = 0;
          this.centerY = 0;
          this.radius = 0;
          this.angle = 0;
          this.worldX = 0;
          this.worldY = 0;
          this.radius = radius;
          this.interpolation = interpolation;
        }
        SwirlEffect.prototype.begin = function(skeleton) {
          this.worldX = skeleton.x + this.centerX;
          this.worldY = skeleton.y + this.centerY;
        };
        SwirlEffect.prototype.transform = function(position, uv, light, dark) {
          var radAngle = this.angle * spine.MathUtils.degreesToRadians;
          var x = position.x - this.worldX;
          var y = position.y - this.worldY;
          var dist = Math.sqrt(x * x + y * y);
          if (dist < this.radius) {
            var theta = this.interpolation.apply(0, radAngle, (this.radius - dist) / this.radius);
            var cos = Math.cos(theta);
            var sin = Math.sin(theta);
            position.x = cos * x - sin * y + this.worldX;
            position.y = sin * x + cos * y + this.worldY;
          }
        };
        SwirlEffect.prototype.end = function() {};
        SwirlEffect.interpolation = new spine.PowOut(2);
        return SwirlEffect;
      })();
      spine.SwirlEffect = SwirlEffect;
    })(spine || (spine = {}));
    module.exports = spine;
  }), {} ],
  294: [ (function(require, module, exports) {
    "use strict";
    var TrackEntryListeners = require("./track-entry-listeners");
    var spine = require("./lib/spine");
    var MaxCacheTime = 30;
    var FrameTime = 1 / 60;
    var _vertices = [];
    var _indices = [];
    var _boneInfoOffset = 0;
    var _vertexOffset = 0;
    var _indexOffset = 0;
    var _vfOffset = 0;
    var _preTexUrl = null;
    var _preBlendMode = null;
    var _segVCount = 0;
    var _segICount = 0;
    var _segOffset = 0;
    var _colorOffset = 0;
    var _preFinalColor = null;
    var _preDarkColor = null;
    var _perVertexSize = 6;
    var _perClipVertexSize = 12;
    var _vfCount = 0, _indexCount = 0;
    var _tempr, _tempg, _tempb, _tempa;
    var _finalColor32, _darkColor32;
    var _finalColor = new spine.Color(1, 1, 1, 1);
    var _darkColor = new spine.Color(1, 1, 1, 1);
    var _quadTriangles = [ 0, 1, 2, 2, 3, 0 ];
    var AnimationCache = cc.Class({
      ctor: function ctor() {
        this._privateMode = false;
        this._inited = false;
        this._invalid = true;
        this._enableCacheAttachedInfo = false;
        this.frames = [];
        this.totalTime = 0;
        this._frameIdx = -1;
        this.isCompleted = false;
        this._skeletonInfo = null;
        this._animationName = null;
        this._tempSegments = null;
        this._tempColors = null;
        this._tempBoneInfos = null;
      },
      init: function init(skeletonInfo, animationName) {
        this._inited = true;
        this._animationName = animationName;
        this._skeletonInfo = skeletonInfo;
      },
      clear: function clear() {
        this._inited = false;
        for (var i = 0, n = this.frames.length; i < n; i++) {
          var frame = this.frames[i];
          frame.segments.length = 0;
        }
        this.invalidAllFrame();
      },
      bind: function bind(listener) {
        var completeHandle = function(entry) {
          entry && entry.animation.name === this._animationName && (this.isCompleted = true);
        }.bind(this);
        listener.complete = completeHandle;
      },
      unbind: function unbind(listener) {
        listener.complete = null;
      },
      begin: function begin() {
        if (!this._invalid) return;
        var skeletonInfo = this._skeletonInfo;
        var preAnimationCache = skeletonInfo.curAnimationCache;
        preAnimationCache && preAnimationCache !== this && (this._privateMode ? preAnimationCache.invalidAllFrame() : preAnimationCache.updateToFrame());
        var skeleton = skeletonInfo.skeleton;
        var listener = skeletonInfo.listener;
        var state = skeletonInfo.state;
        var animation = skeleton.data.findAnimation(this._animationName);
        state.setAnimationWith(0, animation, false);
        this.bind(listener);
        skeletonInfo.curAnimationCache = this;
        this._frameIdx = -1;
        this.isCompleted = false;
        this.totalTime = 0;
        this._invalid = false;
      },
      end: function end() {
        if (!this._needToUpdate()) {
          this._skeletonInfo.curAnimationCache = null;
          this.frames.length = this._frameIdx + 1;
          this.isCompleted = true;
          this.unbind(this._skeletonInfo.listener);
        }
      },
      _needToUpdate: function _needToUpdate(toFrameIdx) {
        return !this.isCompleted && this.totalTime < MaxCacheTime && (void 0 == toFrameIdx || this._frameIdx < toFrameIdx);
      },
      updateToFrame: function updateToFrame(toFrameIdx) {
        if (!this._inited) return;
        this.begin();
        if (!this._needToUpdate(toFrameIdx)) return;
        var skeletonInfo = this._skeletonInfo;
        var skeleton = skeletonInfo.skeleton;
        var clipper = skeletonInfo.clipper;
        var state = skeletonInfo.state;
        do {
          skeleton.update(FrameTime);
          state.update(FrameTime);
          state.apply(skeleton);
          skeleton.updateWorldTransform();
          this._frameIdx++;
          this._updateFrame(skeleton, clipper, this._frameIdx);
          this.totalTime += FrameTime;
        } while (this._needToUpdate(toFrameIdx));
        this.end();
      },
      isInited: function isInited() {
        return this._inited;
      },
      isInvalid: function isInvalid() {
        return this._invalid;
      },
      invalidAllFrame: function invalidAllFrame() {
        this.isCompleted = false;
        this._invalid = true;
      },
      updateAllFrame: function updateAllFrame() {
        this.invalidAllFrame();
        this.updateToFrame();
      },
      enableCacheAttachedInfo: function enableCacheAttachedInfo() {
        if (!this._enableCacheAttachedInfo) {
          this._enableCacheAttachedInfo = true;
          this.invalidAllFrame();
        }
      },
      _updateFrame: function _updateFrame(skeleton, clipper, index) {
        _vfOffset = 0;
        _boneInfoOffset = 0;
        _indexOffset = 0;
        _vertexOffset = 0;
        _preTexUrl = null;
        _preBlendMode = null;
        _segVCount = 0;
        _segICount = 0;
        _segOffset = 0;
        _colorOffset = 0;
        _preFinalColor = null;
        _preDarkColor = null;
        this.frames[index] = this.frames[index] || {
          segments: [],
          colors: [],
          boneInfos: [],
          vertices: null,
          uintVert: null,
          indices: null
        };
        var frame = this.frames[index];
        var segments = this._tempSegments = frame.segments;
        var colors = this._tempColors = frame.colors;
        var boneInfos = this._tempBoneInfos = frame.boneInfos;
        this._traverseSkeleton(skeleton, clipper);
        _colorOffset > 0 && (colors[_colorOffset - 1].vfOffset = _vfOffset);
        colors.length = _colorOffset;
        boneInfos.length = _boneInfoOffset;
        var preSegOffset = _segOffset - 1;
        if (preSegOffset >= 0) if (_segICount > 0) {
          var preSegInfo = segments[preSegOffset];
          preSegInfo.indexCount = _segICount;
          preSegInfo.vfCount = _segVCount * _perVertexSize;
          preSegInfo.vertexCount = _segVCount;
          segments.length = _segOffset;
        } else segments.length = _segOffset - 1;
        if (0 == segments.length) return;
        var vertices = frame.vertices;
        var uintVert = frame.uintVert;
        if (!vertices || vertices.length < _vfOffset) {
          vertices = frame.vertices = new Float32Array(_vfOffset);
          uintVert = frame.uintVert = new Uint32Array(vertices.buffer);
        }
        for (var i = 0, j = 0; i < _vfOffset; ) {
          vertices[i++] = _vertices[j++];
          vertices[i++] = _vertices[j++];
          vertices[i++] = _vertices[j++];
          vertices[i++] = _vertices[j++];
          uintVert[i++] = _vertices[j++];
          uintVert[i++] = _vertices[j++];
        }
        var indices = frame.indices;
        (!indices || indices.length < _indexOffset) && (indices = frame.indices = new Uint16Array(_indexOffset));
        for (var _i = 0; _i < _indexOffset; _i++) indices[_i] = _indices[_i];
        frame.vertices = vertices;
        frame.uintVert = uintVert;
        frame.indices = indices;
      },
      fillVertices: function fillVertices(skeletonColor, attachmentColor, slotColor, clipper, slot) {
        _tempa = slotColor.a * attachmentColor.a * skeletonColor.a * 255;
        _tempr = attachmentColor.r * skeletonColor.r * 255;
        _tempg = attachmentColor.g * skeletonColor.g * 255;
        _tempb = attachmentColor.b * skeletonColor.b * 255;
        _finalColor.r = _tempr * slotColor.r;
        _finalColor.g = _tempg * slotColor.g;
        _finalColor.b = _tempb * slotColor.b;
        _finalColor.a = _tempa;
        if (null == slot.darkColor) _darkColor.set(0, 0, 0, 1); else {
          _darkColor.r = slot.darkColor.r * _tempr;
          _darkColor.g = slot.darkColor.g * _tempg;
          _darkColor.b = slot.darkColor.b * _tempb;
        }
        _darkColor.a = 0;
        _finalColor32 = (_finalColor.a << 24 >>> 0) + (_finalColor.b << 16) + (_finalColor.g << 8) + _finalColor.r;
        _darkColor32 = (_darkColor.a << 24 >>> 0) + (_darkColor.b << 16) + (_darkColor.g << 8) + _darkColor.r;
        if (_preFinalColor !== _finalColor32 || _preDarkColor !== _darkColor32) {
          var colors = this._tempColors;
          _preFinalColor = _finalColor32;
          _preDarkColor = _darkColor32;
          _colorOffset > 0 && (colors[_colorOffset - 1].vfOffset = _vfOffset);
          colors[_colorOffset++] = {
            fr: _finalColor.r,
            fg: _finalColor.g,
            fb: _finalColor.b,
            fa: _finalColor.a,
            dr: _darkColor.r,
            dg: _darkColor.g,
            db: _darkColor.b,
            da: _darkColor.a,
            vfOffset: 0
          };
        }
        if (clipper.isClipping()) {
          clipper.clipTriangles(_vertices, _vfCount, _indices, _indexCount, _vertices, _finalColor, _darkColor, true, _perVertexSize, _indexOffset, _vfOffset, _vfOffset + 2);
          var clippedVertices = clipper.clippedVertices;
          var clippedTriangles = clipper.clippedTriangles;
          _indexCount = clippedTriangles.length;
          _vfCount = clippedVertices.length / _perClipVertexSize * _perVertexSize;
          for (var ii = 0, jj = _indexOffset, nn = clippedTriangles.length; ii < nn; ) _indices[jj++] = clippedTriangles[ii++];
          for (var _v = 0, _n = clippedVertices.length, offset = _vfOffset; _v < _n; _v += 12, 
          offset += _perVertexSize) {
            _vertices[offset] = clippedVertices[_v];
            _vertices[offset + 1] = clippedVertices[_v + 1];
            _vertices[offset + 2] = clippedVertices[_v + 6];
            _vertices[offset + 3] = clippedVertices[_v + 7];
            _vertices[offset + 4] = _finalColor32;
            _vertices[offset + 5] = _darkColor32;
          }
        } else for (var v = _vfOffset, n = _vfOffset + _vfCount; v < n; v += _perVertexSize) {
          _vertices[v + 4] = _finalColor32;
          _vertices[v + 5] = _darkColor32;
        }
      },
      _traverseSkeleton: function _traverseSkeleton(skeleton, clipper) {
        var segments = this._tempSegments;
        var boneInfos = this._tempBoneInfos;
        var skeletonColor = skeleton.color;
        var attachment, attachmentColor, slotColor, uvs, triangles;
        var isRegion, isMesh, isClip;
        var texture;
        var preSegOffset, preSegInfo;
        var blendMode;
        var slot;
        var bones = skeleton.bones;
        if (this._enableCacheAttachedInfo) for (var i = 0, l = bones.length; i < l; i++, 
        _boneInfoOffset++) {
          var bone = bones[i];
          var boneInfo = boneInfos[_boneInfoOffset];
          boneInfo || (boneInfo = boneInfos[_boneInfoOffset] = {});
          boneInfo.a = bone.a;
          boneInfo.b = bone.b;
          boneInfo.c = bone.c;
          boneInfo.d = bone.d;
          boneInfo.worldX = bone.worldX;
          boneInfo.worldY = bone.worldY;
        }
        for (var slotIdx = 0, slotCount = skeleton.drawOrder.length; slotIdx < slotCount; slotIdx++) {
          slot = skeleton.drawOrder[slotIdx];
          _vfCount = 0;
          _indexCount = 0;
          attachment = slot.getAttachment();
          if (!attachment) {
            clipper.clipEndWithSlot(slot);
            continue;
          }
          isRegion = attachment instanceof spine.RegionAttachment;
          isMesh = attachment instanceof spine.MeshAttachment;
          isClip = attachment instanceof spine.ClippingAttachment;
          if (isClip) {
            clipper.clipStart(slot, attachment);
            continue;
          }
          if (!isRegion && !isMesh) {
            clipper.clipEndWithSlot(slot);
            continue;
          }
          texture = attachment.region.texture._texture;
          if (!texture) {
            clipper.clipEndWithSlot(slot);
            continue;
          }
          blendMode = slot.data.blendMode;
          if (_preTexUrl !== texture.nativeUrl || _preBlendMode !== blendMode) {
            _preTexUrl = texture.nativeUrl;
            _preBlendMode = blendMode;
            preSegOffset = _segOffset - 1;
            if (preSegOffset >= 0) if (_segICount > 0) {
              preSegInfo = segments[preSegOffset];
              preSegInfo.indexCount = _segICount;
              preSegInfo.vertexCount = _segVCount;
              preSegInfo.vfCount = _segVCount * _perVertexSize;
            } else _segOffset--;
            segments[_segOffset] = {
              tex: texture,
              blendMode: blendMode,
              indexCount: 0,
              vertexCount: 0,
              vfCount: 0
            };
            _segOffset++;
            _segICount = 0;
            _segVCount = 0;
          }
          if (isRegion) {
            triangles = _quadTriangles;
            _vfCount = 4 * _perVertexSize;
            _indexCount = 6;
            attachment.computeWorldVertices(slot.bone, _vertices, _vfOffset, _perVertexSize);
          } else if (isMesh) {
            triangles = attachment.triangles;
            _vfCount = (attachment.worldVerticesLength >> 1) * _perVertexSize;
            _indexCount = triangles.length;
            attachment.computeWorldVertices(slot, 0, attachment.worldVerticesLength, _vertices, _vfOffset, _perVertexSize);
          }
          if (0 == _vfCount || 0 == _indexCount) {
            clipper.clipEndWithSlot(slot);
            continue;
          }
          for (var ii = 0, jj = _indexOffset, nn = triangles.length; ii < nn; ) _indices[jj++] = triangles[ii++];
          uvs = attachment.uvs;
          for (var v = _vfOffset, n = _vfOffset + _vfCount, u = 0; v < n; v += _perVertexSize, 
          u += 2) {
            _vertices[v + 2] = uvs[u];
            _vertices[v + 3] = uvs[u + 1];
          }
          attachmentColor = attachment.color;
          slotColor = slot.color;
          this.fillVertices(skeletonColor, attachmentColor, slotColor, clipper, slot);
          if (_indexCount > 0) {
            for (var _ii = _indexOffset, _nn = _indexOffset + _indexCount; _ii < _nn; _ii++) _indices[_ii] += _segVCount;
            _indexOffset += _indexCount;
            _vfOffset += _vfCount;
            _vertexOffset = _vfOffset / _perVertexSize;
            _segICount += _indexCount;
            _segVCount += _vfCount / _perVertexSize;
          }
          clipper.clipEndWithSlot(slot);
        }
        clipper.clipEnd();
      }
    });
    var SkeletonCache = cc.Class({
      ctor: function ctor() {
        this._privateMode = false;
        this._animationPool = {};
        this._skeletonCache = {};
      },
      enablePrivateMode: function enablePrivateMode() {
        this._privateMode = true;
      },
      clear: function clear() {
        this._animationPool = {};
        this._skeletonCache = {};
      },
      removeSkeleton: function removeSkeleton(uuid) {
        var skeletonInfo = this._skeletonCache[uuid];
        if (!skeletonInfo) return;
        var animationsCache = skeletonInfo.animationsCache;
        for (var aniKey in animationsCache) {
          var animationCache = animationsCache[aniKey];
          if (!animationCache) continue;
          this._animationPool[uuid + "#" + aniKey] = animationCache;
          animationCache.clear();
        }
        delete this._skeletonCache[uuid];
      },
      getSkeletonCache: function getSkeletonCache(uuid, skeletonData) {
        var skeletonInfo = this._skeletonCache[uuid];
        if (!skeletonInfo) {
          var skeleton = new spine.Skeleton(skeletonData);
          var clipper = new spine.SkeletonClipping();
          var stateData = new spine.AnimationStateData(skeleton.data);
          var state = new spine.AnimationState(stateData);
          var listener = new TrackEntryListeners();
          state.addListener(listener);
          this._skeletonCache[uuid] = skeletonInfo = {
            skeleton: skeleton,
            clipper: clipper,
            state: state,
            listener: listener,
            animationsCache: {},
            curAnimationCache: null
          };
        }
        return skeletonInfo;
      },
      getAnimationCache: function getAnimationCache(uuid, animationName) {
        var skeletonInfo = this._skeletonCache[uuid];
        if (!skeletonInfo) return null;
        var animationsCache = skeletonInfo.animationsCache;
        return animationsCache[animationName];
      },
      invalidAnimationCache: function invalidAnimationCache(uuid) {
        var skeletonInfo = this._skeletonCache[uuid];
        var skeleton = skeletonInfo && skeletonInfo.skeleton;
        if (!skeleton) return;
        var animationsCache = skeletonInfo.animationsCache;
        for (var aniKey in animationsCache) {
          var animationCache = animationsCache[aniKey];
          animationCache.invalidAllFrame();
        }
      },
      initAnimationCache: function initAnimationCache(uuid, animationName) {
        if (!animationName) return null;
        var skeletonInfo = this._skeletonCache[uuid];
        var skeleton = skeletonInfo && skeletonInfo.skeleton;
        if (!skeleton) return null;
        var animation = skeleton.data.findAnimation(animationName);
        if (!animation) return null;
        var animationsCache = skeletonInfo.animationsCache;
        var animationCache = animationsCache[animationName];
        if (!animationCache) {
          var poolKey = uuid + "#" + animationName;
          animationCache = this._animationPool[poolKey];
          if (animationCache) delete this._animationPool[poolKey]; else {
            animationCache = new AnimationCache();
            animationCache._privateMode = this._privateMode;
          }
          animationCache.init(skeletonInfo, animationName);
          animationsCache[animationName] = animationCache;
        }
        return animationCache;
      },
      updateAnimationCache: function updateAnimationCache(uuid, animationName) {
        if (animationName) {
          var animationCache = this.initAnimationCache(uuid, animationName);
          if (!animationCache) return null;
          animationCache.updateAllFrame();
        } else {
          var skeletonInfo = this._skeletonCache[uuid];
          var skeleton = skeletonInfo && skeletonInfo.skeleton;
          if (!skeleton) return;
          var animationsCache = skeletonInfo.animationsCache;
          for (var aniKey in animationsCache) {
            var _animationCache = animationsCache[aniKey];
            _animationCache.updateAllFrame();
          }
        }
      }
    });
    SkeletonCache.FrameTime = FrameTime;
    SkeletonCache.sharedCache = new SkeletonCache();
    module.exports = SkeletonCache;
  }), {
    "./lib/spine": 293,
    "./track-entry-listeners": 298
  } ],
  295: [ (function(require, module, exports) {
    "use strict";
    var SkeletonCache = (true, require("./skeleton-cache").sharedCache);
    var SkeletonData = cc.Class({
      name: "sp.SkeletonData",
      extends: cc.Asset,
      ctor: function ctor() {
        this.reset();
      },
      properties: {
        _skeletonJson: null,
        skeletonJsonStr: {
          get: function get() {
            return this._skeletonJson ? JSON.stringify(this._skeletonJson) : "";
          }
        },
        skeletonJson: {
          get: function get() {
            return this._skeletonJson;
          },
          set: function set(value) {
            this.reset();
            this._skeletonJson = "string" == typeof value ? JSON.parse(value) : value;
            !this._uuid && value.skeleton && (this._uuid = value.skeleton.hash);
          }
        },
        _atlasText: "",
        atlasText: {
          get: function get() {
            return this._atlasText;
          },
          set: function set(value) {
            this._atlasText = value;
            this.reset();
          }
        },
        textures: {
          default: [],
          type: [ cc.Texture2D ]
        },
        textureNames: {
          default: [],
          type: [ cc.String ]
        },
        scale: 1,
        _nativeAsset: {
          get: function get() {
            return this._buffer;
          },
          set: function set(bin) {
            this._buffer = bin.buffer || bin;
            this.reset();
          },
          override: true
        }
      },
      statics: {
        preventDeferredLoadDependents: true
      },
      createNode: false,
      reset: function reset() {
        this._skeletonCache = null;
        this._atlasCache = null;
        false;
      },
      ensureTexturesLoaded: function ensureTexturesLoaded(loaded, caller) {
        var textures = this.textures;
        var texsLen = textures.length;
        if (0 == texsLen) {
          loaded.call(caller, false);
          return;
        }
        var loadedCount = 0;
        var loadedItem = function loadedItem() {
          loadedCount++;
          if (loadedCount >= texsLen) {
            loaded && loaded.call(caller, true);
            loaded = null;
          }
        };
        for (var i = 0; i < texsLen; i++) {
          var tex = textures[i];
          tex.loaded ? loadedItem() : tex.once("load", loadedItem);
        }
      },
      isTexturesLoaded: function isTexturesLoaded() {
        var textures = this.textures;
        var texsLen = textures.length;
        for (var i = 0; i < texsLen; i++) {
          var tex = textures[i];
          if (!tex.loaded) return false;
        }
        return true;
      },
      getRuntimeData: function getRuntimeData(quiet) {
        if (this._skeletonCache) return this._skeletonCache;
        if (!(this.textures && this.textures.length > 0) && this.textureNames && this.textureNames.length > 0) {
          quiet || cc.errorID(7507, this.name);
          return null;
        }
        var atlas = this._getAtlas(quiet);
        if (!atlas) return null;
        var attachmentLoader = new sp.spine.AtlasAttachmentLoader(atlas);
        var resData = null;
        var reader = null;
        if (this.skeletonJson) {
          reader = new sp.spine.SkeletonJson(attachmentLoader);
          resData = this.skeletonJson;
        } else {
          reader = new sp.spine.SkeletonBinary(attachmentLoader);
          resData = new Uint8Array(this._nativeAsset);
        }
        reader.scale = this.scale;
        this._skeletonCache = reader.readSkeletonData(resData);
        atlas.dispose();
        return this._skeletonCache;
      },
      getSkinsEnum: false,
      getAnimsEnum: false,
      _getTexture: function _getTexture(line) {
        var names = this.textureNames;
        for (var i = 0; i < names.length; i++) if (names[i] === line) {
          var texture = this.textures[i];
          var tex = new sp.SkeletonTexture({
            width: texture.width,
            height: texture.height
          });
          tex.setRealTexture(texture);
          return tex;
        }
        cc.errorID(7506, line);
        return null;
      },
      _getAtlas: function _getAtlas(quiet) {
        if (this._atlasCache) return this._atlasCache;
        if (!this.atlasText) {
          quiet || cc.errorID(7508, this.name);
          return null;
        }
        return this._atlasCache = new sp.spine.TextureAtlas(this.atlasText, this._getTexture.bind(this));
      },
      destroy: function destroy() {
        SkeletonCache.removeSkeleton(this._uuid);
        this._super();
      }
    });
    sp.SkeletonData = module.exports = SkeletonData;
  }), {
    "./skeleton-cache": 294
  } ],
  296: [ (function(require, module, exports) {
    "use strict";
    sp.SkeletonTexture = cc.Class({
      name: "sp.SkeletonTexture",
      extends: sp.spine.Texture,
      _texture: null,
      _material: null,
      setRealTexture: function setRealTexture(tex) {
        this._texture = tex;
      },
      getRealTexture: function getRealTexture() {
        return this._texture;
      },
      setFilters: function setFilters(minFilter, magFilter) {
        this._texture && this._texture.setFilters(minFilter, magFilter);
      },
      setWraps: function setWraps(uWrap, vWrap) {
        this._texture && this._texture.setWrapMode(uWrap, vWrap);
      },
      dispose: function dispose() {}
    });
  }), {} ],
  297: [ (function(require, module, exports) {
    "use strict";
    exports.__esModule = true;
    exports["default"] = void 0;
    var _assembler = _interopRequireDefault(require("../../cocos2d/core/renderer/assembler"));
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
    function _inheritsLoose(subClass, superClass) {
      subClass.prototype = Object.create(superClass.prototype);
      subClass.prototype.constructor = subClass;
      subClass.__proto__ = superClass;
    }
    var Skeleton = require("./Skeleton");
    var spine = require("./lib/spine");
    var RenderFlow = require("../../cocos2d/core/renderer/render-flow");
    var VertexFormat = require("../../cocos2d/core/renderer/webgl/vertex-format");
    var VFOneColor = VertexFormat.vfmtPosUvColor;
    var VFTwoColor = VertexFormat.vfmtPosUvTwoColor;
    var gfx = cc.gfx;
    var FLAG_BATCH = 16;
    var FLAG_TWO_COLOR = 1;
    var _handleVal = 0;
    var _quadTriangles = [ 0, 1, 2, 2, 3, 0 ];
    var _slotColor = cc.color(0, 0, 255, 255);
    var _boneColor = cc.color(255, 0, 0, 255);
    var _originColor = cc.color(0, 255, 0, 255);
    var _meshColor = cc.color(255, 255, 0, 255);
    var _finalColor = null;
    var _darkColor = null;
    var _tempPos = null, _tempUv = null;
    true;
    _finalColor = new spine.Color(1, 1, 1, 1);
    _darkColor = new spine.Color(1, 1, 1, 1);
    _tempPos = new spine.Vector2();
    _tempUv = new spine.Vector2();
    var _premultipliedAlpha;
    var _multiplier;
    var _slotRangeStart;
    var _slotRangeEnd;
    var _useTint;
    var _debugSlots;
    var _debugBones;
    var _debugMesh;
    var _nodeR, _nodeG, _nodeB, _nodeA;
    var _finalColor32, _darkColor32;
    var _vertexFormat;
    var _perVertexSize;
    var _perClipVertexSize;
    var _vertexFloatCount = 0, _vertexCount = 0, _vertexFloatOffset = 0, _vertexOffset = 0, _indexCount = 0, _indexOffset = 0, _vfOffset = 0;
    var _tempr, _tempg, _tempb;
    var _inRange;
    var _mustFlush;
    var _x, _y, _m00, _m04, _m12, _m01, _m05, _m13;
    var _r, _g, _b, _fr, _fg, _fb, _fa, _dr, _dg, _db, _da;
    var _comp, _buffer, _renderer, _node, _needColor, _vertexEffect;
    function _getSlotMaterial(tex, blendMode) {
      var src, dst;
      switch (blendMode) {
       case spine.BlendMode.Additive:
        src = _premultipliedAlpha ? cc.macro.ONE : cc.macro.SRC_ALPHA;
        dst = cc.macro.ONE;
        break;

       case spine.BlendMode.Multiply:
        src = cc.macro.DST_COLOR;
        dst = cc.macro.ONE_MINUS_SRC_ALPHA;
        break;

       case spine.BlendMode.Screen:
        src = cc.macro.ONE;
        dst = cc.macro.ONE_MINUS_SRC_COLOR;
        break;

       case spine.BlendMode.Normal:
       default:
        src = _premultipliedAlpha ? cc.macro.ONE : cc.macro.SRC_ALPHA;
        dst = cc.macro.ONE_MINUS_SRC_ALPHA;
      }
      var useModel = !_comp.enableBatch;
      var baseMaterial = _comp._materials[0];
      if (!baseMaterial) return null;
      var key = tex.getId() + src + dst + _useTint + useModel;
      var materialCache = _comp._materialCache;
      var material = materialCache[key];
      if (!material) {
        if (materialCache.baseMaterial) material = cc.MaterialVariant.create(baseMaterial); else {
          material = baseMaterial;
          materialCache.baseMaterial = baseMaterial;
        }
        material.define("CC_USE_MODEL", useModel);
        material.define("USE_TINT", _useTint);
        material.setProperty("texture", tex);
        material.setBlend(true, gfx.BLEND_FUNC_ADD, src, dst, gfx.BLEND_FUNC_ADD, src, dst);
        materialCache[key] = material;
      }
      return material;
    }
    function _handleColor(color) {
      _fa = color.fa * _nodeA;
      _multiplier = _premultipliedAlpha ? _fa / 255 : 1;
      _r = _nodeR * _multiplier;
      _g = _nodeG * _multiplier;
      _b = _nodeB * _multiplier;
      _fr = color.fr * _r;
      _fg = color.fg * _g;
      _fb = color.fb * _b;
      _finalColor32 = (_fa << 24 >>> 0) + (_fb << 16) + (_fg << 8) + _fr;
      _dr = color.dr * _r;
      _dg = color.dg * _g;
      _db = color.db * _b;
      _da = _premultipliedAlpha ? 255 : 0;
      _darkColor32 = (_da << 24 >>> 0) + (_db << 16) + (_dg << 8) + _dr;
    }
    function _spineColorToInt32(spineColor) {
      return (spineColor.a << 24 >>> 0) + (spineColor.b << 16) + (spineColor.g << 8) + spineColor.r;
    }
    var SpineAssembler = (function(_Assembler) {
      _inheritsLoose(SpineAssembler, _Assembler);
      function SpineAssembler() {
        return _Assembler.apply(this, arguments) || this;
      }
      var _proto = SpineAssembler.prototype;
      _proto.updateRenderData = function updateRenderData(comp) {
        if (comp.isAnimationCached()) return;
        var skeleton = comp._skeleton;
        skeleton && skeleton.updateWorldTransform();
      };
      _proto.fillVertices = function fillVertices(skeletonColor, attachmentColor, slotColor, clipper, slot) {
        var vbuf = _buffer._vData, ibuf = _buffer._iData, uintVData = _buffer._uintVData;
        var offsetInfo;
        _finalColor.a = slotColor.a * attachmentColor.a * skeletonColor.a * _nodeA * 255;
        _multiplier = _premultipliedAlpha ? _finalColor.a : 255;
        _tempr = _nodeR * attachmentColor.r * skeletonColor.r * _multiplier;
        _tempg = _nodeG * attachmentColor.g * skeletonColor.g * _multiplier;
        _tempb = _nodeB * attachmentColor.b * skeletonColor.b * _multiplier;
        _finalColor.r = _tempr * slotColor.r;
        _finalColor.g = _tempg * slotColor.g;
        _finalColor.b = _tempb * slotColor.b;
        if (null == slot.darkColor) _darkColor.set(0, 0, 0, 1); else {
          _darkColor.r = slot.darkColor.r * _tempr;
          _darkColor.g = slot.darkColor.g * _tempg;
          _darkColor.b = slot.darkColor.b * _tempb;
        }
        _darkColor.a = _premultipliedAlpha ? 255 : 0;
        if (clipper.isClipping()) {
          var uvs = vbuf.subarray(_vertexFloatOffset + 2);
          clipper.clipTriangles(vbuf.subarray(_vertexFloatOffset), _vertexFloatCount, ibuf.subarray(_indexOffset), _indexCount, uvs, _finalColor, _darkColor, _useTint, _perVertexSize);
          var clippedVertices = new Float32Array(clipper.clippedVertices);
          var clippedTriangles = clipper.clippedTriangles;
          _indexCount = clippedTriangles.length;
          _vertexFloatCount = clippedVertices.length / _perClipVertexSize * _perVertexSize;
          offsetInfo = _buffer.request(_vertexFloatCount / _perVertexSize, _indexCount);
          _indexOffset = offsetInfo.indiceOffset, _vertexOffset = offsetInfo.vertexOffset, 
          _vertexFloatOffset = offsetInfo.byteOffset >> 2;
          vbuf = _buffer._vData, ibuf = _buffer._iData;
          uintVData = _buffer._uintVData;
          ibuf.set(clippedTriangles, _indexOffset);
          if (_vertexEffect) for (var _v2 = 0, _n2 = clippedVertices.length, offset = _vertexFloatOffset; _v2 < _n2; _v2 += _perClipVertexSize, 
          offset += _perVertexSize) {
            _tempPos.x = clippedVertices[_v2];
            _tempPos.y = clippedVertices[_v2 + 1];
            _finalColor.set(clippedVertices[_v2 + 2], clippedVertices[_v2 + 3], clippedVertices[_v2 + 4], clippedVertices[_v2 + 5]);
            _tempUv.x = clippedVertices[_v2 + 6];
            _tempUv.y = clippedVertices[_v2 + 7];
            _useTint ? _darkColor.set(clippedVertices[_v2 + 8], clippedVertices[_v2 + 9], clippedVertices[_v2 + 10], clippedVertices[_v2 + 11]) : _darkColor.set(0, 0, 0, 0);
            _vertexEffect.transform(_tempPos, _tempUv, _finalColor, _darkColor);
            vbuf[offset] = _tempPos.x;
            vbuf[offset + 1] = _tempPos.y;
            vbuf[offset + 2] = _tempUv.x;
            vbuf[offset + 3] = _tempUv.y;
            uintVData[offset + 4] = _spineColorToInt32(_finalColor);
            _useTint && (uintVData[offset + 5] = _spineColorToInt32(_darkColor));
          } else for (var _v3 = 0, _n3 = clippedVertices.length, _offset = _vertexFloatOffset; _v3 < _n3; _v3 += _perClipVertexSize, 
          _offset += _perVertexSize) {
            vbuf[_offset] = clippedVertices[_v3];
            vbuf[_offset + 1] = clippedVertices[_v3 + 1];
            vbuf[_offset + 2] = clippedVertices[_v3 + 6];
            vbuf[_offset + 3] = clippedVertices[_v3 + 7];
            _finalColor32 = (clippedVertices[_v3 + 5] << 24 >>> 0) + (clippedVertices[_v3 + 4] << 16) + (clippedVertices[_v3 + 3] << 8) + clippedVertices[_v3 + 2];
            uintVData[_offset + 4] = _finalColor32;
            if (_useTint) {
              _darkColor32 = (clippedVertices[_v3 + 11] << 24 >>> 0) + (clippedVertices[_v3 + 10] << 16) + (clippedVertices[_v3 + 9] << 8) + clippedVertices[_v3 + 8];
              uintVData[_offset + 5] = _darkColor32;
            }
          }
        } else if (_vertexEffect) for (var v = _vertexFloatOffset, n = _vertexFloatOffset + _vertexFloatCount; v < n; v += _perVertexSize) {
          _tempPos.x = vbuf[v];
          _tempPos.y = vbuf[v + 1];
          _tempUv.x = vbuf[v + 2];
          _tempUv.y = vbuf[v + 3];
          _vertexEffect.transform(_tempPos, _tempUv, _finalColor, _darkColor);
          vbuf[v] = _tempPos.x;
          vbuf[v + 1] = _tempPos.y;
          vbuf[v + 2] = _tempUv.x;
          vbuf[v + 3] = _tempUv.y;
          uintVData[v + 4] = _spineColorToInt32(_finalColor);
          _useTint && (uintVData[v + 5] = _spineColorToInt32(_darkColor));
        } else {
          _finalColor32 = _spineColorToInt32(_finalColor);
          _darkColor32 = _spineColorToInt32(_darkColor);
          for (var _v = _vertexFloatOffset, _n = _vertexFloatOffset + _vertexFloatCount; _v < _n; _v += _perVertexSize) {
            uintVData[_v + 4] = _finalColor32;
            _useTint && (uintVData[_v + 5] = _darkColor32);
          }
        }
      };
      _proto.realTimeTraverse = function realTimeTraverse(worldMat) {
        var vbuf;
        var ibuf;
        var locSkeleton = _comp._skeleton;
        var skeletonColor = locSkeleton.color;
        var graphics = _comp._debugRenderer;
        var clipper = _comp._clipper;
        var material = null;
        var attachment, attachmentColor, slotColor, uvs, triangles;
        var isRegion, isMesh, isClip;
        var offsetInfo;
        var slot;
        var worldMatm;
        _slotRangeStart = _comp._startSlotIndex;
        _slotRangeEnd = _comp._endSlotIndex;
        _inRange = false;
        -1 == _slotRangeStart && (_inRange = true);
        _debugSlots = _comp.debugSlots;
        _debugBones = _comp.debugBones;
        _debugMesh = _comp.debugMesh;
        if (graphics && (_debugBones || _debugSlots || _debugMesh)) {
          graphics.clear();
          graphics.lineWidth = 2;
        }
        _perClipVertexSize = _useTint ? 12 : 8;
        _vertexFloatCount = 0;
        _vertexFloatOffset = 0;
        _vertexOffset = 0;
        _indexCount = 0;
        _indexOffset = 0;
        for (var slotIdx = 0, slotCount = locSkeleton.drawOrder.length; slotIdx < slotCount; slotIdx++) {
          slot = locSkeleton.drawOrder[slotIdx];
          if (void 0 == slot) continue;
          _slotRangeStart >= 0 && _slotRangeStart == slot.data.index && (_inRange = true);
          if (!_inRange) {
            clipper.clipEndWithSlot(slot);
            continue;
          }
          _slotRangeEnd >= 0 && _slotRangeEnd == slot.data.index && (_inRange = false);
          _vertexFloatCount = 0;
          _indexCount = 0;
          attachment = slot.getAttachment();
          if (!attachment) {
            clipper.clipEndWithSlot(slot);
            continue;
          }
          isRegion = attachment instanceof spine.RegionAttachment;
          isMesh = attachment instanceof spine.MeshAttachment;
          isClip = attachment instanceof spine.ClippingAttachment;
          if (isClip) {
            clipper.clipStart(slot, attachment);
            continue;
          }
          if (!isRegion && !isMesh) {
            clipper.clipEndWithSlot(slot);
            continue;
          }
          material = _getSlotMaterial(attachment.region.texture._texture, slot.data.blendMode);
          if (!material) {
            clipper.clipEndWithSlot(slot);
            continue;
          }
          if (_mustFlush || material.getHash() !== _renderer.material.getHash()) {
            _mustFlush = false;
            _renderer._flush();
            _renderer.node = _node;
            _renderer.material = material;
          }
          if (isRegion) {
            triangles = _quadTriangles;
            _vertexFloatCount = 4 * _perVertexSize;
            _indexCount = 6;
            offsetInfo = _buffer.request(4, 6);
            _indexOffset = offsetInfo.indiceOffset, _vertexOffset = offsetInfo.vertexOffset, 
            _vertexFloatOffset = offsetInfo.byteOffset >> 2;
            vbuf = _buffer._vData, ibuf = _buffer._iData;
            attachment.computeWorldVertices(slot.bone, vbuf, _vertexFloatOffset, _perVertexSize);
            if (graphics && _debugSlots) {
              graphics.strokeColor = _slotColor;
              graphics.moveTo(vbuf[_vertexFloatOffset], vbuf[_vertexFloatOffset + 1]);
              for (var ii = _vertexFloatOffset + _perVertexSize, nn = _vertexFloatOffset + _vertexFloatCount; ii < nn; ii += _perVertexSize) graphics.lineTo(vbuf[ii], vbuf[ii + 1]);
              graphics.close();
              graphics.stroke();
            }
          } else if (isMesh) {
            triangles = attachment.triangles;
            _vertexFloatCount = (attachment.worldVerticesLength >> 1) * _perVertexSize;
            _indexCount = triangles.length;
            offsetInfo = _buffer.request(_vertexFloatCount / _perVertexSize, _indexCount);
            _indexOffset = offsetInfo.indiceOffset, _vertexOffset = offsetInfo.vertexOffset, 
            _vertexFloatOffset = offsetInfo.byteOffset >> 2;
            vbuf = _buffer._vData, ibuf = _buffer._iData;
            attachment.computeWorldVertices(slot, 0, attachment.worldVerticesLength, vbuf, _vertexFloatOffset, _perVertexSize);
            if (graphics && _debugMesh) {
              graphics.strokeColor = _meshColor;
              for (var _ii = 0, _nn = triangles.length; _ii < _nn; _ii += 3) {
                var v1 = triangles[_ii] * _perVertexSize + _vertexFloatOffset;
                var v2 = triangles[_ii + 1] * _perVertexSize + _vertexFloatOffset;
                var v3 = triangles[_ii + 2] * _perVertexSize + _vertexFloatOffset;
                graphics.moveTo(vbuf[v1], vbuf[v1 + 1]);
                graphics.lineTo(vbuf[v2], vbuf[v2 + 1]);
                graphics.lineTo(vbuf[v3], vbuf[v3 + 1]);
                graphics.close();
                graphics.stroke();
              }
            }
          }
          if (0 == _vertexFloatCount || 0 == _indexCount) {
            clipper.clipEndWithSlot(slot);
            continue;
          }
          ibuf.set(triangles, _indexOffset);
          uvs = attachment.uvs;
          for (var v = _vertexFloatOffset, n = _vertexFloatOffset + _vertexFloatCount, u = 0; v < n; v += _perVertexSize, 
          u += 2) {
            vbuf[v + 2] = uvs[u];
            vbuf[v + 3] = uvs[u + 1];
          }
          attachmentColor = attachment.color, slotColor = slot.color;
          this.fillVertices(skeletonColor, attachmentColor, slotColor, clipper, slot);
          vbuf = _buffer._vData, ibuf = _buffer._iData;
          if (_indexCount > 0) {
            for (var _ii2 = _indexOffset, _nn2 = _indexOffset + _indexCount; _ii2 < _nn2; _ii2++) ibuf[_ii2] += _vertexOffset;
            if (worldMat) {
              worldMatm = worldMat.m;
              _m00 = worldMatm[0];
              _m04 = worldMatm[4];
              _m12 = worldMatm[12];
              _m01 = worldMatm[1];
              _m05 = worldMatm[5];
              _m13 = worldMatm[13];
              for (var _ii3 = _vertexFloatOffset, _nn3 = _vertexFloatOffset + _vertexFloatCount; _ii3 < _nn3; _ii3 += _perVertexSize) {
                _x = vbuf[_ii3];
                _y = vbuf[_ii3 + 1];
                vbuf[_ii3] = _x * _m00 + _y * _m04 + _m12;
                vbuf[_ii3 + 1] = _x * _m01 + _y * _m05 + _m13;
              }
            }
            _buffer.adjust(_vertexFloatCount / _perVertexSize, _indexCount);
          }
          clipper.clipEndWithSlot(slot);
        }
        clipper.clipEnd();
        if (graphics && _debugBones) {
          var bone;
          graphics.strokeColor = _boneColor;
          graphics.fillColor = _slotColor;
          for (var i = 0, _n4 = locSkeleton.bones.length; i < _n4; i++) {
            bone = locSkeleton.bones[i];
            var x = bone.data.length * bone.a + bone.worldX;
            var y = bone.data.length * bone.c + bone.worldY;
            graphics.moveTo(bone.worldX, bone.worldY);
            graphics.lineTo(x, y);
            graphics.stroke();
            graphics.circle(bone.worldX, bone.worldY, 1.5 * Math.PI);
            graphics.fill();
            0 === i && (graphics.fillColor = _originColor);
          }
        }
      };
      _proto.cacheTraverse = function cacheTraverse(worldMat) {
        var frame = _comp._curFrame;
        if (!frame) return;
        var segments = frame.segments;
        if (0 == segments.length) return;
        var vbuf, ibuf, uintbuf;
        var material;
        var offsetInfo;
        var vertices = frame.vertices;
        var indices = frame.indices;
        var worldMatm;
        var frameVFOffset = 0, frameIndexOffset = 0, segVFCount = 0;
        if (worldMat) {
          worldMatm = worldMat.m;
          _m00 = worldMatm[0];
          _m01 = worldMatm[1];
          _m04 = worldMatm[4];
          _m05 = worldMatm[5];
          _m12 = worldMatm[12];
          _m13 = worldMatm[13];
        }
        var justTranslate = 1 === _m00 && 0 === _m01 && 0 === _m04 && 1 === _m05;
        var needBatch = _handleVal & FLAG_BATCH;
        var calcTranslate = needBatch && justTranslate;
        var colorOffset = 0;
        var colors = frame.colors;
        var nowColor = colors[colorOffset++];
        var maxVFOffset = nowColor.vfOffset;
        _handleColor(nowColor);
        for (var i = 0, n = segments.length; i < n; i++) {
          var segInfo = segments[i];
          material = _getSlotMaterial(segInfo.tex, segInfo.blendMode);
          if (!material) continue;
          if (_mustFlush || material.getHash() !== _renderer.material.getHash()) {
            _mustFlush = false;
            _renderer._flush();
            _renderer.node = _node;
            _renderer.material = material;
          }
          _vertexCount = segInfo.vertexCount;
          _indexCount = segInfo.indexCount;
          offsetInfo = _buffer.request(_vertexCount, _indexCount);
          _indexOffset = offsetInfo.indiceOffset;
          _vertexOffset = offsetInfo.vertexOffset;
          _vfOffset = offsetInfo.byteOffset >> 2;
          vbuf = _buffer._vData;
          ibuf = _buffer._iData;
          uintbuf = _buffer._uintVData;
          for (var ii = _indexOffset, il = _indexOffset + _indexCount; ii < il; ii++) ibuf[ii] = _vertexOffset + indices[frameIndexOffset++];
          segVFCount = segInfo.vfCount;
          vbuf.set(vertices.subarray(frameVFOffset, frameVFOffset + segVFCount), _vfOffset);
          frameVFOffset += segVFCount;
          if (calcTranslate) for (var _ii4 = _vfOffset, _il = _vfOffset + segVFCount; _ii4 < _il; _ii4 += 6) {
            vbuf[_ii4] += _m12;
            vbuf[_ii4 + 1] += _m13;
          } else if (needBatch) for (var _ii5 = _vfOffset, _il2 = _vfOffset + segVFCount; _ii5 < _il2; _ii5 += 6) {
            _x = vbuf[_ii5];
            _y = vbuf[_ii5 + 1];
            vbuf[_ii5] = _x * _m00 + _y * _m04 + _m12;
            vbuf[_ii5 + 1] = _x * _m01 + _y * _m05 + _m13;
          }
          _buffer.adjust(_vertexCount, _indexCount);
          if (!_needColor) continue;
          var frameColorOffset = frameVFOffset - segVFCount;
          for (var _ii6 = _vfOffset + 4, _il3 = _vfOffset + 4 + segVFCount; _ii6 < _il3; _ii6 += 6, 
          frameColorOffset += 6) {
            if (frameColorOffset >= maxVFOffset) {
              nowColor = colors[colorOffset++];
              _handleColor(nowColor);
              maxVFOffset = nowColor.vfOffset;
            }
            uintbuf[_ii6] = _finalColor32;
            uintbuf[_ii6 + 1] = _darkColor32;
          }
        }
      };
      _proto.fillBuffers = function fillBuffers(comp, renderer) {
        var node = comp.node;
        node._renderFlag |= RenderFlow.FLAG_UPDATE_RENDER_DATA;
        if (!comp._skeleton) return;
        var nodeColor = node._color;
        _nodeR = nodeColor.r / 255;
        _nodeG = nodeColor.g / 255;
        _nodeB = nodeColor.b / 255;
        _nodeA = nodeColor.a / 255;
        _useTint = comp.useTint || comp.isAnimationCached();
        _vertexFormat = _useTint ? VFTwoColor : VFOneColor;
        _perVertexSize = _useTint ? 6 : 5;
        _node = comp.node;
        _buffer = renderer.getBuffer("spine", _vertexFormat);
        _renderer = renderer;
        _comp = comp;
        _mustFlush = true;
        _premultipliedAlpha = comp.premultipliedAlpha;
        _multiplier = 1;
        _handleVal = 0;
        _needColor = false;
        _vertexEffect = comp._effectDelegate && comp._effectDelegate._vertexEffect;
        (4294967295 !== nodeColor._val || _premultipliedAlpha) && (_needColor = true);
        _useTint && (_handleVal |= FLAG_TWO_COLOR);
        var worldMat = void 0;
        if (_comp.enableBatch) {
          worldMat = _node._worldMatrix;
          _mustFlush = false;
          _handleVal |= FLAG_BATCH;
        }
        if (comp.isAnimationCached()) this.cacheTraverse(worldMat); else {
          _vertexEffect && _vertexEffect.begin(comp._skeleton);
          this.realTimeTraverse(worldMat);
          _vertexEffect && _vertexEffect.end();
        }
        renderer.worldMatDirty++;
        comp.attachUtil._syncAttachedNode();
        _node = void 0;
        _buffer = void 0;
        _renderer = void 0;
        _comp = void 0;
        _vertexEffect = null;
      };
      _proto.postFillBuffers = function postFillBuffers(comp, renderer) {
        renderer.worldMatDirty--;
      };
      return SpineAssembler;
    })(_assembler["default"]);
    exports["default"] = SpineAssembler;
    _assembler["default"].register(Skeleton, SpineAssembler);
    module.exports = exports["default"];
  }), {
    "../../cocos2d/core/renderer/assembler": 165,
    "../../cocos2d/core/renderer/render-flow": 169,
    "../../cocos2d/core/renderer/webgl/vertex-format": 198,
    "./Skeleton": 291,
    "./lib/spine": 293
  } ],
  298: [ (function(require, module, exports) {
    "use strict";
    var TrackEntryListeners = function TrackEntryListeners() {
      this.start = null;
      this.end = null;
      this.complete = null;
      this.event = null;
      this.interrupt = null;
      this.dispose = null;
    };
    TrackEntryListeners.getListeners = function(entry) {
      entry.listener || (entry.listener = new TrackEntryListeners());
      return entry.listener;
    };
    module.exports = TrackEntryListeners;
  }), {} ],
  299: [ (function(require, module, exports) {
    "use strict";
    var spine = require("./lib/spine");
    sp.VertexEffectDelegate = cc.Class({
      name: "sp.VertexEffectDelegate",
      ctor: function ctor() {
        this._vertexEffect = null;
        this._interpolation = null;
        this._effectType = "none";
      },
      clear: function clear() {
        this._vertexEffect = null;
        this._interpolation = null;
        this._effectType = "none";
      },
      initJitter: function initJitter(jitterX, jitterY) {
        this._effectType = "jitter";
        this._vertexEffect = new spine.JitterEffect(jitterX, jitterY);
        return this._vertexEffect;
      },
      initSwirlWithPow: function initSwirlWithPow(radius, power) {
        this._interpolation = new spine.Pow(power);
        this._vertexEffect = new spine.SwirlEffect(radius, this._interpolation);
        return this._vertexEffect;
      },
      initSwirlWithPowOut: function initSwirlWithPowOut(radius, power) {
        this._interpolation = new spine.PowOut(power);
        this._vertexEffect = new spine.SwirlEffect(radius, this._interpolation);
        return this._vertexEffect;
      },
      getJitterVertexEffect: function getJitterVertexEffect() {
        return this._vertexEffect;
      },
      getSwirlVertexEffect: function getSwirlVertexEffect() {
        return this._vertexEffect;
      },
      getVertexEffect: function getVertexEffect() {
        return this._vertexEffect;
      },
      getEffectType: function getEffectType() {
        return this._effectType;
      }
    });
    module.exports = sp.VertexEffectDelegate;
  }), {
    "./lib/spine": 293
  } ],
  300: [ (function(require, module, exports) {
    "use strict";
    var _global = "undefined" === typeof window ? global : window;
    _global.cc = _global.cc || {};
    cc.internal = cc.internal || {};
    require("./predefine");
    require("./polyfill/string");
    require("./polyfill/misc");
    require("./polyfill/array");
    require("./polyfill/object");
    require("./polyfill/array-buffer");
    require("./polyfill/number");
    true;
    require("./polyfill/typescript");
    require("./cocos2d/core/predefine");
    true;
    require("./cocos2d");
    require("./extends");
    false;
    module.exports = _global.cc;
  }), {
    "./cocos2d": 237,
    "./cocos2d/core/predefine": 162,
    "./extends": 276,
    "./package": void 0,
    "./polyfill/array": 302,
    "./polyfill/array-buffer": 301,
    "./polyfill/misc": 303,
    "./polyfill/number": 304,
    "./polyfill/object": 305,
    "./polyfill/string": 306,
    "./polyfill/typescript": void 0,
    "./predefine": 307
  } ],
  301: [ (function(require, module, exports) {
    "use strict";
    if (!ArrayBuffer.isView) {
      var TypedArray = Object.getPrototypeOf(Int8Array);
      ArrayBuffer.isView = "function" === typeof TypedArray ? function(obj) {
        return obj instanceof TypedArray;
      } : function(obj) {
        if ("object" !== typeof obj) return false;
        var ctor = obj.constructor;
        return ctor === Float64Array || ctor === Float32Array || ctor === Uint8Array || ctor === Uint32Array || ctor === Int8Array;
      };
    }
  }), {} ],
  302: [ (function(require, module, exports) {
    "use strict";
    Array.isArray || (Array.isArray = function(arg) {
      return "[object Array]" === Object.prototype.toString.call(arg);
    });
    Array.prototype.find || (Array.prototype.find = function(callback) {
      var length = this.length;
      for (var i = 0; i < length; i++) {
        var element = this[i];
        if (callback.call(this, element, i, this)) return element;
      }
      return;
    });
    Array.prototype.includes || (Array.prototype.includes = function(value) {
      return -1 !== this.indexOf(value);
    });
  }), {} ],
  303: [ (function(require, module, exports) {
    "use strict";
    Math.sign || (Math.sign = function(x) {
      x = +x;
      if (0 === x || isNaN(x)) return x;
      return x > 0 ? 1 : -1;
    });
    Math.log2 || (Math.log2 = function(x) {
      return Math.log(x) * Math.LOG2E;
    });
    Number.isInteger || (Number.isInteger = function(value) {
      return "number" === typeof value && isFinite(value) && Math.floor(value) === value;
    });
    if ((false, false) || !console.time) {
      var Timer = window.performance || Date;
      var _timerTable = Object.create(null);
      console.time = function(label) {
        _timerTable[label] = Timer.now();
      };
      console.timeEnd = function(label) {
        var startTime = _timerTable[label];
        var duration = Timer.now() - startTime;
        console.log(label + ": " + duration + "ms");
      };
    }
  }), {} ],
  304: [ (function(require, module, exports) {
    "use strict";
    Number.parseFloat = Number.parseFloat || parseFloat;
    Number.parseInt = Number.parseInt || parseInt;
  }), {} ],
  305: [ (function(require, module, exports) {
    "use strict";
    Object.assign || (Object.assign = function(target, source) {
      return cc.js.mixin(target, source);
    });
    Object.getOwnPropertyDescriptors || (Object.getOwnPropertyDescriptors = function(obj) {
      var descriptors = {};
      var ownKeys = Object.getOwnPropertyNames(obj);
      Object.getOwnPropertySymbols && (ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(obj)));
      for (var i = 0; i < ownKeys.length; ++i) {
        var key = ownKeys[i];
        descriptors[key] = Object.getOwnPropertyDescriptor(obj, key);
      }
      return descriptors;
    });
  }), {} ],
  306: [ (function(require, module, exports) {
    "use strict";
    String.prototype.startsWith || (String.prototype.startsWith = function(searchString, position) {
      position = position || 0;
      return this.lastIndexOf(searchString, position) === position;
    });
    String.prototype.endsWith || (String.prototype.endsWith = function(searchString, position) {
      ("undefined" === typeof position || position > this.length) && (position = this.length);
      position -= searchString.length;
      var lastIndex = this.indexOf(searchString, position);
      return -1 !== lastIndex && lastIndex === position;
    });
    String.prototype.trimLeft || (String.prototype.trimLeft = function() {
      return this.replace(/^\s+/, "");
    });
  }), {} ],
  307: [ (function(require, module, exports) {
    "use strict";
    var _global = "undefined" === typeof window ? global : window;
    function defineMacro(name, defaultValue) {
      "undefined" === typeof _global[name] && (_global[name] = defaultValue);
    }
    function defineDeprecatedMacroGetter(name, defaultValue) {
      "undefined" === typeof _global[name] && Object.defineProperty(_global, name, {
        get: function get() {
          var recommandedUsage;
          "CC_WECHATGAMESUB" === name ? recommandedUsage = "cc.sys.platform === cc.sys.WECHAT_GAME_SUB" : "CC_WECHATGAME" === name ? recommandedUsage = "cc.sys.platform === cc.sys.WECHAT_GAME" : "CC_QQPLAY" === name && (recommandedUsage = "cc.sys.platform === cc.sys.QQ_PLAY");
          cc.warnID(1400, name, recommandedUsage);
          return defaultValue;
        }
      });
    }
    function defined(name) {
      return "object" === typeof _global[name];
    }
    defineMacro("CC_BUILD", false);
    true;
    _global.CC_BUILD = true;
    _global.CC_DEV = false;
    _global.CC_DEBUG = true;
    _global.CC_JSB = false;
    _global.CC_NATIVERENDERER = false;
    _global.CC_SUPPORT_JIT = false;
    _global.CC_PHYSICS_BUILTIN = false;
    _global.CC_PHYSICS_CANNON = false;
    _global.CC_EDITOR = false;
    _global.CC_PREVIEW = false;
    _global.CC_TEST = false;
    _global.CC_RUNTIME = false;
    _global.CC_JSB = false;
    var WECHATGAMESUB = !!(defined("wx") && wx.getSharedCanvas);
    var WECHATGAME = !!(defined("wx") && (wx.getSystemInfoSync || wx.getSharedCanvas));
    var QQPLAY = defined("bk");
    defineDeprecatedMacroGetter("CC_WECHATGAMESUB", WECHATGAMESUB);
    defineDeprecatedMacroGetter("CC_WECHATGAME", WECHATGAME);
    defineDeprecatedMacroGetter("CC_QQPLAY", QQPLAY);
    false;
    var engineVersion = "2.4.0";
    _global["CocosEngine"] = cc.ENGINE_VERSION = engineVersion;
  }), {} ]
}, {}, [ 300 ]);