{"version":3,"sources":["jsdelivr-header.js","/npm/box2dweb@2.1.0-b/box2d.js"],"names":[],"mappings":"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","file":"/npm/box2dweb@2.1.0-b/box2d.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.37.0.\n * Original file: /npm/box2dweb@2.1.0-b/box2d.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","/*\n* Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com\n*\n* This software is provided 'as-is', without any express or implied\n* warranty.  In no event will the authors be held liable for any damages\n* arising from the use of this software.\n* Permission is granted to anyone to use this software for any purpose,\n* including commercial applications, and to alter it and redistribute it\n* freely, subject to the following restrictions:\n* 1. The origin of this software must not be misrepresented; you must not\n* claim that you wrote the original software. If you use this software\n* in a product, an acknowledgment in the product documentation would be\n* appreciated but is not required.\n* 2. Altered source versions must be plainly marked as such, and must not be\n* misrepresented as being the original software.\n* 3. This notice may not be removed or altered from any source distribution.\n*/\n\"use strict\"\n\nvar Box2D = {};\n\n(function (a2j, undefined) {\n   \n   function emptyFn() {};\n   a2j.inherit = function(cls, base) {\n      var tmpCtr = cls;\n      emptyFn.prototype = base.prototype;\n      cls.prototype = new emptyFn;\n      cls.prototype.constructor = tmpCtr;\n   };\n   \n   a2j.generateCallback = function generateCallback(context, cb) {\n      return function () {\n         cb.apply(context, arguments);\n      };\n   };\n   \n   a2j.NVector = function NVector(length) {\n      if (length === undefined) length = 0;\n      var tmp = new Array(length || 0);\n      for (var i = 0; i < length; ++i)\n      tmp[i] = 0;\n      return tmp;\n   };\n   \n   a2j.is = function is(o1, o2) {\n      if (o1 === null) return false;\n      if ((o2 instanceof Function) && (o1 instanceof o2)) return true;\n      if ((o1.constructor.__implements != undefined) && (o1.constructor.__implements[o2])) return true;\n      return false;\n   };\n   \n   a2j.parseUInt = function(v) {\n      return Math.abs(parseInt(v));\n   }\n   \n})(Box2D);\n\n//#TODO remove assignments from global namespace\nvar Vector = Array;\nvar Vector_a2j_Number = Box2D.NVector;\n//package structure\nif (typeof(Box2D) === \"undefined\") Box2D = {};\nif (typeof(Box2D.Collision) === \"undefined\") Box2D.Collision = {};\nif (typeof(Box2D.Collision.Shapes) === \"undefined\") Box2D.Collision.Shapes = {};\nif (typeof(Box2D.Common) === \"undefined\") Box2D.Common = {};\nif (typeof(Box2D.Common.Math) === \"undefined\") Box2D.Common.Math = {};\nif (typeof(Box2D.Dynamics) === \"undefined\") Box2D.Dynamics = {};\nif (typeof(Box2D.Dynamics.Contacts) === \"undefined\") Box2D.Dynamics.Contacts = {};\nif (typeof(Box2D.Dynamics.Controllers) === \"undefined\") Box2D.Dynamics.Controllers = {};\nif (typeof(Box2D.Dynamics.Joints) === \"undefined\") Box2D.Dynamics.Joints = {};\n//pre-definitions\n(function () {\n   Box2D.Collision.IBroadPhase = 'Box2D.Collision.IBroadPhase';\n\n   function b2AABB() {\n      b2AABB.b2AABB.apply(this, arguments);\n   };\n   Box2D.Collision.b2AABB = b2AABB;\n\n   function b2Bound() {\n      b2Bound.b2Bound.apply(this, arguments);\n   };\n   Box2D.Collision.b2Bound = b2Bound;\n\n   function b2BoundValues() {\n      b2BoundValues.b2BoundValues.apply(this, arguments);\n      if (this.constructor === b2BoundValues) this.b2BoundValues.apply(this, arguments);\n   };\n   Box2D.Collision.b2BoundValues = b2BoundValues;\n\n   function b2Collision() {\n      b2Collision.b2Collision.apply(this, arguments);\n   };\n   Box2D.Collision.b2Collision = b2Collision;\n\n   function b2ContactID() {\n      b2ContactID.b2ContactID.apply(this, arguments);\n      if (this.constructor === b2ContactID) this.b2ContactID.apply(this, arguments);\n   };\n   Box2D.Collision.b2ContactID = b2ContactID;\n\n   function b2ContactPoint() {\n      b2ContactPoint.b2ContactPoint.apply(this, arguments);\n   };\n   Box2D.Collision.b2ContactPoint = b2ContactPoint;\n\n   function b2Distance() {\n      b2Distance.b2Distance.apply(this, arguments);\n   };\n   Box2D.Collision.b2Distance = b2Distance;\n\n   function b2DistanceInput() {\n      b2DistanceInput.b2DistanceInput.apply(this, arguments);\n   };\n   Box2D.Collision.b2DistanceInput = b2DistanceInput;\n\n   function b2DistanceOutput() {\n      b2DistanceOutput.b2DistanceOutput.apply(this, arguments);\n   };\n   Box2D.Collision.b2DistanceOutput = b2DistanceOutput;\n\n   function b2DistanceProxy() {\n      b2DistanceProxy.b2DistanceProxy.apply(this, arguments);\n   };\n   Box2D.Collision.b2DistanceProxy = b2DistanceProxy;\n\n   function b2DynamicTree() {\n      b2DynamicTree.b2DynamicTree.apply(this, arguments);\n      if (this.constructor === b2DynamicTree) this.b2DynamicTree.apply(this, arguments);\n   };\n   Box2D.Collision.b2DynamicTree = b2DynamicTree;\n\n   function b2DynamicTreeBroadPhase() {\n      b2DynamicTreeBroadPhase.b2DynamicTreeBroadPhase.apply(this, arguments);\n   };\n   Box2D.Collision.b2DynamicTreeBroadPhase = b2DynamicTreeBroadPhase;\n\n   function b2DynamicTreeNode() {\n      b2DynamicTreeNode.b2DynamicTreeNode.apply(this, arguments);\n   };\n   Box2D.Collision.b2DynamicTreeNode = b2DynamicTreeNode;\n\n   function b2DynamicTreePair() {\n      b2DynamicTreePair.b2DynamicTreePair.apply(this, arguments);\n   };\n   Box2D.Collision.b2DynamicTreePair = b2DynamicTreePair;\n\n   function b2Manifold() {\n      b2Manifold.b2Manifold.apply(this, arguments);\n      if (this.constructor === b2Manifold) this.b2Manifold.apply(this, arguments);\n   };\n   Box2D.Collision.b2Manifold = b2Manifold;\n\n   function b2ManifoldPoint() {\n      b2ManifoldPoint.b2ManifoldPoint.apply(this, arguments);\n      if (this.constructor === b2ManifoldPoint) this.b2ManifoldPoint.apply(this, arguments);\n   };\n   Box2D.Collision.b2ManifoldPoint = b2ManifoldPoint;\n\n   function b2Point() {\n      b2Point.b2Point.apply(this, arguments);\n   };\n   Box2D.Collision.b2Point = b2Point;\n\n   function b2RayCastInput() {\n      b2RayCastInput.b2RayCastInput.apply(this, arguments);\n      if (this.constructor === b2RayCastInput) this.b2RayCastInput.apply(this, arguments);\n   };\n   Box2D.Collision.b2RayCastInput = b2RayCastInput;\n\n   function b2RayCastOutput() {\n      b2RayCastOutput.b2RayCastOutput.apply(this, arguments);\n   };\n   Box2D.Collision.b2RayCastOutput = b2RayCastOutput;\n\n   function b2Segment() {\n      b2Segment.b2Segment.apply(this, arguments);\n   };\n   Box2D.Collision.b2Segment = b2Segment;\n\n   function b2SeparationFunction() {\n      b2SeparationFunction.b2SeparationFunction.apply(this, arguments);\n   };\n   Box2D.Collision.b2SeparationFunction = b2SeparationFunction;\n\n   function b2Simplex() {\n      b2Simplex.b2Simplex.apply(this, arguments);\n      if (this.constructor === b2Simplex) this.b2Simplex.apply(this, arguments);\n   };\n   Box2D.Collision.b2Simplex = b2Simplex;\n\n   function b2SimplexCache() {\n      b2SimplexCache.b2SimplexCache.apply(this, arguments);\n   };\n   Box2D.Collision.b2SimplexCache = b2SimplexCache;\n\n   function b2SimplexVertex() {\n      b2SimplexVertex.b2SimplexVertex.apply(this, arguments);\n   };\n   Box2D.Collision.b2SimplexVertex = b2SimplexVertex;\n\n   function b2TimeOfImpact() {\n      b2TimeOfImpact.b2TimeOfImpact.apply(this, arguments);\n   };\n   Box2D.Collision.b2TimeOfImpact = b2TimeOfImpact;\n\n   function b2TOIInput() {\n      b2TOIInput.b2TOIInput.apply(this, arguments);\n   };\n   Box2D.Collision.b2TOIInput = b2TOIInput;\n\n   function b2WorldManifold() {\n      b2WorldManifold.b2WorldManifold.apply(this, arguments);\n      if (this.constructor === b2WorldManifold) this.b2WorldManifold.apply(this, arguments);\n   };\n   Box2D.Collision.b2WorldManifold = b2WorldManifold;\n\n   function ClipVertex() {\n      ClipVertex.ClipVertex.apply(this, arguments);\n   };\n   Box2D.Collision.ClipVertex = ClipVertex;\n\n   function Features() {\n      Features.Features.apply(this, arguments);\n   };\n   Box2D.Collision.Features = Features;\n\n   function b2CircleShape() {\n      b2CircleShape.b2CircleShape.apply(this, arguments);\n      if (this.constructor === b2CircleShape) this.b2CircleShape.apply(this, arguments);\n   };\n   Box2D.Collision.Shapes.b2CircleShape = b2CircleShape;\n\n   function b2EdgeChainDef() {\n      b2EdgeChainDef.b2EdgeChainDef.apply(this, arguments);\n      if (this.constructor === b2EdgeChainDef) this.b2EdgeChainDef.apply(this, arguments);\n   };\n   Box2D.Collision.Shapes.b2EdgeChainDef = b2EdgeChainDef;\n\n   function b2EdgeShape() {\n      b2EdgeShape.b2EdgeShape.apply(this, arguments);\n      if (this.constructor === b2EdgeShape) this.b2EdgeShape.apply(this, arguments);\n   };\n   Box2D.Collision.Shapes.b2EdgeShape = b2EdgeShape;\n\n   function b2MassData() {\n      b2MassData.b2MassData.apply(this, arguments);\n   };\n   Box2D.Collision.Shapes.b2MassData = b2MassData;\n\n   function b2PolygonShape() {\n      b2PolygonShape.b2PolygonShape.apply(this, arguments);\n      if (this.constructor === b2PolygonShape) this.b2PolygonShape.apply(this, arguments);\n   };\n   Box2D.Collision.Shapes.b2PolygonShape = b2PolygonShape;\n\n   function b2Shape() {\n      b2Shape.b2Shape.apply(this, arguments);\n      if (this.constructor === b2Shape) this.b2Shape.apply(this, arguments);\n   };\n   Box2D.Collision.Shapes.b2Shape = b2Shape;\n   Box2D.Common.b2internal = 'Box2D.Common.b2internal';\n\n   function b2Color() {\n      b2Color.b2Color.apply(this, arguments);\n      if (this.constructor === b2Color) this.b2Color.apply(this, arguments);\n   };\n   Box2D.Common.b2Color = b2Color;\n\n   function b2Settings() {\n      b2Settings.b2Settings.apply(this, arguments);\n   };\n   Box2D.Common.b2Settings = b2Settings;\n\n   function b2Mat22() {\n      b2Mat22.b2Mat22.apply(this, arguments);\n      if (this.constructor === b2Mat22) this.b2Mat22.apply(this, arguments);\n   };\n   Box2D.Common.Math.b2Mat22 = b2Mat22;\n\n   function b2Mat33() {\n      b2Mat33.b2Mat33.apply(this, arguments);\n      if (this.constructor === b2Mat33) this.b2Mat33.apply(this, arguments);\n   };\n   Box2D.Common.Math.b2Mat33 = b2Mat33;\n\n   function b2Math() {\n      b2Math.b2Math.apply(this, arguments);\n   };\n   Box2D.Common.Math.b2Math = b2Math;\n\n   function b2Sweep() {\n      b2Sweep.b2Sweep.apply(this, arguments);\n   };\n   Box2D.Common.Math.b2Sweep = b2Sweep;\n\n   function b2Transform() {\n      b2Transform.b2Transform.apply(this, arguments);\n      if (this.constructor === b2Transform) this.b2Transform.apply(this, arguments);\n   };\n   Box2D.Common.Math.b2Transform = b2Transform;\n\n   function b2Vec2() {\n      b2Vec2.b2Vec2.apply(this, arguments);\n      if (this.constructor === b2Vec2) this.b2Vec2.apply(this, arguments);\n   };\n   Box2D.Common.Math.b2Vec2 = b2Vec2;\n\n   function b2Vec3() {\n      b2Vec3.b2Vec3.apply(this, arguments);\n      if (this.constructor === b2Vec3) this.b2Vec3.apply(this, arguments);\n   };\n   Box2D.Common.Math.b2Vec3 = b2Vec3;\n\n   function b2Body() {\n      b2Body.b2Body.apply(this, arguments);\n      if (this.constructor === b2Body) this.b2Body.apply(this, arguments);\n   };\n   Box2D.Dynamics.b2Body = b2Body;\n\n   function b2BodyDef() {\n      b2BodyDef.b2BodyDef.apply(this, arguments);\n      if (this.constructor === b2BodyDef) this.b2BodyDef.apply(this, arguments);\n   };\n   Box2D.Dynamics.b2BodyDef = b2BodyDef;\n\n   function b2ContactFilter() {\n      b2ContactFilter.b2ContactFilter.apply(this, arguments);\n   };\n   Box2D.Dynamics.b2ContactFilter = b2ContactFilter;\n\n   function b2ContactImpulse() {\n      b2ContactImpulse.b2ContactImpulse.apply(this, arguments);\n   };\n   Box2D.Dynamics.b2ContactImpulse = b2ContactImpulse;\n\n   function b2ContactListener() {\n      b2ContactListener.b2ContactListener.apply(this, arguments);\n   };\n   Box2D.Dynamics.b2ContactListener = b2ContactListener;\n\n   function b2ContactManager() {\n      b2ContactManager.b2ContactManager.apply(this, arguments);\n      if (this.constructor === b2ContactManager) this.b2ContactManager.apply(this, arguments);\n   };\n   Box2D.Dynamics.b2ContactManager = b2ContactManager;\n\n   function b2DebugDraw() {\n      b2DebugDraw.b2DebugDraw.apply(this, arguments);\n      if (this.constructor === b2DebugDraw) this.b2DebugDraw.apply(this, arguments);\n   };\n   Box2D.Dynamics.b2DebugDraw = b2DebugDraw;\n\n   function b2DestructionListener() {\n      b2DestructionListener.b2DestructionListener.apply(this, arguments);\n   };\n   Box2D.Dynamics.b2DestructionListener = b2DestructionListener;\n\n   function b2FilterData() {\n      b2FilterData.b2FilterData.apply(this, arguments);\n   };\n   Box2D.Dynamics.b2FilterData = b2FilterData;\n\n   function b2Fixture() {\n      b2Fixture.b2Fixture.apply(this, arguments);\n      if (this.constructor === b2Fixture) this.b2Fixture.apply(this, arguments);\n   };\n   Box2D.Dynamics.b2Fixture = b2Fixture;\n\n   function b2FixtureDef() {\n      b2FixtureDef.b2FixtureDef.apply(this, arguments);\n      if (this.constructor === b2FixtureDef) this.b2FixtureDef.apply(this, arguments);\n   };\n   Box2D.Dynamics.b2FixtureDef = b2FixtureDef;\n\n   function b2Island() {\n      b2Island.b2Island.apply(this, arguments);\n      if (this.constructor === b2Island) this.b2Island.apply(this, arguments);\n   };\n   Box2D.Dynamics.b2Island = b2Island;\n\n   function b2TimeStep() {\n      b2TimeStep.b2TimeStep.apply(this, arguments);\n   };\n   Box2D.Dynamics.b2TimeStep = b2TimeStep;\n\n   function b2World() {\n      b2World.b2World.apply(this, arguments);\n      if (this.constructor === b2World) this.b2World.apply(this, arguments);\n   };\n   Box2D.Dynamics.b2World = b2World;\n\n   function b2CircleContact() {\n      b2CircleContact.b2CircleContact.apply(this, arguments);\n   };\n   Box2D.Dynamics.Contacts.b2CircleContact = b2CircleContact;\n\n   function b2Contact() {\n      b2Contact.b2Contact.apply(this, arguments);\n      if (this.constructor === b2Contact) this.b2Contact.apply(this, arguments);\n   };\n   Box2D.Dynamics.Contacts.b2Contact = b2Contact;\n\n   function b2ContactConstraint() {\n      b2ContactConstraint.b2ContactConstraint.apply(this, arguments);\n      if (this.constructor === b2ContactConstraint) this.b2ContactConstraint.apply(this, arguments);\n   };\n   Box2D.Dynamics.Contacts.b2ContactConstraint = b2ContactConstraint;\n\n   function b2ContactConstraintPoint() {\n      b2ContactConstraintPoint.b2ContactConstraintPoint.apply(this, arguments);\n   };\n   Box2D.Dynamics.Contacts.b2ContactConstraintPoint = b2ContactConstraintPoint;\n\n   function b2ContactEdge() {\n      b2ContactEdge.b2ContactEdge.apply(this, arguments);\n   };\n   Box2D.Dynamics.Contacts.b2ContactEdge = b2ContactEdge;\n\n   function b2ContactFactory() {\n      b2ContactFactory.b2ContactFactory.apply(this, arguments);\n      if (this.constructor === b2ContactFactory) this.b2ContactFactory.apply(this, arguments);\n   };\n   Box2D.Dynamics.Contacts.b2ContactFactory = b2ContactFactory;\n\n   function b2ContactRegister() {\n      b2ContactRegister.b2ContactRegister.apply(this, arguments);\n   };\n   Box2D.Dynamics.Contacts.b2ContactRegister = b2ContactRegister;\n\n   function b2ContactResult() {\n      b2ContactResult.b2ContactResult.apply(this, arguments);\n   };\n   Box2D.Dynamics.Contacts.b2ContactResult = b2ContactResult;\n\n   function b2ContactSolver() {\n      b2ContactSolver.b2ContactSolver.apply(this, arguments);\n      if (this.constructor === b2ContactSolver) this.b2ContactSolver.apply(this, arguments);\n   };\n   Box2D.Dynamics.Contacts.b2ContactSolver = b2ContactSolver;\n\n   function b2EdgeAndCircleContact() {\n      b2EdgeAndCircleContact.b2EdgeAndCircleContact.apply(this, arguments);\n   };\n   Box2D.Dynamics.Contacts.b2EdgeAndCircleContact = b2EdgeAndCircleContact;\n\n   function b2NullContact() {\n      b2NullContact.b2NullContact.apply(this, arguments);\n      if (this.constructor === b2NullContact) this.b2NullContact.apply(this, arguments);\n   };\n   Box2D.Dynamics.Contacts.b2NullContact = b2NullContact;\n\n   function b2PolyAndCircleContact() {\n      b2PolyAndCircleContact.b2PolyAndCircleContact.apply(this, arguments);\n   };\n   Box2D.Dynamics.Contacts.b2PolyAndCircleContact = b2PolyAndCircleContact;\n\n   function b2PolyAndEdgeContact() {\n      b2PolyAndEdgeContact.b2PolyAndEdgeContact.apply(this, arguments);\n   };\n   Box2D.Dynamics.Contacts.b2PolyAndEdgeContact = b2PolyAndEdgeContact;\n\n   function b2PolygonContact() {\n      b2PolygonContact.b2PolygonContact.apply(this, arguments);\n   };\n   Box2D.Dynamics.Contacts.b2PolygonContact = b2PolygonContact;\n\n   function b2PositionSolverManifold() {\n      b2PositionSolverManifold.b2PositionSolverManifold.apply(this, arguments);\n      if (this.constructor === b2PositionSolverManifold) this.b2PositionSolverManifold.apply(this, arguments);\n   };\n   Box2D.Dynamics.Contacts.b2PositionSolverManifold = b2PositionSolverManifold;\n\n   function b2BuoyancyController() {\n      b2BuoyancyController.b2BuoyancyController.apply(this, arguments);\n   };\n   Box2D.Dynamics.Controllers.b2BuoyancyController = b2BuoyancyController;\n\n   function b2ConstantAccelController() {\n      b2ConstantAccelController.b2ConstantAccelController.apply(this, arguments);\n   };\n   Box2D.Dynamics.Controllers.b2ConstantAccelController = b2ConstantAccelController;\n\n   function b2ConstantForceController() {\n      b2ConstantForceController.b2ConstantForceController.apply(this, arguments);\n   };\n   Box2D.Dynamics.Controllers.b2ConstantForceController = b2ConstantForceController;\n\n   function b2Controller() {\n      b2Controller.b2Controller.apply(this, arguments);\n   };\n   Box2D.Dynamics.Controllers.b2Controller = b2Controller;\n\n   function b2ControllerEdge() {\n      b2ControllerEdge.b2ControllerEdge.apply(this, arguments);\n   };\n   Box2D.Dynamics.Controllers.b2ControllerEdge = b2ControllerEdge;\n\n   function b2GravityController() {\n      b2GravityController.b2GravityController.apply(this, arguments);\n   };\n   Box2D.Dynamics.Controllers.b2GravityController = b2GravityController;\n\n   function b2TensorDampingController() {\n      b2TensorDampingController.b2TensorDampingController.apply(this, arguments);\n   };\n   Box2D.Dynamics.Controllers.b2TensorDampingController = b2TensorDampingController;\n\n   function b2DistanceJoint() {\n      b2DistanceJoint.b2DistanceJoint.apply(this, arguments);\n      if (this.constructor === b2DistanceJoint) this.b2DistanceJoint.apply(this, arguments);\n   };\n   Box2D.Dynamics.Joints.b2DistanceJoint = b2DistanceJoint;\n\n   function b2DistanceJointDef() {\n      b2DistanceJointDef.b2DistanceJointDef.apply(this, arguments);\n      if (this.constructor === b2DistanceJointDef) this.b2DistanceJointDef.apply(this, arguments);\n   };\n   Box2D.Dynamics.Joints.b2DistanceJointDef = b2DistanceJointDef;\n\n   function b2FrictionJoint() {\n      b2FrictionJoint.b2FrictionJoint.apply(this, arguments);\n      if (this.constructor === b2FrictionJoint) this.b2FrictionJoint.apply(this, arguments);\n   };\n   Box2D.Dynamics.Joints.b2FrictionJoint = b2FrictionJoint;\n\n   function b2FrictionJointDef() {\n      b2FrictionJointDef.b2FrictionJointDef.apply(this, arguments);\n      if (this.constructor === b2FrictionJointDef) this.b2FrictionJointDef.apply(this, arguments);\n   };\n   Box2D.Dynamics.Joints.b2FrictionJointDef = b2FrictionJointDef;\n\n   function b2GearJoint() {\n      b2GearJoint.b2GearJoint.apply(this, arguments);\n      if (this.constructor === b2GearJoint) this.b2GearJoint.apply(this, arguments);\n   };\n   Box2D.Dynamics.Joints.b2GearJoint = b2GearJoint;\n\n   function b2GearJointDef() {\n      b2GearJointDef.b2GearJointDef.apply(this, arguments);\n      if (this.constructor === b2GearJointDef) this.b2GearJointDef.apply(this, arguments);\n   };\n   Box2D.Dynamics.Joints.b2GearJointDef = b2GearJointDef;\n\n   function b2Jacobian() {\n      b2Jacobian.b2Jacobian.apply(this, arguments);\n   };\n   Box2D.Dynamics.Joints.b2Jacobian = b2Jacobian;\n\n   function b2Joint() {\n      b2Joint.b2Joint.apply(this, arguments);\n      if (this.constructor === b2Joint) this.b2Joint.apply(this, arguments);\n   };\n   Box2D.Dynamics.Joints.b2Joint = b2Joint;\n\n   function b2JointDef() {\n      b2JointDef.b2JointDef.apply(this, arguments);\n      if (this.constructor === b2JointDef) this.b2JointDef.apply(this, arguments);\n   };\n   Box2D.Dynamics.Joints.b2JointDef = b2JointDef;\n\n   function b2JointEdge() {\n      b2JointEdge.b2JointEdge.apply(this, arguments);\n   };\n   Box2D.Dynamics.Joints.b2JointEdge = b2JointEdge;\n\n   function b2LineJoint() {\n      b2LineJoint.b2LineJoint.apply(this, arguments);\n      if (this.constructor === b2LineJoint) this.b2LineJoint.apply(this, arguments);\n   };\n   Box2D.Dynamics.Joints.b2LineJoint = b2LineJoint;\n\n   function b2LineJointDef() {\n      b2LineJointDef.b2LineJointDef.apply(this, arguments);\n      if (this.constructor === b2LineJointDef) this.b2LineJointDef.apply(this, arguments);\n   };\n   Box2D.Dynamics.Joints.b2LineJointDef = b2LineJointDef;\n\n   function b2MouseJoint() {\n      b2MouseJoint.b2MouseJoint.apply(this, arguments);\n      if (this.constructor === b2MouseJoint) this.b2MouseJoint.apply(this, arguments);\n   };\n   Box2D.Dynamics.Joints.b2MouseJoint = b2MouseJoint;\n\n   function b2MouseJointDef() {\n      b2MouseJointDef.b2MouseJointDef.apply(this, arguments);\n      if (this.constructor === b2MouseJointDef) this.b2MouseJointDef.apply(this, arguments);\n   };\n   Box2D.Dynamics.Joints.b2MouseJointDef = b2MouseJointDef;\n\n   function b2PrismaticJoint() {\n      b2PrismaticJoint.b2PrismaticJoint.apply(this, arguments);\n      if (this.constructor === b2PrismaticJoint) this.b2PrismaticJoint.apply(this, arguments);\n   };\n   Box2D.Dynamics.Joints.b2PrismaticJoint = b2PrismaticJoint;\n\n   function b2PrismaticJointDef() {\n      b2PrismaticJointDef.b2PrismaticJointDef.apply(this, arguments);\n      if (this.constructor === b2PrismaticJointDef) this.b2PrismaticJointDef.apply(this, arguments);\n   };\n   Box2D.Dynamics.Joints.b2PrismaticJointDef = b2PrismaticJointDef;\n\n   function b2PulleyJoint() {\n      b2PulleyJoint.b2PulleyJoint.apply(this, arguments);\n      if (this.constructor === b2PulleyJoint) this.b2PulleyJoint.apply(this, arguments);\n   };\n   Box2D.Dynamics.Joints.b2PulleyJoint = b2PulleyJoint;\n\n   function b2PulleyJointDef() {\n      b2PulleyJointDef.b2PulleyJointDef.apply(this, arguments);\n      if (this.constructor === b2PulleyJointDef) this.b2PulleyJointDef.apply(this, arguments);\n   };\n   Box2D.Dynamics.Joints.b2PulleyJointDef = b2PulleyJointDef;\n\n   function b2RevoluteJoint() {\n      b2RevoluteJoint.b2RevoluteJoint.apply(this, arguments);\n      if (this.constructor === b2RevoluteJoint) this.b2RevoluteJoint.apply(this, arguments);\n   };\n   Box2D.Dynamics.Joints.b2RevoluteJoint = b2RevoluteJoint;\n\n   function b2RevoluteJointDef() {\n      b2RevoluteJointDef.b2RevoluteJointDef.apply(this, arguments);\n      if (this.constructor === b2RevoluteJointDef) this.b2RevoluteJointDef.apply(this, arguments);\n   };\n   Box2D.Dynamics.Joints.b2RevoluteJointDef = b2RevoluteJointDef;\n\n   function b2WeldJoint() {\n      b2WeldJoint.b2WeldJoint.apply(this, arguments);\n      if (this.constructor === b2WeldJoint) this.b2WeldJoint.apply(this, arguments);\n   };\n   Box2D.Dynamics.Joints.b2WeldJoint = b2WeldJoint;\n\n   function b2WeldJointDef() {\n      b2WeldJointDef.b2WeldJointDef.apply(this, arguments);\n      if (this.constructor === b2WeldJointDef) this.b2WeldJointDef.apply(this, arguments);\n   };\n   Box2D.Dynamics.Joints.b2WeldJointDef = b2WeldJointDef;\n})(); //definitions\nBox2D.postDefs = [];\n(function () {\n   var b2CircleShape = Box2D.Collision.Shapes.b2CircleShape,\n      b2EdgeChainDef = Box2D.Collision.Shapes.b2EdgeChainDef,\n      b2EdgeShape = Box2D.Collision.Shapes.b2EdgeShape,\n      b2MassData = Box2D.Collision.Shapes.b2MassData,\n      b2PolygonShape = Box2D.Collision.Shapes.b2PolygonShape,\n      b2Shape = Box2D.Collision.Shapes.b2Shape,\n      b2Color = Box2D.Common.b2Color,\n      b2internal = Box2D.Common.b2internal,\n      b2Settings = Box2D.Common.b2Settings,\n      b2Mat22 = Box2D.Common.Math.b2Mat22,\n      b2Mat33 = Box2D.Common.Math.b2Mat33,\n      b2Math = Box2D.Common.Math.b2Math,\n      b2Sweep = Box2D.Common.Math.b2Sweep,\n      b2Transform = Box2D.Common.Math.b2Transform,\n      b2Vec2 = Box2D.Common.Math.b2Vec2,\n      b2Vec3 = Box2D.Common.Math.b2Vec3,\n      b2AABB = Box2D.Collision.b2AABB,\n      b2Bound = Box2D.Collision.b2Bound,\n      b2BoundValues = Box2D.Collision.b2BoundValues,\n      b2Collision = Box2D.Collision.b2Collision,\n      b2ContactID = Box2D.Collision.b2ContactID,\n      b2ContactPoint = Box2D.Collision.b2ContactPoint,\n      b2Distance = Box2D.Collision.b2Distance,\n      b2DistanceInput = Box2D.Collision.b2DistanceInput,\n      b2DistanceOutput = Box2D.Collision.b2DistanceOutput,\n      b2DistanceProxy = Box2D.Collision.b2DistanceProxy,\n      b2DynamicTree = Box2D.Collision.b2DynamicTree,\n      b2DynamicTreeBroadPhase = Box2D.Collision.b2DynamicTreeBroadPhase,\n      b2DynamicTreeNode = Box2D.Collision.b2DynamicTreeNode,\n      b2DynamicTreePair = Box2D.Collision.b2DynamicTreePair,\n      b2Manifold = Box2D.Collision.b2Manifold,\n      b2ManifoldPoint = Box2D.Collision.b2ManifoldPoint,\n      b2Point = Box2D.Collision.b2Point,\n      b2RayCastInput = Box2D.Collision.b2RayCastInput,\n      b2RayCastOutput = Box2D.Collision.b2RayCastOutput,\n      b2Segment = Box2D.Collision.b2Segment,\n      b2SeparationFunction = Box2D.Collision.b2SeparationFunction,\n      b2Simplex = Box2D.Collision.b2Simplex,\n      b2SimplexCache = Box2D.Collision.b2SimplexCache,\n      b2SimplexVertex = Box2D.Collision.b2SimplexVertex,\n      b2TimeOfImpact = Box2D.Collision.b2TimeOfImpact,\n      b2TOIInput = Box2D.Collision.b2TOIInput,\n      b2WorldManifold = Box2D.Collision.b2WorldManifold,\n      ClipVertex = Box2D.Collision.ClipVertex,\n      Features = Box2D.Collision.Features,\n      IBroadPhase = Box2D.Collision.IBroadPhase;\n\n   b2AABB.b2AABB = function () {\n      this.lowerBound = new b2Vec2();\n      this.upperBound = new b2Vec2();\n   };\n   b2AABB.prototype.IsValid = function () {\n      var dX = this.upperBound.x - this.lowerBound.x;\n      var dY = this.upperBound.y - this.lowerBound.y;\n      var valid = dX >= 0.0 && dY >= 0.0;\n      valid = valid && this.lowerBound.IsValid() && this.upperBound.IsValid();\n      return valid;\n   }\n   b2AABB.prototype.GetCenter = function () {\n      return new b2Vec2((this.lowerBound.x + this.upperBound.x) / 2, (this.lowerBound.y + this.upperBound.y) / 2);\n   }\n   b2AABB.prototype.GetExtents = function () {\n      return new b2Vec2((this.upperBound.x - this.lowerBound.x) / 2, (this.upperBound.y - this.lowerBound.y) / 2);\n   }\n   b2AABB.prototype.Contains = function (aabb) {\n      var result = true;\n      result = result && this.lowerBound.x <= aabb.lowerBound.x;\n      result = result && this.lowerBound.y <= aabb.lowerBound.y;\n      result = result && aabb.upperBound.x <= this.upperBound.x;\n      result = result && aabb.upperBound.y <= this.upperBound.y;\n      return result;\n   }\n   b2AABB.prototype.RayCast = function (output, input) {\n      var tmin = (-Number.MAX_VALUE);\n      var tmax = Number.MAX_VALUE;\n      var pX = input.p1.x;\n      var pY = input.p1.y;\n      var dX = input.p2.x - input.p1.x;\n      var dY = input.p2.y - input.p1.y;\n      var absDX = Math.abs(dX);\n      var absDY = Math.abs(dY);\n      var normal = output.normal;\n      var inv_d = 0;\n      var t1 = 0;\n      var t2 = 0;\n      var t3 = 0;\n      var s = 0; {\n         if (absDX < Number.MIN_VALUE) {\n            if (pX < this.lowerBound.x || this.upperBound.x < pX) return false;\n         }\n         else {\n            inv_d = 1.0 / dX;\n            t1 = (this.lowerBound.x - pX) * inv_d;\n            t2 = (this.upperBound.x - pX) * inv_d;\n            s = (-1.0);\n            if (t1 > t2) {\n               t3 = t1;\n               t1 = t2;\n               t2 = t3;\n               s = 1.0;\n            }\n            if (t1 > tmin) {\n               normal.x = s;\n               normal.y = 0;\n               tmin = t1;\n            }\n            tmax = Math.min(tmax, t2);\n            if (tmin > tmax) return false;\n         }\n      } {\n         if (absDY < Number.MIN_VALUE) {\n            if (pY < this.lowerBound.y || this.upperBound.y < pY) return false;\n         }\n         else {\n            inv_d = 1.0 / dY;\n            t1 = (this.lowerBound.y - pY) * inv_d;\n            t2 = (this.upperBound.y - pY) * inv_d;\n            s = (-1.0);\n            if (t1 > t2) {\n               t3 = t1;\n               t1 = t2;\n               t2 = t3;\n               s = 1.0;\n            }\n            if (t1 > tmin) {\n               normal.y = s;\n               normal.x = 0;\n               tmin = t1;\n            }\n            tmax = Math.min(tmax, t2);\n            if (tmin > tmax) return false;\n         }\n      }\n      output.fraction = tmin;\n      return true;\n   }\n   b2AABB.prototype.TestOverlap = function (other) {\n      var d1X = other.lowerBound.x - this.upperBound.x;\n      var d1Y = other.lowerBound.y - this.upperBound.y;\n      var d2X = this.lowerBound.x - other.upperBound.x;\n      var d2Y = this.lowerBound.y - other.upperBound.y;\n      if (d1X > 0.0 || d1Y > 0.0) return false;\n      if (d2X > 0.0 || d2Y > 0.0) return false;\n      return true;\n   }\n   b2AABB.Combine = function (aabb1, aabb2) {\n      var aabb = new b2AABB();\n      aabb.Combine(aabb1, aabb2);\n      return aabb;\n   }\n   b2AABB.prototype.Combine = function (aabb1, aabb2) {\n      this.lowerBound.x = Math.min(aabb1.lowerBound.x, aabb2.lowerBound.x);\n      this.lowerBound.y = Math.min(aabb1.lowerBound.y, aabb2.lowerBound.y);\n      this.upperBound.x = Math.max(aabb1.upperBound.x, aabb2.upperBound.x);\n      this.upperBound.y = Math.max(aabb1.upperBound.y, aabb2.upperBound.y);\n   }\n   b2Bound.b2Bound = function () {};\n   b2Bound.prototype.IsLower = function () {\n      return (this.value & 1) == 0;\n   }\n   b2Bound.prototype.IsUpper = function () {\n      return (this.value & 1) == 1;\n   }\n   b2Bound.prototype.Swap = function (b) {\n      var tempValue = this.value;\n      var tempProxy = this.proxy;\n      var tempStabbingCount = this.stabbingCount;\n      this.value = b.value;\n      this.proxy = b.proxy;\n      this.stabbingCount = b.stabbingCount;\n      b.value = tempValue;\n      b.proxy = tempProxy;\n      b.stabbingCount = tempStabbingCount;\n   }\n   b2BoundValues.b2BoundValues = function () {};\n   b2BoundValues.prototype.b2BoundValues = function () {\n      this.lowerValues = new Vector_a2j_Number();\n      this.lowerValues[0] = 0.0;\n      this.lowerValues[1] = 0.0;\n      this.upperValues = new Vector_a2j_Number();\n      this.upperValues[0] = 0.0;\n      this.upperValues[1] = 0.0;\n   }\n   b2Collision.b2Collision = function () {};\n   b2Collision.ClipSegmentToLine = function (vOut, vIn, normal, offset) {\n      if (offset === undefined) offset = 0;\n      var cv;\n      var numOut = 0;\n      cv = vIn[0];\n      var vIn0 = cv.v;\n      cv = vIn[1];\n      var vIn1 = cv.v;\n      var distance0 = normal.x * vIn0.x + normal.y * vIn0.y - offset;\n      var distance1 = normal.x * vIn1.x + normal.y * vIn1.y - offset;\n      if (distance0 <= 0.0) vOut[numOut++].Set(vIn[0]);\n      if (distance1 <= 0.0) vOut[numOut++].Set(vIn[1]);\n      if (distance0 * distance1 < 0.0) {\n         var interp = distance0 / (distance0 - distance1);\n         cv = vOut[numOut];\n         var tVec = cv.v;\n         tVec.x = vIn0.x + interp * (vIn1.x - vIn0.x);\n         tVec.y = vIn0.y + interp * (vIn1.y - vIn0.y);\n         cv = vOut[numOut];\n         var cv2;\n         if (distance0 > 0.0) {\n            cv2 = vIn[0];\n            cv.id = cv2.id;\n         }\n         else {\n            cv2 = vIn[1];\n            cv.id = cv2.id;\n         }++numOut;\n      }\n      return numOut;\n   }\n   b2Collision.EdgeSeparation = function (poly1, xf1, edge1, poly2, xf2) {\n      if (edge1 === undefined) edge1 = 0;\n      var count1 = parseInt(poly1.m_vertexCount);\n      var vertices1 = poly1.m_vertices;\n      var normals1 = poly1.m_normals;\n      var count2 = parseInt(poly2.m_vertexCount);\n      var vertices2 = poly2.m_vertices;\n      var tMat;\n      var tVec;\n      tMat = xf1.R;\n      tVec = normals1[edge1];\n      var normal1WorldX = (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);\n      var normal1WorldY = (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);\n      tMat = xf2.R;\n      var normal1X = (tMat.col1.x * normal1WorldX + tMat.col1.y * normal1WorldY);\n      var normal1Y = (tMat.col2.x * normal1WorldX + tMat.col2.y * normal1WorldY);\n      var index = 0;\n      var minDot = Number.MAX_VALUE;\n      for (var i = 0; i < count2; ++i) {\n         tVec = vertices2[i];\n         var dot = tVec.x * normal1X + tVec.y * normal1Y;\n         if (dot < minDot) {\n            minDot = dot;\n            index = i;\n         }\n      }\n      tVec = vertices1[edge1];\n      tMat = xf1.R;\n      var v1X = xf1.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);\n      var v1Y = xf1.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);\n      tVec = vertices2[index];\n      tMat = xf2.R;\n      var v2X = xf2.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);\n      var v2Y = xf2.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);\n      v2X -= v1X;\n      v2Y -= v1Y;\n      var separation = v2X * normal1WorldX + v2Y * normal1WorldY;\n      return separation;\n   }\n   b2Collision.FindMaxSeparation = function (edgeIndex, poly1, xf1, poly2, xf2) {\n      var count1 = parseInt(poly1.m_vertexCount);\n      var normals1 = poly1.m_normals;\n      var tVec;\n      var tMat;\n      tMat = xf2.R;\n      tVec = poly2.m_centroid;\n      var dX = xf2.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);\n      var dY = xf2.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);\n      tMat = xf1.R;\n      tVec = poly1.m_centroid;\n      dX -= xf1.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);\n      dY -= xf1.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);\n      var dLocal1X = (dX * xf1.R.col1.x + dY * xf1.R.col1.y);\n      var dLocal1Y = (dX * xf1.R.col2.x + dY * xf1.R.col2.y);\n      var edge = 0;\n      var maxDot = (-Number.MAX_VALUE);\n      for (var i = 0; i < count1; ++i) {\n         tVec = normals1[i];\n         var dot = (tVec.x * dLocal1X + tVec.y * dLocal1Y);\n         if (dot > maxDot) {\n            maxDot = dot;\n            edge = i;\n         }\n      }\n      var s = b2Collision.EdgeSeparation(poly1, xf1, edge, poly2, xf2);\n      var prevEdge = parseInt(edge - 1 >= 0 ? edge - 1 : count1 - 1);\n      var sPrev = b2Collision.EdgeSeparation(poly1, xf1, prevEdge, poly2, xf2);\n      var nextEdge = parseInt(edge + 1 < count1 ? edge + 1 : 0);\n      var sNext = b2Collision.EdgeSeparation(poly1, xf1, nextEdge, poly2, xf2);\n      var bestEdge = 0;\n      var bestSeparation = 0;\n      var increment = 0;\n      if (sPrev > s && sPrev > sNext) {\n         increment = (-1);\n         bestEdge = prevEdge;\n         bestSeparation = sPrev;\n      }\n      else if (sNext > s) {\n         increment = 1;\n         bestEdge = nextEdge;\n         bestSeparation = sNext;\n      }\n      else {\n         edgeIndex[0] = edge;\n         return s;\n      }\n      while (true) {\n         if (increment == (-1)) edge = bestEdge - 1 >= 0 ? bestEdge - 1 : count1 - 1;\n         else edge = bestEdge + 1 < count1 ? bestEdge + 1 : 0;s = b2Collision.EdgeSeparation(poly1, xf1, edge, poly2, xf2);\n         if (s > bestSeparation) {\n            bestEdge = edge;\n            bestSeparation = s;\n         }\n         else {\n            break;\n         }\n      }\n      edgeIndex[0] = bestEdge;\n      return bestSeparation;\n   }\n   b2Collision.FindIncidentEdge = function (c, poly1, xf1, edge1, poly2, xf2) {\n      if (edge1 === undefined) edge1 = 0;\n      var count1 = parseInt(poly1.m_vertexCount);\n      var normals1 = poly1.m_normals;\n      var count2 = parseInt(poly2.m_vertexCount);\n      var vertices2 = poly2.m_vertices;\n      var normals2 = poly2.m_normals;\n      var tMat;\n      var tVec;\n      tMat = xf1.R;\n      tVec = normals1[edge1];\n      var normal1X = (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);\n      var normal1Y = (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);\n      tMat = xf2.R;\n      var tX = (tMat.col1.x * normal1X + tMat.col1.y * normal1Y);\n      normal1Y = (tMat.col2.x * normal1X + tMat.col2.y * normal1Y);\n      normal1X = tX;\n      var index = 0;\n      var minDot = Number.MAX_VALUE;\n      for (var i = 0; i < count2; ++i) {\n         tVec = normals2[i];\n         var dot = (normal1X * tVec.x + normal1Y * tVec.y);\n         if (dot < minDot) {\n            minDot = dot;\n            index = i;\n         }\n      }\n      var tClip;\n      var i1 = parseInt(index);\n      var i2 = parseInt(i1 + 1 < count2 ? i1 + 1 : 0);\n      tClip = c[0];\n      tVec = vertices2[i1];\n      tMat = xf2.R;\n      tClip.v.x = xf2.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);\n      tClip.v.y = xf2.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);\n      tClip.id.features.referenceEdge = edge1;\n      tClip.id.features.incidentEdge = i1;\n      tClip.id.features.incidentVertex = 0;\n      tClip = c[1];\n      tVec = vertices2[i2];\n      tMat = xf2.R;\n      tClip.v.x = xf2.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);\n      tClip.v.y = xf2.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);\n      tClip.id.features.referenceEdge = edge1;\n      tClip.id.features.incidentEdge = i2;\n      tClip.id.features.incidentVertex = 1;\n   }\n   b2Collision.MakeClipPointVector = function () {\n      var r = new Vector(2);\n      r[0] = new ClipVertex();\n      r[1] = new ClipVertex();\n      return r;\n   }\n   b2Collision.CollidePolygons = function (manifold, polyA, xfA, polyB, xfB) {\n      var cv;\n      manifold.m_pointCount = 0;\n      var totalRadius = polyA.m_radius + polyB.m_radius;\n      var edgeA = 0;\n      b2Collision.s_edgeAO[0] = edgeA;\n      var separationA = b2Collision.FindMaxSeparation(b2Collision.s_edgeAO, polyA, xfA, polyB, xfB);\n      edgeA = b2Collision.s_edgeAO[0];\n      if (separationA > totalRadius) return;\n      var edgeB = 0;\n      b2Collision.s_edgeBO[0] = edgeB;\n      var separationB = b2Collision.FindMaxSeparation(b2Collision.s_edgeBO, polyB, xfB, polyA, xfA);\n      edgeB = b2Collision.s_edgeBO[0];\n      if (separationB > totalRadius) return;\n      var poly1;\n      var poly2;\n      var xf1;\n      var xf2;\n      var edge1 = 0;\n      var flip = 0;\n      var k_relativeTol = 0.98;\n      var k_absoluteTol = 0.001;\n      var tMat;\n      if (separationB > k_relativeTol * separationA + k_absoluteTol) {\n         poly1 = polyB;\n         poly2 = polyA;\n         xf1 = xfB;\n         xf2 = xfA;\n         edge1 = edgeB;\n         manifold.m_type = b2Manifold.e_faceB;\n         flip = 1;\n      }\n      else {\n         poly1 = polyA;\n         poly2 = polyB;\n         xf1 = xfA;\n         xf2 = xfB;\n         edge1 = edgeA;\n         manifold.m_type = b2Manifold.e_faceA;\n         flip = 0;\n      }\n      var incidentEdge = b2Collision.s_incidentEdge;\n      b2Collision.FindIncidentEdge(incidentEdge, poly1, xf1, edge1, poly2, xf2);\n      var count1 = parseInt(poly1.m_vertexCount);\n      var vertices1 = poly1.m_vertices;\n      var local_v11 = vertices1[edge1];\n      var local_v12;\n      if (edge1 + 1 < count1) {\n         local_v12 = vertices1[parseInt(edge1 + 1)];\n      }\n      else {\n         local_v12 = vertices1[0];\n      }\n      var localTangent = b2Collision.s_localTangent;\n      localTangent.Set(local_v12.x - local_v11.x, local_v12.y - local_v11.y);\n      localTangent.Normalize();\n      var localNormal = b2Collision.s_localNormal;\n      localNormal.x = localTangent.y;\n      localNormal.y = (-localTangent.x);\n      var planePoint = b2Collision.s_planePoint;\n      planePoint.Set(0.5 * (local_v11.x + local_v12.x), 0.5 * (local_v11.y + local_v12.y));\n      var tangent = b2Collision.s_tangent;\n      tMat = xf1.R;\n      tangent.x = (tMat.col1.x * localTangent.x + tMat.col2.x * localTangent.y);\n      tangent.y = (tMat.col1.y * localTangent.x + tMat.col2.y * localTangent.y);\n      var tangent2 = b2Collision.s_tangent2;\n      tangent2.x = (-tangent.x);\n      tangent2.y = (-tangent.y);\n      var normal = b2Collision.s_normal;\n      normal.x = tangent.y;\n      normal.y = (-tangent.x);\n      var v11 = b2Collision.s_v11;\n      var v12 = b2Collision.s_v12;\n      v11.x = xf1.position.x + (tMat.col1.x * local_v11.x + tMat.col2.x * local_v11.y);\n      v11.y = xf1.position.y + (tMat.col1.y * local_v11.x + tMat.col2.y * local_v11.y);\n      v12.x = xf1.position.x + (tMat.col1.x * local_v12.x + tMat.col2.x * local_v12.y);\n      v12.y = xf1.position.y + (tMat.col1.y * local_v12.x + tMat.col2.y * local_v12.y);\n      var frontOffset = normal.x * v11.x + normal.y * v11.y;\n      var sideOffset1 = (-tangent.x * v11.x) - tangent.y * v11.y + totalRadius;\n      var sideOffset2 = tangent.x * v12.x + tangent.y * v12.y + totalRadius;\n      var clipPoints1 = b2Collision.s_clipPoints1;\n      var clipPoints2 = b2Collision.s_clipPoints2;\n      var np = 0;\n      np = b2Collision.ClipSegmentToLine(clipPoints1, incidentEdge, tangent2, sideOffset1);\n      if (np < 2) return;\n      np = b2Collision.ClipSegmentToLine(clipPoints2, clipPoints1, tangent, sideOffset2);\n      if (np < 2) return;\n      manifold.m_localPlaneNormal.SetV(localNormal);\n      manifold.m_localPoint.SetV(planePoint);\n      var pointCount = 0;\n      for (var i = 0; i < b2Settings.b2_maxManifoldPoints; ++i) {\n         cv = clipPoints2[i];\n         var separation = normal.x * cv.v.x + normal.y * cv.v.y - frontOffset;\n         if (separation <= totalRadius) {\n            var cp = manifold.m_points[pointCount];\n            tMat = xf2.R;\n            var tX = cv.v.x - xf2.position.x;\n            var tY = cv.v.y - xf2.position.y;\n            cp.m_localPoint.x = (tX * tMat.col1.x + tY * tMat.col1.y);\n            cp.m_localPoint.y = (tX * tMat.col2.x + tY * tMat.col2.y);\n            cp.m_id.Set(cv.id);\n            cp.m_id.features.flip = flip;\n            ++pointCount;\n         }\n      }\n      manifold.m_pointCount = pointCount;\n   }\n   b2Collision.CollideCircles = function (manifold, circle1, xf1, circle2, xf2) {\n      manifold.m_pointCount = 0;\n      var tMat;\n      var tVec;\n      tMat = xf1.R;\n      tVec = circle1.m_p;\n      var p1X = xf1.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);\n      var p1Y = xf1.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);\n      tMat = xf2.R;\n      tVec = circle2.m_p;\n      var p2X = xf2.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);\n      var p2Y = xf2.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);\n      var dX = p2X - p1X;\n      var dY = p2Y - p1Y;\n      var distSqr = dX * dX + dY * dY;\n      var radius = circle1.m_radius + circle2.m_radius;\n      if (distSqr > radius * radius) {\n         return;\n      }\n      manifold.m_type = b2Manifold.e_circles;\n      manifold.m_localPoint.SetV(circle1.m_p);\n      manifold.m_localPlaneNormal.SetZero();\n      manifold.m_pointCount = 1;\n      manifold.m_points[0].m_localPoint.SetV(circle2.m_p);\n      manifold.m_points[0].m_id.key = 0;\n   }\n   b2Collision.CollidePolygonAndCircle = function (manifold, polygon, xf1, circle, xf2) {\n      manifold.m_pointCount = 0;\n      var tPoint;\n      var dX = 0;\n      var dY = 0;\n      var positionX = 0;\n      var positionY = 0;\n      var tVec;\n      var tMat;\n      tMat = xf2.R;\n      tVec = circle.m_p;\n      var cX = xf2.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);\n      var cY = xf2.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);\n      dX = cX - xf1.position.x;\n      dY = cY - xf1.position.y;\n      tMat = xf1.R;\n      var cLocalX = (dX * tMat.col1.x + dY * tMat.col1.y);\n      var cLocalY = (dX * tMat.col2.x + dY * tMat.col2.y);\n      var dist = 0;\n      var normalIndex = 0;\n      var separation = (-Number.MAX_VALUE);\n      var radius = polygon.m_radius + circle.m_radius;\n      var vertexCount = parseInt(polygon.m_vertexCount);\n      var vertices = polygon.m_vertices;\n      var normals = polygon.m_normals;\n      for (var i = 0; i < vertexCount; ++i) {\n         tVec = vertices[i];\n         dX = cLocalX - tVec.x;\n         dY = cLocalY - tVec.y;\n         tVec = normals[i];\n         var s = tVec.x * dX + tVec.y * dY;\n         if (s > radius) {\n            return;\n         }\n         if (s > separation) {\n            separation = s;\n            normalIndex = i;\n         }\n      }\n      var vertIndex1 = parseInt(normalIndex);\n      var vertIndex2 = parseInt(vertIndex1 + 1 < vertexCount ? vertIndex1 + 1 : 0);\n      var v1 = vertices[vertIndex1];\n      var v2 = vertices[vertIndex2];\n      if (separation < Number.MIN_VALUE) {\n         manifold.m_pointCount = 1;\n         manifold.m_type = b2Manifold.e_faceA;\n         manifold.m_localPlaneNormal.SetV(normals[normalIndex]);\n         manifold.m_localPoint.x = 0.5 * (v1.x + v2.x);\n         manifold.m_localPoint.y = 0.5 * (v1.y + v2.y);\n         manifold.m_points[0].m_localPoint.SetV(circle.m_p);\n         manifold.m_points[0].m_id.key = 0;\n         return;\n      }\n      var u1 = (cLocalX - v1.x) * (v2.x - v1.x) + (cLocalY - v1.y) * (v2.y - v1.y);\n      var u2 = (cLocalX - v2.x) * (v1.x - v2.x) + (cLocalY - v2.y) * (v1.y - v2.y);\n      if (u1 <= 0.0) {\n         if ((cLocalX - v1.x) * (cLocalX - v1.x) + (cLocalY - v1.y) * (cLocalY - v1.y) > radius * radius) return;\n         manifold.m_pointCount = 1;\n         manifold.m_type = b2Manifold.e_faceA;\n         manifold.m_localPlaneNormal.x = cLocalX - v1.x;\n         manifold.m_localPlaneNormal.y = cLocalY - v1.y;\n         manifold.m_localPlaneNormal.Normalize();\n         manifold.m_localPoint.SetV(v1);\n         manifold.m_points[0].m_localPoint.SetV(circle.m_p);\n         manifold.m_points[0].m_id.key = 0;\n      }\n      else if (u2 <= 0) {\n         if ((cLocalX - v2.x) * (cLocalX - v2.x) + (cLocalY - v2.y) * (cLocalY - v2.y) > radius * radius) return;\n         manifold.m_pointCount = 1;\n         manifold.m_type = b2Manifold.e_faceA;\n         manifold.m_localPlaneNormal.x = cLocalX - v2.x;\n         manifold.m_localPlaneNormal.y = cLocalY - v2.y;\n         manifold.m_localPlaneNormal.Normalize();\n         manifold.m_localPoint.SetV(v2);\n         manifold.m_points[0].m_localPoint.SetV(circle.m_p);\n         manifold.m_points[0].m_id.key = 0;\n      }\n      else {\n         var faceCenterX = 0.5 * (v1.x + v2.x);\n         var faceCenterY = 0.5 * (v1.y + v2.y);\n         separation = (cLocalX - faceCenterX) * normals[vertIndex1].x + (cLocalY - faceCenterY) * normals[vertIndex1].y;\n         if (separation > radius) return;\n         manifold.m_pointCount = 1;\n         manifold.m_type = b2Manifold.e_faceA;\n         manifold.m_localPlaneNormal.x = normals[vertIndex1].x;\n         manifold.m_localPlaneNormal.y = normals[vertIndex1].y;\n         manifold.m_localPlaneNormal.Normalize();\n         manifold.m_localPoint.Set(faceCenterX, faceCenterY);\n         manifold.m_points[0].m_localPoint.SetV(circle.m_p);\n         manifold.m_points[0].m_id.key = 0;\n      }\n   }\n   b2Collision.TestOverlap = function (a, b) {\n      var t1 = b.lowerBound;\n      var t2 = a.upperBound;\n      var d1X = t1.x - t2.x;\n      var d1Y = t1.y - t2.y;\n      t1 = a.lowerBound;\n      t2 = b.upperBound;\n      var d2X = t1.x - t2.x;\n      var d2Y = t1.y - t2.y;\n      if (d1X > 0.0 || d1Y > 0.0) return false;\n      if (d2X > 0.0 || d2Y > 0.0) return false;\n      return true;\n   }\n   Box2D.postDefs.push(function () {\n      Box2D.Collision.b2Collision.s_incidentEdge = b2Collision.MakeClipPointVector();\n      Box2D.Collision.b2Collision.s_clipPoints1 = b2Collision.MakeClipPointVector();\n      Box2D.Collision.b2Collision.s_clipPoints2 = b2Collision.MakeClipPointVector();\n      Box2D.Collision.b2Collision.s_edgeAO = new Vector_a2j_Number(1);\n      Box2D.Collision.b2Collision.s_edgeBO = new Vector_a2j_Number(1);\n      Box2D.Collision.b2Collision.s_localTangent = new b2Vec2();\n      Box2D.Collision.b2Collision.s_localNormal = new b2Vec2();\n      Box2D.Collision.b2Collision.s_planePoint = new b2Vec2();\n      Box2D.Collision.b2Collision.s_normal = new b2Vec2();\n      Box2D.Collision.b2Collision.s_tangent = new b2Vec2();\n      Box2D.Collision.b2Collision.s_tangent2 = new b2Vec2();\n      Box2D.Collision.b2Collision.s_v11 = new b2Vec2();\n      Box2D.Collision.b2Collision.s_v12 = new b2Vec2();\n      Box2D.Collision.b2Collision.b2CollidePolyTempVec = new b2Vec2();\n      Box2D.Collision.b2Collision.b2_nullFeature = 0x000000ff;\n   });\n   b2ContactID.b2ContactID = function () {\n      this.features = new Features();\n   };\n   b2ContactID.prototype.b2ContactID = function () {\n      this.features._m_id = this;\n   }\n   b2ContactID.prototype.Set = function (id) {\n      this.key = id._key;\n   }\n   b2ContactID.prototype.Copy = function () {\n      var id = new b2ContactID();\n      id.key = this.key;\n      return id;\n   }\n   Object.defineProperty(b2ContactID.prototype, 'key', {\n      enumerable: false,\n      configurable: true,\n      get: function () {\n         return this._key;\n      }\n   });\n   Object.defineProperty(b2ContactID.prototype, 'key', {\n      enumerable: false,\n      configurable: true,\n      set: function (value) {\n         if (value === undefined) value = 0;\n         this._key = value;\n         this.features._referenceEdge = this._key & 0x000000ff;\n         this.features._incidentEdge = ((this._key & 0x0000ff00) >> 8) & 0x000000ff;\n         this.features._incidentVertex = ((this._key & 0x00ff0000) >> 16) & 0x000000ff;\n         this.features._flip = ((this._key & 0xff000000) >> 24) & 0x000000ff;\n      }\n   });\n   b2ContactPoint.b2ContactPoint = function () {\n      this.position = new b2Vec2();\n      this.velocity = new b2Vec2();\n      this.normal = new b2Vec2();\n      this.id = new b2ContactID();\n   };\n   b2Distance.b2Distance = function () {};\n   b2Distance.Distance = function (output, cache, input) {\n      ++b2Distance.b2_gjkCalls;\n      var proxyA = input.proxyA;\n      var proxyB = input.proxyB;\n      var transformA = input.transformA;\n      var transformB = input.transformB;\n      var simplex = b2Distance.s_simplex;\n      simplex.ReadCache(cache, proxyA, transformA, proxyB, transformB);\n      var vertices = simplex.m_vertices;\n      var k_maxIters = 20;\n      var saveA = b2Distance.s_saveA;\n      var saveB = b2Distance.s_saveB;\n      var saveCount = 0;\n      var closestPoint = simplex.GetClosestPoint();\n      var distanceSqr1 = closestPoint.LengthSquared();\n      var distanceSqr2 = distanceSqr1;\n      var i = 0;\n      var p;\n      var iter = 0;\n      while (iter < k_maxIters) {\n         saveCount = simplex.m_count;\n         for (i = 0;\n         i < saveCount; i++) {\n            saveA[i] = vertices[i].indexA;\n            saveB[i] = vertices[i].indexB;\n         }\n         switch (simplex.m_count) {\n         case 1:\n            break;\n         case 2:\n            simplex.Solve2();\n            break;\n         case 3:\n            simplex.Solve3();\n            break;\n         default:\n            b2Settings.b2Assert(false);\n         }\n         if (simplex.m_count == 3) {\n            break;\n         }\n         p = simplex.GetClosestPoint();\n         distanceSqr2 = p.LengthSquared();\n         if (distanceSqr2 > distanceSqr1) {}\n         distanceSqr1 = distanceSqr2;\n         var d = simplex.GetSearchDirection();\n         if (d.LengthSquared() < Number.MIN_VALUE * Number.MIN_VALUE) {\n            break;\n         }\n         var vertex = vertices[simplex.m_count];\n         vertex.indexA = proxyA.GetSupport(b2Math.MulTMV(transformA.R, d.GetNegative()));\n         vertex.wA = b2Math.MulX(transformA, proxyA.GetVertex(vertex.indexA));\n         vertex.indexB = proxyB.GetSupport(b2Math.MulTMV(transformB.R, d));\n         vertex.wB = b2Math.MulX(transformB, proxyB.GetVertex(vertex.indexB));\n         vertex.w = b2Math.SubtractVV(vertex.wB, vertex.wA);\n         ++iter;\n         ++b2Distance.b2_gjkIters;\n         var duplicate = false;\n         for (i = 0;\n         i < saveCount; i++) {\n            if (vertex.indexA == saveA[i] && vertex.indexB == saveB[i]) {\n               duplicate = true;\n               break;\n            }\n         }\n         if (duplicate) {\n            break;\n         }++simplex.m_count;\n      }\n      b2Distance.b2_gjkMaxIters = b2Math.Max(b2Distance.b2_gjkMaxIters, iter);\n      simplex.GetWitnessPoints(output.pointA, output.pointB);\n      output.distance = b2Math.SubtractVV(output.pointA, output.pointB).Length();\n      output.iterations = iter;\n      simplex.WriteCache(cache);\n      if (input.useRadii) {\n         var rA = proxyA.m_radius;\n         var rB = proxyB.m_radius;\n         if (output.distance > rA + rB && output.distance > Number.MIN_VALUE) {\n            output.distance -= rA + rB;\n            var normal = b2Math.SubtractVV(output.pointB, output.pointA);\n            normal.Normalize();\n            output.pointA.x += rA * normal.x;\n            output.pointA.y += rA * normal.y;\n            output.pointB.x -= rB * normal.x;\n            output.pointB.y -= rB * normal.y;\n         }\n         else {\n            p = new b2Vec2();\n            p.x = .5 * (output.pointA.x + output.pointB.x);\n            p.y = .5 * (output.pointA.y + output.pointB.y);\n            output.pointA.x = output.pointB.x = p.x;\n            output.pointA.y = output.pointB.y = p.y;\n            output.distance = 0.0;\n         }\n      }\n   }\n   Box2D.postDefs.push(function () {\n      Box2D.Collision.b2Distance.s_simplex = new b2Simplex();\n      Box2D.Collision.b2Distance.s_saveA = new Vector_a2j_Number(3);\n      Box2D.Collision.b2Distance.s_saveB = new Vector_a2j_Number(3);\n   });\n   b2DistanceInput.b2DistanceInput = function () {};\n   b2DistanceOutput.b2DistanceOutput = function () {\n      this.pointA = new b2Vec2();\n      this.pointB = new b2Vec2();\n   };\n   b2DistanceProxy.b2DistanceProxy = function () {};\n   b2DistanceProxy.prototype.Set = function (shape) {\n      switch (shape.GetType()) {\n      case b2Shape.e_circleShape:\n         {\n            var circle = (shape instanceof b2CircleShape ? shape : null);\n            this.m_vertices = new Vector(1, true);\n            this.m_vertices[0] = circle.m_p;\n            this.m_count = 1;\n            this.m_radius = circle.m_radius;\n         }\n         break;\n      case b2Shape.e_polygonShape:\n         {\n            var polygon = (shape instanceof b2PolygonShape ? shape : null);\n            this.m_vertices = polygon.m_vertices;\n            this.m_count = polygon.m_vertexCount;\n            this.m_radius = polygon.m_radius;\n         }\n         break;\n      default:\n         b2Settings.b2Assert(false);\n      }\n   }\n   b2DistanceProxy.prototype.GetSupport = function (d) {\n      var bestIndex = 0;\n      var bestValue = this.m_vertices[0].x * d.x + this.m_vertices[0].y * d.y;\n      for (var i = 1; i < this.m_count; ++i) {\n         var value = this.m_vertices[i].x * d.x + this.m_vertices[i].y * d.y;\n         if (value > bestValue) {\n            bestIndex = i;\n            bestValue = value;\n         }\n      }\n      return bestIndex;\n   }\n   b2DistanceProxy.prototype.GetSupportVertex = function (d) {\n      var bestIndex = 0;\n      var bestValue = this.m_vertices[0].x * d.x + this.m_vertices[0].y * d.y;\n      for (var i = 1; i < this.m_count; ++i) {\n         var value = this.m_vertices[i].x * d.x + this.m_vertices[i].y * d.y;\n         if (value > bestValue) {\n            bestIndex = i;\n            bestValue = value;\n         }\n      }\n      return this.m_vertices[bestIndex];\n   }\n   b2DistanceProxy.prototype.GetVertexCount = function () {\n      return this.m_count;\n   }\n   b2DistanceProxy.prototype.GetVertex = function (index) {\n      if (index === undefined) index = 0;\n      b2Settings.b2Assert(0 <= index && index < this.m_count);\n      return this.m_vertices[index];\n   }\n   b2DynamicTree.b2DynamicTree = function () {};\n   b2DynamicTree.prototype.b2DynamicTree = function () {\n      this.m_root = null;\n      this.m_freeList = null;\n      this.m_path = 0;\n      this.m_insertionCount = 0;\n   }\n   b2DynamicTree.prototype.CreateProxy = function (aabb, userData) {\n      var node = this.AllocateNode();\n      var extendX = b2Settings.b2_aabbExtension;\n      var extendY = b2Settings.b2_aabbExtension;\n      node.aabb.lowerBound.x = aabb.lowerBound.x - extendX;\n      node.aabb.lowerBound.y = aabb.lowerBound.y - extendY;\n      node.aabb.upperBound.x = aabb.upperBound.x + extendX;\n      node.aabb.upperBound.y = aabb.upperBound.y + extendY;\n      node.userData = userData;\n      this.InsertLeaf(node);\n      return node;\n   }\n   b2DynamicTree.prototype.DestroyProxy = function (proxy) {\n      this.RemoveLeaf(proxy);\n      this.FreeNode(proxy);\n   }\n   b2DynamicTree.prototype.MoveProxy = function (proxy, aabb, displacement) {\n      b2Settings.b2Assert(proxy.IsLeaf());\n      if (proxy.aabb.Contains(aabb)) {\n         return false;\n      }\n      this.RemoveLeaf(proxy);\n      var extendX = b2Settings.b2_aabbExtension + b2Settings.b2_aabbMultiplier * (displacement.x > 0 ? displacement.x : (-displacement.x));\n      var extendY = b2Settings.b2_aabbExtension + b2Settings.b2_aabbMultiplier * (displacement.y > 0 ? displacement.y : (-displacement.y));\n      proxy.aabb.lowerBound.x = aabb.lowerBound.x - extendX;\n      proxy.aabb.lowerBound.y = aabb.lowerBound.y - extendY;\n      proxy.aabb.upperBound.x = aabb.upperBound.x + extendX;\n      proxy.aabb.upperBound.y = aabb.upperBound.y + extendY;\n      this.InsertLeaf(proxy);\n      return true;\n   }\n   b2DynamicTree.prototype.Rebalance = function (iterations) {\n      if (iterations === undefined) iterations = 0;\n      if (this.m_root == null) return;\n      for (var i = 0; i < iterations; i++) {\n         var node = this.m_root;\n         var bit = 0;\n         while (node.IsLeaf() == false) {\n            node = (this.m_path >> bit) & 1 ? node.child2 : node.child1;\n            bit = (bit + 1) & 31;\n         }++this.m_path;\n         this.RemoveLeaf(node);\n         this.InsertLeaf(node);\n      }\n   }\n   b2DynamicTree.prototype.GetFatAABB = function (proxy) {\n      return proxy.aabb;\n   }\n   b2DynamicTree.prototype.GetUserData = function (proxy) {\n      return proxy.userData;\n   }\n   b2DynamicTree.prototype.Query = function (callback, aabb) {\n      if (this.m_root == null) return;\n      var stack = new Vector();\n      var count = 0;\n      stack[count++] = this.m_root;\n      while (count > 0) {\n         var node = stack[--count];\n         if (node.aabb.TestOverlap(aabb)) {\n            if (node.IsLeaf()) {\n               var proceed = callback(node);\n               if (!proceed) return;\n            }\n            else {\n               stack[count++] = node.child1;\n               stack[count++] = node.child2;\n            }\n         }\n      }\n   }\n   b2DynamicTree.prototype.RayCast = function (callback, input) {\n      if (this.m_root == null) return;\n      var p1 = input.p1;\n      var p2 = input.p2;\n      var r = b2Math.SubtractVV(p1, p2);\n      r.Normalize();\n      var v = b2Math.CrossFV(1.0, r);\n      var abs_v = b2Math.AbsV(v);\n      var maxFraction = input.maxFraction;\n      var segmentAABB = new b2AABB();\n      var tX = 0;\n      var tY = 0; {\n         tX = p1.x + maxFraction * (p2.x - p1.x);\n         tY = p1.y + maxFraction * (p2.y - p1.y);\n         segmentAABB.lowerBound.x = Math.min(p1.x, tX);\n         segmentAABB.lowerBound.y = Math.min(p1.y, tY);\n         segmentAABB.upperBound.x = Math.max(p1.x, tX);\n         segmentAABB.upperBound.y = Math.max(p1.y, tY);\n      }\n      var stack = new Vector();\n      var count = 0;\n      stack[count++] = this.m_root;\n      while (count > 0) {\n         var node = stack[--count];\n         if (node.aabb.TestOverlap(segmentAABB) == false) {\n            continue;\n         }\n         var c = node.aabb.GetCenter();\n         var h = node.aabb.GetExtents();\n         var separation = Math.abs(v.x * (p1.x - c.x) + v.y * (p1.y - c.y)) - abs_v.x * h.x - abs_v.y * h.y;\n         if (separation > 0.0) continue;\n         if (node.IsLeaf()) {\n            var subInput = new b2RayCastInput();\n            subInput.p1 = input.p1;\n            subInput.p2 = input.p2;\n            subInput.maxFraction = input.maxFraction;\n            maxFraction = callback(subInput, node);\n            if (maxFraction == 0.0) return;\n            if (maxFraction > 0.0) {\n               tX = p1.x + maxFraction * (p2.x - p1.x);\n               tY = p1.y + maxFraction * (p2.y - p1.y);\n               segmentAABB.lowerBound.x = Math.min(p1.x, tX);\n               segmentAABB.lowerBound.y = Math.min(p1.y, tY);\n               segmentAABB.upperBound.x = Math.max(p1.x, tX);\n               segmentAABB.upperBound.y = Math.max(p1.y, tY);\n            }\n         }\n         else {\n            stack[count++] = node.child1;\n            stack[count++] = node.child2;\n         }\n      }\n   }\n   b2DynamicTree.prototype.AllocateNode = function () {\n      if (this.m_freeList) {\n         var node = this.m_freeList;\n         this.m_freeList = node.parent;\n         node.parent = null;\n         node.child1 = null;\n         node.child2 = null;\n         return node;\n      }\n      return new b2DynamicTreeNode();\n   }\n   b2DynamicTree.prototype.FreeNode = function (node) {\n      node.parent = this.m_freeList;\n      this.m_freeList = node;\n   }\n   b2DynamicTree.prototype.InsertLeaf = function (leaf) {\n      ++this.m_insertionCount;\n      if (this.m_root == null) {\n         this.m_root = leaf;\n         this.m_root.parent = null;\n         return;\n      }\n      var center = leaf.aabb.GetCenter();\n      var sibling = this.m_root;\n      if (sibling.IsLeaf() == false) {\n         do {\n            var child1 = sibling.child1;\n            var child2 = sibling.child2;\n            var norm1 = Math.abs((child1.aabb.lowerBound.x + child1.aabb.upperBound.x) / 2 - center.x) + Math.abs((child1.aabb.lowerBound.y + child1.aabb.upperBound.y) / 2 - center.y);\n            var norm2 = Math.abs((child2.aabb.lowerBound.x + child2.aabb.upperBound.x) / 2 - center.x) + Math.abs((child2.aabb.lowerBound.y + child2.aabb.upperBound.y) / 2 - center.y);\n            if (norm1 < norm2) {\n               sibling = child1;\n            }\n            else {\n               sibling = child2;\n            }\n         }\n         while (sibling.IsLeaf() == false)\n      }\n      var node1 = sibling.parent;\n      var node2 = this.AllocateNode();\n      node2.parent = node1;\n      node2.userData = null;\n      node2.aabb.Combine(leaf.aabb, sibling.aabb);\n      if (node1) {\n         if (sibling.parent.child1 == sibling) {\n            node1.child1 = node2;\n         }\n         else {\n            node1.child2 = node2;\n         }\n         node2.child1 = sibling;\n         node2.child2 = leaf;\n         sibling.parent = node2;\n         leaf.parent = node2;\n         do {\n            if (node1.aabb.Contains(node2.aabb)) break;\n            node1.aabb.Combine(node1.child1.aabb, node1.child2.aabb);\n            node2 = node1;\n            node1 = node1.parent;\n         }\n         while (node1)\n      }\n      else {\n         node2.child1 = sibling;\n         node2.child2 = leaf;\n         sibling.parent = node2;\n         leaf.parent = node2;\n         this.m_root = node2;\n      }\n   }\n   b2DynamicTree.prototype.RemoveLeaf = function (leaf) {\n      if (leaf == this.m_root) {\n         this.m_root = null;\n         return;\n      }\n      var node2 = leaf.parent;\n      var node1 = node2.parent;\n      var sibling;\n      if (node2.child1 == leaf) {\n         sibling = node2.child2;\n      }\n      else {\n         sibling = node2.child1;\n      }\n      if (node1) {\n         if (node1.child1 == node2) {\n            node1.child1 = sibling;\n         }\n         else {\n            node1.child2 = sibling;\n         }\n         sibling.parent = node1;\n         this.FreeNode(node2);\n         while (node1) {\n            var oldAABB = node1.aabb;\n            node1.aabb = b2AABB.Combine(node1.child1.aabb, node1.child2.aabb);\n            if (oldAABB.Contains(node1.aabb)) break;\n            node1 = node1.parent;\n         }\n      }\n      else {\n         this.m_root = sibling;\n         sibling.parent = null;\n         this.FreeNode(node2);\n      }\n   }\n   b2DynamicTreeBroadPhase.b2DynamicTreeBroadPhase = function () {\n      this.m_tree = new b2DynamicTree();\n      this.m_moveBuffer = new Vector();\n      this.m_pairBuffer = new Vector();\n      this.m_pairCount = 0;\n   };\n   b2DynamicTreeBroadPhase.prototype.CreateProxy = function (aabb, userData) {\n      var proxy = this.m_tree.CreateProxy(aabb, userData);\n      ++this.m_proxyCount;\n      this.BufferMove(proxy);\n      return proxy;\n   }\n   b2DynamicTreeBroadPhase.prototype.DestroyProxy = function (proxy) {\n      this.UnBufferMove(proxy);\n      --this.m_proxyCount;\n      this.m_tree.DestroyProxy(proxy);\n   }\n   b2DynamicTreeBroadPhase.prototype.MoveProxy = function (proxy, aabb, displacement) {\n      var buffer = this.m_tree.MoveProxy(proxy, aabb, displacement);\n      if (buffer) {\n         this.BufferMove(proxy);\n      }\n   }\n   b2DynamicTreeBroadPhase.prototype.TestOverlap = function (proxyA, proxyB) {\n      var aabbA = this.m_tree.GetFatAABB(proxyA);\n      var aabbB = this.m_tree.GetFatAABB(proxyB);\n      return aabbA.TestOverlap(aabbB);\n   }\n   b2DynamicTreeBroadPhase.prototype.GetUserData = function (proxy) {\n      return this.m_tree.GetUserData(proxy);\n   }\n   b2DynamicTreeBroadPhase.prototype.GetFatAABB = function (proxy) {\n      return this.m_tree.GetFatAABB(proxy);\n   }\n   b2DynamicTreeBroadPhase.prototype.GetProxyCount = function () {\n      return this.m_proxyCount;\n   }\n   b2DynamicTreeBroadPhase.prototype.UpdatePairs = function (callback) {\n      var __this = this;\n      __this.m_pairCount = 0;\n      var i = 0,\n         queryProxy;\n       function QueryCallback(proxy) {\n          if (proxy == queryProxy) return true;\n          if (__this.m_pairCount == __this.m_pairBuffer.length) {\n             __this.m_pairBuffer[__this.m_pairCount] = new b2DynamicTreePair();\n          }\n          var pair = __this.m_pairBuffer[__this.m_pairCount];\n          pair.proxyA = proxy < queryProxy ? proxy : queryProxy;\n          pair.proxyB = proxy >= queryProxy ? proxy : queryProxy;++__this.m_pairCount;\n          return true;\n       };\n      for (i = 0;\n      i < __this.m_moveBuffer.length; ++i) {\n         queryProxy = __this.m_moveBuffer[i];\n         var fatAABB = __this.m_tree.GetFatAABB(queryProxy);\n         __this.m_tree.Query(QueryCallback, fatAABB);\n      }\n      __this.m_moveBuffer.length = 0;\n      for (var i = 0; i < __this.m_pairCount;) {\n         var primaryPair = __this.m_pairBuffer[i];\n         var userDataA = __this.m_tree.GetUserData(primaryPair.proxyA);\n         var userDataB = __this.m_tree.GetUserData(primaryPair.proxyB);\n         callback(userDataA, userDataB);\n         ++i;\n         while (i < __this.m_pairCount) {\n            var pair = __this.m_pairBuffer[i];\n            if (pair.proxyA != primaryPair.proxyA || pair.proxyB != primaryPair.proxyB) {\n               break;\n            }++i;\n         }\n      }\n   }\n   b2DynamicTreeBroadPhase.prototype.Query = function (callback, aabb) {\n      this.m_tree.Query(callback, aabb);\n   }\n   b2DynamicTreeBroadPhase.prototype.RayCast = function (callback, input) {\n      this.m_tree.RayCast(callback, input);\n   }\n   b2DynamicTreeBroadPhase.prototype.Validate = function () {}\n   b2DynamicTreeBroadPhase.prototype.Rebalance = function (iterations) {\n      if (iterations === undefined) iterations = 0;\n      this.m_tree.Rebalance(iterations);\n   }\n   b2DynamicTreeBroadPhase.prototype.BufferMove = function (proxy) {\n      this.m_moveBuffer[this.m_moveBuffer.length] = proxy;\n   }\n   b2DynamicTreeBroadPhase.prototype.UnBufferMove = function (proxy) {\n      var i = parseInt(this.m_moveBuffer.indexOf(proxy));\n      this.m_moveBuffer.splice(i, 1);\n   }\n   b2DynamicTreeBroadPhase.prototype.ComparePairs = function (pair1, pair2) {\n      return 0;\n   }\n   b2DynamicTreeBroadPhase.__implements = {};\n   b2DynamicTreeBroadPhase.__implements[IBroadPhase] = true;\n   b2DynamicTreeNode.b2DynamicTreeNode = function () {\n      this.aabb = new b2AABB();\n   };\n   b2DynamicTreeNode.prototype.IsLeaf = function () {\n      return this.child1 == null;\n   }\n   b2DynamicTreePair.b2DynamicTreePair = function () {};\n   b2Manifold.b2Manifold = function () {\n      this.m_pointCount = 0;\n   };\n   b2Manifold.prototype.b2Manifold = function () {\n      this.m_points = new Vector(b2Settings.b2_maxManifoldPoints);\n      for (var i = 0; i < b2Settings.b2_maxManifoldPoints; i++) {\n         this.m_points[i] = new b2ManifoldPoint();\n      }\n      this.m_localPlaneNormal = new b2Vec2();\n      this.m_localPoint = new b2Vec2();\n   }\n   b2Manifold.prototype.Reset = function () {\n      for (var i = 0; i < b2Settings.b2_maxManifoldPoints; i++) {\n         ((this.m_points[i] instanceof b2ManifoldPoint ? this.m_points[i] : null)).Reset();\n      }\n      this.m_localPlaneNormal.SetZero();\n      this.m_localPoint.SetZero();\n      this.m_type = 0;\n      this.m_pointCount = 0;\n   }\n   b2Manifold.prototype.Set = function (m) {\n      this.m_pointCount = m.m_pointCount;\n      for (var i = 0; i < b2Settings.b2_maxManifoldPoints; i++) {\n         ((this.m_points[i] instanceof b2ManifoldPoint ? this.m_points[i] : null)).Set(m.m_points[i]);\n      }\n      this.m_localPlaneNormal.SetV(m.m_localPlaneNormal);\n      this.m_localPoint.SetV(m.m_localPoint);\n      this.m_type = m.m_type;\n   }\n   b2Manifold.prototype.Copy = function () {\n      var copy = new b2Manifold();\n      copy.Set(this);\n      return copy;\n   }\n   Box2D.postDefs.push(function () {\n      Box2D.Collision.b2Manifold.e_circles = 0x0001;\n      Box2D.Collision.b2Manifold.e_faceA = 0x0002;\n      Box2D.Collision.b2Manifold.e_faceB = 0x0004;\n   });\n   b2ManifoldPoint.b2ManifoldPoint = function () {\n      this.m_localPoint = new b2Vec2();\n      this.m_id = new b2ContactID();\n   };\n   b2ManifoldPoint.prototype.b2ManifoldPoint = function () {\n      this.Reset();\n   }\n   b2ManifoldPoint.prototype.Reset = function () {\n      this.m_localPoint.SetZero();\n      this.m_normalImpulse = 0.0;\n      this.m_tangentImpulse = 0.0;\n      this.m_id.key = 0;\n   }\n   b2ManifoldPoint.prototype.Set = function (m) {\n      this.m_localPoint.SetV(m.m_localPoint);\n      this.m_normalImpulse = m.m_normalImpulse;\n      this.m_tangentImpulse = m.m_tangentImpulse;\n      this.m_id.Set(m.m_id);\n   }\n   b2Point.b2Point = function () {\n      this.p = new b2Vec2();\n   };\n   b2Point.prototype.Support = function (xf, vX, vY) {\n      if (vX === undefined) vX = 0;\n      if (vY === undefined) vY = 0;\n      return this.p;\n   }\n   b2Point.prototype.GetFirstVertex = function (xf) {\n      return this.p;\n   }\n   b2RayCastInput.b2RayCastInput = function () {\n      this.p1 = new b2Vec2();\n      this.p2 = new b2Vec2();\n   };\n   b2RayCastInput.prototype.b2RayCastInput = function (p1, p2, maxFraction) {\n      if (p1 === undefined) p1 = null;\n      if (p2 === undefined) p2 = null;\n      if (maxFraction === undefined) maxFraction = 1;\n      if (p1) this.p1.SetV(p1);\n      if (p2) this.p2.SetV(p2);\n      this.maxFraction = maxFraction;\n   }\n   b2RayCastOutput.b2RayCastOutput = function () {\n      this.normal = new b2Vec2();\n   };\n   b2Segment.b2Segment = function () {\n      this.p1 = new b2Vec2();\n      this.p2 = new b2Vec2();\n   };\n   b2Segment.prototype.TestSegment = function (lambda, normal, segment, maxLambda) {\n      if (maxLambda === undefined) maxLambda = 0;\n      var s = segment.p1;\n      var rX = segment.p2.x - s.x;\n      var rY = segment.p2.y - s.y;\n      var dX = this.p2.x - this.p1.x;\n      var dY = this.p2.y - this.p1.y;\n      var nX = dY;\n      var nY = (-dX);\n      var k_slop = 100.0 * Number.MIN_VALUE;\n      var denom = (-(rX * nX + rY * nY));\n      if (denom > k_slop) {\n         var bX = s.x - this.p1.x;\n         var bY = s.y - this.p1.y;\n         var a = (bX * nX + bY * nY);\n         if (0.0 <= a && a <= maxLambda * denom) {\n            var mu2 = (-rX * bY) + rY * bX;\n            if ((-k_slop * denom) <= mu2 && mu2 <= denom * (1.0 + k_slop)) {\n               a /= denom;\n               var nLen = Math.sqrt(nX * nX + nY * nY);\n               nX /= nLen;\n               nY /= nLen;\n               lambda[0] = a;\n               normal.Set(nX, nY);\n               return true;\n            }\n         }\n      }\n      return false;\n   }\n   b2Segment.prototype.Extend = function (aabb) {\n      this.ExtendForward(aabb);\n      this.ExtendBackward(aabb);\n   }\n   b2Segment.prototype.ExtendForward = function (aabb) {\n      var dX = this.p2.x - this.p1.x;\n      var dY = this.p2.y - this.p1.y;\n      var lambda = Math.min(dX > 0 ? (aabb.upperBound.x - this.p1.x) / dX : dX < 0 ? (aabb.lowerBound.x - this.p1.x) / dX : Number.POSITIVE_INFINITY,\n      dY > 0 ? (aabb.upperBound.y - this.p1.y) / dY : dY < 0 ? (aabb.lowerBound.y - this.p1.y) / dY : Number.POSITIVE_INFINITY);\n      this.p2.x = this.p1.x + dX * lambda;\n      this.p2.y = this.p1.y + dY * lambda;\n   }\n   b2Segment.prototype.ExtendBackward = function (aabb) {\n      var dX = (-this.p2.x) + this.p1.x;\n      var dY = (-this.p2.y) + this.p1.y;\n      var lambda = Math.min(dX > 0 ? (aabb.upperBound.x - this.p2.x) / dX : dX < 0 ? (aabb.lowerBound.x - this.p2.x) / dX : Number.POSITIVE_INFINITY,\n      dY > 0 ? (aabb.upperBound.y - this.p2.y) / dY : dY < 0 ? (aabb.lowerBound.y - this.p2.y) / dY : Number.POSITIVE_INFINITY);\n      this.p1.x = this.p2.x + dX * lambda;\n      this.p1.y = this.p2.y + dY * lambda;\n   }\n   b2SeparationFunction.b2SeparationFunction = function () {\n      this.m_localPoint = new b2Vec2();\n      this.m_axis = new b2Vec2();\n   };\n   b2SeparationFunction.prototype.Initialize = function (cache, proxyA, transformA, proxyB, transformB) {\n      this.m_proxyA = proxyA;\n      this.m_proxyB = proxyB;\n      var count = parseInt(cache.count);\n      b2Settings.b2Assert(0 < count && count < 3);\n      var localPointA;\n      var localPointA1;\n      var localPointA2;\n      var localPointB;\n      var localPointB1;\n      var localPointB2;\n      var pointAX = 0;\n      var pointAY = 0;\n      var pointBX = 0;\n      var pointBY = 0;\n      var normalX = 0;\n      var normalY = 0;\n      var tMat;\n      var tVec;\n      var s = 0;\n      var sgn = 0;\n      if (count == 1) {\n         this.m_type = b2SeparationFunction.e_points;\n         localPointA = this.m_proxyA.GetVertex(cache.indexA[0]);\n         localPointB = this.m_proxyB.GetVertex(cache.indexB[0]);\n         tVec = localPointA;\n         tMat = transformA.R;\n         pointAX = transformA.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);\n         pointAY = transformA.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);\n         tVec = localPointB;\n         tMat = transformB.R;\n         pointBX = transformB.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);\n         pointBY = transformB.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);\n         this.m_axis.x = pointBX - pointAX;\n         this.m_axis.y = pointBY - pointAY;\n         this.m_axis.Normalize();\n      }\n      else if (cache.indexB[0] == cache.indexB[1]) {\n         this.m_type = b2SeparationFunction.e_faceA;\n         localPointA1 = this.m_proxyA.GetVertex(cache.indexA[0]);\n         localPointA2 = this.m_proxyA.GetVertex(cache.indexA[1]);\n         localPointB = this.m_proxyB.GetVertex(cache.indexB[0]);\n         this.m_localPoint.x = 0.5 * (localPointA1.x + localPointA2.x);\n         this.m_localPoint.y = 0.5 * (localPointA1.y + localPointA2.y);\n         this.m_axis = b2Math.CrossVF(b2Math.SubtractVV(localPointA2, localPointA1), 1.0);\n         this.m_axis.Normalize();\n         tVec = this.m_axis;\n         tMat = transformA.R;\n         normalX = tMat.col1.x * tVec.x + tMat.col2.x * tVec.y;\n         normalY = tMat.col1.y * tVec.x + tMat.col2.y * tVec.y;\n         tVec = this.m_localPoint;\n         tMat = transformA.R;\n         pointAX = transformA.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);\n         pointAY = transformA.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);\n         tVec = localPointB;\n         tMat = transformB.R;\n         pointBX = transformB.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);\n         pointBY = transformB.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);\n         s = (pointBX - pointAX) * normalX + (pointBY - pointAY) * normalY;\n         if (s < 0.0) {\n            this.m_axis.NegativeSelf();\n         }\n      }\n      else if (cache.indexA[0] == cache.indexA[0]) {\n         this.m_type = b2SeparationFunction.e_faceB;\n         localPointB1 = this.m_proxyB.GetVertex(cache.indexB[0]);\n         localPointB2 = this.m_proxyB.GetVertex(cache.indexB[1]);\n         localPointA = this.m_proxyA.GetVertex(cache.indexA[0]);\n         this.m_localPoint.x = 0.5 * (localPointB1.x + localPointB2.x);\n         this.m_localPoint.y = 0.5 * (localPointB1.y + localPointB2.y);\n         this.m_axis = b2Math.CrossVF(b2Math.SubtractVV(localPointB2, localPointB1), 1.0);\n         this.m_axis.Normalize();\n         tVec = this.m_axis;\n         tMat = transformB.R;\n         normalX = tMat.col1.x * tVec.x + tMat.col2.x * tVec.y;\n         normalY = tMat.col1.y * tVec.x + tMat.col2.y * tVec.y;\n         tVec = this.m_localPoint;\n         tMat = transformB.R;\n         pointBX = transformB.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);\n         pointBY = transformB.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);\n         tVec = localPointA;\n         tMat = transformA.R;\n         pointAX = transformA.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);\n         pointAY = transformA.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);\n         s = (pointAX - pointBX) * normalX + (pointAY - pointBY) * normalY;\n         if (s < 0.0) {\n            this.m_axis.NegativeSelf();\n         }\n      }\n      else {\n         localPointA1 = this.m_proxyA.GetVertex(cache.indexA[0]);\n         localPointA2 = this.m_proxyA.GetVertex(cache.indexA[1]);\n         localPointB1 = this.m_proxyB.GetVertex(cache.indexB[0]);\n         localPointB2 = this.m_proxyB.GetVertex(cache.indexB[1]);\n         var pA = b2Math.MulX(transformA, localPointA);\n         var dA = b2Math.MulMV(transformA.R, b2Math.SubtractVV(localPointA2, localPointA1));\n         var pB = b2Math.MulX(transformB, localPointB);\n         var dB = b2Math.MulMV(transformB.R, b2Math.SubtractVV(localPointB2, localPointB1));\n         var a = dA.x * dA.x + dA.y * dA.y;\n         var e = dB.x * dB.x + dB.y * dB.y;\n         var r = b2Math.SubtractVV(dB, dA);\n         var c = dA.x * r.x + dA.y * r.y;\n         var f = dB.x * r.x + dB.y * r.y;\n         var b = dA.x * dB.x + dA.y * dB.y;\n         var denom = a * e - b * b;\n         s = 0.0;\n         if (denom != 0.0) {\n            s = b2Math.Clamp((b * f - c * e) / denom, 0.0, 1.0);\n         }\n         var t = (b * s + f) / e;\n         if (t < 0.0) {\n            t = 0.0;\n            s = b2Math.Clamp((b - c) / a, 0.0, 1.0);\n         }\n         localPointA = new b2Vec2();\n         localPointA.x = localPointA1.x + s * (localPointA2.x - localPointA1.x);\n         localPointA.y = localPointA1.y + s * (localPointA2.y - localPointA1.y);\n         localPointB = new b2Vec2();\n         localPointB.x = localPointB1.x + s * (localPointB2.x - localPointB1.x);\n         localPointB.y = localPointB1.y + s * (localPointB2.y - localPointB1.y);\n         if (s == 0.0 || s == 1.0) {\n            this.m_type = b2SeparationFunction.e_faceB;\n            this.m_axis = b2Math.CrossVF(b2Math.SubtractVV(localPointB2, localPointB1), 1.0);\n            this.m_axis.Normalize();\n            this.m_localPoint = localPointB;\n            tVec = this.m_axis;\n            tMat = transformB.R;\n            normalX = tMat.col1.x * tVec.x + tMat.col2.x * tVec.y;\n            normalY = tMat.col1.y * tVec.x + tMat.col2.y * tVec.y;\n            tVec = this.m_localPoint;\n            tMat = transformB.R;\n            pointBX = transformB.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);\n            pointBY = transformB.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);\n            tVec = localPointA;\n            tMat = transformA.R;\n            pointAX = transformA.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);\n            pointAY = transformA.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);\n            sgn = (pointAX - pointBX) * normalX + (pointAY - pointBY) * normalY;\n            if (s < 0.0) {\n               this.m_axis.NegativeSelf();\n            }\n         }\n         else {\n            this.m_type = b2SeparationFunction.e_faceA;\n            this.m_axis = b2Math.CrossVF(b2Math.SubtractVV(localPointA2, localPointA1), 1.0);\n            this.m_localPoint = localPointA;\n            tVec = this.m_axis;\n            tMat = transformA.R;\n            normalX = tMat.col1.x * tVec.x + tMat.col2.x * tVec.y;\n            normalY = tMat.col1.y * tVec.x + tMat.col2.y * tVec.y;\n            tVec = this.m_localPoint;\n            tMat = transformA.R;\n            pointAX = transformA.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);\n            pointAY = transformA.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);\n            tVec = localPointB;\n            tMat = transformB.R;\n            pointBX = transformB.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);\n            pointBY = transformB.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);\n            sgn = (pointBX - pointAX) * normalX + (pointBY - pointAY) * normalY;\n            if (s < 0.0) {\n               this.m_axis.NegativeSelf();\n            }\n         }\n      }\n   }\n   b2SeparationFunction.prototype.Evaluate = function (transformA, transformB) {\n      var axisA;\n      var axisB;\n      var localPointA;\n      var localPointB;\n      var pointA;\n      var pointB;\n      var seperation = 0;\n      var normal;\n      switch (this.m_type) {\n      case b2SeparationFunction.e_points:\n         {\n            axisA = b2Math.MulTMV(transformA.R, this.m_axis);\n            axisB = b2Math.MulTMV(transformB.R, this.m_axis.GetNegative());\n            localPointA = this.m_proxyA.GetSupportVertex(axisA);\n            localPointB = this.m_proxyB.GetSupportVertex(axisB);\n            pointA = b2Math.MulX(transformA, localPointA);\n            pointB = b2Math.MulX(transformB, localPointB);\n            seperation = (pointB.x - pointA.x) * this.m_axis.x + (pointB.y - pointA.y) * this.m_axis.y;\n            return seperation;\n         }\n      case b2SeparationFunction.e_faceA:\n         {\n            normal = b2Math.MulMV(transformA.R, this.m_axis);\n            pointA = b2Math.MulX(transformA, this.m_localPoint);\n            axisB = b2Math.MulTMV(transformB.R, normal.GetNegative());\n            localPointB = this.m_proxyB.GetSupportVertex(axisB);\n            pointB = b2Math.MulX(transformB, localPointB);\n            seperation = (pointB.x - pointA.x) * normal.x + (pointB.y - pointA.y) * normal.y;\n            return seperation;\n         }\n      case b2SeparationFunction.e_faceB:\n         {\n            normal = b2Math.MulMV(transformB.R, this.m_axis);\n            pointB = b2Math.MulX(transformB, this.m_localPoint);\n            axisA = b2Math.MulTMV(transformA.R, normal.GetNegative());\n            localPointA = this.m_proxyA.GetSupportVertex(axisA);\n            pointA = b2Math.MulX(transformA, localPointA);\n            seperation = (pointA.x - pointB.x) * normal.x + (pointA.y - pointB.y) * normal.y;\n            return seperation;\n         }\n      default:\n         b2Settings.b2Assert(false);\n         return 0.0;\n      }\n   }\n   Box2D.postDefs.push(function () {\n      Box2D.Collision.b2SeparationFunction.e_points = 0x01;\n      Box2D.Collision.b2SeparationFunction.e_faceA = 0x02;\n      Box2D.Collision.b2SeparationFunction.e_faceB = 0x04;\n   });\n   b2Simplex.b2Simplex = function () {\n      this.m_v1 = new b2SimplexVertex();\n      this.m_v2 = new b2SimplexVertex();\n      this.m_v3 = new b2SimplexVertex();\n      this.m_vertices = new Vector(3);\n   };\n   b2Simplex.prototype.b2Simplex = function () {\n      this.m_vertices[0] = this.m_v1;\n      this.m_vertices[1] = this.m_v2;\n      this.m_vertices[2] = this.m_v3;\n   }\n   b2Simplex.prototype.ReadCache = function (cache, proxyA, transformA, proxyB, transformB) {\n      b2Settings.b2Assert(0 <= cache.count && cache.count <= 3);\n      var wALocal;\n      var wBLocal;\n      this.m_count = cache.count;\n      var vertices = this.m_vertices;\n      for (var i = 0; i < this.m_count; i++) {\n         var v = vertices[i];\n         v.indexA = cache.indexA[i];\n         v.indexB = cache.indexB[i];\n         wALocal = proxyA.GetVertex(v.indexA);\n         wBLocal = proxyB.GetVertex(v.indexB);\n         v.wA = b2Math.MulX(transformA, wALocal);\n         v.wB = b2Math.MulX(transformB, wBLocal);\n         v.w = b2Math.SubtractVV(v.wB, v.wA);\n         v.a = 0;\n      }\n      if (this.m_count > 1) {\n         var metric1 = cache.metric;\n         var metric2 = this.GetMetric();\n         if (metric2 < .5 * metric1 || 2.0 * metric1 < metric2 || metric2 < Number.MIN_VALUE) {\n            this.m_count = 0;\n         }\n      }\n      if (this.m_count == 0) {\n         v = vertices[0];\n         v.indexA = 0;\n         v.indexB = 0;\n         wALocal = proxyA.GetVertex(0);\n         wBLocal = proxyB.GetVertex(0);\n         v.wA = b2Math.MulX(transformA, wALocal);\n         v.wB = b2Math.MulX(transformB, wBLocal);\n         v.w = b2Math.SubtractVV(v.wB, v.wA);\n         this.m_count = 1;\n      }\n   }\n   b2Simplex.prototype.WriteCache = function (cache) {\n      cache.metric = this.GetMetric();\n      cache.count = Box2D.parseUInt(this.m_count);\n      var vertices = this.m_vertices;\n      for (var i = 0; i < this.m_count; i++) {\n         cache.indexA[i] = Box2D.parseUInt(vertices[i].indexA);\n         cache.indexB[i] = Box2D.parseUInt(vertices[i].indexB);\n      }\n   }\n   b2Simplex.prototype.GetSearchDirection = function () {\n      switch (this.m_count) {\n      case 1:\n         return this.m_v1.w.GetNegative();\n      case 2:\n         {\n            var e12 = b2Math.SubtractVV(this.m_v2.w, this.m_v1.w);\n            var sgn = b2Math.CrossVV(e12, this.m_v1.w.GetNegative());\n            if (sgn > 0.0) {\n               return b2Math.CrossFV(1.0, e12);\n            }\n            else {\n               return b2Math.CrossVF(e12, 1.0);\n            }\n         }\n      default:\n         b2Settings.b2Assert(false);\n         return new b2Vec2();\n      }\n   }\n   b2Simplex.prototype.GetClosestPoint = function () {\n      switch (this.m_count) {\n      case 0:\n         b2Settings.b2Assert(false);\n         return new b2Vec2();\n      case 1:\n         return this.m_v1.w;\n      case 2:\n         return new b2Vec2(this.m_v1.a * this.m_v1.w.x + this.m_v2.a * this.m_v2.w.x, this.m_v1.a * this.m_v1.w.y + this.m_v2.a * this.m_v2.w.y);\n      default:\n         b2Settings.b2Assert(false);\n         return new b2Vec2();\n      }\n   }\n   b2Simplex.prototype.GetWitnessPoints = function (pA, pB) {\n      switch (this.m_count) {\n      case 0:\n         b2Settings.b2Assert(false);\n         break;\n      case 1:\n         pA.SetV(this.m_v1.wA);\n         pB.SetV(this.m_v1.wB);\n         break;\n      case 2:\n         pA.x = this.m_v1.a * this.m_v1.wA.x + this.m_v2.a * this.m_v2.wA.x;\n         pA.y = this.m_v1.a * this.m_v1.wA.y + this.m_v2.a * this.m_v2.wA.y;\n         pB.x = this.m_v1.a * this.m_v1.wB.x + this.m_v2.a * this.m_v2.wB.x;\n         pB.y = this.m_v1.a * this.m_v1.wB.y + this.m_v2.a * this.m_v2.wB.y;\n         break;\n      case 3:\n         pB.x = pA.x = this.m_v1.a * this.m_v1.wA.x + this.m_v2.a * this.m_v2.wA.x + this.m_v3.a * this.m_v3.wA.x;\n         pB.y = pA.y = this.m_v1.a * this.m_v1.wA.y + this.m_v2.a * this.m_v2.wA.y + this.m_v3.a * this.m_v3.wA.y;\n         break;\n      default:\n         b2Settings.b2Assert(false);\n         break;\n      }\n   }\n   b2Simplex.prototype.GetMetric = function () {\n      switch (this.m_count) {\n      case 0:\n         b2Settings.b2Assert(false);\n         return 0.0;\n      case 1:\n         return 0.0;\n      case 2:\n         return b2Math.SubtractVV(this.m_v1.w, this.m_v2.w).Length();\n      case 3:\n         return b2Math.CrossVV(b2Math.SubtractVV(this.m_v2.w, this.m_v1.w), b2Math.SubtractVV(this.m_v3.w, this.m_v1.w));\n      default:\n         b2Settings.b2Assert(false);\n         return 0.0;\n      }\n   }\n   b2Simplex.prototype.Solve2 = function () {\n      var w1 = this.m_v1.w;\n      var w2 = this.m_v2.w;\n      var e12 = b2Math.SubtractVV(w2, w1);\n      var d12_2 = (-(w1.x * e12.x + w1.y * e12.y));\n      if (d12_2 <= 0.0) {\n         this.m_v1.a = 1.0;\n         this.m_count = 1;\n         return;\n      }\n      var d12_1 = (w2.x * e12.x + w2.y * e12.y);\n      if (d12_1 <= 0.0) {\n         this.m_v2.a = 1.0;\n         this.m_count = 1;\n         this.m_v1.Set(this.m_v2);\n         return;\n      }\n      var inv_d12 = 1.0 / (d12_1 + d12_2);\n      this.m_v1.a = d12_1 * inv_d12;\n      this.m_v2.a = d12_2 * inv_d12;\n      this.m_count = 2;\n   }\n   b2Simplex.prototype.Solve3 = function () {\n      var w1 = this.m_v1.w;\n      var w2 = this.m_v2.w;\n      var w3 = this.m_v3.w;\n      var e12 = b2Math.SubtractVV(w2, w1);\n      var w1e12 = b2Math.Dot(w1, e12);\n      var w2e12 = b2Math.Dot(w2, e12);\n      var d12_1 = w2e12;\n      var d12_2 = (-w1e12);\n      var e13 = b2Math.SubtractVV(w3, w1);\n      var w1e13 = b2Math.Dot(w1, e13);\n      var w3e13 = b2Math.Dot(w3, e13);\n      var d13_1 = w3e13;\n      var d13_2 = (-w1e13);\n      var e23 = b2Math.SubtractVV(w3, w2);\n      var w2e23 = b2Math.Dot(w2, e23);\n      var w3e23 = b2Math.Dot(w3, e23);\n      var d23_1 = w3e23;\n      var d23_2 = (-w2e23);\n      var n123 = b2Math.CrossVV(e12, e13);\n      var d123_1 = n123 * b2Math.CrossVV(w2, w3);\n      var d123_2 = n123 * b2Math.CrossVV(w3, w1);\n      var d123_3 = n123 * b2Math.CrossVV(w1, w2);\n      if (d12_2 <= 0.0 && d13_2 <= 0.0) {\n         this.m_v1.a = 1.0;\n         this.m_count = 1;\n         return;\n      }\n      if (d12_1 > 0.0 && d12_2 > 0.0 && d123_3 <= 0.0) {\n         var inv_d12 = 1.0 / (d12_1 + d12_2);\n         this.m_v1.a = d12_1 * inv_d12;\n         this.m_v2.a = d12_2 * inv_d12;\n         this.m_count = 2;\n         return;\n      }\n      if (d13_1 > 0.0 && d13_2 > 0.0 && d123_2 <= 0.0) {\n         var inv_d13 = 1.0 / (d13_1 + d13_2);\n         this.m_v1.a = d13_1 * inv_d13;\n         this.m_v3.a = d13_2 * inv_d13;\n         this.m_count = 2;\n         this.m_v2.Set(this.m_v3);\n         return;\n      }\n      if (d12_1 <= 0.0 && d23_2 <= 0.0) {\n         this.m_v2.a = 1.0;\n         this.m_count = 1;\n         this.m_v1.Set(this.m_v2);\n         return;\n      }\n      if (d13_1 <= 0.0 && d23_1 <= 0.0) {\n         this.m_v3.a = 1.0;\n         this.m_count = 1;\n         this.m_v1.Set(this.m_v3);\n         return;\n      }\n      if (d23_1 > 0.0 && d23_2 > 0.0 && d123_1 <= 0.0) {\n         var inv_d23 = 1.0 / (d23_1 + d23_2);\n         this.m_v2.a = d23_1 * inv_d23;\n         this.m_v3.a = d23_2 * inv_d23;\n         this.m_count = 2;\n         this.m_v1.Set(this.m_v3);\n         return;\n      }\n      var inv_d123 = 1.0 / (d123_1 + d123_2 + d123_3);\n      this.m_v1.a = d123_1 * inv_d123;\n      this.m_v2.a = d123_2 * inv_d123;\n      this.m_v3.a = d123_3 * inv_d123;\n      this.m_count = 3;\n   }\n   b2SimplexCache.b2SimplexCache = function () {\n      this.indexA = new Vector_a2j_Number(3);\n      this.indexB = new Vector_a2j_Number(3);\n   };\n   b2SimplexVertex.b2SimplexVertex = function () {};\n   b2SimplexVertex.prototype.Set = function (other) {\n      this.wA.SetV(other.wA);\n      this.wB.SetV(other.wB);\n      this.w.SetV(other.w);\n      this.a = other.a;\n      this.indexA = other.indexA;\n      this.indexB = other.indexB;\n   }\n   b2TimeOfImpact.b2TimeOfImpact = function () {};\n   b2TimeOfImpact.TimeOfImpact = function (input) {\n      ++b2TimeOfImpact.b2_toiCalls;\n      var proxyA = input.proxyA;\n      var proxyB = input.proxyB;\n      var sweepA = input.sweepA;\n      var sweepB = input.sweepB;\n      b2Settings.b2Assert(sweepA.t0 == sweepB.t0);\n      b2Settings.b2Assert(1.0 - sweepA.t0 > Number.MIN_VALUE);\n      var radius = proxyA.m_radius + proxyB.m_radius;\n      var tolerance = input.tolerance;\n      var alpha = 0.0;\n      var k_maxIterations = 1000;\n      var iter = 0;\n      var target = 0.0;\n      b2TimeOfImpact.s_cache.count = 0;\n      b2TimeOfImpact.s_distanceInput.useRadii = false;\n      for (;;) {\n         sweepA.GetTransform(b2TimeOfImpact.s_xfA, alpha);\n         sweepB.GetTransform(b2TimeOfImpact.s_xfB, alpha);\n         b2TimeOfImpact.s_distanceInput.proxyA = proxyA;\n         b2TimeOfImpact.s_distanceInput.proxyB = proxyB;\n         b2TimeOfImpact.s_distanceInput.transformA = b2TimeOfImpact.s_xfA;\n         b2TimeOfImpact.s_distanceInput.transformB = b2TimeOfImpact.s_xfB;\n         b2Distance.Distance(b2TimeOfImpact.s_distanceOutput, b2TimeOfImpact.s_cache, b2TimeOfImpact.s_distanceInput);\n         if (b2TimeOfImpact.s_distanceOutput.distance <= 0.0) {\n            alpha = 1.0;\n            break;\n         }\n         b2TimeOfImpact.s_fcn.Initialize(b2TimeOfImpact.s_cache, proxyA, b2TimeOfImpact.s_xfA, proxyB, b2TimeOfImpact.s_xfB);\n         var separation = b2TimeOfImpact.s_fcn.Evaluate(b2TimeOfImpact.s_xfA, b2TimeOfImpact.s_xfB);\n         if (separation <= 0.0) {\n            alpha = 1.0;\n            break;\n         }\n         if (iter == 0) {\n            if (separation > radius) {\n               target = b2Math.Max(radius - tolerance, 0.75 * radius);\n            }\n            else {\n               target = b2Math.Max(separation - tolerance, 0.02 * radius);\n            }\n         }\n         if (separation - target < 0.5 * tolerance) {\n            if (iter == 0) {\n               alpha = 1.0;\n               break;\n            }\n            break;\n         }\n         var newAlpha = alpha; {\n            var x1 = alpha;\n            var x2 = 1.0;\n            var f1 = separation;\n            sweepA.GetTransform(b2TimeOfImpact.s_xfA, x2);\n            sweepB.GetTransform(b2TimeOfImpact.s_xfB, x2);\n            var f2 = b2TimeOfImpact.s_fcn.Evaluate(b2TimeOfImpact.s_xfA, b2TimeOfImpact.s_xfB);\n            if (f2 >= target) {\n               alpha = 1.0;\n               break;\n            }\n            var rootIterCount = 0;\n            for (;;) {\n               var x = 0;\n               if (rootIterCount & 1) {\n                  x = x1 + (target - f1) * (x2 - x1) / (f2 - f1);\n               }\n               else {\n                  x = 0.5 * (x1 + x2);\n               }\n               sweepA.GetTransform(b2TimeOfImpact.s_xfA, x);\n               sweepB.GetTransform(b2TimeOfImpact.s_xfB, x);\n               var f = b2TimeOfImpact.s_fcn.Evaluate(b2TimeOfImpact.s_xfA, b2TimeOfImpact.s_xfB);\n               if (b2Math.Abs(f - target) < 0.025 * tolerance) {\n                  newAlpha = x;\n                  break;\n               }\n               if (f > target) {\n                  x1 = x;\n                  f1 = f;\n               }\n               else {\n                  x2 = x;\n                  f2 = f;\n               }++rootIterCount;\n               ++b2TimeOfImpact.b2_toiRootIters;\n               if (rootIterCount == 50) {\n                  break;\n               }\n            }\n            b2TimeOfImpact.b2_toiMaxRootIters = b2Math.Max(b2TimeOfImpact.b2_toiMaxRootIters, rootIterCount);\n         }\n         if (newAlpha < (1.0 + 100.0 * Number.MIN_VALUE) * alpha) {\n            break;\n         }\n         alpha = newAlpha;\n         iter++;\n         ++b2TimeOfImpact.b2_toiIters;\n         if (iter == k_maxIterations) {\n            break;\n         }\n      }\n      b2TimeOfImpact.b2_toiMaxIters = b2Math.Max(b2TimeOfImpact.b2_toiMaxIters, iter);\n      return alpha;\n   }\n   Box2D.postDefs.push(function () {\n      Box2D.Collision.b2TimeOfImpact.b2_toiCalls = 0;\n      Box2D.Collision.b2TimeOfImpact.b2_toiIters = 0;\n      Box2D.Collision.b2TimeOfImpact.b2_toiMaxIters = 0;\n      Box2D.Collision.b2TimeOfImpact.b2_toiRootIters = 0;\n      Box2D.Collision.b2TimeOfImpact.b2_toiMaxRootIters = 0;\n      Box2D.Collision.b2TimeOfImpact.s_cache = new b2SimplexCache();\n      Box2D.Collision.b2TimeOfImpact.s_distanceInput = new b2DistanceInput();\n      Box2D.Collision.b2TimeOfImpact.s_xfA = new b2Transform();\n      Box2D.Collision.b2TimeOfImpact.s_xfB = new b2Transform();\n      Box2D.Collision.b2TimeOfImpact.s_fcn = new b2SeparationFunction();\n      Box2D.Collision.b2TimeOfImpact.s_distanceOutput = new b2DistanceOutput();\n   });\n   b2TOIInput.b2TOIInput = function () {\n      this.proxyA = new b2DistanceProxy();\n      this.proxyB = new b2DistanceProxy();\n      this.sweepA = new b2Sweep();\n      this.sweepB = new b2Sweep();\n   };\n   b2WorldManifold.b2WorldManifold = function () {\n      this.m_normal = new b2Vec2();\n   };\n   b2WorldManifold.prototype.b2WorldManifold = function () {\n      this.m_points = new Vector(b2Settings.b2_maxManifoldPoints);\n      for (var i = 0; i < b2Settings.b2_maxManifoldPoints; i++) {\n         this.m_points[i] = new b2Vec2();\n      }\n   }\n   b2WorldManifold.prototype.Initialize = function (manifold, xfA, radiusA, xfB, radiusB) {\n      if (radiusA === undefined) radiusA = 0;\n      if (radiusB === undefined) radiusB = 0;\n      if (manifold.m_pointCount == 0) {\n         return;\n      }\n      var i = 0;\n      var tVec;\n      var tMat;\n      var normalX = 0;\n      var normalY = 0;\n      var planePointX = 0;\n      var planePointY = 0;\n      var clipPointX = 0;\n      var clipPointY = 0;\n      switch (manifold.m_type) {\n      case b2Manifold.e_circles:\n         {\n            tMat = xfA.R;\n            tVec = manifold.m_localPoint;\n            var pointAX = xfA.position.x + tMat.col1.x * tVec.x + tMat.col2.x * tVec.y;\n            var pointAY = xfA.position.y + tMat.col1.y * tVec.x + tMat.col2.y * tVec.y;\n            tMat = xfB.R;\n            tVec = manifold.m_points[0].m_localPoint;\n            var pointBX = xfB.position.x + tMat.col1.x * tVec.x + tMat.col2.x * tVec.y;\n            var pointBY = xfB.position.y + tMat.col1.y * tVec.x + tMat.col2.y * tVec.y;\n            var dX = pointBX - pointAX;\n            var dY = pointBY - pointAY;\n            var d2 = dX * dX + dY * dY;\n            if (d2 > Number.MIN_VALUE * Number.MIN_VALUE) {\n               var d = Math.sqrt(d2);\n               this.m_normal.x = dX / d;\n               this.m_normal.y = dY / d;\n            }\n            else {\n               this.m_normal.x = 1;\n               this.m_normal.y = 0;\n            }\n            var cAX = pointAX + radiusA * this.m_normal.x;\n            var cAY = pointAY + radiusA * this.m_normal.y;\n            var cBX = pointBX - radiusB * this.m_normal.x;\n            var cBY = pointBY - radiusB * this.m_normal.y;\n            this.m_points[0].x = 0.5 * (cAX + cBX);\n            this.m_points[0].y = 0.5 * (cAY + cBY);\n         }\n         break;\n      case b2Manifold.e_faceA:\n         {\n            tMat = xfA.R;\n            tVec = manifold.m_localPlaneNormal;\n            normalX = tMat.col1.x * tVec.x + tMat.col2.x * tVec.y;\n            normalY = tMat.col1.y * tVec.x + tMat.col2.y * tVec.y;\n            tMat = xfA.R;\n            tVec = manifold.m_localPoint;\n            planePointX = xfA.position.x + tMat.col1.x * tVec.x + tMat.col2.x * tVec.y;\n            planePointY = xfA.position.y + tMat.col1.y * tVec.x + tMat.col2.y * tVec.y;\n            this.m_normal.x = normalX;\n            this.m_normal.y = normalY;\n            for (i = 0;\n            i < manifold.m_pointCount; i++) {\n               tMat = xfB.R;\n               tVec = manifold.m_points[i].m_localPoint;\n               clipPointX = xfB.position.x + tMat.col1.x * tVec.x + tMat.col2.x * tVec.y;\n               clipPointY = xfB.position.y + tMat.col1.y * tVec.x + tMat.col2.y * tVec.y;\n               this.m_points[i].x = clipPointX + 0.5 * (radiusA - (clipPointX - planePointX) * normalX - (clipPointY - planePointY) * normalY - radiusB) * normalX;\n               this.m_points[i].y = clipPointY + 0.5 * (radiusA - (clipPointX - planePointX) * normalX - (clipPointY - planePointY) * normalY - radiusB) * normalY;\n            }\n         }\n         break;\n      case b2Manifold.e_faceB:\n         {\n            tMat = xfB.R;\n            tVec = manifold.m_localPlaneNormal;\n            normalX = tMat.col1.x * tVec.x + tMat.col2.x * tVec.y;\n            normalY = tMat.col1.y * tVec.x + tMat.col2.y * tVec.y;\n            tMat = xfB.R;\n            tVec = manifold.m_localPoint;\n            planePointX = xfB.position.x + tMat.col1.x * tVec.x + tMat.col2.x * tVec.y;\n            planePointY = xfB.position.y + tMat.col1.y * tVec.x + tMat.col2.y * tVec.y;\n            this.m_normal.x = (-normalX);\n            this.m_normal.y = (-normalY);\n            for (i = 0;\n            i < manifold.m_pointCount; i++) {\n               tMat = xfA.R;\n               tVec = manifold.m_points[i].m_localPoint;\n               clipPointX = xfA.position.x + tMat.col1.x * tVec.x + tMat.col2.x * tVec.y;\n               clipPointY = xfA.position.y + tMat.col1.y * tVec.x + tMat.col2.y * tVec.y;\n               this.m_points[i].x = clipPointX + 0.5 * (radiusB - (clipPointX - planePointX) * normalX - (clipPointY - planePointY) * normalY - radiusA) * normalX;\n               this.m_points[i].y = clipPointY + 0.5 * (radiusB - (clipPointX - planePointX) * normalX - (clipPointY - planePointY) * normalY - radiusA) * normalY;\n            }\n         }\n         break;\n      }\n   }\n   ClipVertex.ClipVertex = function () {\n      this.v = new b2Vec2();\n      this.id = new b2ContactID();\n   };\n   ClipVertex.prototype.Set = function (other) {\n      this.v.SetV(other.v);\n      this.id.Set(other.id);\n   }\n   Features.Features = function () {};\n   Object.defineProperty(Features.prototype, 'referenceEdge', {\n      enumerable: false,\n      configurable: true,\n      get: function () {\n         return this._referenceEdge;\n      }\n   });\n   Object.defineProperty(Features.prototype, 'referenceEdge', {\n      enumerable: false,\n      configurable: true,\n      set: function (value) {\n         if (value === undefined) value = 0;\n         this._referenceEdge = value;\n         this._m_id._key = (this._m_id._key & 0xffffff00) | (this._referenceEdge & 0x000000ff);\n      }\n   });\n   Object.defineProperty(Features.prototype, 'incidentEdge', {\n      enumerable: false,\n      configurable: true,\n      get: function () {\n         return this._incidentEdge;\n      }\n   });\n   Object.defineProperty(Features.prototype, 'incidentEdge', {\n      enumerable: false,\n      configurable: true,\n      set: function (value) {\n         if (value === undefined) value = 0;\n         this._incidentEdge = value;\n         this._m_id._key = (this._m_id._key & 0xffff00ff) | ((this._incidentEdge << 8) & 0x0000ff00);\n      }\n   });\n   Object.defineProperty(Features.prototype, 'incidentVertex', {\n      enumerable: false,\n      configurable: true,\n      get: function () {\n         return this._incidentVertex;\n      }\n   });\n   Object.defineProperty(Features.prototype, 'incidentVertex', {\n      enumerable: false,\n      configurable: true,\n      set: function (value) {\n         if (value === undefined) value = 0;\n         this._incidentVertex = value;\n         this._m_id._key = (this._m_id._key & 0xff00ffff) | ((this._incidentVertex << 16) & 0x00ff0000);\n      }\n   });\n   Object.defineProperty(Features.prototype, 'flip', {\n      enumerable: false,\n      configurable: true,\n      get: function () {\n         return this._flip;\n      }\n   });\n   Object.defineProperty(Features.prototype, 'flip', {\n      enumerable: false,\n      configurable: true,\n      set: function (value) {\n         if (value === undefined) value = 0;\n         this._flip = value;\n         this._m_id._key = (this._m_id._key & 0x00ffffff) | ((this._flip << 24) & 0xff000000);\n      }\n   });\n})();\n(function () {\n   var b2Color = Box2D.Common.b2Color,\n      b2internal = Box2D.Common.b2internal,\n      b2Settings = Box2D.Common.b2Settings,\n      b2CircleShape = Box2D.Collision.Shapes.b2CircleShape,\n      b2EdgeChainDef = Box2D.Collision.Shapes.b2EdgeChainDef,\n      b2EdgeShape = Box2D.Collision.Shapes.b2EdgeShape,\n      b2MassData = Box2D.Collision.Shapes.b2MassData,\n      b2PolygonShape = Box2D.Collision.Shapes.b2PolygonShape,\n      b2Shape = Box2D.Collision.Shapes.b2Shape,\n      b2Mat22 = Box2D.Common.Math.b2Mat22,\n      b2Mat33 = Box2D.Common.Math.b2Mat33,\n      b2Math = Box2D.Common.Math.b2Math,\n      b2Sweep = Box2D.Common.Math.b2Sweep,\n      b2Transform = Box2D.Common.Math.b2Transform,\n      b2Vec2 = Box2D.Common.Math.b2Vec2,\n      b2Vec3 = Box2D.Common.Math.b2Vec3,\n      b2Body = Box2D.Dynamics.b2Body,\n      b2BodyDef = Box2D.Dynamics.b2BodyDef,\n      b2ContactFilter = Box2D.Dynamics.b2ContactFilter,\n      b2ContactImpulse = Box2D.Dynamics.b2ContactImpulse,\n      b2ContactListener = Box2D.Dynamics.b2ContactListener,\n      b2ContactManager = Box2D.Dynamics.b2ContactManager,\n      b2DebugDraw = Box2D.Dynamics.b2DebugDraw,\n      b2DestructionListener = Box2D.Dynamics.b2DestructionListener,\n      b2FilterData = Box2D.Dynamics.b2FilterData,\n      b2Fixture = Box2D.Dynamics.b2Fixture,\n      b2FixtureDef = Box2D.Dynamics.b2FixtureDef,\n      b2Island = Box2D.Dynamics.b2Island,\n      b2TimeStep = Box2D.Dynamics.b2TimeStep,\n      b2World = Box2D.Dynamics.b2World,\n      b2AABB = Box2D.Collision.b2AABB,\n      b2Bound = Box2D.Collision.b2Bound,\n      b2BoundValues = Box2D.Collision.b2BoundValues,\n      b2Collision = Box2D.Collision.b2Collision,\n      b2ContactID = Box2D.Collision.b2ContactID,\n      b2ContactPoint = Box2D.Collision.b2ContactPoint,\n      b2Distance = Box2D.Collision.b2Distance,\n      b2DistanceInput = Box2D.Collision.b2DistanceInput,\n      b2DistanceOutput = Box2D.Collision.b2DistanceOutput,\n      b2DistanceProxy = Box2D.Collision.b2DistanceProxy,\n      b2DynamicTree = Box2D.Collision.b2DynamicTree,\n      b2DynamicTreeBroadPhase = Box2D.Collision.b2DynamicTreeBroadPhase,\n      b2DynamicTreeNode = Box2D.Collision.b2DynamicTreeNode,\n      b2DynamicTreePair = Box2D.Collision.b2DynamicTreePair,\n      b2Manifold = Box2D.Collision.b2Manifold,\n      b2ManifoldPoint = Box2D.Collision.b2ManifoldPoint,\n      b2Point = Box2D.Collision.b2Point,\n      b2RayCastInput = Box2D.Collision.b2RayCastInput,\n      b2RayCastOutput = Box2D.Collision.b2RayCastOutput,\n      b2Segment = Box2D.Collision.b2Segment,\n      b2SeparationFunction = Box2D.Collision.b2SeparationFunction,\n      b2Simplex = Box2D.Collision.b2Simplex,\n      b2SimplexCache = Box2D.Collision.b2SimplexCache,\n      b2SimplexVertex = Box2D.Collision.b2SimplexVertex,\n      b2TimeOfImpact = Box2D.Collision.b2TimeOfImpact,\n      b2TOIInput = Box2D.Collision.b2TOIInput,\n      b2WorldManifold = Box2D.Collision.b2WorldManifold,\n      ClipVertex = Box2D.Collision.ClipVertex,\n      Features = Box2D.Collision.Features,\n      IBroadPhase = Box2D.Collision.IBroadPhase;\n\n   Box2D.inherit(b2CircleShape, Box2D.Collision.Shapes.b2Shape);\n   b2CircleShape.prototype.__super = Box2D.Collision.Shapes.b2Shape.prototype;\n   b2CircleShape.b2CircleShape = function () {\n      Box2D.Collision.Shapes.b2Shape.b2Shape.apply(this, arguments);\n      this.m_p = new b2Vec2();\n   };\n   b2CircleShape.prototype.Copy = function () {\n      var s = new b2CircleShape();\n      s.Set(this);\n      return s;\n   }\n   b2CircleShape.prototype.Set = function (other) {\n      this.__super.Set.call(this, other);\n      if (Box2D.is(other, b2CircleShape)) {\n         var other2 = (other instanceof b2CircleShape ? other : null);\n         this.m_p.SetV(other2.m_p);\n      }\n   }\n   b2CircleShape.prototype.TestPoint = function (transform, p) {\n      var tMat = transform.R;\n      var dX = transform.position.x + (tMat.col1.x * this.m_p.x + tMat.col2.x * this.m_p.y);\n      var dY = transform.position.y + (tMat.col1.y * this.m_p.x + tMat.col2.y * this.m_p.y);\n      dX = p.x - dX;\n      dY = p.y - dY;\n      return (dX * dX + dY * dY) <= this.m_radius * this.m_radius;\n   }\n   b2CircleShape.prototype.RayCast = function (output, input, transform) {\n      var tMat = transform.R;\n      var positionX = transform.position.x + (tMat.col1.x * this.m_p.x + tMat.col2.x * this.m_p.y);\n      var positionY = transform.position.y + (tMat.col1.y * this.m_p.x + tMat.col2.y * this.m_p.y);\n      var sX = input.p1.x - positionX;\n      var sY = input.p1.y - positionY;\n      var b = (sX * sX + sY * sY) - this.m_radius * this.m_radius;\n      var rX = input.p2.x - input.p1.x;\n      var rY = input.p2.y - input.p1.y;\n      var c = (sX * rX + sY * rY);\n      var rr = (rX * rX + rY * rY);\n      var sigma = c * c - rr * b;\n      if (sigma < 0.0 || rr < Number.MIN_VALUE) {\n         return false;\n      }\n      var a = (-(c + Math.sqrt(sigma)));\n      if (0.0 <= a && a <= input.maxFraction * rr) {\n         a /= rr;\n         output.fraction = a;\n         output.normal.x = sX + a * rX;\n         output.normal.y = sY + a * rY;\n         output.normal.Normalize();\n         return true;\n      }\n      return false;\n   }\n   b2CircleShape.prototype.ComputeAABB = function (aabb, transform) {\n      var tMat = transform.R;\n      var pX = transform.position.x + (tMat.col1.x * this.m_p.x + tMat.col2.x * this.m_p.y);\n      var pY = transform.position.y + (tMat.col1.y * this.m_p.x + tMat.col2.y * this.m_p.y);\n      aabb.lowerBound.Set(pX - this.m_radius, pY - this.m_radius);\n      aabb.upperBound.Set(pX + this.m_radius, pY + this.m_radius);\n   }\n   b2CircleShape.prototype.ComputeMass = function (massData, density) {\n      if (density === undefined) density = 0;\n      massData.mass = density * b2Settings.b2_pi * this.m_radius * this.m_radius;\n      massData.center.SetV(this.m_p);\n      massData.I = massData.mass * (0.5 * this.m_radius * this.m_radius + (this.m_p.x * this.m_p.x + this.m_p.y * this.m_p.y));\n   }\n   b2CircleShape.prototype.ComputeSubmergedArea = function (normal, offset, xf, c) {\n      if (offset === undefined) offset = 0;\n      var p = b2Math.MulX(xf, this.m_p);\n      var l = (-(b2Math.Dot(normal, p) - offset));\n      if (l < (-this.m_radius) + Number.MIN_VALUE) {\n         return 0;\n      }\n      if (l > this.m_radius) {\n         c.SetV(p);\n         return Math.PI * this.m_radius * this.m_radius;\n      }\n      var r2 = this.m_radius * this.m_radius;\n      var l2 = l * l;\n      var area = r2 * (Math.asin(l / this.m_radius) + Math.PI / 2) + l * Math.sqrt(r2 - l2);\n      var com = (-2 / 3 * Math.pow(r2 - l2, 1.5) / area);\n      c.x = p.x + normal.x * com;\n      c.y = p.y + normal.y * com;\n      return area;\n   }\n   b2CircleShape.prototype.GetLocalPosition = function () {\n      return this.m_p;\n   }\n   b2CircleShape.prototype.SetLocalPosition = function (position) {\n      this.m_p.SetV(position);\n   }\n   b2CircleShape.prototype.GetRadius = function () {\n      return this.m_radius;\n   }\n   b2CircleShape.prototype.SetRadius = function (radius) {\n      if (radius === undefined) radius = 0;\n      this.m_radius = radius;\n   }\n   b2CircleShape.prototype.b2CircleShape = function (radius) {\n      if (radius === undefined) radius = 0;\n      this.__super.b2Shape.call(this);\n      this.m_type = b2Shape.e_circleShape;\n      this.m_radius = radius;\n   }\n   b2EdgeChainDef.b2EdgeChainDef = function () {};\n   b2EdgeChainDef.prototype.b2EdgeChainDef = function () {\n      this.vertexCount = 0;\n      this.isALoop = true;\n      this.vertices = [];\n   }\n   Box2D.inherit(b2EdgeShape, Box2D.Collision.Shapes.b2Shape);\n   b2EdgeShape.prototype.__super = Box2D.Collision.Shapes.b2Shape.prototype;\n   b2EdgeShape.b2EdgeShape = function () {\n      Box2D.Collision.Shapes.b2Shape.b2Shape.apply(this, arguments);\n      this.s_supportVec = new b2Vec2();\n      this.m_v1 = new b2Vec2();\n      this.m_v2 = new b2Vec2();\n      this.m_coreV1 = new b2Vec2();\n      this.m_coreV2 = new b2Vec2();\n      this.m_normal = new b2Vec2();\n      this.m_direction = new b2Vec2();\n      this.m_cornerDir1 = new b2Vec2();\n      this.m_cornerDir2 = new b2Vec2();\n   };\n   b2EdgeShape.prototype.TestPoint = function (transform, p) {\n      return false;\n   }\n   b2EdgeShape.prototype.RayCast = function (output, input, transform) {\n      var tMat;\n      var rX = input.p2.x - input.p1.x;\n      var rY = input.p2.y - input.p1.y;\n      tMat = transform.R;\n      var v1X = transform.position.x + (tMat.col1.x * this.m_v1.x + tMat.col2.x * this.m_v1.y);\n      var v1Y = transform.position.y + (tMat.col1.y * this.m_v1.x + tMat.col2.y * this.m_v1.y);\n      var nX = transform.position.y + (tMat.col1.y * this.m_v2.x + tMat.col2.y * this.m_v2.y) - v1Y;\n      var nY = (-(transform.position.x + (tMat.col1.x * this.m_v2.x + tMat.col2.x * this.m_v2.y) - v1X));\n      var k_slop = 100.0 * Number.MIN_VALUE;\n      var denom = (-(rX * nX + rY * nY));\n      if (denom > k_slop) {\n         var bX = input.p1.x - v1X;\n         var bY = input.p1.y - v1Y;\n         var a = (bX * nX + bY * nY);\n         if (0.0 <= a && a <= input.maxFraction * denom) {\n            var mu2 = (-rX * bY) + rY * bX;\n            if ((-k_slop * denom) <= mu2 && mu2 <= denom * (1.0 + k_slop)) {\n               a /= denom;\n               output.fraction = a;\n               var nLen = Math.sqrt(nX * nX + nY * nY);\n               output.normal.x = nX / nLen;\n               output.normal.y = nY / nLen;\n               return true;\n            }\n         }\n      }\n      return false;\n   }\n   b2EdgeShape.prototype.ComputeAABB = function (aabb, transform) {\n      var tMat = transform.R;\n      var v1X = transform.position.x + (tMat.col1.x * this.m_v1.x + tMat.col2.x * this.m_v1.y);\n      var v1Y = transform.position.y + (tMat.col1.y * this.m_v1.x + tMat.col2.y * this.m_v1.y);\n      var v2X = transform.position.x + (tMat.col1.x * this.m_v2.x + tMat.col2.x * this.m_v2.y);\n      var v2Y = transform.position.y + (tMat.col1.y * this.m_v2.x + tMat.col2.y * this.m_v2.y);\n      if (v1X < v2X) {\n         aabb.lowerBound.x = v1X;\n         aabb.upperBound.x = v2X;\n      }\n      else {\n         aabb.lowerBound.x = v2X;\n         aabb.upperBound.x = v1X;\n      }\n      if (v1Y < v2Y) {\n         aabb.lowerBound.y = v1Y;\n         aabb.upperBound.y = v2Y;\n      }\n      else {\n         aabb.lowerBound.y = v2Y;\n         aabb.upperBound.y = v1Y;\n      }\n   }\n   b2EdgeShape.prototype.ComputeMass = function (massData, density) {\n      if (density === undefined) density = 0;\n      massData.mass = 0;\n      massData.center.SetV(this.m_v1);\n      massData.I = 0;\n   }\n   b2EdgeShape.prototype.ComputeSubmergedArea = function (normal, offset, xf, c) {\n      if (offset === undefined) offset = 0;\n      var v0 = new b2Vec2(normal.x * offset, normal.y * offset);\n      var v1 = b2Math.MulX(xf, this.m_v1);\n      var v2 = b2Math.MulX(xf, this.m_v2);\n      var d1 = b2Math.Dot(normal, v1) - offset;\n      var d2 = b2Math.Dot(normal, v2) - offset;\n      if (d1 > 0) {\n         if (d2 > 0) {\n            return 0;\n         }\n         else {\n            v1.x = (-d2 / (d1 - d2) * v1.x) + d1 / (d1 - d2) * v2.x;\n            v1.y = (-d2 / (d1 - d2) * v1.y) + d1 / (d1 - d2) * v2.y;\n         }\n      }\n      else {\n         if (d2 > 0) {\n            v2.x = (-d2 / (d1 - d2) * v1.x) + d1 / (d1 - d2) * v2.x;\n            v2.y = (-d2 / (d1 - d2) * v1.y) + d1 / (d1 - d2) * v2.y;\n         }\n         else {}\n      }\n      c.x = (v0.x + v1.x + v2.x) / 3;\n      c.y = (v0.y + v1.y + v2.y) / 3;\n      return 0.5 * ((v1.x - v0.x) * (v2.y - v0.y) - (v1.y - v0.y) * (v2.x - v0.x));\n   }\n   b2EdgeShape.prototype.GetLength = function () {\n      return this.m_length;\n   }\n   b2EdgeShape.prototype.GetVertex1 = function () {\n      return this.m_v1;\n   }\n   b2EdgeShape.prototype.GetVertex2 = function () {\n      return this.m_v2;\n   }\n   b2EdgeShape.prototype.GetCoreVertex1 = function () {\n      return this.m_coreV1;\n   }\n   b2EdgeShape.prototype.GetCoreVertex2 = function () {\n      return this.m_coreV2;\n   }\n   b2EdgeShape.prototype.GetNormalVector = function () {\n      return this.m_normal;\n   }\n   b2EdgeShape.prototype.GetDirectionVector = function () {\n      return this.m_direction;\n   }\n   b2EdgeShape.prototype.GetCorner1Vector = function () {\n      return this.m_cornerDir1;\n   }\n   b2EdgeShape.prototype.GetCorner2Vector = function () {\n      return this.m_cornerDir2;\n   }\n   b2EdgeShape.prototype.Corner1IsConvex = function () {\n      return this.m_cornerConvex1;\n   }\n   b2EdgeShape.prototype.Corner2IsConvex = function () {\n      return this.m_cornerConvex2;\n   }\n   b2EdgeShape.prototype.GetFirstVertex = function (xf) {\n      var tMat = xf.R;\n      return new b2Vec2(xf.position.x + (tMat.col1.x * this.m_coreV1.x + tMat.col2.x * this.m_coreV1.y), xf.position.y + (tMat.col1.y * this.m_coreV1.x + tMat.col2.y * this.m_coreV1.y));\n   }\n   b2EdgeShape.prototype.GetNextEdge = function () {\n      return this.m_nextEdge;\n   }\n   b2EdgeShape.prototype.GetPrevEdge = function () {\n      return this.m_prevEdge;\n   }\n   b2EdgeShape.prototype.Support = function (xf, dX, dY) {\n      if (dX === undefined) dX = 0;\n      if (dY === undefined) dY = 0;\n      var tMat = xf.R;\n      var v1X = xf.position.x + (tMat.col1.x * this.m_coreV1.x + tMat.col2.x * this.m_coreV1.y);\n      var v1Y = xf.position.y + (tMat.col1.y * this.m_coreV1.x + tMat.col2.y * this.m_coreV1.y);\n      var v2X = xf.position.x + (tMat.col1.x * this.m_coreV2.x + tMat.col2.x * this.m_coreV2.y);\n      var v2Y = xf.position.y + (tMat.col1.y * this.m_coreV2.x + tMat.col2.y * this.m_coreV2.y);\n      if ((v1X * dX + v1Y * dY) > (v2X * dX + v2Y * dY)) {\n         this.s_supportVec.x = v1X;\n         this.s_supportVec.y = v1Y;\n      }\n      else {\n         this.s_supportVec.x = v2X;\n         this.s_supportVec.y = v2Y;\n      }\n      return this.s_supportVec;\n   }\n   b2EdgeShape.prototype.b2EdgeShape = function (v1, v2) {\n      this.__super.b2Shape.call(this);\n      this.m_type = b2Shape.e_edgeShape;\n      this.m_prevEdge = null;\n      this.m_nextEdge = null;\n      this.m_v1 = v1;\n      this.m_v2 = v2;\n      this.m_direction.Set(this.m_v2.x - this.m_v1.x, this.m_v2.y - this.m_v1.y);\n      this.m_length = this.m_direction.Normalize();\n      this.m_normal.Set(this.m_direction.y, (-this.m_direction.x));\n      this.m_coreV1.Set((-b2Settings.b2_toiSlop * (this.m_normal.x - this.m_direction.x)) + this.m_v1.x, (-b2Settings.b2_toiSlop * (this.m_normal.y - this.m_direction.y)) + this.m_v1.y);\n      this.m_coreV2.Set((-b2Settings.b2_toiSlop * (this.m_normal.x + this.m_direction.x)) + this.m_v2.x, (-b2Settings.b2_toiSlop * (this.m_normal.y + this.m_direction.y)) + this.m_v2.y);\n      this.m_cornerDir1 = this.m_normal;\n      this.m_cornerDir2.Set((-this.m_normal.x), (-this.m_normal.y));\n   }\n   b2EdgeShape.prototype.SetPrevEdge = function (edge, core, cornerDir, convex) {\n      this.m_prevEdge = edge;\n      this.m_coreV1 = core;\n      this.m_cornerDir1 = cornerDir;\n      this.m_cornerConvex1 = convex;\n   }\n   b2EdgeShape.prototype.SetNextEdge = function (edge, core, cornerDir, convex) {\n      this.m_nextEdge = edge;\n      this.m_coreV2 = core;\n      this.m_cornerDir2 = cornerDir;\n      this.m_cornerConvex2 = convex;\n   }\n   b2MassData.b2MassData = function () {\n      this.mass = 0.0;\n      this.center = new b2Vec2(0, 0);\n      this.I = 0.0;\n   };\n   Box2D.inherit(b2PolygonShape, Box2D.Collision.Shapes.b2Shape);\n   b2PolygonShape.prototype.__super = Box2D.Collision.Shapes.b2Shape.prototype;\n   b2PolygonShape.b2PolygonShape = function () {\n      Box2D.Collision.Shapes.b2Shape.b2Shape.apply(this, arguments);\n   };\n   b2PolygonShape.prototype.Copy = function () {\n      var s = new b2PolygonShape();\n      s.Set(this);\n      return s;\n   }\n   b2PolygonShape.prototype.Set = function (other) {\n      this.__super.Set.call(this, other);\n      if (Box2D.is(other, b2PolygonShape)) {\n         var other2 = (other instanceof b2PolygonShape ? other : null);\n         this.m_centroid.SetV(other2.m_centroid);\n         this.m_vertexCount = other2.m_vertexCount;\n         this.Reserve(this.m_vertexCount);\n         for (var i = 0; i < this.m_vertexCount; i++) {\n            this.m_vertices[i].SetV(other2.m_vertices[i]);\n            this.m_normals[i].SetV(other2.m_normals[i]);\n         }\n      }\n   }\n   b2PolygonShape.prototype.SetAsArray = function (vertices, vertexCount) {\n      if (vertexCount === undefined) vertexCount = 0;\n      var v = new Vector();\n      var i = 0,\n         tVec;\n      for (i = 0;\n      i < vertices.length; ++i) {\n         tVec = vertices[i];\n         v.push(tVec);\n      }\n      this.SetAsVector(v, vertexCount);\n   }\n   b2PolygonShape.AsArray = function (vertices, vertexCount) {\n      if (vertexCount === undefined) vertexCount = 0;\n      var polygonShape = new b2PolygonShape();\n      polygonShape.SetAsArray(vertices, vertexCount);\n      return polygonShape;\n   }\n   b2PolygonShape.prototype.SetAsVector = function (vertices, vertexCount) {\n      if (vertexCount === undefined) vertexCount = 0;\n      if (vertexCount == 0) vertexCount = vertices.length;\n      b2Settings.b2Assert(2 <= vertexCount);\n      this.m_vertexCount = vertexCount;\n      this.Reserve(vertexCount);\n      var i = 0;\n      for (i = 0;\n      i < this.m_vertexCount; i++) {\n         this.m_vertices[i].SetV(vertices[i]);\n      }\n      for (i = 0;\n      i < this.m_vertexCount; ++i) {\n         var i1 = parseInt(i);\n         var i2 = parseInt(i + 1 < this.m_vertexCount ? i + 1 : 0);\n         var edge = b2Math.SubtractVV(this.m_vertices[i2], this.m_vertices[i1]);\n         b2Settings.b2Assert(edge.LengthSquared() > Number.MIN_VALUE);\n         this.m_normals[i].SetV(b2Math.CrossVF(edge, 1.0));\n         this.m_normals[i].Normalize();\n      }\n      this.m_centroid = b2PolygonShape.ComputeCentroid(this.m_vertices, this.m_vertexCount);\n   }\n   b2PolygonShape.AsVector = function (vertices, vertexCount) {\n      if (vertexCount === undefined) vertexCount = 0;\n      var polygonShape = new b2PolygonShape();\n      polygonShape.SetAsVector(vertices, vertexCount);\n      return polygonShape;\n   }\n   b2PolygonShape.prototype.SetAsBox = function (hx, hy) {\n      if (hx === undefined) hx = 0;\n      if (hy === undefined) hy = 0;\n      this.m_vertexCount = 4;\n      this.Reserve(4);\n      this.m_vertices[0].Set((-hx), (-hy));\n      this.m_vertices[1].Set(hx, (-hy));\n      this.m_vertices[2].Set(hx, hy);\n      this.m_vertices[3].Set((-hx), hy);\n      this.m_normals[0].Set(0.0, (-1.0));\n      this.m_normals[1].Set(1.0, 0.0);\n      this.m_normals[2].Set(0.0, 1.0);\n      this.m_normals[3].Set((-1.0), 0.0);\n      this.m_centroid.SetZero();\n   }\n   b2PolygonShape.AsBox = function (hx, hy) {\n      if (hx === undefined) hx = 0;\n      if (hy === undefined) hy = 0;\n      var polygonShape = new b2PolygonShape();\n      polygonShape.SetAsBox(hx, hy);\n      return polygonShape;\n   }\n   b2PolygonShape.prototype.SetAsOrientedBox = function (hx, hy, center, angle) {\n      if (hx === undefined) hx = 0;\n      if (hy === undefined) hy = 0;\n      if (center === undefined) center = null;\n      if (angle === undefined) angle = 0.0;\n      this.m_vertexCount = 4;\n      this.Reserve(4);\n      this.m_vertices[0].Set((-hx), (-hy));\n      this.m_vertices[1].Set(hx, (-hy));\n      this.m_vertices[2].Set(hx, hy);\n      this.m_vertices[3].Set((-hx), hy);\n      this.m_normals[0].Set(0.0, (-1.0));\n      this.m_normals[1].Set(1.0, 0.0);\n      this.m_normals[2].Set(0.0, 1.0);\n      this.m_normals[3].Set((-1.0), 0.0);\n      this.m_centroid = center;\n      var xf = new b2Transform();\n      xf.position = center;\n      xf.R.Set(angle);\n      for (var i = 0; i < this.m_vertexCount; ++i) {\n         this.m_vertices[i] = b2Math.MulX(xf, this.m_vertices[i]);\n         this.m_normals[i] = b2Math.MulMV(xf.R, this.m_normals[i]);\n      }\n   }\n   b2PolygonShape.AsOrientedBox = function (hx, hy, center, angle) {\n      if (hx === undefined) hx = 0;\n      if (hy === undefined) hy = 0;\n      if (center === undefined) center = null;\n      if (angle === undefined) angle = 0.0;\n      var polygonShape = new b2PolygonShape();\n      polygonShape.SetAsOrientedBox(hx, hy, center, angle);\n      return polygonShape;\n   }\n   b2PolygonShape.prototype.SetAsEdge = function (v1, v2) {\n      this.m_vertexCount = 2;\n      this.Reserve(2);\n      this.m_vertices[0].SetV(v1);\n      this.m_vertices[1].SetV(v2);\n      this.m_centroid.x = 0.5 * (v1.x + v2.x);\n      this.m_centroid.y = 0.5 * (v1.y + v2.y);\n      this.m_normals[0] = b2Math.CrossVF(b2Math.SubtractVV(v2, v1), 1.0);\n      this.m_normals[0].Normalize();\n      this.m_normals[1].x = (-this.m_normals[0].x);\n      this.m_normals[1].y = (-this.m_normals[0].y);\n   }\n   b2PolygonShape.AsEdge = function (v1, v2) {\n      var polygonShape = new b2PolygonShape();\n      polygonShape.SetAsEdge(v1, v2);\n      return polygonShape;\n   }\n   b2PolygonShape.prototype.TestPoint = function (xf, p) {\n      var tVec;\n      var tMat = xf.R;\n      var tX = p.x - xf.position.x;\n      var tY = p.y - xf.position.y;\n      var pLocalX = (tX * tMat.col1.x + tY * tMat.col1.y);\n      var pLocalY = (tX * tMat.col2.x + tY * tMat.col2.y);\n      for (var i = 0; i < this.m_vertexCount; ++i) {\n         tVec = this.m_vertices[i];\n         tX = pLocalX - tVec.x;\n         tY = pLocalY - tVec.y;\n         tVec = this.m_normals[i];\n         var dot = (tVec.x * tX + tVec.y * tY);\n         if (dot > 0.0) {\n            return false;\n         }\n      }\n      return true;\n   }\n   b2PolygonShape.prototype.RayCast = function (output, input, transform) {\n      var lower = 0.0;\n      var upper = input.maxFraction;\n      var tX = 0;\n      var tY = 0;\n      var tMat;\n      var tVec;\n      tX = input.p1.x - transform.position.x;\n      tY = input.p1.y - transform.position.y;\n      tMat = transform.R;\n      var p1X = (tX * tMat.col1.x + tY * tMat.col1.y);\n      var p1Y = (tX * tMat.col2.x + tY * tMat.col2.y);\n      tX = input.p2.x - transform.position.x;\n      tY = input.p2.y - transform.position.y;\n      tMat = transform.R;\n      var p2X = (tX * tMat.col1.x + tY * tMat.col1.y);\n      var p2Y = (tX * tMat.col2.x + tY * tMat.col2.y);\n      var dX = p2X - p1X;\n      var dY = p2Y - p1Y;\n      var index = parseInt((-1));\n      for (var i = 0; i < this.m_vertexCount; ++i) {\n         tVec = this.m_vertices[i];\n         tX = tVec.x - p1X;\n         tY = tVec.y - p1Y;\n         tVec = this.m_normals[i];\n         var numerator = (tVec.x * tX + tVec.y * tY);\n         var denominator = (tVec.x * dX + tVec.y * dY);\n         if (denominator == 0.0) {\n            if (numerator < 0.0) {\n               return false;\n            }\n         }\n         else {\n            if (denominator < 0.0 && numerator < lower * denominator) {\n               lower = numerator / denominator;\n               index = i;\n            }\n            else if (denominator > 0.0 && numerator < upper * denominator) {\n               upper = numerator / denominator;\n            }\n         }\n         if (upper < lower - Number.MIN_VALUE) {\n            return false;\n         }\n      }\n      if (index >= 0) {\n         output.fraction = lower;\n         tMat = transform.R;\n         tVec = this.m_normals[index];\n         output.normal.x = (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);\n         output.normal.y = (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);\n         return true;\n      }\n      return false;\n   }\n   b2PolygonShape.prototype.ComputeAABB = function (aabb, xf) {\n      var tMat = xf.R;\n      var tVec = this.m_vertices[0];\n      var lowerX = xf.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);\n      var lowerY = xf.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);\n      var upperX = lowerX;\n      var upperY = lowerY;\n      for (var i = 1; i < this.m_vertexCount; ++i) {\n         tVec = this.m_vertices[i];\n         var vX = xf.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);\n         var vY = xf.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);\n         lowerX = lowerX < vX ? lowerX : vX;\n         lowerY = lowerY < vY ? lowerY : vY;\n         upperX = upperX > vX ? upperX : vX;\n         upperY = upperY > vY ? upperY : vY;\n      }\n      aabb.lowerBound.x = lowerX - this.m_radius;\n      aabb.lowerBound.y = lowerY - this.m_radius;\n      aabb.upperBound.x = upperX + this.m_radius;\n      aabb.upperBound.y = upperY + this.m_radius;\n   }\n   b2PolygonShape.prototype.ComputeMass = function (massData, density) {\n      if (density === undefined) density = 0;\n      if (this.m_vertexCount == 2) {\n         massData.center.x = 0.5 * (this.m_vertices[0].x + this.m_vertices[1].x);\n         massData.center.y = 0.5 * (this.m_vertices[0].y + this.m_vertices[1].y);\n         massData.mass = 0.0;\n         massData.I = 0.0;\n         return;\n      }\n      var centerX = 0.0;\n      var centerY = 0.0;\n      var area = 0.0;\n      var I = 0.0;\n      var p1X = 0.0;\n      var p1Y = 0.0;\n      var k_inv3 = 1.0 / 3.0;\n      for (var i = 0; i < this.m_vertexCount; ++i) {\n         var p2 = this.m_vertices[i];\n         var p3 = i + 1 < this.m_vertexCount ? this.m_vertices[parseInt(i + 1)] : this.m_vertices[0];\n         var e1X = p2.x - p1X;\n         var e1Y = p2.y - p1Y;\n         var e2X = p3.x - p1X;\n         var e2Y = p3.y - p1Y;\n         var D = e1X * e2Y - e1Y * e2X;\n         var triangleArea = 0.5 * D;area += triangleArea;\n         centerX += triangleArea * k_inv3 * (p1X + p2.x + p3.x);\n         centerY += triangleArea * k_inv3 * (p1Y + p2.y + p3.y);\n         var px = p1X;\n         var py = p1Y;\n         var ex1 = e1X;\n         var ey1 = e1Y;\n         var ex2 = e2X;\n         var ey2 = e2Y;\n         var intx2 = k_inv3 * (0.25 * (ex1 * ex1 + ex2 * ex1 + ex2 * ex2) + (px * ex1 + px * ex2)) + 0.5 * px * px;\n         var inty2 = k_inv3 * (0.25 * (ey1 * ey1 + ey2 * ey1 + ey2 * ey2) + (py * ey1 + py * ey2)) + 0.5 * py * py;I += D * (intx2 + inty2);\n      }\n      massData.mass = density * area;\n      centerX *= 1.0 / area;\n      centerY *= 1.0 / area;\n      massData.center.Set(centerX, centerY);\n      massData.I = density * I;\n   }\n   b2PolygonShape.prototype.ComputeSubmergedArea = function (normal, offset, xf, c) {\n      if (offset === undefined) offset = 0;\n      var normalL = b2Math.MulTMV(xf.R, normal);\n      var offsetL = offset - b2Math.Dot(normal, xf.position);\n      var depths = new Vector_a2j_Number();\n      var diveCount = 0;\n      var intoIndex = parseInt((-1));\n      var outoIndex = parseInt((-1));\n      var lastSubmerged = false;\n      var i = 0;\n      for (i = 0;\n      i < this.m_vertexCount; ++i) {\n         depths[i] = b2Math.Dot(normalL, this.m_vertices[i]) - offsetL;\n         var isSubmerged = depths[i] < (-Number.MIN_VALUE);\n         if (i > 0) {\n            if (isSubmerged) {\n               if (!lastSubmerged) {\n                  intoIndex = i - 1;\n                  diveCount++;\n               }\n            }\n            else {\n               if (lastSubmerged) {\n                  outoIndex = i - 1;\n                  diveCount++;\n               }\n            }\n         }\n         lastSubmerged = isSubmerged;\n      }\n      switch (diveCount) {\n      case 0:\n         if (lastSubmerged) {\n            var md = new b2MassData();\n            this.ComputeMass(md, 1);\n            c.SetV(b2Math.MulX(xf, md.center));\n            return md.mass;\n         }\n         else {\n            return 0;\n         }\n         break;\n      case 1:\n         if (intoIndex == (-1)) {\n            intoIndex = this.m_vertexCount - 1;\n         }\n         else {\n            outoIndex = this.m_vertexCount - 1;\n         }\n         break;\n      }\n      var intoIndex2 = parseInt((intoIndex + 1) % this.m_vertexCount);\n      var outoIndex2 = parseInt((outoIndex + 1) % this.m_vertexCount);\n      var intoLamdda = (0 - depths[intoIndex]) / (depths[intoIndex2] - depths[intoIndex]);\n      var outoLamdda = (0 - depths[outoIndex]) / (depths[outoIndex2] - depths[outoIndex]);\n      var intoVec = new b2Vec2(this.m_vertices[intoIndex].x * (1 - intoLamdda) + this.m_vertices[intoIndex2].x * intoLamdda, this.m_vertices[intoIndex].y * (1 - intoLamdda) + this.m_vertices[intoIndex2].y * intoLamdda);\n      var outoVec = new b2Vec2(this.m_vertices[outoIndex].x * (1 - outoLamdda) + this.m_vertices[outoIndex2].x * outoLamdda, this.m_vertices[outoIndex].y * (1 - outoLamdda) + this.m_vertices[outoIndex2].y * outoLamdda);\n      var area = 0;\n      var center = new b2Vec2();\n      var p2 = this.m_vertices[intoIndex2];\n      var p3;\n      i = intoIndex2;\n      while (i != outoIndex2) {\n         i = (i + 1) % this.m_vertexCount;\n         if (i == outoIndex2) p3 = outoVec;\n         else p3 = this.m_vertices[i];\n         var triangleArea = 0.5 * ((p2.x - intoVec.x) * (p3.y - intoVec.y) - (p2.y - intoVec.y) * (p3.x - intoVec.x));\n         area += triangleArea;\n         center.x += triangleArea * (intoVec.x + p2.x + p3.x) / 3;\n         center.y += triangleArea * (intoVec.y + p2.y + p3.y) / 3;\n         p2 = p3;\n      }\n      center.Multiply(1 / area);\n      c.SetV(b2Math.MulX(xf, center));\n      return area;\n   }\n   b2PolygonShape.prototype.GetVertexCount = function () {\n      return this.m_vertexCount;\n   }\n   b2PolygonShape.prototype.GetVertices = function () {\n      return this.m_vertices;\n   }\n   b2PolygonShape.prototype.GetNormals = function () {\n      return this.m_normals;\n   }\n   b2PolygonShape.prototype.GetSupport = function (d) {\n      var bestIndex = 0;\n      var bestValue = this.m_vertices[0].x * d.x + this.m_vertices[0].y * d.y;\n      for (var i = 1; i < this.m_vertexCount; ++i) {\n         var value = this.m_vertices[i].x * d.x + this.m_vertices[i].y * d.y;\n         if (value > bestValue) {\n            bestIndex = i;\n            bestValue = value;\n         }\n      }\n      return bestIndex;\n   }\n   b2PolygonShape.prototype.GetSupportVertex = function (d) {\n      var bestIndex = 0;\n      var bestValue = this.m_vertices[0].x * d.x + this.m_vertices[0].y * d.y;\n      for (var i = 1; i < this.m_vertexCount; ++i) {\n         var value = this.m_vertices[i].x * d.x + this.m_vertices[i].y * d.y;\n         if (value > bestValue) {\n            bestIndex = i;\n            bestValue = value;\n         }\n      }\n      return this.m_vertices[bestIndex];\n   }\n   b2PolygonShape.prototype.Validate = function () {\n      return false;\n   }\n   b2PolygonShape.prototype.b2PolygonShape = function () {\n      this.__super.b2Shape.call(this);\n      this.m_type = b2Shape.e_polygonShape;\n      this.m_centroid = new b2Vec2();\n      this.m_vertices = new Vector();\n      this.m_normals = new Vector();\n   }\n   b2PolygonShape.prototype.Reserve = function (count) {\n      if (count === undefined) count = 0;\n      for (var i = parseInt(this.m_vertices.length); i < count; i++) {\n         this.m_vertices[i] = new b2Vec2();\n         this.m_normals[i] = new b2Vec2();\n      }\n   }\n   b2PolygonShape.ComputeCentroid = function (vs, count) {\n      if (count === undefined) count = 0;\n      var c = new b2Vec2();\n      var area = 0.0;\n      var p1X = 0.0;\n      var p1Y = 0.0;\n      var inv3 = 1.0 / 3.0;\n      for (var i = 0; i < count; ++i) {\n         var p2 = vs[i];\n         var p3 = i + 1 < count ? vs[parseInt(i + 1)] : vs[0];\n         var e1X = p2.x - p1X;\n         var e1Y = p2.y - p1Y;\n         var e2X = p3.x - p1X;\n         var e2Y = p3.y - p1Y;\n         var D = (e1X * e2Y - e1Y * e2X);\n         var triangleArea = 0.5 * D;area += triangleArea;\n         c.x += triangleArea * inv3 * (p1X + p2.x + p3.x);\n         c.y += triangleArea * inv3 * (p1Y + p2.y + p3.y);\n      }\n      c.x *= 1.0 / area;\n      c.y *= 1.0 / area;\n      return c;\n   }\n   b2PolygonShape.ComputeOBB = function (obb, vs, count) {\n      if (count === undefined) count = 0;\n      var i = 0;\n      var p = new Vector(count + 1);\n      for (i = 0;\n      i < count; ++i) {\n         p[i] = vs[i];\n      }\n      p[count] = p[0];\n      var minArea = Number.MAX_VALUE;\n      for (i = 1;\n      i <= count; ++i) {\n         var root = p[parseInt(i - 1)];\n         var uxX = p[i].x - root.x;\n         var uxY = p[i].y - root.y;\n         var length = Math.sqrt(uxX * uxX + uxY * uxY);\n         uxX /= length;\n         uxY /= length;\n         var uyX = (-uxY);\n         var uyY = uxX;\n         var lowerX = Number.MAX_VALUE;\n         var lowerY = Number.MAX_VALUE;\n         var upperX = (-Number.MAX_VALUE);\n         var upperY = (-Number.MAX_VALUE);\n         for (var j = 0; j < count; ++j) {\n            var dX = p[j].x - root.x;\n            var dY = p[j].y - root.y;\n            var rX = (uxX * dX + uxY * dY);\n            var rY = (uyX * dX + uyY * dY);\n            if (rX < lowerX) lowerX = rX;\n            if (rY < lowerY) lowerY = rY;\n            if (rX > upperX) upperX = rX;\n            if (rY > upperY) upperY = rY;\n         }\n         var area = (upperX - lowerX) * (upperY - lowerY);\n         if (area < 0.95 * minArea) {\n            minArea = area;\n            obb.R.col1.x = uxX;\n            obb.R.col1.y = uxY;\n            obb.R.col2.x = uyX;\n            obb.R.col2.y = uyY;\n            var centerX = 0.5 * (lowerX + upperX);\n            var centerY = 0.5 * (lowerY + upperY);\n            var tMat = obb.R;\n            obb.center.x = root.x + (tMat.col1.x * centerX + tMat.col2.x * centerY);\n            obb.center.y = root.y + (tMat.col1.y * centerX + tMat.col2.y * centerY);\n            obb.extents.x = 0.5 * (upperX - lowerX);\n            obb.extents.y = 0.5 * (upperY - lowerY);\n         }\n      }\n   }\n   Box2D.postDefs.push(function () {\n      Box2D.Collision.Shapes.b2PolygonShape.s_mat = new b2Mat22();\n   });\n   b2Shape.b2Shape = function () {};\n   b2Shape.prototype.Copy = function () {\n      return null;\n   }\n   b2Shape.prototype.Set = function (other) {\n      this.m_radius = other.m_radius;\n   }\n   b2Shape.prototype.GetType = function () {\n      return this.m_type;\n   }\n   b2Shape.prototype.TestPoint = function (xf, p) {\n      return false;\n   }\n   b2Shape.prototype.RayCast = function (output, input, transform) {\n      return false;\n   }\n   b2Shape.prototype.ComputeAABB = function (aabb, xf) {}\n   b2Shape.prototype.ComputeMass = function (massData, density) {\n      if (density === undefined) density = 0;\n   }\n   b2Shape.prototype.ComputeSubmergedArea = function (normal, offset, xf, c) {\n      if (offset === undefined) offset = 0;\n      return 0;\n   }\n   b2Shape.TestOverlap = function (shape1, transform1, shape2, transform2) {\n      var input = new b2DistanceInput();\n      input.proxyA = new b2DistanceProxy();\n      input.proxyA.Set(shape1);\n      input.proxyB = new b2DistanceProxy();\n      input.proxyB.Set(shape2);\n      input.transformA = transform1;\n      input.transformB = transform2;\n      input.useRadii = true;\n      var simplexCache = new b2SimplexCache();\n      simplexCache.count = 0;\n      var output = new b2DistanceOutput();\n      b2Distance.Distance(output, simplexCache, input);\n      return output.distance < 10.0 * Number.MIN_VALUE;\n   }\n   b2Shape.prototype.b2Shape = function () {\n      this.m_type = b2Shape.e_unknownShape;\n      this.m_radius = b2Settings.b2_linearSlop;\n   }\n   Box2D.postDefs.push(function () {\n      Box2D.Collision.Shapes.b2Shape.e_unknownShape = parseInt((-1));\n      Box2D.Collision.Shapes.b2Shape.e_circleShape = 0;\n      Box2D.Collision.Shapes.b2Shape.e_polygonShape = 1;\n      Box2D.Collision.Shapes.b2Shape.e_edgeShape = 2;\n      Box2D.Collision.Shapes.b2Shape.e_shapeTypeCount = 3;\n      Box2D.Collision.Shapes.b2Shape.e_hitCollide = 1;\n      Box2D.Collision.Shapes.b2Shape.e_missCollide = 0;\n      Box2D.Collision.Shapes.b2Shape.e_startsInsideCollide = parseInt((-1));\n   });\n})();\n(function () {\n   var b2Color = Box2D.Common.b2Color,\n      b2internal = Box2D.Common.b2internal,\n      b2Settings = Box2D.Common.b2Settings,\n      b2Mat22 = Box2D.Common.Math.b2Mat22,\n      b2Mat33 = Box2D.Common.Math.b2Mat33,\n      b2Math = Box2D.Common.Math.b2Math,\n      b2Sweep = Box2D.Common.Math.b2Sweep,\n      b2Transform = Box2D.Common.Math.b2Transform,\n      b2Vec2 = Box2D.Common.Math.b2Vec2,\n      b2Vec3 = Box2D.Common.Math.b2Vec3;\n\n   b2Color.b2Color = function () {\n      this._r = 0;\n      this._g = 0;\n      this._b = 0;\n   };\n   b2Color.prototype.b2Color = function (rr, gg, bb) {\n      if (rr === undefined) rr = 0;\n      if (gg === undefined) gg = 0;\n      if (bb === undefined) bb = 0;\n      this._r = Box2D.parseUInt(255 * b2Math.Clamp(rr, 0.0, 1.0));\n      this._g = Box2D.parseUInt(255 * b2Math.Clamp(gg, 0.0, 1.0));\n      this._b = Box2D.parseUInt(255 * b2Math.Clamp(bb, 0.0, 1.0));\n   }\n   b2Color.prototype.Set = function (rr, gg, bb) {\n      if (rr === undefined) rr = 0;\n      if (gg === undefined) gg = 0;\n      if (bb === undefined) bb = 0;\n      this._r = Box2D.parseUInt(255 * b2Math.Clamp(rr, 0.0, 1.0));\n      this._g = Box2D.parseUInt(255 * b2Math.Clamp(gg, 0.0, 1.0));\n      this._b = Box2D.parseUInt(255 * b2Math.Clamp(bb, 0.0, 1.0));\n   }\n   Object.defineProperty(b2Color.prototype, 'r', {\n      enumerable: false,\n      configurable: true,\n      set: function (rr) {\n         if (rr === undefined) rr = 0;\n         this._r = Box2D.parseUInt(255 * b2Math.Clamp(rr, 0.0, 1.0));\n      }\n   });\n   Object.defineProperty(b2Color.prototype, 'g', {\n      enumerable: false,\n      configurable: true,\n      set: function (gg) {\n         if (gg === undefined) gg = 0;\n         this._g = Box2D.parseUInt(255 * b2Math.Clamp(gg, 0.0, 1.0));\n      }\n   });\n   Object.defineProperty(b2Color.prototype, 'b', {\n      enumerable: false,\n      configurable: true,\n      set: function (bb) {\n         if (bb === undefined) bb = 0;\n         this._b = Box2D.parseUInt(255 * b2Math.Clamp(bb, 0.0, 1.0));\n      }\n   });\n   Object.defineProperty(b2Color.prototype, 'color', {\n      enumerable: false,\n      configurable: true,\n      get: function () {\n         return (this._r << 16) | (this._g << 8) | (this._b);\n      }\n   });\n   b2Settings.b2Settings = function () {};\n   b2Settings.b2MixFriction = function (friction1, friction2) {\n      if (friction1 === undefined) friction1 = 0;\n      if (friction2 === undefined) friction2 = 0;\n      return Math.sqrt(friction1 * friction2);\n   }\n   b2Settings.b2MixRestitution = function (restitution1, restitution2) {\n      if (restitution1 === undefined) restitution1 = 0;\n      if (restitution2 === undefined) restitution2 = 0;\n      return restitution1 > restitution2 ? restitution1 : restitution2;\n   }\n   b2Settings.b2Assert = function (a) {\n      if (!a) {\n         throw \"Assertion Failed\";\n      }\n   }\n   Box2D.postDefs.push(function () {\n      Box2D.Common.b2Settings.VERSION = \"2.1alpha\";\n      Box2D.Common.b2Settings.USHRT_MAX = 0x0000ffff;\n      Box2D.Common.b2Settings.b2_pi = Math.PI;\n      Box2D.Common.b2Settings.b2_maxManifoldPoints = 2;\n      Box2D.Common.b2Settings.b2_aabbExtension = 0.1;\n      Box2D.Common.b2Settings.b2_aabbMultiplier = 2.0;\n      Box2D.Common.b2Settings.b2_polygonRadius = 2.0 * b2Settings.b2_linearSlop;\n      Box2D.Common.b2Settings.b2_linearSlop = 0.005;\n      Box2D.Common.b2Settings.b2_angularSlop = 2.0 / 180.0 * b2Settings.b2_pi;\n      Box2D.Common.b2Settings.b2_toiSlop = 8.0 * b2Settings.b2_linearSlop;\n      Box2D.Common.b2Settings.b2_maxTOIContactsPerIsland = 32;\n      Box2D.Common.b2Settings.b2_maxTOIJointsPerIsland = 32;\n      Box2D.Common.b2Settings.b2_velocityThreshold = 1.0;\n      Box2D.Common.b2Settings.b2_maxLinearCorrection = 0.2;\n      Box2D.Common.b2Settings.b2_maxAngularCorrection = 8.0 / 180.0 * b2Settings.b2_pi;\n      Box2D.Common.b2Settings.b2_maxTranslation = 2.0;\n      Box2D.Common.b2Settings.b2_maxTranslationSquared = b2Settings.b2_maxTranslation * b2Settings.b2_maxTranslation;\n      Box2D.Common.b2Settings.b2_maxRotation = 0.5 * b2Settings.b2_pi;\n      Box2D.Common.b2Settings.b2_maxRotationSquared = b2Settings.b2_maxRotation * b2Settings.b2_maxRotation;\n      Box2D.Common.b2Settings.b2_contactBaumgarte = 0.2;\n      Box2D.Common.b2Settings.b2_timeToSleep = 0.5;\n      Box2D.Common.b2Settings.b2_linearSleepTolerance = 0.01;\n      Box2D.Common.b2Settings.b2_angularSleepTolerance = 2.0 / 180.0 * b2Settings.b2_pi;\n   });\n})();\n(function () {\n   var b2AABB = Box2D.Collision.b2AABB,\n      b2Color = Box2D.Common.b2Color,\n      b2internal = Box2D.Common.b2internal,\n      b2Settings = Box2D.Common.b2Settings,\n      b2Mat22 = Box2D.Common.Math.b2Mat22,\n      b2Mat33 = Box2D.Common.Math.b2Mat33,\n      b2Math = Box2D.Common.Math.b2Math,\n      b2Sweep = Box2D.Common.Math.b2Sweep,\n      b2Transform = Box2D.Common.Math.b2Transform,\n      b2Vec2 = Box2D.Common.Math.b2Vec2,\n      b2Vec3 = Box2D.Common.Math.b2Vec3;\n\n   b2Mat22.b2Mat22 = function () {\n      this.col1 = new b2Vec2();\n      this.col2 = new b2Vec2();\n   };\n   b2Mat22.prototype.b2Mat22 = function () {\n      this.SetIdentity();\n   }\n   b2Mat22.FromAngle = function (angle) {\n      if (angle === undefined) angle = 0;\n      var mat = new b2Mat22();\n      mat.Set(angle);\n      return mat;\n   }\n   b2Mat22.FromVV = function (c1, c2) {\n      var mat = new b2Mat22();\n      mat.SetVV(c1, c2);\n      return mat;\n   }\n   b2Mat22.prototype.Set = function (angle) {\n      if (angle === undefined) angle = 0;\n      var c = Math.cos(angle);\n      var s = Math.sin(angle);\n      this.col1.x = c;\n      this.col2.x = (-s);\n      this.col1.y = s;\n      this.col2.y = c;\n   }\n   b2Mat22.prototype.SetVV = function (c1, c2) {\n      this.col1.SetV(c1);\n      this.col2.SetV(c2);\n   }\n   b2Mat22.prototype.Copy = function () {\n      var mat = new b2Mat22();\n      mat.SetM(this);\n      return mat;\n   }\n   b2Mat22.prototype.SetM = function (m) {\n      this.col1.SetV(m.col1);\n      this.col2.SetV(m.col2);\n   }\n   b2Mat22.prototype.AddM = function (m) {\n      this.col1.x += m.col1.x;\n      this.col1.y += m.col1.y;\n      this.col2.x += m.col2.x;\n      this.col2.y += m.col2.y;\n   }\n   b2Mat22.prototype.SetIdentity = function () {\n      this.col1.x = 1.0;\n      this.col2.x = 0.0;\n      this.col1.y = 0.0;\n      this.col2.y = 1.0;\n   }\n   b2Mat22.prototype.SetZero = function () {\n      this.col1.x = 0.0;\n      this.col2.x = 0.0;\n      this.col1.y = 0.0;\n      this.col2.y = 0.0;\n   }\n   b2Mat22.prototype.GetAngle = function () {\n      return Math.atan2(this.col1.y, this.col1.x);\n   }\n   b2Mat22.prototype.GetInverse = function (out) {\n      var a = this.col1.x;\n      var b = this.col2.x;\n      var c = this.col1.y;\n      var d = this.col2.y;\n      var det = a * d - b * c;\n      if (det != 0.0) {\n         det = 1.0 / det;\n      }\n      out.col1.x = det * d;\n      out.col2.x = (-det * b);\n      out.col1.y = (-det * c);\n      out.col2.y = det * a;\n      return out;\n   }\n   b2Mat22.prototype.Solve = function (out, bX, bY) {\n      if (bX === undefined) bX = 0;\n      if (bY === undefined) bY = 0;\n      var a11 = this.col1.x;\n      var a12 = this.col2.x;\n      var a21 = this.col1.y;\n      var a22 = this.col2.y;\n      var det = a11 * a22 - a12 * a21;\n      if (det != 0.0) {\n         det = 1.0 / det;\n      }\n      out.x = det * (a22 * bX - a12 * bY);\n      out.y = det * (a11 * bY - a21 * bX);\n      return out;\n   }\n   b2Mat22.prototype.Abs = function () {\n      this.col1.Abs();\n      this.col2.Abs();\n   }\n   b2Mat33.b2Mat33 = function () {\n      this.col1 = new b2Vec3();\n      this.col2 = new b2Vec3();\n      this.col3 = new b2Vec3();\n   };\n   b2Mat33.prototype.b2Mat33 = function (c1, c2, c3) {\n      if (c1 === undefined) c1 = null;\n      if (c2 === undefined) c2 = null;\n      if (c3 === undefined) c3 = null;\n      if (!c1 && !c2 && !c3) {\n         this.col1.SetZero();\n         this.col2.SetZero();\n         this.col3.SetZero();\n      }\n      else {\n         this.col1.SetV(c1);\n         this.col2.SetV(c2);\n         this.col3.SetV(c3);\n      }\n   }\n   b2Mat33.prototype.SetVVV = function (c1, c2, c3) {\n      this.col1.SetV(c1);\n      this.col2.SetV(c2);\n      this.col3.SetV(c3);\n   }\n   b2Mat33.prototype.Copy = function () {\n      return new b2Mat33(this.col1, this.col2, this.col3);\n   }\n   b2Mat33.prototype.SetM = function (m) {\n      this.col1.SetV(m.col1);\n      this.col2.SetV(m.col2);\n      this.col3.SetV(m.col3);\n   }\n   b2Mat33.prototype.AddM = function (m) {\n      this.col1.x += m.col1.x;\n      this.col1.y += m.col1.y;\n      this.col1.z += m.col1.z;\n      this.col2.x += m.col2.x;\n      this.col2.y += m.col2.y;\n      this.col2.z += m.col2.z;\n      this.col3.x += m.col3.x;\n      this.col3.y += m.col3.y;\n      this.col3.z += m.col3.z;\n   }\n   b2Mat33.prototype.SetIdentity = function () {\n      this.col1.x = 1.0;\n      this.col2.x = 0.0;\n      this.col3.x = 0.0;\n      this.col1.y = 0.0;\n      this.col2.y = 1.0;\n      this.col3.y = 0.0;\n      this.col1.z = 0.0;\n      this.col2.z = 0.0;\n      this.col3.z = 1.0;\n   }\n   b2Mat33.prototype.SetZero = function () {\n      this.col1.x = 0.0;\n      this.col2.x = 0.0;\n      this.col3.x = 0.0;\n      this.col1.y = 0.0;\n      this.col2.y = 0.0;\n      this.col3.y = 0.0;\n      this.col1.z = 0.0;\n      this.col2.z = 0.0;\n      this.col3.z = 0.0;\n   }\n   b2Mat33.prototype.Solve22 = function (out, bX, bY) {\n      if (bX === undefined) bX = 0;\n      if (bY === undefined) bY = 0;\n      var a11 = this.col1.x;\n      var a12 = this.col2.x;\n      var a21 = this.col1.y;\n      var a22 = this.col2.y;\n      var det = a11 * a22 - a12 * a21;\n      if (det != 0.0) {\n         det = 1.0 / det;\n      }\n      out.x = det * (a22 * bX - a12 * bY);\n      out.y = det * (a11 * bY - a21 * bX);\n      return out;\n   }\n   b2Mat33.prototype.Solve33 = function (out, bX, bY, bZ) {\n      if (bX === undefined) bX = 0;\n      if (bY === undefined) bY = 0;\n      if (bZ === undefined) bZ = 0;\n      var a11 = this.col1.x;\n      var a21 = this.col1.y;\n      var a31 = this.col1.z;\n      var a12 = this.col2.x;\n      var a22 = this.col2.y;\n      var a32 = this.col2.z;\n      var a13 = this.col3.x;\n      var a23 = this.col3.y;\n      var a33 = this.col3.z;\n      var det = a11 * (a22 * a33 - a32 * a23) + a21 * (a32 * a13 - a12 * a33) + a31 * (a12 * a23 - a22 * a13);\n      if (det != 0.0) {\n         det = 1.0 / det;\n      }\n      out.x = det * (bX * (a22 * a33 - a32 * a23) + bY * (a32 * a13 - a12 * a33) + bZ * (a12 * a23 - a22 * a13));\n      out.y = det * (a11 * (bY * a33 - bZ * a23) + a21 * (bZ * a13 - bX * a33) + a31 * (bX * a23 - bY * a13));\n      out.z = det * (a11 * (a22 * bZ - a32 * bY) + a21 * (a32 * bX - a12 * bZ) + a31 * (a12 * bY - a22 * bX));\n      return out;\n   }\n   b2Math.b2Math = function () {};\n   b2Math.IsValid = function (x) {\n      if (x === undefined) x = 0;\n      return isFinite(x);\n   }\n   b2Math.Dot = function (a, b) {\n      return a.x * b.x + a.y * b.y;\n   }\n   b2Math.CrossVV = function (a, b) {\n      return a.x * b.y - a.y * b.x;\n   }\n   b2Math.CrossVF = function (a, s) {\n      if (s === undefined) s = 0;\n      var v = new b2Vec2(s * a.y, (-s * a.x));\n      return v;\n   }\n   b2Math.CrossFV = function (s, a) {\n      if (s === undefined) s = 0;\n      var v = new b2Vec2((-s * a.y), s * a.x);\n      return v;\n   }\n   b2Math.MulMV = function (A, v) {\n      var u = new b2Vec2(A.col1.x * v.x + A.col2.x * v.y, A.col1.y * v.x + A.col2.y * v.y);\n      return u;\n   }\n   b2Math.MulTMV = function (A, v) {\n      var u = new b2Vec2(b2Math.Dot(v, A.col1), b2Math.Dot(v, A.col2));\n      return u;\n   }\n   b2Math.MulX = function (T, v) {\n      var a = b2Math.MulMV(T.R, v);\n      a.x += T.position.x;\n      a.y += T.position.y;\n      return a;\n   }\n   b2Math.MulXT = function (T, v) {\n      var a = b2Math.SubtractVV(v, T.position);\n      var tX = (a.x * T.R.col1.x + a.y * T.R.col1.y);\n      a.y = (a.x * T.R.col2.x + a.y * T.R.col2.y);\n      a.x = tX;\n      return a;\n   }\n   b2Math.AddVV = function (a, b) {\n      var v = new b2Vec2(a.x + b.x, a.y + b.y);\n      return v;\n   }\n   b2Math.SubtractVV = function (a, b) {\n      var v = new b2Vec2(a.x - b.x, a.y - b.y);\n      return v;\n   }\n   b2Math.Distance = function (a, b) {\n      var cX = a.x - b.x;\n      var cY = a.y - b.y;\n      return Math.sqrt(cX * cX + cY * cY);\n   }\n   b2Math.DistanceSquared = function (a, b) {\n      var cX = a.x - b.x;\n      var cY = a.y - b.y;\n      return (cX * cX + cY * cY);\n   }\n   b2Math.MulFV = function (s, a) {\n      if (s === undefined) s = 0;\n      var v = new b2Vec2(s * a.x, s * a.y);\n      return v;\n   }\n   b2Math.AddMM = function (A, B) {\n      var C = b2Mat22.FromVV(b2Math.AddVV(A.col1, B.col1), b2Math.AddVV(A.col2, B.col2));\n      return C;\n   }\n   b2Math.MulMM = function (A, B) {\n      var C = b2Mat22.FromVV(b2Math.MulMV(A, B.col1), b2Math.MulMV(A, B.col2));\n      return C;\n   }\n   b2Math.MulTMM = function (A, B) {\n      var c1 = new b2Vec2(b2Math.Dot(A.col1, B.col1), b2Math.Dot(A.col2, B.col1));\n      var c2 = new b2Vec2(b2Math.Dot(A.col1, B.col2), b2Math.Dot(A.col2, B.col2));\n      var C = b2Mat22.FromVV(c1, c2);\n      return C;\n   }\n   b2Math.Abs = function (a) {\n      if (a === undefined) a = 0;\n      return a > 0.0 ? a : (-a);\n   }\n   b2Math.AbsV = function (a) {\n      var b = new b2Vec2(b2Math.Abs(a.x), b2Math.Abs(a.y));\n      return b;\n   }\n   b2Math.AbsM = function (A) {\n      var B = b2Mat22.FromVV(b2Math.AbsV(A.col1), b2Math.AbsV(A.col2));\n      return B;\n   }\n   b2Math.Min = function (a, b) {\n      if (a === undefined) a = 0;\n      if (b === undefined) b = 0;\n      return a < b ? a : b;\n   }\n   b2Math.MinV = function (a, b) {\n      var c = new b2Vec2(b2Math.Min(a.x, b.x), b2Math.Min(a.y, b.y));\n      return c;\n   }\n   b2Math.Max = function (a, b) {\n      if (a === undefined) a = 0;\n      if (b === undefined) b = 0;\n      return a > b ? a : b;\n   }\n   b2Math.MaxV = function (a, b) {\n      var c = new b2Vec2(b2Math.Max(a.x, b.x), b2Math.Max(a.y, b.y));\n      return c;\n   }\n   b2Math.Clamp = function (a, low, high) {\n      if (a === undefined) a = 0;\n      if (low === undefined) low = 0;\n      if (high === undefined) high = 0;\n      return a < low ? low : a > high ? high : a;\n   }\n   b2Math.ClampV = function (a, low, high) {\n      return b2Math.MaxV(low, b2Math.MinV(a, high));\n   }\n   b2Math.Swap = function (a, b) {\n      var tmp = a[0];\n      a[0] = b[0];\n      b[0] = tmp;\n   }\n   b2Math.Random = function () {\n      return Math.random() * 2 - 1;\n   }\n   b2Math.RandomRange = function (lo, hi) {\n      if (lo === undefined) lo = 0;\n      if (hi === undefined) hi = 0;\n      var r = Math.random();\n      r = (hi - lo) * r + lo;\n      return r;\n   }\n   b2Math.NextPowerOfTwo = function (x) {\n      if (x === undefined) x = 0;\n      x |= (x >> 1) & 0x7FFFFFFF;\n      x |= (x >> 2) & 0x3FFFFFFF;\n      x |= (x >> 4) & 0x0FFFFFFF;\n      x |= (x >> 8) & 0x00FFFFFF;\n      x |= (x >> 16) & 0x0000FFFF;\n      return x + 1;\n   }\n   b2Math.IsPowerOfTwo = function (x) {\n      if (x === undefined) x = 0;\n      var result = x > 0 && (x & (x - 1)) == 0;\n      return result;\n   }\n   Box2D.postDefs.push(function () {\n      Box2D.Common.Math.b2Math.b2Vec2_zero = new b2Vec2(0.0, 0.0);\n      Box2D.Common.Math.b2Math.b2Mat22_identity = b2Mat22.FromVV(new b2Vec2(1.0, 0.0), new b2Vec2(0.0, 1.0));\n      Box2D.Common.Math.b2Math.b2Transform_identity = new b2Transform(b2Math.b2Vec2_zero, b2Math.b2Mat22_identity);\n   });\n   b2Sweep.b2Sweep = function () {\n      this.localCenter = new b2Vec2();\n      this.c0 = new b2Vec2;\n      this.c = new b2Vec2();\n   };\n   b2Sweep.prototype.Set = function (other) {\n      this.localCenter.SetV(other.localCenter);\n      this.c0.SetV(other.c0);\n      this.c.SetV(other.c);\n      this.a0 = other.a0;\n      this.a = other.a;\n      this.t0 = other.t0;\n   }\n   b2Sweep.prototype.Copy = function () {\n      var copy = new b2Sweep();\n      copy.localCenter.SetV(this.localCenter);\n      copy.c0.SetV(this.c0);\n      copy.c.SetV(this.c);\n      copy.a0 = this.a0;\n      copy.a = this.a;\n      copy.t0 = this.t0;\n      return copy;\n   }\n   b2Sweep.prototype.GetTransform = function (xf, alpha) {\n      if (alpha === undefined) alpha = 0;\n      xf.position.x = (1.0 - alpha) * this.c0.x + alpha * this.c.x;\n      xf.position.y = (1.0 - alpha) * this.c0.y + alpha * this.c.y;\n      var angle = (1.0 - alpha) * this.a0 + alpha * this.a;\n      xf.R.Set(angle);\n      var tMat = xf.R;\n      xf.position.x -= (tMat.col1.x * this.localCenter.x + tMat.col2.x * this.localCenter.y);\n      xf.position.y -= (tMat.col1.y * this.localCenter.x + tMat.col2.y * this.localCenter.y);\n   }\n   b2Sweep.prototype.Advance = function (t) {\n      if (t === undefined) t = 0;\n      if (this.t0 < t && 1.0 - this.t0 > Number.MIN_VALUE) {\n         var alpha = (t - this.t0) / (1.0 - this.t0);\n         this.c0.x = (1.0 - alpha) * this.c0.x + alpha * this.c.x;\n         this.c0.y = (1.0 - alpha) * this.c0.y + alpha * this.c.y;\n         this.a0 = (1.0 - alpha) * this.a0 + alpha * this.a;\n         this.t0 = t;\n      }\n   }\n   b2Transform.b2Transform = function () {\n      this.position = new b2Vec2;\n      this.R = new b2Mat22();\n   };\n   b2Transform.prototype.b2Transform = function (pos, r) {\n      if (pos === undefined) pos = null;\n      if (r === undefined) r = null;\n      if (pos) {\n         this.position.SetV(pos);\n         this.R.SetM(r);\n      }\n   }\n   b2Transform.prototype.Initialize = function (pos, r) {\n      this.position.SetV(pos);\n      this.R.SetM(r);\n   }\n   b2Transform.prototype.SetIdentity = function () {\n      this.position.SetZero();\n      this.R.SetIdentity();\n   }\n   b2Transform.prototype.Set = function (x) {\n      this.position.SetV(x.position);\n      this.R.SetM(x.R);\n   }\n   b2Transform.prototype.GetAngle = function () {\n      return Math.atan2(this.R.col1.y, this.R.col1.x);\n   }\n   b2Vec2.b2Vec2 = function () {};\n   b2Vec2.prototype.b2Vec2 = function (x_, y_) {\n      if (x_ === undefined) x_ = 0;\n      if (y_ === undefined) y_ = 0;\n      this.x = x_;\n      this.y = y_;\n   }\n   b2Vec2.prototype.SetZero = function () {\n      this.x = 0.0;\n      this.y = 0.0;\n   }\n   b2Vec2.prototype.Set = function (x_, y_) {\n      if (x_ === undefined) x_ = 0;\n      if (y_ === undefined) y_ = 0;\n      this.x = x_;\n      this.y = y_;\n   }\n   b2Vec2.prototype.SetV = function (v) {\n      this.x = v.x;\n      this.y = v.y;\n   }\n   b2Vec2.prototype.GetNegative = function () {\n      return new b2Vec2((-this.x), (-this.y));\n   }\n   b2Vec2.prototype.NegativeSelf = function () {\n      this.x = (-this.x);\n      this.y = (-this.y);\n   }\n   b2Vec2.Make = function (x_, y_) {\n      if (x_ === undefined) x_ = 0;\n      if (y_ === undefined) y_ = 0;\n      return new b2Vec2(x_, y_);\n   }\n   b2Vec2.prototype.Copy = function () {\n      return new b2Vec2(this.x, this.y);\n   }\n   b2Vec2.prototype.Add = function (v) {\n      this.x += v.x;\n      this.y += v.y;\n   }\n   b2Vec2.prototype.Subtract = function (v) {\n      this.x -= v.x;\n      this.y -= v.y;\n   }\n   b2Vec2.prototype.Multiply = function (a) {\n      if (a === undefined) a = 0;\n      this.x *= a;\n      this.y *= a;\n   }\n   b2Vec2.prototype.MulM = function (A) {\n      var tX = this.x;\n      this.x = A.col1.x * tX + A.col2.x * this.y;\n      this.y = A.col1.y * tX + A.col2.y * this.y;\n   }\n   b2Vec2.prototype.MulTM = function (A) {\n      var tX = b2Math.Dot(this, A.col1);\n      this.y = b2Math.Dot(this, A.col2);\n      this.x = tX;\n   }\n   b2Vec2.prototype.CrossVF = function (s) {\n      if (s === undefined) s = 0;\n      var tX = this.x;\n      this.x = s * this.y;\n      this.y = (-s * tX);\n   }\n   b2Vec2.prototype.CrossFV = function (s) {\n      if (s === undefined) s = 0;\n      var tX = this.x;\n      this.x = (-s * this.y);\n      this.y = s * tX;\n   }\n   b2Vec2.prototype.MinV = function (b) {\n      this.x = this.x < b.x ? this.x : b.x;\n      this.y = this.y < b.y ? this.y : b.y;\n   }\n   b2Vec2.prototype.MaxV = function (b) {\n      this.x = this.x > b.x ? this.x : b.x;\n      this.y = this.y > b.y ? this.y : b.y;\n   }\n   b2Vec2.prototype.Abs = function () {\n      if (this.x < 0) this.x = (-this.x);\n      if (this.y < 0) this.y = (-this.y);\n   }\n   b2Vec2.prototype.Length = function () {\n      return Math.sqrt(this.x * this.x + this.y * this.y);\n   }\n   b2Vec2.prototype.LengthSquared = function () {\n      return (this.x * this.x + this.y * this.y);\n   }\n   b2Vec2.prototype.Normalize = function () {\n      var length = Math.sqrt(this.x * this.x + this.y * this.y);\n      if (length < Number.MIN_VALUE) {\n         return 0.0;\n      }\n      var invLength = 1.0 / length;\n      this.x *= invLength;\n      this.y *= invLength;\n      return length;\n   }\n   b2Vec2.prototype.IsValid = function () {\n      return b2Math.IsValid(this.x) && b2Math.IsValid(this.y);\n   }\n   b2Vec3.b2Vec3 = function () {};\n   b2Vec3.prototype.b2Vec3 = function (x, y, z) {\n      if (x === undefined) x = 0;\n      if (y === undefined) y = 0;\n      if (z === undefined) z = 0;\n      this.x = x;\n      this.y = y;\n      this.z = z;\n   }\n   b2Vec3.prototype.SetZero = function () {\n      this.x = this.y = this.z = 0.0;\n   }\n   b2Vec3.prototype.Set = function (x, y, z) {\n      if (x === undefined) x = 0;\n      if (y === undefined) y = 0;\n      if (z === undefined) z = 0;\n      this.x = x;\n      this.y = y;\n      this.z = z;\n   }\n   b2Vec3.prototype.SetV = function (v) {\n      this.x = v.x;\n      this.y = v.y;\n      this.z = v.z;\n   }\n   b2Vec3.prototype.GetNegative = function () {\n      return new b2Vec3((-this.x), (-this.y), (-this.z));\n   }\n   b2Vec3.prototype.NegativeSelf = function () {\n      this.x = (-this.x);\n      this.y = (-this.y);\n      this.z = (-this.z);\n   }\n   b2Vec3.prototype.Copy = function () {\n      return new b2Vec3(this.x, this.y, this.z);\n   }\n   b2Vec3.prototype.Add = function (v) {\n      this.x += v.x;\n      this.y += v.y;\n      this.z += v.z;\n   }\n   b2Vec3.prototype.Subtract = function (v) {\n      this.x -= v.x;\n      this.y -= v.y;\n      this.z -= v.z;\n   }\n   b2Vec3.prototype.Multiply = function (a) {\n      if (a === undefined) a = 0;\n      this.x *= a;\n      this.y *= a;\n      this.z *= a;\n   }\n})();\n(function () {\n   var b2ControllerEdge = Box2D.Dynamics.Controllers.b2ControllerEdge,\n      b2Mat22 = Box2D.Common.Math.b2Mat22,\n      b2Mat33 = Box2D.Common.Math.b2Mat33,\n      b2Math = Box2D.Common.Math.b2Math,\n      b2Sweep = Box2D.Common.Math.b2Sweep,\n      b2Transform = Box2D.Common.Math.b2Transform,\n      b2Vec2 = Box2D.Common.Math.b2Vec2,\n      b2Vec3 = Box2D.Common.Math.b2Vec3,\n      b2Color = Box2D.Common.b2Color,\n      b2internal = Box2D.Common.b2internal,\n      b2Settings = Box2D.Common.b2Settings,\n      b2AABB = Box2D.Collision.b2AABB,\n      b2Bound = Box2D.Collision.b2Bound,\n      b2BoundValues = Box2D.Collision.b2BoundValues,\n      b2Collision = Box2D.Collision.b2Collision,\n      b2ContactID = Box2D.Collision.b2ContactID,\n      b2ContactPoint = Box2D.Collision.b2ContactPoint,\n      b2Distance = Box2D.Collision.b2Distance,\n      b2DistanceInput = Box2D.Collision.b2DistanceInput,\n      b2DistanceOutput = Box2D.Collision.b2DistanceOutput,\n      b2DistanceProxy = Box2D.Collision.b2DistanceProxy,\n      b2DynamicTree = Box2D.Collision.b2DynamicTree,\n      b2DynamicTreeBroadPhase = Box2D.Collision.b2DynamicTreeBroadPhase,\n      b2DynamicTreeNode = Box2D.Collision.b2DynamicTreeNode,\n      b2DynamicTreePair = Box2D.Collision.b2DynamicTreePair,\n      b2Manifold = Box2D.Collision.b2Manifold,\n      b2ManifoldPoint = Box2D.Collision.b2ManifoldPoint,\n      b2Point = Box2D.Collision.b2Point,\n      b2RayCastInput = Box2D.Collision.b2RayCastInput,\n      b2RayCastOutput = Box2D.Collision.b2RayCastOutput,\n      b2Segment = Box2D.Collision.b2Segment,\n      b2SeparationFunction = Box2D.Collision.b2SeparationFunction,\n      b2Simplex = Box2D.Collision.b2Simplex,\n      b2SimplexCache = Box2D.Collision.b2SimplexCache,\n      b2SimplexVertex = Box2D.Collision.b2SimplexVertex,\n      b2TimeOfImpact = Box2D.Collision.b2TimeOfImpact,\n      b2TOIInput = Box2D.Collision.b2TOIInput,\n      b2WorldManifold = Box2D.Collision.b2WorldManifold,\n      ClipVertex = Box2D.Collision.ClipVertex,\n      Features = Box2D.Collision.Features,\n      IBroadPhase = Box2D.Collision.IBroadPhase,\n      b2CircleShape = Box2D.Collision.Shapes.b2CircleShape,\n      b2EdgeChainDef = Box2D.Collision.Shapes.b2EdgeChainDef,\n      b2EdgeShape = Box2D.Collision.Shapes.b2EdgeShape,\n      b2MassData = Box2D.Collision.Shapes.b2MassData,\n      b2PolygonShape = Box2D.Collision.Shapes.b2PolygonShape,\n      b2Shape = Box2D.Collision.Shapes.b2Shape,\n      b2Body = Box2D.Dynamics.b2Body,\n      b2BodyDef = Box2D.Dynamics.b2BodyDef,\n      b2ContactFilter = Box2D.Dynamics.b2ContactFilter,\n      b2ContactImpulse = Box2D.Dynamics.b2ContactImpulse,\n      b2ContactListener = Box2D.Dynamics.b2ContactListener,\n      b2ContactManager = Box2D.Dynamics.b2ContactManager,\n      b2DebugDraw = Box2D.Dynamics.b2DebugDraw,\n      b2DestructionListener = Box2D.Dynamics.b2DestructionListener,\n      b2FilterData = Box2D.Dynamics.b2FilterData,\n      b2Fixture = Box2D.Dynamics.b2Fixture,\n      b2FixtureDef = Box2D.Dynamics.b2FixtureDef,\n      b2Island = Box2D.Dynamics.b2Island,\n      b2TimeStep = Box2D.Dynamics.b2TimeStep,\n      b2World = Box2D.Dynamics.b2World,\n      b2CircleContact = Box2D.Dynamics.Contacts.b2CircleContact,\n      b2Contact = Box2D.Dynamics.Contacts.b2Contact,\n      b2ContactConstraint = Box2D.Dynamics.Contacts.b2ContactConstraint,\n      b2ContactConstraintPoint = Box2D.Dynamics.Contacts.b2ContactConstraintPoint,\n      b2ContactEdge = Box2D.Dynamics.Contacts.b2ContactEdge,\n      b2ContactFactory = Box2D.Dynamics.Contacts.b2ContactFactory,\n      b2ContactRegister = Box2D.Dynamics.Contacts.b2ContactRegister,\n      b2ContactResult = Box2D.Dynamics.Contacts.b2ContactResult,\n      b2ContactSolver = Box2D.Dynamics.Contacts.b2ContactSolver,\n      b2EdgeAndCircleContact = Box2D.Dynamics.Contacts.b2EdgeAndCircleContact,\n      b2NullContact = Box2D.Dynamics.Contacts.b2NullContact,\n      b2PolyAndCircleContact = Box2D.Dynamics.Contacts.b2PolyAndCircleContact,\n      b2PolyAndEdgeContact = Box2D.Dynamics.Contacts.b2PolyAndEdgeContact,\n      b2PolygonContact = Box2D.Dynamics.Contacts.b2PolygonContact,\n      b2PositionSolverManifold = Box2D.Dynamics.Contacts.b2PositionSolverManifold,\n      b2Controller = Box2D.Dynamics.Controllers.b2Controller,\n      b2DistanceJoint = Box2D.Dynamics.Joints.b2DistanceJoint,\n      b2DistanceJointDef = Box2D.Dynamics.Joints.b2DistanceJointDef,\n      b2FrictionJoint = Box2D.Dynamics.Joints.b2FrictionJoint,\n      b2FrictionJointDef = Box2D.Dynamics.Joints.b2FrictionJointDef,\n      b2GearJoint = Box2D.Dynamics.Joints.b2GearJoint,\n      b2GearJointDef = Box2D.Dynamics.Joints.b2GearJointDef,\n      b2Jacobian = Box2D.Dynamics.Joints.b2Jacobian,\n      b2Joint = Box2D.Dynamics.Joints.b2Joint,\n      b2JointDef = Box2D.Dynamics.Joints.b2JointDef,\n      b2JointEdge = Box2D.Dynamics.Joints.b2JointEdge,\n      b2LineJoint = Box2D.Dynamics.Joints.b2LineJoint,\n      b2LineJointDef = Box2D.Dynamics.Joints.b2LineJointDef,\n      b2MouseJoint = Box2D.Dynamics.Joints.b2MouseJoint,\n      b2MouseJointDef = Box2D.Dynamics.Joints.b2MouseJointDef,\n      b2PrismaticJoint = Box2D.Dynamics.Joints.b2PrismaticJoint,\n      b2PrismaticJointDef = Box2D.Dynamics.Joints.b2PrismaticJointDef,\n      b2PulleyJoint = Box2D.Dynamics.Joints.b2PulleyJoint,\n      b2PulleyJointDef = Box2D.Dynamics.Joints.b2PulleyJointDef,\n      b2RevoluteJoint = Box2D.Dynamics.Joints.b2RevoluteJoint,\n      b2RevoluteJointDef = Box2D.Dynamics.Joints.b2RevoluteJointDef,\n      b2WeldJoint = Box2D.Dynamics.Joints.b2WeldJoint,\n      b2WeldJointDef = Box2D.Dynamics.Joints.b2WeldJointDef;\n\n   b2Body.b2Body = function () {\n      this.m_xf = new b2Transform();\n      this.m_sweep = new b2Sweep();\n      this.m_linearVelocity = new b2Vec2();\n      this.m_force = new b2Vec2();\n   };\n   b2Body.prototype.connectEdges = function (s1, s2, angle1) {\n      if (angle1 === undefined) angle1 = 0;\n      var angle2 = Math.atan2(s2.GetDirectionVector().y, s2.GetDirectionVector().x);\n      var coreOffset = Math.tan((angle2 - angle1) * 0.5);\n      var core = b2Math.MulFV(coreOffset, s2.GetDirectionVector());\n      core = b2Math.SubtractVV(core, s2.GetNormalVector());\n      core = b2Math.MulFV(b2Settings.b2_toiSlop, core);\n      core = b2Math.AddVV(core, s2.GetVertex1());\n      var cornerDir = b2Math.AddVV(s1.GetDirectionVector(), s2.GetDirectionVector());\n      cornerDir.Normalize();\n      var convex = b2Math.Dot(s1.GetDirectionVector(), s2.GetNormalVector()) > 0.0;\n      s1.SetNextEdge(s2, core, cornerDir, convex);\n      s2.SetPrevEdge(s1, core, cornerDir, convex);\n      return angle2;\n   }\n   b2Body.prototype.CreateFixture = function (def) {\n      if (this.m_world.IsLocked() == true) {\n         return null;\n      }\n      var fixture = new b2Fixture();\n      fixture.Create(this, this.m_xf, def);\n      if (this.m_flags & b2Body.e_activeFlag) {\n         var broadPhase = this.m_world.m_contactManager.m_broadPhase;\n         fixture.CreateProxy(broadPhase, this.m_xf);\n      }\n      fixture.m_next = this.m_fixtureList;\n      this.m_fixtureList = fixture;\n      ++this.m_fixtureCount;\n      fixture.m_body = this;\n      if (fixture.m_density > 0.0) {\n         this.ResetMassData();\n      }\n      this.m_world.m_flags |= b2World.e_newFixture;\n      return fixture;\n   }\n   b2Body.prototype.CreateFixture2 = function (shape, density) {\n      if (density === undefined) density = 0.0;\n      var def = new b2FixtureDef();\n      def.shape = shape;\n      def.density = density;\n      return this.CreateFixture(def);\n   }\n   b2Body.prototype.DestroyFixture = function (fixture) {\n      if (this.m_world.IsLocked() == true) {\n         return;\n      }\n      var node = this.m_fixtureList;\n      var ppF = null;\n      var found = false;\n      while (node != null) {\n         if (node == fixture) {\n            if (ppF) ppF.m_next = fixture.m_next;\n            else this.m_fixtureList = fixture.m_next;\n            found = true;\n            break;\n         }\n         ppF = node;\n         node = node.m_next;\n      }\n      var edge = this.m_contactList;\n      while (edge) {\n         var c = edge.contact;\n         edge = edge.next;\n         var fixtureA = c.GetFixtureA();\n         var fixtureB = c.GetFixtureB();\n         if (fixture == fixtureA || fixture == fixtureB) {\n            this.m_world.m_contactManager.Destroy(c);\n         }\n      }\n      if (this.m_flags & b2Body.e_activeFlag) {\n         var broadPhase = this.m_world.m_contactManager.m_broadPhase;\n         fixture.DestroyProxy(broadPhase);\n      }\n      else {}\n      fixture.Destroy();\n      fixture.m_body = null;\n      fixture.m_next = null;\n      --this.m_fixtureCount;\n      this.ResetMassData();\n   }\n   b2Body.prototype.SetPositionAndAngle = function (position, angle) {\n      if (angle === undefined) angle = 0;\n      var f;\n      if (this.m_world.IsLocked() == true) {\n         return;\n      }\n      this.m_xf.R.Set(angle);\n      this.m_xf.position.SetV(position);\n      var tMat = this.m_xf.R;\n      var tVec = this.m_sweep.localCenter;\n      this.m_sweep.c.x = (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);\n      this.m_sweep.c.y = (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);\n      this.m_sweep.c.x += this.m_xf.position.x;\n      this.m_sweep.c.y += this.m_xf.position.y;\n      this.m_sweep.c0.SetV(this.m_sweep.c);\n      this.m_sweep.a0 = this.m_sweep.a = angle;\n      var broadPhase = this.m_world.m_contactManager.m_broadPhase;\n      for (f = this.m_fixtureList;\n      f; f = f.m_next) {\n         f.Synchronize(broadPhase, this.m_xf, this.m_xf);\n      }\n      this.m_world.m_contactManager.FindNewContacts();\n   }\n   b2Body.prototype.SetTransform = function (xf) {\n      this.SetPositionAndAngle(xf.position, xf.GetAngle());\n   }\n   b2Body.prototype.GetTransform = function () {\n      return this.m_xf;\n   }\n   b2Body.prototype.GetPosition = function () {\n      return this.m_xf.position;\n   }\n   b2Body.prototype.SetPosition = function (position) {\n      this.SetPositionAndAngle(position, this.GetAngle());\n   }\n   b2Body.prototype.GetAngle = function () {\n      return this.m_sweep.a;\n   }\n   b2Body.prototype.SetAngle = function (angle) {\n      if (angle === undefined) angle = 0;\n      this.SetPositionAndAngle(this.GetPosition(), angle);\n   }\n   b2Body.prototype.GetWorldCenter = function () {\n      return this.m_sweep.c;\n   }\n   b2Body.prototype.GetLocalCenter = function () {\n      return this.m_sweep.localCenter;\n   }\n   b2Body.prototype.SetLinearVelocity = function (v) {\n      if (this.m_type == b2Body.b2_staticBody) {\n         return;\n      }\n      this.m_linearVelocity.SetV(v);\n   }\n   b2Body.prototype.GetLinearVelocity = function () {\n      return this.m_linearVelocity;\n   }\n   b2Body.prototype.SetAngularVelocity = function (omega) {\n      if (omega === undefined) omega = 0;\n      if (this.m_type == b2Body.b2_staticBody) {\n         return;\n      }\n      this.m_angularVelocity = omega;\n   }\n   b2Body.prototype.GetAngularVelocity = function () {\n      return this.m_angularVelocity;\n   }\n   b2Body.prototype.GetDefinition = function () {\n      var bd = new b2BodyDef();\n      bd.type = this.GetType();\n      bd.allowSleep = (this.m_flags & b2Body.e_allowSleepFlag) == b2Body.e_allowSleepFlag;\n      bd.angle = this.GetAngle();\n      bd.angularDamping = this.m_angularDamping;\n      bd.angularVelocity = this.m_angularVelocity;\n      bd.fixedRotation = (this.m_flags & b2Body.e_fixedRotationFlag) == b2Body.e_fixedRotationFlag;\n      bd.bullet = (this.m_flags & b2Body.e_bulletFlag) == b2Body.e_bulletFlag;\n      bd.awake = (this.m_flags & b2Body.e_awakeFlag) == b2Body.e_awakeFlag;\n      bd.linearDamping = this.m_linearDamping;\n      bd.linearVelocity.SetV(this.GetLinearVelocity());\n      bd.position = this.GetPosition();\n      bd.userData = this.GetUserData();\n      return bd;\n   }\n   b2Body.prototype.ApplyForce = function (force, point) {\n      if (this.m_type != b2Body.b2_dynamicBody) {\n         return;\n      }\n      if (this.IsAwake() == false) {\n         this.SetAwake(true);\n      }\n      this.m_force.x += force.x;\n      this.m_force.y += force.y;\n      this.m_torque += ((point.x - this.m_sweep.c.x) * force.y - (point.y - this.m_sweep.c.y) * force.x);\n   }\n   b2Body.prototype.ApplyTorque = function (torque) {\n      if (torque === undefined) torque = 0;\n      if (this.m_type != b2Body.b2_dynamicBody) {\n         return;\n      }\n      if (this.IsAwake() == false) {\n         this.SetAwake(true);\n      }\n      this.m_torque += torque;\n   }\n   b2Body.prototype.ApplyImpulse = function (impulse, point) {\n      if (this.m_type != b2Body.b2_dynamicBody) {\n         return;\n      }\n      if (this.IsAwake() == false) {\n         this.SetAwake(true);\n      }\n      this.m_linearVelocity.x += this.m_invMass * impulse.x;\n      this.m_linearVelocity.y += this.m_invMass * impulse.y;\n      this.m_angularVelocity += this.m_invI * ((point.x - this.m_sweep.c.x) * impulse.y - (point.y - this.m_sweep.c.y) * impulse.x);\n   }\n   b2Body.prototype.Split = function (callback) {\n      var linearVelocity = this.GetLinearVelocity().Copy();\n      var angularVelocity = this.GetAngularVelocity();\n      var center = this.GetWorldCenter();\n      var body1 = this;\n      var body2 = this.m_world.CreateBody(this.GetDefinition());\n      var prev;\n      for (var f = body1.m_fixtureList; f;) {\n         if (callback(f)) {\n            var next = f.m_next;\n            if (prev) {\n               prev.m_next = next;\n            }\n            else {\n               body1.m_fixtureList = next;\n            }\n            body1.m_fixtureCount--;\n            f.m_next = body2.m_fixtureList;\n            body2.m_fixtureList = f;\n            body2.m_fixtureCount++;\n            f.m_body = body2;\n            f = next;\n         }\n         else {\n            prev = f;\n            f = f.m_next;\n         }\n      }\n      body1.ResetMassData();\n      body2.ResetMassData();\n      var center1 = body1.GetWorldCenter();\n      var center2 = body2.GetWorldCenter();\n      var velocity1 = b2Math.AddVV(linearVelocity, b2Math.CrossFV(angularVelocity, b2Math.SubtractVV(center1, center)));\n      var velocity2 = b2Math.AddVV(linearVelocity, b2Math.CrossFV(angularVelocity, b2Math.SubtractVV(center2, center)));\n      body1.SetLinearVelocity(velocity1);\n      body2.SetLinearVelocity(velocity2);\n      body1.SetAngularVelocity(angularVelocity);\n      body2.SetAngularVelocity(angularVelocity);\n      body1.SynchronizeFixtures();\n      body2.SynchronizeFixtures();\n      return body2;\n   }\n   b2Body.prototype.Merge = function (other) {\n      var f;\n      for (f = other.m_fixtureList;\n      f;) {\n         var next = f.m_next;\n         other.m_fixtureCount--;\n         f.m_next = this.m_fixtureList;\n         this.m_fixtureList = f;\n         this.m_fixtureCount++;\n         f.m_body = body2;\n         f = next;\n      }\n      body1.m_fixtureCount = 0;\n      var body1 = this;\n      var body2 = other;\n      var center1 = body1.GetWorldCenter();\n      var center2 = body2.GetWorldCenter();\n      var velocity1 = body1.GetLinearVelocity().Copy();\n      var velocity2 = body2.GetLinearVelocity().Copy();\n      var angular1 = body1.GetAngularVelocity();\n      var angular = body2.GetAngularVelocity();\n      body1.ResetMassData();\n      this.SynchronizeFixtures();\n   }\n   b2Body.prototype.GetMass = function () {\n      return this.m_mass;\n   }\n   b2Body.prototype.GetInertia = function () {\n      return this.m_I;\n   }\n   b2Body.prototype.GetMassData = function (data) {\n      data.mass = this.m_mass;\n      data.I = this.m_I;\n      data.center.SetV(this.m_sweep.localCenter);\n   }\n   b2Body.prototype.SetMassData = function (massData) {\n      b2Settings.b2Assert(this.m_world.IsLocked() == false);\n      if (this.m_world.IsLocked() == true) {\n         return;\n      }\n      if (this.m_type != b2Body.b2_dynamicBody) {\n         return;\n      }\n      this.m_invMass = 0.0;\n      this.m_I = 0.0;\n      this.m_invI = 0.0;\n      this.m_mass = massData.mass;\n      if (this.m_mass <= 0.0) {\n         this.m_mass = 1.0;\n      }\n      this.m_invMass = 1.0 / this.m_mass;\n      if (massData.I > 0.0 && (this.m_flags & b2Body.e_fixedRotationFlag) == 0) {\n         this.m_I = massData.I - this.m_mass * (massData.center.x * massData.center.x + massData.center.y * massData.center.y);\n         this.m_invI = 1.0 / this.m_I;\n      }\n      var oldCenter = this.m_sweep.c.Copy();\n      this.m_sweep.localCenter.SetV(massData.center);\n      this.m_sweep.c0.SetV(b2Math.MulX(this.m_xf, this.m_sweep.localCenter));\n      this.m_sweep.c.SetV(this.m_sweep.c0);\n      this.m_linearVelocity.x += this.m_angularVelocity * (-(this.m_sweep.c.y - oldCenter.y));\n      this.m_linearVelocity.y += this.m_angularVelocity * (+(this.m_sweep.c.x - oldCenter.x));\n   }\n   b2Body.prototype.ResetMassData = function () {\n      this.m_mass = 0.0;\n      this.m_invMass = 0.0;\n      this.m_I = 0.0;\n      this.m_invI = 0.0;\n      this.m_sweep.localCenter.SetZero();\n      if (this.m_type == b2Body.b2_staticBody || this.m_type == b2Body.b2_kinematicBody) {\n         return;\n      }\n      var center = b2Vec2.Make(0, 0);\n      for (var f = this.m_fixtureList; f; f = f.m_next) {\n         if (f.m_density == 0.0) {\n            continue;\n         }\n         var massData = f.GetMassData();\n         this.m_mass += massData.mass;\n         center.x += massData.center.x * massData.mass;\n         center.y += massData.center.y * massData.mass;\n         this.m_I += massData.I;\n      }\n      if (this.m_mass > 0.0) {\n         this.m_invMass = 1.0 / this.m_mass;\n         center.x *= this.m_invMass;\n         center.y *= this.m_invMass;\n      }\n      else {\n         this.m_mass = 1.0;\n         this.m_invMass = 1.0;\n      }\n      if (this.m_I > 0.0 && (this.m_flags & b2Body.e_fixedRotationFlag) == 0) {\n         this.m_I -= this.m_mass * (center.x * center.x + center.y * center.y);\n         this.m_I *= this.m_inertiaScale;\n         b2Settings.b2Assert(this.m_I > 0);\n         this.m_invI = 1.0 / this.m_I;\n      }\n      else {\n         this.m_I = 0.0;\n         this.m_invI = 0.0;\n      }\n      var oldCenter = this.m_sweep.c.Copy();\n      this.m_sweep.localCenter.SetV(center);\n      this.m_sweep.c0.SetV(b2Math.MulX(this.m_xf, this.m_sweep.localCenter));\n      this.m_sweep.c.SetV(this.m_sweep.c0);\n      this.m_linearVelocity.x += this.m_angularVelocity * (-(this.m_sweep.c.y - oldCenter.y));\n      this.m_linearVelocity.y += this.m_angularVelocity * (+(this.m_sweep.c.x - oldCenter.x));\n   }\n   b2Body.prototype.GetWorldPoint = function (localPoint) {\n      var A = this.m_xf.R;\n      var u = new b2Vec2(A.col1.x * localPoint.x + A.col2.x * localPoint.y, A.col1.y * localPoint.x + A.col2.y * localPoint.y);\n      u.x += this.m_xf.position.x;\n      u.y += this.m_xf.position.y;\n      return u;\n   }\n   b2Body.prototype.GetWorldVector = function (localVector) {\n      return b2Math.MulMV(this.m_xf.R, localVector);\n   }\n   b2Body.prototype.GetLocalPoint = function (worldPoint) {\n      return b2Math.MulXT(this.m_xf, worldPoint);\n   }\n   b2Body.prototype.GetLocalVector = function (worldVector) {\n      return b2Math.MulTMV(this.m_xf.R, worldVector);\n   }\n   b2Body.prototype.GetLinearVelocityFromWorldPoint = function (worldPoint) {\n      return new b2Vec2(this.m_linearVelocity.x - this.m_angularVelocity * (worldPoint.y - this.m_sweep.c.y), this.m_linearVelocity.y + this.m_angularVelocity * (worldPoint.x - this.m_sweep.c.x));\n   }\n   b2Body.prototype.GetLinearVelocityFromLocalPoint = function (localPoint) {\n      var A = this.m_xf.R;\n      var worldPoint = new b2Vec2(A.col1.x * localPoint.x + A.col2.x * localPoint.y, A.col1.y * localPoint.x + A.col2.y * localPoint.y);\n      worldPoint.x += this.m_xf.position.x;\n      worldPoint.y += this.m_xf.position.y;\n      return new b2Vec2(this.m_linearVelocity.x - this.m_angularVelocity * (worldPoint.y - this.m_sweep.c.y), this.m_linearVelocity.y + this.m_angularVelocity * (worldPoint.x - this.m_sweep.c.x));\n   }\n   b2Body.prototype.GetLinearDamping = function () {\n      return this.m_linearDamping;\n   }\n   b2Body.prototype.SetLinearDamping = function (linearDamping) {\n      if (linearDamping === undefined) linearDamping = 0;\n      this.m_linearDamping = linearDamping;\n   }\n   b2Body.prototype.GetAngularDamping = function () {\n      return this.m_angularDamping;\n   }\n   b2Body.prototype.SetAngularDamping = function (angularDamping) {\n      if (angularDamping === undefined) angularDamping = 0;\n      this.m_angularDamping = angularDamping;\n   }\n   b2Body.prototype.SetType = function (type) {\n      if (type === undefined) type = 0;\n      if (this.m_type == type) {\n         return;\n      }\n      this.m_type = type;\n      this.ResetMassData();\n      if (this.m_type == b2Body.b2_staticBody) {\n         this.m_linearVelocity.SetZero();\n         this.m_angularVelocity = 0.0;\n      }\n      this.SetAwake(true);\n      this.m_force.SetZero();\n      this.m_torque = 0.0;\n      for (var ce = this.m_contactList; ce; ce = ce.next) {\n         ce.contact.FlagForFiltering();\n      }\n   }\n   b2Body.prototype.GetType = function () {\n      return this.m_type;\n   }\n   b2Body.prototype.SetBullet = function (flag) {\n      if (flag) {\n         this.m_flags |= b2Body.e_bulletFlag;\n      }\n      else {\n         this.m_flags &= ~b2Body.e_bulletFlag;\n      }\n   }\n   b2Body.prototype.IsBullet = function () {\n      return (this.m_flags & b2Body.e_bulletFlag) == b2Body.e_bulletFlag;\n   }\n   b2Body.prototype.SetSleepingAllowed = function (flag) {\n      if (flag) {\n         this.m_flags |= b2Body.e_allowSleepFlag;\n      }\n      else {\n         this.m_flags &= ~b2Body.e_allowSleepFlag;\n         this.SetAwake(true);\n      }\n   }\n   b2Body.prototype.SetAwake = function (flag) {\n      if (flag) {\n         this.m_flags |= b2Body.e_awakeFlag;\n         this.m_sleepTime = 0.0;\n      }\n      else {\n         this.m_flags &= ~b2Body.e_awakeFlag;\n         this.m_sleepTime = 0.0;\n         this.m_linearVelocity.SetZero();\n         this.m_angularVelocity = 0.0;\n         this.m_force.SetZero();\n         this.m_torque = 0.0;\n      }\n   }\n   b2Body.prototype.IsAwake = function () {\n      return (this.m_flags & b2Body.e_awakeFlag) == b2Body.e_awakeFlag;\n   }\n   b2Body.prototype.SetFixedRotation = function (fixed) {\n      if (fixed) {\n         this.m_flags |= b2Body.e_fixedRotationFlag;\n      }\n      else {\n         this.m_flags &= ~b2Body.e_fixedRotationFlag;\n      }\n      this.ResetMassData();\n   }\n   b2Body.prototype.IsFixedRotation = function () {\n      return (this.m_flags & b2Body.e_fixedRotationFlag) == b2Body.e_fixedRotationFlag;\n   }\n   b2Body.prototype.SetActive = function (flag) {\n      if (flag == this.IsActive()) {\n         return;\n      }\n      var broadPhase;\n      var f;\n      if (flag) {\n         this.m_flags |= b2Body.e_activeFlag;\n         broadPhase = this.m_world.m_contactManager.m_broadPhase;\n         for (f = this.m_fixtureList;\n         f; f = f.m_next) {\n            f.CreateProxy(broadPhase, this.m_xf);\n         }\n      }\n      else {\n         this.m_flags &= ~b2Body.e_activeFlag;\n         broadPhase = this.m_world.m_contactManager.m_broadPhase;\n         for (f = this.m_fixtureList;\n         f; f = f.m_next) {\n            f.DestroyProxy(broadPhase);\n         }\n         var ce = this.m_contactList;\n         while (ce) {\n            var ce0 = ce;\n            ce = ce.next;\n            this.m_world.m_contactManager.Destroy(ce0.contact);\n         }\n         this.m_contactList = null;\n      }\n   }\n   b2Body.prototype.IsActive = function () {\n      return (this.m_flags & b2Body.e_activeFlag) == b2Body.e_activeFlag;\n   }\n   b2Body.prototype.IsSleepingAllowed = function () {\n      return (this.m_flags & b2Body.e_allowSleepFlag) == b2Body.e_allowSleepFlag;\n   }\n   b2Body.prototype.GetFixtureList = function () {\n      return this.m_fixtureList;\n   }\n   b2Body.prototype.GetJointList = function () {\n      return this.m_jointList;\n   }\n   b2Body.prototype.GetControllerList = function () {\n      return this.m_controllerList;\n   }\n   b2Body.prototype.GetContactList = function () {\n      return this.m_contactList;\n   }\n   b2Body.prototype.GetNext = function () {\n      return this.m_next;\n   }\n   b2Body.prototype.GetUserData = function () {\n      return this.m_userData;\n   }\n   b2Body.prototype.SetUserData = function (data) {\n      this.m_userData = data;\n   }\n   b2Body.prototype.GetWorld = function () {\n      return this.m_world;\n   }\n   b2Body.prototype.b2Body = function (bd, world) {\n      this.m_flags = 0;\n      if (bd.bullet) {\n         this.m_flags |= b2Body.e_bulletFlag;\n      }\n      if (bd.fixedRotation) {\n         this.m_flags |= b2Body.e_fixedRotationFlag;\n      }\n      if (bd.allowSleep) {\n         this.m_flags |= b2Body.e_allowSleepFlag;\n      }\n      if (bd.awake) {\n         this.m_flags |= b2Body.e_awakeFlag;\n      }\n      if (bd.active) {\n         this.m_flags |= b2Body.e_activeFlag;\n      }\n      this.m_world = world;\n      this.m_xf.position.SetV(bd.position);\n      this.m_xf.R.Set(bd.angle);\n      this.m_sweep.localCenter.SetZero();\n      this.m_sweep.t0 = 1.0;\n      this.m_sweep.a0 = this.m_sweep.a = bd.angle;\n      var tMat = this.m_xf.R;\n      var tVec = this.m_sweep.localCenter;\n      this.m_sweep.c.x = (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);\n      this.m_sweep.c.y = (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);\n      this.m_sweep.c.x += this.m_xf.position.x;\n      this.m_sweep.c.y += this.m_xf.position.y;\n      this.m_sweep.c0.SetV(this.m_sweep.c);\n      this.m_jointList = null;\n      this.m_controllerList = null;\n      this.m_contactList = null;\n      this.m_controllerCount = 0;\n      this.m_prev = null;\n      this.m_next = null;\n      this.m_linearVelocity.SetV(bd.linearVelocity);\n      this.m_angularVelocity = bd.angularVelocity;\n      this.m_linearDamping = bd.linearDamping;\n      this.m_angularDamping = bd.angularDamping;\n      this.m_force.Set(0.0, 0.0);\n      this.m_torque = 0.0;\n      this.m_sleepTime = 0.0;\n      this.m_type = bd.type;\n      if (this.m_type == b2Body.b2_dynamicBody) {\n         this.m_mass = 1.0;\n         this.m_invMass = 1.0;\n      }\n      else {\n         this.m_mass = 0.0;\n         this.m_invMass = 0.0;\n      }\n      this.m_I = 0.0;\n      this.m_invI = 0.0;\n      this.m_inertiaScale = bd.inertiaScale;\n      this.m_userData = bd.userData;\n      this.m_fixtureList = null;\n      this.m_fixtureCount = 0;\n   }\n   b2Body.prototype.SynchronizeFixtures = function () {\n      var xf1 = b2Body.s_xf1;\n      xf1.R.Set(this.m_sweep.a0);\n      var tMat = xf1.R;\n      var tVec = this.m_sweep.localCenter;\n      xf1.position.x = this.m_sweep.c0.x - (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);\n      xf1.position.y = this.m_sweep.c0.y - (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);\n      var f;\n      var broadPhase = this.m_world.m_contactManager.m_broadPhase;\n      for (f = this.m_fixtureList;\n      f; f = f.m_next) {\n         f.Synchronize(broadPhase, xf1, this.m_xf);\n      }\n   }\n   b2Body.prototype.SynchronizeTransform = function () {\n      this.m_xf.R.Set(this.m_sweep.a);\n      var tMat = this.m_xf.R;\n      var tVec = this.m_sweep.localCenter;\n      this.m_xf.position.x = this.m_sweep.c.x - (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);\n      this.m_xf.position.y = this.m_sweep.c.y - (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);\n   }\n   b2Body.prototype.ShouldCollide = function (other) {\n      if (this.m_type != b2Body.b2_dynamicBody && other.m_type != b2Body.b2_dynamicBody) {\n         return false;\n      }\n      for (var jn = this.m_jointList; jn; jn = jn.next) {\n         if (jn.other == other) if (jn.joint.m_collideConnected == false) {\n            return false;\n         }\n      }\n      return true;\n   }\n   b2Body.prototype.Advance = function (t) {\n      if (t === undefined) t = 0;\n      this.m_sweep.Advance(t);\n      this.m_sweep.c.SetV(this.m_sweep.c0);\n      this.m_sweep.a = this.m_sweep.a0;\n      this.SynchronizeTransform();\n   }\n   Box2D.postDefs.push(function () {\n      Box2D.Dynamics.b2Body.s_xf1 = new b2Transform();\n      Box2D.Dynamics.b2Body.e_islandFlag = 0x0001;\n      Box2D.Dynamics.b2Body.e_awakeFlag = 0x0002;\n      Box2D.Dynamics.b2Body.e_allowSleepFlag = 0x0004;\n      Box2D.Dynamics.b2Body.e_bulletFlag = 0x0008;\n      Box2D.Dynamics.b2Body.e_fixedRotationFlag = 0x0010;\n      Box2D.Dynamics.b2Body.e_activeFlag = 0x0020;\n      Box2D.Dynamics.b2Body.b2_staticBody = 0;\n      Box2D.Dynamics.b2Body.b2_kinematicBody = 1;\n      Box2D.Dynamics.b2Body.b2_dynamicBody = 2;\n   });\n   b2BodyDef.b2BodyDef = function () {\n      this.position = new b2Vec2();\n      this.linearVelocity = new b2Vec2();\n   };\n   b2BodyDef.prototype.b2BodyDef = function () {\n      this.userData = null;\n      this.position.Set(0.0, 0.0);\n      this.angle = 0.0;\n      this.linearVelocity.Set(0, 0);\n      this.angularVelocity = 0.0;\n      this.linearDamping = 0.0;\n      this.angularDamping = 0.0;\n      this.allowSleep = true;\n      this.awake = true;\n      this.fixedRotation = false;\n      this.bullet = false;\n      this.type = b2Body.b2_staticBody;\n      this.active = true;\n      this.inertiaScale = 1.0;\n   }\n   b2ContactFilter.b2ContactFilter = function () {};\n   b2ContactFilter.prototype.ShouldCollide = function (fixtureA, fixtureB) {\n      var filter1 = fixtureA.GetFilterData();\n      var filter2 = fixtureB.GetFilterData();\n      if (filter1.groupIndex == filter2.groupIndex && filter1.groupIndex != 0) {\n         return filter1.groupIndex > 0;\n      }\n      var collide = (filter1.maskBits & filter2.categoryBits) != 0 && (filter1.categoryBits & filter2.maskBits) != 0;\n      return collide;\n   }\n   b2ContactFilter.prototype.RayCollide = function (userData, fixture) {\n      if (!userData) return true;\n      return this.ShouldCollide((userData instanceof b2Fixture ? userData : null), fixture);\n   }\n   Box2D.postDefs.push(function () {\n      Box2D.Dynamics.b2ContactFilter.b2_defaultFilter = new b2ContactFilter();\n   });\n   b2ContactImpulse.b2ContactImpulse = function () {\n      this.normalImpulses = new Vector_a2j_Number(b2Settings.b2_maxManifoldPoints);\n      this.tangentImpulses = new Vector_a2j_Number(b2Settings.b2_maxManifoldPoints);\n   };\n   b2ContactListener.b2ContactListener = function () {};\n   b2ContactListener.prototype.BeginContact = function (contact) {}\n   b2ContactListener.prototype.EndContact = function (contact) {}\n   b2ContactListener.prototype.PreSolve = function (contact, oldManifold) {}\n   b2ContactListener.prototype.PostSolve = function (contact, impulse) {}\n   Box2D.postDefs.push(function () {\n      Box2D.Dynamics.b2ContactListener.b2_defaultListener = new b2ContactListener();\n   });\n   b2ContactManager.b2ContactManager = function () {};\n   b2ContactManager.prototype.b2ContactManager = function () {\n      this.m_world = null;\n      this.m_contactCount = 0;\n      this.m_contactFilter = b2ContactFilter.b2_defaultFilter;\n      this.m_contactListener = b2ContactListener.b2_defaultListener;\n      this.m_contactFactory = new b2ContactFactory(this.m_allocator);\n      this.m_broadPhase = new b2DynamicTreeBroadPhase();\n   }\n   b2ContactManager.prototype.AddPair = function (proxyUserDataA, proxyUserDataB) {\n      var fixtureA = (proxyUserDataA instanceof b2Fixture ? proxyUserDataA : null);\n      var fixtureB = (proxyUserDataB instanceof b2Fixture ? proxyUserDataB : null);\n      var bodyA = fixtureA.GetBody();\n      var bodyB = fixtureB.GetBody();\n      if (bodyA == bodyB) return;\n      var edge = bodyB.GetContactList();\n      while (edge) {\n         if (edge.other == bodyA) {\n            var fA = edge.contact.GetFixtureA();\n            var fB = edge.contact.GetFixtureB();\n            if (fA == fixtureA && fB == fixtureB) return;\n            if (fA == fixtureB && fB == fixtureA) return;\n         }\n         edge = edge.next;\n      }\n      if (bodyB.ShouldCollide(bodyA) == false) {\n         return;\n      }\n      if (this.m_contactFilter.ShouldCollide(fixtureA, fixtureB) == false) {\n         return;\n      }\n      var c = this.m_contactFactory.Create(fixtureA, fixtureB);\n      fixtureA = c.GetFixtureA();\n      fixtureB = c.GetFixtureB();\n      bodyA = fixtureA.m_body;\n      bodyB = fixtureB.m_body;\n      c.m_prev = null;\n      c.m_next = this.m_world.m_contactList;\n      if (this.m_world.m_contactList != null) {\n         this.m_world.m_contactList.m_prev = c;\n      }\n      this.m_world.m_contactList = c;\n      c.m_nodeA.contact = c;\n      c.m_nodeA.other = bodyB;\n      c.m_nodeA.prev = null;\n      c.m_nodeA.next = bodyA.m_contactList;\n      if (bodyA.m_contactList != null) {\n         bodyA.m_contactList.prev = c.m_nodeA;\n      }\n      bodyA.m_contactList = c.m_nodeA;\n      c.m_nodeB.contact = c;\n      c.m_nodeB.other = bodyA;\n      c.m_nodeB.prev = null;\n      c.m_nodeB.next = bodyB.m_contactList;\n      if (bodyB.m_contactList != null) {\n         bodyB.m_contactList.prev = c.m_nodeB;\n      }\n      bodyB.m_contactList = c.m_nodeB;\n      ++this.m_world.m_contactCount;\n      return;\n   }\n   b2ContactManager.prototype.FindNewContacts = function () {\n      this.m_broadPhase.UpdatePairs(Box2D.generateCallback(this, this.AddPair));\n   }\n   b2ContactManager.prototype.Destroy = function (c) {\n      var fixtureA = c.GetFixtureA();\n      var fixtureB = c.GetFixtureB();\n      var bodyA = fixtureA.GetBody();\n      var bodyB = fixtureB.GetBody();\n      if (c.IsTouching()) {\n         this.m_contactListener.EndContact(c);\n      }\n      if (c.m_prev) {\n         c.m_prev.m_next = c.m_next;\n      }\n      if (c.m_next) {\n         c.m_next.m_prev = c.m_prev;\n      }\n      if (c == this.m_world.m_contactList) {\n         this.m_world.m_contactList = c.m_next;\n      }\n      if (c.m_nodeA.prev) {\n         c.m_nodeA.prev.next = c.m_nodeA.next;\n      }\n      if (c.m_nodeA.next) {\n         c.m_nodeA.next.prev = c.m_nodeA.prev;\n      }\n      if (c.m_nodeA == bodyA.m_contactList) {\n         bodyA.m_contactList = c.m_nodeA.next;\n      }\n      if (c.m_nodeB.prev) {\n         c.m_nodeB.prev.next = c.m_nodeB.next;\n      }\n      if (c.m_nodeB.next) {\n         c.m_nodeB.next.prev = c.m_nodeB.prev;\n      }\n      if (c.m_nodeB == bodyB.m_contactList) {\n         bodyB.m_contactList = c.m_nodeB.next;\n      }\n      this.m_contactFactory.Destroy(c);\n      --this.m_contactCount;\n   }\n   b2ContactManager.prototype.Collide = function () {\n      var c = this.m_world.m_contactList;\n      while (c) {\n         var fixtureA = c.GetFixtureA();\n         var fixtureB = c.GetFixtureB();\n         var bodyA = fixtureA.GetBody();\n         var bodyB = fixtureB.GetBody();\n         if (bodyA.IsAwake() == false && bodyB.IsAwake() == false) {\n            c = c.GetNext();\n            continue;\n         }\n         if (c.m_flags & b2Contact.e_filterFlag) {\n            if (bodyB.ShouldCollide(bodyA) == false) {\n               var cNuke = c;\n               c = cNuke.GetNext();\n               this.Destroy(cNuke);\n               continue;\n            }\n            if (this.m_contactFilter.ShouldCollide(fixtureA, fixtureB) == false) {\n               cNuke = c;\n               c = cNuke.GetNext();\n               this.Destroy(cNuke);\n               continue;\n            }\n            c.m_flags &= ~b2Contact.e_filterFlag;\n         }\n         var proxyA = fixtureA.m_proxy;\n         var proxyB = fixtureB.m_proxy;\n         var overlap = this.m_broadPhase.TestOverlap(proxyA, proxyB);\n         if (overlap == false) {\n            cNuke = c;\n            c = cNuke.GetNext();\n            this.Destroy(cNuke);\n            continue;\n         }\n         c.Update(this.m_contactListener);\n         c = c.GetNext();\n      }\n   }\n   Box2D.postDefs.push(function () {\n      Box2D.Dynamics.b2ContactManager.s_evalCP = new b2ContactPoint();\n   });\n   b2DebugDraw.b2DebugDraw = function () {};\n   b2DebugDraw.prototype.b2DebugDraw = function () {}\n   b2DebugDraw.prototype.SetFlags = function (flags) {\n      if (flags === undefined) flags = 0;\n   }\n   b2DebugDraw.prototype.GetFlags = function () {}\n   b2DebugDraw.prototype.AppendFlags = function (flags) {\n      if (flags === undefined) flags = 0;\n   }\n   b2DebugDraw.prototype.ClearFlags = function (flags) {\n      if (flags === undefined) flags = 0;\n   }\n   b2DebugDraw.prototype.SetSprite = function (sprite) {}\n   b2DebugDraw.prototype.GetSprite = function () {}\n   b2DebugDraw.prototype.SetDrawScale = function (drawScale) {\n      if (drawScale === undefined) drawScale = 0;\n   }\n   b2DebugDraw.prototype.GetDrawScale = function () {}\n   b2DebugDraw.prototype.SetLineThickness = function (lineThickness) {\n      if (lineThickness === undefined) lineThickness = 0;\n   }\n   b2DebugDraw.prototype.GetLineThickness = function () {}\n   b2DebugDraw.prototype.SetAlpha = function (alpha) {\n      if (alpha === undefined) alpha = 0;\n   }\n   b2DebugDraw.prototype.GetAlpha = function () {}\n   b2DebugDraw.prototype.SetFillAlpha = function (alpha) {\n      if (alpha === undefined) alpha = 0;\n   }\n   b2DebugDraw.prototype.GetFillAlpha = function () {}\n   b2DebugDraw.prototype.SetXFormScale = function (xformScale) {\n      if (xformScale === undefined) xformScale = 0;\n   }\n   b2DebugDraw.prototype.GetXFormScale = function () {}\n   b2DebugDraw.prototype.DrawPolygon = function (vertices, vertexCount, color) {\n      if (vertexCount === undefined) vertexCount = 0;\n   }\n   b2DebugDraw.prototype.DrawSolidPolygon = function (vertices, vertexCount, color) {\n      if (vertexCount === undefined) vertexCount = 0;\n   }\n   b2DebugDraw.prototype.DrawCircle = function (center, radius, color) {\n      if (radius === undefined) radius = 0;\n   }\n   b2DebugDraw.prototype.DrawSolidCircle = function (center, radius, axis, color) {\n      if (radius === undefined) radius = 0;\n   }\n   b2DebugDraw.prototype.DrawSegment = function (p1, p2, color) {}\n   b2DebugDraw.prototype.DrawTransform = function (xf) {}\n   Box2D.postDefs.push(function () {\n      Box2D.Dynamics.b2DebugDraw.e_shapeBit = 0x0001;\n      Box2D.Dynamics.b2DebugDraw.e_jointBit = 0x0002;\n      Box2D.Dynamics.b2DebugDraw.e_aabbBit = 0x0004;\n      Box2D.Dynamics.b2DebugDraw.e_pairBit = 0x0008;\n      Box2D.Dynamics.b2DebugDraw.e_centerOfMassBit = 0x0010;\n      Box2D.Dynamics.b2DebugDraw.e_controllerBit = 0x0020;\n   });\n   b2DestructionListener.b2DestructionListener = function () {};\n   b2DestructionListener.prototype.SayGoodbyeJoint = function (joint) {}\n   b2DestructionListener.prototype.SayGoodbyeFixture = function (fixture) {}\n   b2FilterData.b2FilterData = function () {\n      this.categoryBits = 0x0001;\n      this.maskBits = 0xFFFF;\n      this.groupIndex = 0;\n   };\n   b2FilterData.prototype.Copy = function () {\n      var copy = new b2FilterData();\n      copy.categoryBits = this.categoryBits;\n      copy.maskBits = this.maskBits;\n      copy.groupIndex = this.groupIndex;\n      return copy;\n   }\n   b2Fixture.b2Fixture = function () {\n      this.m_filter = new b2FilterData();\n   };\n   b2Fixture.prototype.GetType = function () {\n      return this.m_shape.GetType();\n   }\n   b2Fixture.prototype.GetShape = function () {\n      return this.m_shape;\n   }\n   b2Fixture.prototype.SetSensor = function (sensor) {\n      if (this.m_isSensor == sensor) return;\n      this.m_isSensor = sensor;\n      if (this.m_body == null) return;\n      var edge = this.m_body.GetContactList();\n      while (edge) {\n         var contact = edge.contact;\n         var fixtureA = contact.GetFixtureA();\n         var fixtureB = contact.GetFixtureB();\n         if (fixtureA == this || fixtureB == this) contact.SetSensor(fixtureA.IsSensor() || fixtureB.IsSensor());\n         edge = edge.next;\n      }\n   }\n   b2Fixture.prototype.IsSensor = function () {\n      return this.m_isSensor;\n   }\n   b2Fixture.prototype.SetFilterData = function (filter) {\n      this.m_filter = filter.Copy();\n      if (this.m_body) return;\n      var edge = this.m_body.GetContactList();\n      while (edge) {\n         var contact = edge.contact;\n         var fixtureA = contact.GetFixtureA();\n         var fixtureB = contact.GetFixtureB();\n         if (fixtureA == this || fixtureB == this) contact.FlagForFiltering();\n         edge = edge.next;\n      }\n   }\n   b2Fixture.prototype.GetFilterData = function () {\n      return this.m_filter.Copy();\n   }\n   b2Fixture.prototype.GetBody = function () {\n      return this.m_body;\n   }\n   b2Fixture.prototype.GetNext = function () {\n      return this.m_next;\n   }\n   b2Fixture.prototype.GetUserData = function () {\n      return this.m_userData;\n   }\n   b2Fixture.prototype.SetUserData = function (data) {\n      this.m_userData = data;\n   }\n   b2Fixture.prototype.TestPoint = function (p) {\n      return this.m_shape.TestPoint(this.m_body.GetTransform(), p);\n   }\n   b2Fixture.prototype.RayCast = function (output, input) {\n      return this.m_shape.RayCast(output, input, this.m_body.GetTransform());\n   }\n   b2Fixture.prototype.GetMassData = function (massData) {\n      if (massData === undefined) massData = null;\n      if (massData == null) {\n         massData = new b2MassData();\n      }\n      this.m_shape.ComputeMass(massData, this.m_density);\n      return massData;\n   }\n   b2Fixture.prototype.SetDensity = function (density) {\n      if (density === undefined) density = 0;\n      this.m_density = density;\n   }\n   b2Fixture.prototype.GetDensity = function () {\n      return this.m_density;\n   }\n   b2Fixture.prototype.GetFriction = function () {\n      return this.m_friction;\n   }\n   b2Fixture.prototype.SetFriction = function (friction) {\n      if (friction === undefined) friction = 0;\n      this.m_friction = friction;\n   }\n   b2Fixture.prototype.GetRestitution = function () {\n      return this.m_restitution;\n   }\n   b2Fixture.prototype.SetRestitution = function (restitution) {\n      if (restitution === undefined) restitution = 0;\n      this.m_restitution = restitution;\n   }\n   b2Fixture.prototype.GetAABB = function () {\n      return this.m_aabb;\n   }\n   b2Fixture.prototype.b2Fixture = function () {\n      this.m_aabb = new b2AABB();\n      this.m_userData = null;\n      this.m_body = null;\n      this.m_next = null;\n      this.m_shape = null;\n      this.m_density = 0.0;\n      this.m_friction = 0.0;\n      this.m_restitution = 0.0;\n   }\n   b2Fixture.prototype.Create = function (body, xf, def) {\n      this.m_userData = def.userData;\n      this.m_friction = def.friction;\n      this.m_restitution = def.restitution;\n      this.m_body = body;\n      this.m_next = null;\n      this.m_filter = def.filter.Copy();\n      this.m_isSensor = def.isSensor;\n      this.m_shape = def.shape.Copy();\n      this.m_density = def.density;\n   }\n   b2Fixture.prototype.Destroy = function () {\n      this.m_shape = null;\n   }\n   b2Fixture.prototype.CreateProxy = function (broadPhase, xf) {\n      this.m_shape.ComputeAABB(this.m_aabb, xf);\n      this.m_proxy = broadPhase.CreateProxy(this.m_aabb, this);\n   }\n   b2Fixture.prototype.DestroyProxy = function (broadPhase) {\n      if (this.m_proxy == null) {\n         return;\n      }\n      broadPhase.DestroyProxy(this.m_proxy);\n      this.m_proxy = null;\n   }\n   b2Fixture.prototype.Synchronize = function (broadPhase, transform1, transform2) {\n      if (!this.m_proxy) return;\n      var aabb1 = new b2AABB();\n      var aabb2 = new b2AABB();\n      this.m_shape.ComputeAABB(aabb1, transform1);\n      this.m_shape.ComputeAABB(aabb2, transform2);\n      this.m_aabb.Combine(aabb1, aabb2);\n      var displacement = b2Math.SubtractVV(transform2.position, transform1.position);\n      broadPhase.MoveProxy(this.m_proxy, this.m_aabb, displacement);\n   }\n   b2FixtureDef.b2FixtureDef = function () {\n      this.filter = new b2FilterData();\n   };\n   b2FixtureDef.prototype.b2FixtureDef = function () {\n      this.shape = null;\n      this.userData = null;\n      this.friction = 0.2;\n      this.restitution = 0.0;\n      this.density = 0.0;\n      this.filter.categoryBits = 0x0001;\n      this.filter.maskBits = 0xFFFF;\n      this.filter.groupIndex = 0;\n      this.isSensor = false;\n   }\n   b2Island.b2Island = function () {};\n   b2Island.prototype.b2Island = function () {\n      this.m_bodies = new Vector();\n      this.m_contacts = new Vector();\n      this.m_joints = new Vector();\n   }\n   b2Island.prototype.Initialize = function (bodyCapacity, contactCapacity, jointCapacity, allocator, listener, contactSolver) {\n      if (bodyCapacity === undefined) bodyCapacity = 0;\n      if (contactCapacity === undefined) contactCapacity = 0;\n      if (jointCapacity === undefined) jointCapacity = 0;\n      var i = 0;\n      this.m_bodyCapacity = bodyCapacity;\n      this.m_contactCapacity = contactCapacity;\n      this.m_jointCapacity = jointCapacity;\n      this.m_bodyCount = 0;\n      this.m_contactCount = 0;\n      this.m_jointCount = 0;\n      this.m_allocator = allocator;\n      this.m_listener = listener;\n      this.m_contactSolver = contactSolver;\n      for (i = this.m_bodies.length;\n      i < bodyCapacity; i++)\n      this.m_bodies[i] = null;\n      for (i = this.m_contacts.length;\n      i < contactCapacity; i++)\n      this.m_contacts[i] = null;\n      for (i = this.m_joints.length;\n      i < jointCapacity; i++)\n      this.m_joints[i] = null;\n   }\n   b2Island.prototype.Clear = function () {\n      this.m_bodyCount = 0;\n      this.m_contactCount = 0;\n      this.m_jointCount = 0;\n   }\n   b2Island.prototype.Solve = function (step, gravity, allowSleep) {\n      var i = 0;\n      var j = 0;\n      var b;\n      var joint;\n      for (i = 0;\n      i < this.m_bodyCount; ++i) {\n         b = this.m_bodies[i];\n         if (b.GetType() != b2Body.b2_dynamicBody) continue;\n         b.m_linearVelocity.x += step.dt * (gravity.x + b.m_invMass * b.m_force.x);\n         b.m_linearVelocity.y += step.dt * (gravity.y + b.m_invMass * b.m_force.y);\n         b.m_angularVelocity += step.dt * b.m_invI * b.m_torque;\n         b.m_linearVelocity.Multiply(b2Math.Clamp(1.0 - step.dt * b.m_linearDamping, 0.0, 1.0));\n         b.m_angularVelocity *= b2Math.Clamp(1.0 - step.dt * b.m_angularDamping, 0.0, 1.0);\n      }\n      this.m_contactSolver.Initialize(step, this.m_contacts, this.m_contactCount, this.m_allocator);\n      var contactSolver = this.m_contactSolver;\n      contactSolver.InitVelocityConstraints(step);\n      for (i = 0;\n      i < this.m_jointCount; ++i) {\n         joint = this.m_joints[i];\n         joint.InitVelocityConstraints(step);\n      }\n      for (i = 0;\n      i < step.velocityIterations; ++i) {\n         for (j = 0;\n         j < this.m_jointCount; ++j) {\n            joint = this.m_joints[j];\n            joint.SolveVelocityConstraints(step);\n         }\n         contactSolver.SolveVelocityConstraints();\n      }\n      for (i = 0;\n      i < this.m_jointCount; ++i) {\n         joint = this.m_joints[i];\n         joint.FinalizeVelocityConstraints();\n      }\n      contactSolver.FinalizeVelocityConstraints();\n      for (i = 0;\n      i < this.m_bodyCount; ++i) {\n         b = this.m_bodies[i];\n         if (b.GetType() == b2Body.b2_staticBody) continue;\n         var translationX = step.dt * b.m_linearVelocity.x;\n         var translationY = step.dt * b.m_linearVelocity.y;\n         if ((translationX * translationX + translationY * translationY) > b2Settings.b2_maxTranslationSquared) {\n            b.m_linearVelocity.Normalize();\n            b.m_linearVelocity.x *= b2Settings.b2_maxTranslation * step.inv_dt;\n            b.m_linearVelocity.y *= b2Settings.b2_maxTranslation * step.inv_dt;\n         }\n         var rotation = step.dt * b.m_angularVelocity;\n         if (rotation * rotation > b2Settings.b2_maxRotationSquared) {\n            if (b.m_angularVelocity < 0.0) {\n               b.m_angularVelocity = (-b2Settings.b2_maxRotation * step.inv_dt);\n            }\n            else {\n               b.m_angularVelocity = b2Settings.b2_maxRotation * step.inv_dt;\n            }\n         }\n         b.m_sweep.c0.SetV(b.m_sweep.c);\n         b.m_sweep.a0 = b.m_sweep.a;\n         b.m_sweep.c.x += step.dt * b.m_linearVelocity.x;\n         b.m_sweep.c.y += step.dt * b.m_linearVelocity.y;\n         b.m_sweep.a += step.dt * b.m_angularVelocity;\n         b.SynchronizeTransform();\n      }\n      for (i = 0;\n      i < step.positionIterations; ++i) {\n         var contactsOkay = contactSolver.SolvePositionConstraints(b2Settings.b2_contactBaumgarte);\n         var jointsOkay = true;\n         for (j = 0;\n         j < this.m_jointCount; ++j) {\n            joint = this.m_joints[j];\n            var jointOkay = joint.SolvePositionConstraints(b2Settings.b2_contactBaumgarte);\n            jointsOkay = jointsOkay && jointOkay;\n         }\n         if (contactsOkay && jointsOkay) {\n            break;\n         }\n      }\n      this.Report(contactSolver.m_constraints);\n      if (allowSleep) {\n         var minSleepTime = Number.MAX_VALUE;\n         var linTolSqr = b2Settings.b2_linearSleepTolerance * b2Settings.b2_linearSleepTolerance;\n         var angTolSqr = b2Settings.b2_angularSleepTolerance * b2Settings.b2_angularSleepTolerance;\n         for (i = 0;\n         i < this.m_bodyCount; ++i) {\n            b = this.m_bodies[i];\n            if (b.GetType() == b2Body.b2_staticBody) {\n               continue;\n            }\n            if ((b.m_flags & b2Body.e_allowSleepFlag) == 0) {\n               b.m_sleepTime = 0.0;\n               minSleepTime = 0.0;\n            }\n            if ((b.m_flags & b2Body.e_allowSleepFlag) == 0 || b.m_angularVelocity * b.m_angularVelocity > angTolSqr || b2Math.Dot(b.m_linearVelocity, b.m_linearVelocity) > linTolSqr) {\n               b.m_sleepTime = 0.0;\n               minSleepTime = 0.0;\n            }\n            else {\n               b.m_sleepTime += step.dt;\n               minSleepTime = b2Math.Min(minSleepTime, b.m_sleepTime);\n            }\n         }\n         if (minSleepTime >= b2Settings.b2_timeToSleep) {\n            for (i = 0;\n            i < this.m_bodyCount; ++i) {\n               b = this.m_bodies[i];\n               b.SetAwake(false);\n            }\n         }\n      }\n   }\n   b2Island.prototype.SolveTOI = function (subStep) {\n      var i = 0;\n      var j = 0;\n      this.m_contactSolver.Initialize(subStep, this.m_contacts, this.m_contactCount, this.m_allocator);\n      var contactSolver = this.m_contactSolver;\n      for (i = 0;\n      i < this.m_jointCount; ++i) {\n         this.m_joints[i].InitVelocityConstraints(subStep);\n      }\n      for (i = 0;\n      i < subStep.velocityIterations; ++i) {\n         contactSolver.SolveVelocityConstraints();\n         for (j = 0;\n         j < this.m_jointCount; ++j) {\n            this.m_joints[j].SolveVelocityConstraints(subStep);\n         }\n      }\n      for (i = 0;\n      i < this.m_bodyCount; ++i) {\n         var b = this.m_bodies[i];\n         if (b.GetType() == b2Body.b2_staticBody) continue;\n         var translationX = subStep.dt * b.m_linearVelocity.x;\n         var translationY = subStep.dt * b.m_linearVelocity.y;\n         if ((translationX * translationX + translationY * translationY) > b2Settings.b2_maxTranslationSquared) {\n            b.m_linearVelocity.Normalize();\n            b.m_linearVelocity.x *= b2Settings.b2_maxTranslation * subStep.inv_dt;\n            b.m_linearVelocity.y *= b2Settings.b2_maxTranslation * subStep.inv_dt;\n         }\n         var rotation = subStep.dt * b.m_angularVelocity;\n         if (rotation * rotation > b2Settings.b2_maxRotationSquared) {\n            if (b.m_angularVelocity < 0.0) {\n               b.m_angularVelocity = (-b2Settings.b2_maxRotation * subStep.inv_dt);\n            }\n            else {\n               b.m_angularVelocity = b2Settings.b2_maxRotation * subStep.inv_dt;\n            }\n         }\n         b.m_sweep.c0.SetV(b.m_sweep.c);\n         b.m_sweep.a0 = b.m_sweep.a;\n         b.m_sweep.c.x += subStep.dt * b.m_linearVelocity.x;\n         b.m_sweep.c.y += subStep.dt * b.m_linearVelocity.y;\n         b.m_sweep.a += subStep.dt * b.m_angularVelocity;\n         b.SynchronizeTransform();\n      }\n      var k_toiBaumgarte = 0.75;\n      for (i = 0;\n      i < subStep.positionIterations; ++i) {\n         var contactsOkay = contactSolver.SolvePositionConstraints(k_toiBaumgarte);\n         var jointsOkay = true;\n         for (j = 0;\n         j < this.m_jointCount; ++j) {\n            var jointOkay = this.m_joints[j].SolvePositionConstraints(b2Settings.b2_contactBaumgarte);\n            jointsOkay = jointsOkay && jointOkay;\n         }\n         if (contactsOkay && jointsOkay) {\n            break;\n         }\n      }\n      this.Report(contactSolver.m_constraints);\n   }\n   b2Island.prototype.Report = function (constraints) {\n      if (this.m_listener == null) {\n         return;\n      }\n      for (var i = 0; i < this.m_contactCount; ++i) {\n         var c = this.m_contacts[i];\n         var cc = constraints[i];\n         for (var j = 0; j < cc.pointCount; ++j) {\n            b2Island.s_impulse.normalImpulses[j] = cc.points[j].normalImpulse;\n            b2Island.s_impulse.tangentImpulses[j] = cc.points[j].tangentImpulse;\n         }\n         this.m_listener.PostSolve(c, b2Island.s_impulse);\n      }\n   }\n   b2Island.prototype.AddBody = function (body) {\n      body.m_islandIndex = this.m_bodyCount;\n      this.m_bodies[this.m_bodyCount++] = body;\n   }\n   b2Island.prototype.AddContact = function (contact) {\n      this.m_contacts[this.m_contactCount++] = contact;\n   }\n   b2Island.prototype.AddJoint = function (joint) {\n      this.m_joints[this.m_jointCount++] = joint;\n   }\n   Box2D.postDefs.push(function () {\n      Box2D.Dynamics.b2Island.s_impulse = new b2ContactImpulse();\n   });\n   b2TimeStep.b2TimeStep = function () {};\n   b2TimeStep.prototype.Set = function (step) {\n      this.dt = step.dt;\n      this.inv_dt = step.inv_dt;\n      this.positionIterations = step.positionIterations;\n      this.velocityIterations = step.velocityIterations;\n      this.warmStarting = step.warmStarting;\n   }\n   b2World.b2World = function () {\n      this.s_stack = new Vector();\n      this.m_contactManager = new b2ContactManager();\n      this.m_contactSolver = new b2ContactSolver();\n      this.m_island = new b2Island();\n   };\n   b2World.prototype.b2World = function (gravity, doSleep) {\n      this.m_destructionListener = null;\n      this.m_debugDraw = null;\n      this.m_bodyList = null;\n      this.m_contactList = null;\n      this.m_jointList = null;\n      this.m_controllerList = null;\n      this.m_bodyCount = 0;\n      this.m_contactCount = 0;\n      this.m_jointCount = 0;\n      this.m_controllerCount = 0;\n      b2World.m_warmStarting = true;\n      b2World.m_continuousPhysics = true;\n      this.m_allowSleep = doSleep;\n      this.m_gravity = gravity;\n      this.m_inv_dt0 = 0.0;\n      this.m_contactManager.m_world = this;\n      var bd = new b2BodyDef();\n      this.m_groundBody = this.CreateBody(bd);\n   }\n   b2World.prototype.SetDestructionListener = function (listener) {\n      this.m_destructionListener = listener;\n   }\n   b2World.prototype.SetContactFilter = function (filter) {\n      this.m_contactManager.m_contactFilter = filter;\n   }\n   b2World.prototype.SetContactListener = function (listener) {\n      this.m_contactManager.m_contactListener = listener;\n   }\n   b2World.prototype.SetDebugDraw = function (debugDraw) {\n      this.m_debugDraw = debugDraw;\n   }\n   b2World.prototype.SetBroadPhase = function (broadPhase) {\n      var oldBroadPhase = this.m_contactManager.m_broadPhase;\n      this.m_contactManager.m_broadPhase = broadPhase;\n      for (var b = this.m_bodyList; b; b = b.m_next) {\n         for (var f = b.m_fixtureList; f; f = f.m_next) {\n            f.m_proxy = broadPhase.CreateProxy(oldBroadPhase.GetFatAABB(f.m_proxy), f);\n         }\n      }\n   }\n   b2World.prototype.Validate = function () {\n      this.m_contactManager.m_broadPhase.Validate();\n   }\n   b2World.prototype.GetProxyCount = function () {\n      return this.m_contactManager.m_broadPhase.GetProxyCount();\n   }\n   b2World.prototype.CreateBody = function (def) {\n      if (this.IsLocked() == true) {\n         return null;\n      }\n      var b = new b2Body(def, this);\n      b.m_prev = null;\n      b.m_next = this.m_bodyList;\n      if (this.m_bodyList) {\n         this.m_bodyList.m_prev = b;\n      }\n      this.m_bodyList = b;\n      ++this.m_bodyCount;\n      return b;\n   }\n   b2World.prototype.DestroyBody = function (b) {\n      if (this.IsLocked() == true) {\n         return;\n      }\n      var jn = b.m_jointList;\n      while (jn) {\n         var jn0 = jn;\n         jn = jn.next;\n         if (this.m_destructionListener) {\n            this.m_destructionListener.SayGoodbyeJoint(jn0.joint);\n         }\n         this.DestroyJoint(jn0.joint);\n      }\n      var coe = b.m_controllerList;\n      while (coe) {\n         var coe0 = coe;\n         coe = coe.nextController;\n         coe0.controller.RemoveBody(b);\n      }\n      var ce = b.m_contactList;\n      while (ce) {\n         var ce0 = ce;\n         ce = ce.next;\n         this.m_contactManager.Destroy(ce0.contact);\n      }\n      b.m_contactList = null;\n      var f = b.m_fixtureList;\n      while (f) {\n         var f0 = f;\n         f = f.m_next;\n         if (this.m_destructionListener) {\n            this.m_destructionListener.SayGoodbyeFixture(f0);\n         }\n         f0.DestroyProxy(this.m_contactManager.m_broadPhase);\n         f0.Destroy();\n      }\n      b.m_fixtureList = null;\n      b.m_fixtureCount = 0;\n      if (b.m_prev) {\n         b.m_prev.m_next = b.m_next;\n      }\n      if (b.m_next) {\n         b.m_next.m_prev = b.m_prev;\n      }\n      if (b == this.m_bodyList) {\n         this.m_bodyList = b.m_next;\n      }--this.m_bodyCount;\n   }\n   b2World.prototype.CreateJoint = function (def) {\n      var j = b2Joint.Create(def, null);\n      j.m_prev = null;\n      j.m_next = this.m_jointList;\n      if (this.m_jointList) {\n         this.m_jointList.m_prev = j;\n      }\n      this.m_jointList = j;\n      ++this.m_jointCount;\n      j.m_edgeA.joint = j;\n      j.m_edgeA.other = j.m_bodyB;\n      j.m_edgeA.prev = null;\n      j.m_edgeA.next = j.m_bodyA.m_jointList;\n      if (j.m_bodyA.m_jointList) j.m_bodyA.m_jointList.prev = j.m_edgeA;\n      j.m_bodyA.m_jointList = j.m_edgeA;\n      j.m_edgeB.joint = j;\n      j.m_edgeB.other = j.m_bodyA;\n      j.m_edgeB.prev = null;\n      j.m_edgeB.next = j.m_bodyB.m_jointList;\n      if (j.m_bodyB.m_jointList) j.m_bodyB.m_jointList.prev = j.m_edgeB;\n      j.m_bodyB.m_jointList = j.m_edgeB;\n      var bodyA = def.bodyA;\n      var bodyB = def.bodyB;\n      if (def.collideConnected == false) {\n         var edge = bodyB.GetContactList();\n         while (edge) {\n            if (edge.other == bodyA) {\n               edge.contact.FlagForFiltering();\n            }\n            edge = edge.next;\n         }\n      }\n      return j;\n   }\n   b2World.prototype.DestroyJoint = function (j) {\n      var collideConnected = j.m_collideConnected;\n      if (j.m_prev) {\n         j.m_prev.m_next = j.m_next;\n      }\n      if (j.m_next) {\n         j.m_next.m_prev = j.m_prev;\n      }\n      if (j == this.m_jointList) {\n         this.m_jointList = j.m_next;\n      }\n      var bodyA = j.m_bodyA;\n      var bodyB = j.m_bodyB;\n      bodyA.SetAwake(true);\n      bodyB.SetAwake(true);\n      if (j.m_edgeA.prev) {\n         j.m_edgeA.prev.next = j.m_edgeA.next;\n      }\n      if (j.m_edgeA.next) {\n         j.m_edgeA.next.prev = j.m_edgeA.prev;\n      }\n      if (j.m_edgeA == bodyA.m_jointList) {\n         bodyA.m_jointList = j.m_edgeA.next;\n      }\n      j.m_edgeA.prev = null;\n      j.m_edgeA.next = null;\n      if (j.m_edgeB.prev) {\n         j.m_edgeB.prev.next = j.m_edgeB.next;\n      }\n      if (j.m_edgeB.next) {\n         j.m_edgeB.next.prev = j.m_edgeB.prev;\n      }\n      if (j.m_edgeB == bodyB.m_jointList) {\n         bodyB.m_jointList = j.m_edgeB.next;\n      }\n      j.m_edgeB.prev = null;\n      j.m_edgeB.next = null;\n      b2Joint.Destroy(j, null);\n      --this.m_jointCount;\n      if (collideConnected == false) {\n         var edge = bodyB.GetContactList();\n         while (edge) {\n            if (edge.other == bodyA) {\n               edge.contact.FlagForFiltering();\n            }\n            edge = edge.next;\n         }\n      }\n   }\n   b2World.prototype.AddController = function (c) {\n      c.m_next = this.m_controllerList;\n      c.m_prev = null;\n      this.m_controllerList = c;\n      c.m_world = this;\n      this.m_controllerCount++;\n      return c;\n   }\n   b2World.prototype.RemoveController = function (c) {\n      if (c.m_prev) c.m_prev.m_next = c.m_next;\n      if (c.m_next) c.m_next.m_prev = c.m_prev;\n      if (this.m_controllerList == c) this.m_controllerList = c.m_next;\n      this.m_controllerCount--;\n   }\n   b2World.prototype.CreateController = function (controller) {\n      if (controller.m_world != this) throw new Error(\"Controller can only be a member of one world\");\n      controller.m_next = this.m_controllerList;\n      controller.m_prev = null;\n      if (this.m_controllerList) this.m_controllerList.m_prev = controller;\n      this.m_controllerList = controller;\n      ++this.m_controllerCount;\n      controller.m_world = this;\n      return controller;\n   }\n   b2World.prototype.DestroyController = function (controller) {\n      controller.Clear();\n      if (controller.m_next) controller.m_next.m_prev = controller.m_prev;\n      if (controller.m_prev) controller.m_prev.m_next = controller.m_next;\n      if (controller == this.m_controllerList) this.m_controllerList = controller.m_next;\n      --this.m_controllerCount;\n   }\n   b2World.prototype.SetWarmStarting = function (flag) {\n      b2World.m_warmStarting = flag;\n   }\n   b2World.prototype.SetContinuousPhysics = function (flag) {\n      b2World.m_continuousPhysics = flag;\n   }\n   b2World.prototype.GetBodyCount = function () {\n      return this.m_bodyCount;\n   }\n   b2World.prototype.GetJointCount = function () {\n      return this.m_jointCount;\n   }\n   b2World.prototype.GetContactCount = function () {\n      return this.m_contactCount;\n   }\n   b2World.prototype.SetGravity = function (gravity) {\n      this.m_gravity = gravity;\n   }\n   b2World.prototype.GetGravity = function () {\n      return this.m_gravity;\n   }\n   b2World.prototype.GetGroundBody = function () {\n      return this.m_groundBody;\n   }\n   b2World.prototype.Step = function (dt, velocityIterations, positionIterations) {\n      if (dt === undefined) dt = 0;\n      if (velocityIterations === undefined) velocityIterations = 0;\n      if (positionIterations === undefined) positionIterations = 0;\n      if (this.m_flags & b2World.e_newFixture) {\n         this.m_contactManager.FindNewContacts();\n         this.m_flags &= ~b2World.e_newFixture;\n      }\n      this.m_flags |= b2World.e_locked;\n      var step = b2World.s_timestep2;\n      step.dt = dt;\n      step.velocityIterations = velocityIterations;\n      step.positionIterations = positionIterations;\n      if (dt > 0.0) {\n         step.inv_dt = 1.0 / dt;\n      }\n      else {\n         step.inv_dt = 0.0;\n      }\n      step.dtRatio = this.m_inv_dt0 * dt;\n      step.warmStarting = b2World.m_warmStarting;\n      this.m_contactManager.Collide();\n      if (step.dt > 0.0) {\n         this.Solve(step);\n      }\n      if (b2World.m_continuousPhysics && step.dt > 0.0) {\n         this.SolveTOI(step);\n      }\n      if (step.dt > 0.0) {\n         this.m_inv_dt0 = step.inv_dt;\n      }\n      this.m_flags &= ~b2World.e_locked;\n   }\n   b2World.prototype.ClearForces = function () {\n      for (var body = this.m_bodyList; body; body = body.m_next) {\n         body.m_force.SetZero();\n         body.m_torque = 0.0;\n      }\n   }\n   b2World.prototype.DrawDebugData = function () {\n      if (this.m_debugDraw == null) {\n         return;\n      }\n      this.m_debugDraw.m_sprite.graphics.clear();\n      var flags = this.m_debugDraw.GetFlags();\n      var i = 0;\n      var b;\n      var f;\n      var s;\n      var j;\n      var bp;\n      var invQ = new b2Vec2;\n      var x1 = new b2Vec2;\n      var x2 = new b2Vec2;\n      var xf;\n      var b1 = new b2AABB();\n      var b2 = new b2AABB();\n      var vs = [new b2Vec2(), new b2Vec2(), new b2Vec2(), new b2Vec2()];\n      var color = new b2Color(0, 0, 0);\n      if (flags & b2DebugDraw.e_shapeBit) {\n         for (b = this.m_bodyList;\n         b; b = b.m_next) {\n            xf = b.m_xf;\n            for (f = b.GetFixtureList();\n            f; f = f.m_next) {\n               s = f.GetShape();\n               if (b.IsActive() == false) {\n                  color.Set(0.5, 0.5, 0.3);\n                  this.DrawShape(s, xf, color);\n               }\n               else if (b.GetType() == b2Body.b2_staticBody) {\n                  color.Set(0.5, 0.9, 0.5);\n                  this.DrawShape(s, xf, color);\n               }\n               else if (b.GetType() == b2Body.b2_kinematicBody) {\n                  color.Set(0.5, 0.5, 0.9);\n                  this.DrawShape(s, xf, color);\n               }\n               else if (b.IsAwake() == false) {\n                  color.Set(0.6, 0.6, 0.6);\n                  this.DrawShape(s, xf, color);\n               }\n               else {\n                  color.Set(0.9, 0.7, 0.7);\n                  this.DrawShape(s, xf, color);\n               }\n            }\n         }\n      }\n      if (flags & b2DebugDraw.e_jointBit) {\n         for (j = this.m_jointList;\n         j; j = j.m_next) {\n            this.DrawJoint(j);\n         }\n      }\n      if (flags & b2DebugDraw.e_controllerBit) {\n         for (var c = this.m_controllerList; c; c = c.m_next) {\n            c.Draw(this.m_debugDraw);\n         }\n      }\n      if (flags & b2DebugDraw.e_pairBit) {\n         color.Set(0.3, 0.9, 0.9);\n         for (var contact = this.m_contactManager.m_contactList; contact; contact = contact.GetNext()) {\n            var fixtureA = contact.GetFixtureA();\n            var fixtureB = contact.GetFixtureB();\n            var cA = fixtureA.GetAABB().GetCenter();\n            var cB = fixtureB.GetAABB().GetCenter();\n            this.m_debugDraw.DrawSegment(cA, cB, color);\n         }\n      }\n      if (flags & b2DebugDraw.e_aabbBit) {\n         bp = this.m_contactManager.m_broadPhase;\n         vs = [new b2Vec2(), new b2Vec2(), new b2Vec2(), new b2Vec2()];\n         for (b = this.m_bodyList;\n         b; b = b.GetNext()) {\n            if (b.IsActive() == false) {\n               continue;\n            }\n            for (f = b.GetFixtureList();\n            f; f = f.GetNext()) {\n               var aabb = bp.GetFatAABB(f.m_proxy);\n               vs[0].Set(aabb.lowerBound.x, aabb.lowerBound.y);\n               vs[1].Set(aabb.upperBound.x, aabb.lowerBound.y);\n               vs[2].Set(aabb.upperBound.x, aabb.upperBound.y);\n               vs[3].Set(aabb.lowerBound.x, aabb.upperBound.y);\n               this.m_debugDraw.DrawPolygon(vs, 4, color);\n            }\n         }\n      }\n      if (flags & b2DebugDraw.e_centerOfMassBit) {\n         for (b = this.m_bodyList;\n         b; b = b.m_next) {\n            xf = b2World.s_xf;\n            xf.R = b.m_xf.R;\n            xf.position = b.GetWorldCenter();\n            this.m_debugDraw.DrawTransform(xf);\n         }\n      }\n   }\n   b2World.prototype.QueryAABB = function (callback, aabb) {\n      var __this = this;\n      var broadPhase = __this.m_contactManager.m_broadPhase;\n\n      function WorldQueryWrapper(proxy) {\n         return callback(broadPhase.GetUserData(proxy));\n      };\n      broadPhase.Query(WorldQueryWrapper, aabb);\n   }\n   b2World.prototype.QueryShape = function (callback, shape, transform) {\n      var __this = this;\n      if (transform === undefined) transform = null;\n      if (transform == null) {\n         transform = new b2Transform();\n         transform.SetIdentity();\n      }\n      var broadPhase = __this.m_contactManager.m_broadPhase;\n\n      function WorldQueryWrapper(proxy) {\n         var fixture = (broadPhase.GetUserData(proxy) instanceof b2Fixture ? broadPhase.GetUserData(proxy) : null);\n         if (b2Shape.TestOverlap(shape, transform, fixture.GetShape(), fixture.GetBody().GetTransform())) return callback(fixture);\n         return true;\n      };\n      var aabb = new b2AABB();\n      shape.ComputeAABB(aabb, transform);\n      broadPhase.Query(WorldQueryWrapper, aabb);\n   }\n   b2World.prototype.QueryPoint = function (callback, p) {\n      var __this = this;\n      var broadPhase = __this.m_contactManager.m_broadPhase;\n\n      function WorldQueryWrapper(proxy) {\n         var fixture = (broadPhase.GetUserData(proxy) instanceof b2Fixture ? broadPhase.GetUserData(proxy) : null);\n         if (fixture.TestPoint(p)) return callback(fixture);\n         return true;\n      };\n      var aabb = new b2AABB();\n      aabb.lowerBound.Set(p.x - b2Settings.b2_linearSlop, p.y - b2Settings.b2_linearSlop);\n      aabb.upperBound.Set(p.x + b2Settings.b2_linearSlop, p.y + b2Settings.b2_linearSlop);\n      broadPhase.Query(WorldQueryWrapper, aabb);\n   }\n   b2World.prototype.RayCast = function (callback, point1, point2) {\n      var __this = this;\n      var broadPhase = __this.m_contactManager.m_broadPhase;\n      var output = new b2RayCastOutput;\n\n      function RayCastWrapper(input, proxy) {\n         var userData = broadPhase.GetUserData(proxy);\n         var fixture = (userData instanceof b2Fixture ? userData : null);\n         var hit = fixture.RayCast(output, input);\n         if (hit) {\n            var fraction = output.fraction;\n            var point = new b2Vec2((1.0 - fraction) * point1.x + fraction * point2.x, (1.0 - fraction) * point1.y + fraction * point2.y);\n            return callback(fixture, point, output.normal, fraction);\n         }\n         return input.maxFraction;\n      };\n      var input = new b2RayCastInput(point1, point2);\n      broadPhase.RayCast(RayCastWrapper, input);\n   }\n   b2World.prototype.RayCastOne = function (point1, point2) {\n      var __this = this;\n      var result;\n\n      function RayCastOneWrapper(fixture, point, normal, fraction) {\n         if (fraction === undefined) fraction = 0;\n         result = fixture;\n         return fraction;\n      };\n      __this.RayCast(RayCastOneWrapper, point1, point2);\n      return result;\n   }\n   b2World.prototype.RayCastAll = function (point1, point2) {\n      var __this = this;\n      var result = new Vector();\n\n      function RayCastAllWrapper(fixture, point, normal, fraction) {\n         if (fraction === undefined) fraction = 0;\n         result[result.length] = fixture;\n         return 1;\n      };\n      __this.RayCast(RayCastAllWrapper, point1, point2);\n      return result;\n   }\n   b2World.prototype.GetBodyList = function () {\n      return this.m_bodyList;\n   }\n   b2World.prototype.GetJointList = function () {\n      return this.m_jointList;\n   }\n   b2World.prototype.GetContactList = function () {\n      return this.m_contactList;\n   }\n   b2World.prototype.IsLocked = function () {\n      return (this.m_flags & b2World.e_locked) > 0;\n   }\n   b2World.prototype.Solve = function (step) {\n      var b;\n      for (var controller = this.m_controllerList; controller; controller = controller.m_next) {\n         controller.Step(step);\n      }\n      var island = this.m_island;\n      island.Initialize(this.m_bodyCount, this.m_contactCount, this.m_jointCount, null, this.m_contactManager.m_contactListener, this.m_contactSolver);\n      for (b = this.m_bodyList;\n      b; b = b.m_next) {\n         b.m_flags &= ~b2Body.e_islandFlag;\n      }\n      for (var c = this.m_contactList; c; c = c.m_next) {\n         c.m_flags &= ~b2Contact.e_islandFlag;\n      }\n      for (var j = this.m_jointList; j; j = j.m_next) {\n         j.m_islandFlag = false;\n      }\n      var stackSize = parseInt(this.m_bodyCount);\n      var stack = this.s_stack;\n      for (var seed = this.m_bodyList; seed; seed = seed.m_next) {\n         if (seed.m_flags & b2Body.e_islandFlag) {\n            continue;\n         }\n         if (seed.IsAwake() == false || seed.IsActive() == false) {\n            continue;\n         }\n         if (seed.GetType() == b2Body.b2_staticBody) {\n            continue;\n         }\n         island.Clear();\n         var stackCount = 0;\n         stack[stackCount++] = seed;\n         seed.m_flags |= b2Body.e_islandFlag;\n         while (stackCount > 0) {\n            b = stack[--stackCount];\n            island.AddBody(b);\n            if (b.IsAwake() == false) {\n               b.SetAwake(true);\n            }\n            if (b.GetType() == b2Body.b2_staticBody) {\n               continue;\n            }\n            var other;\n            for (var ce = b.m_contactList; ce; ce = ce.next) {\n               if (ce.contact.m_flags & b2Contact.e_islandFlag) {\n                  continue;\n               }\n               if (ce.contact.IsSensor() == true || ce.contact.IsEnabled() == false || ce.contact.IsTouching() == false) {\n                  continue;\n               }\n               island.AddContact(ce.contact);\n               ce.contact.m_flags |= b2Contact.e_islandFlag;\n               other = ce.other;\n               if (other.m_flags & b2Body.e_islandFlag) {\n                  continue;\n               }\n               stack[stackCount++] = other;\n               other.m_flags |= b2Body.e_islandFlag;\n            }\n            for (var jn = b.m_jointList; jn; jn = jn.next) {\n               if (jn.joint.m_islandFlag == true) {\n                  continue;\n               }\n               other = jn.other;\n               if (other.IsActive() == false) {\n                  continue;\n               }\n               island.AddJoint(jn.joint);\n               jn.joint.m_islandFlag = true;\n               if (other.m_flags & b2Body.e_islandFlag) {\n                  continue;\n               }\n               stack[stackCount++] = other;\n               other.m_flags |= b2Body.e_islandFlag;\n            }\n         }\n         island.Solve(step, this.m_gravity, this.m_allowSleep);\n         for (var i = 0; i < island.m_bodyCount; ++i) {\n            b = island.m_bodies[i];\n            if (b.GetType() == b2Body.b2_staticBody) {\n               b.m_flags &= ~b2Body.e_islandFlag;\n            }\n         }\n      }\n      for (i = 0;\n      i < stack.length; ++i) {\n         if (!stack[i]) break;\n         stack[i] = null;\n      }\n      for (b = this.m_bodyList;\n      b; b = b.m_next) {\n         if (b.IsAwake() == false || b.IsActive() == false) {\n            continue;\n         }\n         if (b.GetType() == b2Body.b2_staticBody) {\n            continue;\n         }\n         b.SynchronizeFixtures();\n      }\n      this.m_contactManager.FindNewContacts();\n   }\n   b2World.prototype.SolveTOI = function (step) {\n      var b;\n      var fA;\n      var fB;\n      var bA;\n      var bB;\n      var cEdge;\n      var j;\n      var island = this.m_island;\n      island.Initialize(this.m_bodyCount, b2Settings.b2_maxTOIContactsPerIsland, b2Settings.b2_maxTOIJointsPerIsland, null, this.m_contactManager.m_contactListener, this.m_contactSolver);\n      var queue = b2World.s_queue;\n      for (b = this.m_bodyList;\n      b; b = b.m_next) {\n         b.m_flags &= ~b2Body.e_islandFlag;\n         b.m_sweep.t0 = 0.0;\n      }\n      var c;\n      for (c = this.m_contactList;\n      c; c = c.m_next) {\n         c.m_flags &= ~ (b2Contact.e_toiFlag | b2Contact.e_islandFlag);\n      }\n      for (j = this.m_jointList;\n      j; j = j.m_next) {\n         j.m_islandFlag = false;\n      }\n      for (;;) {\n         var minContact = null;\n         var minTOI = 1.0;\n         for (c = this.m_contactList;\n         c; c = c.m_next) {\n            if (c.IsSensor() == true || c.IsEnabled() == false || c.IsContinuous() == false) {\n               continue;\n            }\n            var toi = 1.0;\n            if (c.m_flags & b2Contact.e_toiFlag) {\n               toi = c.m_toi;\n            }\n            else {\n               fA = c.m_fixtureA;\n               fB = c.m_fixtureB;\n               bA = fA.m_body;\n               bB = fB.m_body;\n               if ((bA.GetType() != b2Body.b2_dynamicBody || bA.IsAwake() == false) && (bB.GetType() != b2Body.b2_dynamicBody || bB.IsAwake() == false)) {\n                  continue;\n               }\n               var t0 = bA.m_sweep.t0;\n               if (bA.m_sweep.t0 < bB.m_sweep.t0) {\n                  t0 = bB.m_sweep.t0;\n                  bA.m_sweep.Advance(t0);\n               }\n               else if (bB.m_sweep.t0 < bA.m_sweep.t0) {\n                  t0 = bA.m_sweep.t0;\n                  bB.m_sweep.Advance(t0);\n               }\n               toi = c.ComputeTOI(bA.m_sweep, bB.m_sweep);\n               b2Settings.b2Assert(0.0 <= toi && toi <= 1.0);\n               if (toi > 0.0 && toi < 1.0) {\n                  toi = (1.0 - toi) * t0 + toi;\n                  if (toi > 1) toi = 1;\n               }\n               c.m_toi = toi;\n               c.m_flags |= b2Contact.e_toiFlag;\n            }\n            if (Number.MIN_VALUE < toi && toi < minTOI) {\n               minContact = c;\n               minTOI = toi;\n            }\n         }\n         if (minContact == null || 1.0 - 100.0 * Number.MIN_VALUE < minTOI) {\n            break;\n         }\n         fA = minContact.m_fixtureA;\n         fB = minContact.m_fixtureB;\n         bA = fA.m_body;\n         bB = fB.m_body;\n         b2World.s_backupA.Set(bA.m_sweep);\n         b2World.s_backupB.Set(bB.m_sweep);\n         bA.Advance(minTOI);\n         bB.Advance(minTOI);\n         minContact.Update(this.m_contactManager.m_contactListener);\n         minContact.m_flags &= ~b2Contact.e_toiFlag;\n         if (minContact.IsSensor() == true || minContact.IsEnabled() == false) {\n            bA.m_sweep.Set(b2World.s_backupA);\n            bB.m_sweep.Set(b2World.s_backupB);\n            bA.SynchronizeTransform();\n            bB.SynchronizeTransform();\n            continue;\n         }\n         if (minContact.IsTouching() == false) {\n            continue;\n         }\n         var seed = bA;\n         if (seed.GetType() != b2Body.b2_dynamicBody) {\n            seed = bB;\n         }\n         island.Clear();\n         var queueStart = 0;\n         var queueSize = 0;\n         queue[queueStart + queueSize++] = seed;\n         seed.m_flags |= b2Body.e_islandFlag;\n         while (queueSize > 0) {\n            b = queue[queueStart++];\n            --queueSize;\n            island.AddBody(b);\n            if (b.IsAwake() == false) {\n               b.SetAwake(true);\n            }\n            if (b.GetType() != b2Body.b2_dynamicBody) {\n               continue;\n            }\n            for (cEdge = b.m_contactList;\n            cEdge; cEdge = cEdge.next) {\n               if (island.m_contactCount == island.m_contactCapacity) {\n                  break;\n               }\n               if (cEdge.contact.m_flags & b2Contact.e_islandFlag) {\n                  continue;\n               }\n               if (cEdge.contact.IsSensor() == true || cEdge.contact.IsEnabled() == false || cEdge.contact.IsTouching() == false) {\n                  continue;\n               }\n               island.AddContact(cEdge.contact);\n               cEdge.contact.m_flags |= b2Contact.e_islandFlag;\n               var other = cEdge.other;\n               if (other.m_flags & b2Body.e_islandFlag) {\n                  continue;\n               }\n               if (other.GetType() != b2Body.b2_staticBody) {\n                  other.Advance(minTOI);\n                  other.SetAwake(true);\n               }\n               queue[queueStart + queueSize] = other;\n               ++queueSize;\n               other.m_flags |= b2Body.e_islandFlag;\n            }\n            for (var jEdge = b.m_jointList; jEdge; jEdge = jEdge.next) {\n               if (island.m_jointCount == island.m_jointCapacity) continue;\n               if (jEdge.joint.m_islandFlag == true) continue;\n               other = jEdge.other;\n               if (other.IsActive() == false) {\n                  continue;\n               }\n               island.AddJoint(jEdge.joint);\n               jEdge.joint.m_islandFlag = true;\n               if (other.m_flags & b2Body.e_islandFlag) continue;\n               if (other.GetType() != b2Body.b2_staticBody) {\n                  other.Advance(minTOI);\n                  other.SetAwake(true);\n               }\n               queue[queueStart + queueSize] = other;\n               ++queueSize;\n               other.m_flags |= b2Body.e_islandFlag;\n            }\n         }\n         var subStep = b2World.s_timestep;\n         subStep.warmStarting = false;\n         subStep.dt = (1.0 - minTOI) * step.dt;\n         subStep.inv_dt = 1.0 / subStep.dt;\n         subStep.dtRatio = 0.0;\n         subStep.velocityIterations = step.velocityIterations;\n         subStep.positionIterations = step.positionIterations;\n         island.SolveTOI(subStep);\n         var i = 0;\n         for (i = 0;\n         i < island.m_bodyCount; ++i) {\n            b = island.m_bodies[i];\n            b.m_flags &= ~b2Body.e_islandFlag;\n            if (b.IsAwake() == false) {\n               continue;\n            }\n            if (b.GetType() != b2Body.b2_dynamicBody) {\n               continue;\n            }\n            b.SynchronizeFixtures();\n            for (cEdge = b.m_contactList;\n            cEdge; cEdge = cEdge.next) {\n               cEdge.contact.m_flags &= ~b2Contact.e_toiFlag;\n            }\n         }\n         for (i = 0;\n         i < island.m_contactCount; ++i) {\n            c = island.m_contacts[i];\n            c.m_flags &= ~ (b2Contact.e_toiFlag | b2Contact.e_islandFlag);\n         }\n         for (i = 0;\n         i < island.m_jointCount; ++i) {\n            j = island.m_joints[i];\n            j.m_islandFlag = false;\n         }\n         this.m_contactManager.FindNewContacts();\n      }\n   }\n   b2World.prototype.DrawJoint = function (joint) {\n      var b1 = joint.GetBodyA();\n      var b2 = joint.GetBodyB();\n      var xf1 = b1.m_xf;\n      var xf2 = b2.m_xf;\n      var x1 = xf1.position;\n      var x2 = xf2.position;\n      var p1 = joint.GetAnchorA();\n      var p2 = joint.GetAnchorB();\n      var color = b2World.s_jointColor;\n      switch (joint.m_type) {\n      case b2Joint.e_distanceJoint:\n         this.m_debugDraw.DrawSegment(p1, p2, color);\n         break;\n      case b2Joint.e_pulleyJoint:\n         {\n            var pulley = ((joint instanceof b2PulleyJoint ? joint : null));\n            var s1 = pulley.GetGroundAnchorA();\n            var s2 = pulley.GetGroundAnchorB();\n            this.m_debugDraw.DrawSegment(s1, p1, color);\n            this.m_debugDraw.DrawSegment(s2, p2, color);\n            this.m_debugDraw.DrawSegment(s1, s2, color);\n         }\n         break;\n      case b2Joint.e_mouseJoint:\n         this.m_debugDraw.DrawSegment(p1, p2, color);\n         break;\n      default:\n         if (b1 != this.m_groundBody) this.m_debugDraw.DrawSegment(x1, p1, color);\n         this.m_debugDraw.DrawSegment(p1, p2, color);\n         if (b2 != this.m_groundBody) this.m_debugDraw.DrawSegment(x2, p2, color);\n      }\n   }\n   b2World.prototype.DrawShape = function (shape, xf, color) {\n      switch (shape.m_type) {\n      case b2Shape.e_circleShape:\n         {\n            var circle = ((shape instanceof b2CircleShape ? shape : null));\n            var center = b2Math.MulX(xf, circle.m_p);\n            var radius = circle.m_radius;\n            var axis = xf.R.col1;\n            this.m_debugDraw.DrawSolidCircle(center, radius, axis, color);\n         }\n         break;\n      case b2Shape.e_polygonShape:\n         {\n            var i = 0;\n            var poly = ((shape instanceof b2PolygonShape ? shape : null));\n            var vertexCount = parseInt(poly.GetVertexCount());\n            var localVertices = poly.GetVertices();\n            var vertices = new Vector(vertexCount);\n            for (i = 0;\n            i < vertexCount; ++i) {\n               vertices[i] = b2Math.MulX(xf, localVertices[i]);\n            }\n            this.m_debugDraw.DrawSolidPolygon(vertices, vertexCount, color);\n         }\n         break;\n      case b2Shape.e_edgeShape:\n         {\n            var edge = (shape instanceof b2EdgeShape ? shape : null);\n            this.m_debugDraw.DrawSegment(b2Math.MulX(xf, edge.GetVertex1()), b2Math.MulX(xf, edge.GetVertex2()), color);\n         }\n         break;\n      }\n   }\n   Box2D.postDefs.push(function () {\n      Box2D.Dynamics.b2World.s_timestep2 = new b2TimeStep();\n      Box2D.Dynamics.b2World.s_xf = new b2Transform();\n      Box2D.Dynamics.b2World.s_backupA = new b2Sweep();\n      Box2D.Dynamics.b2World.s_backupB = new b2Sweep();\n      Box2D.Dynamics.b2World.s_timestep = new b2TimeStep();\n      Box2D.Dynamics.b2World.s_queue = new Vector();\n      Box2D.Dynamics.b2World.s_jointColor = new b2Color(0.5, 0.8, 0.8);\n      Box2D.Dynamics.b2World.e_newFixture = 0x0001;\n      Box2D.Dynamics.b2World.e_locked = 0x0002;\n   });\n})();\n(function () {\n   var b2CircleShape = Box2D.Collision.Shapes.b2CircleShape,\n      b2EdgeChainDef = Box2D.Collision.Shapes.b2EdgeChainDef,\n      b2EdgeShape = Box2D.Collision.Shapes.b2EdgeShape,\n      b2MassData = Box2D.Collision.Shapes.b2MassData,\n      b2PolygonShape = Box2D.Collision.Shapes.b2PolygonShape,\n      b2Shape = Box2D.Collision.Shapes.b2Shape,\n      b2CircleContact = Box2D.Dynamics.Contacts.b2CircleContact,\n      b2Contact = Box2D.Dynamics.Contacts.b2Contact,\n      b2ContactConstraint = Box2D.Dynamics.Contacts.b2ContactConstraint,\n      b2ContactConstraintPoint = Box2D.Dynamics.Contacts.b2ContactConstraintPoint,\n      b2ContactEdge = Box2D.Dynamics.Contacts.b2ContactEdge,\n      b2ContactFactory = Box2D.Dynamics.Contacts.b2ContactFactory,\n      b2ContactRegister = Box2D.Dynamics.Contacts.b2ContactRegister,\n      b2ContactResult = Box2D.Dynamics.Contacts.b2ContactResult,\n      b2ContactSolver = Box2D.Dynamics.Contacts.b2ContactSolver,\n      b2EdgeAndCircleContact = Box2D.Dynamics.Contacts.b2EdgeAndCircleContact,\n      b2NullContact = Box2D.Dynamics.Contacts.b2NullContact,\n      b2PolyAndCircleContact = Box2D.Dynamics.Contacts.b2PolyAndCircleContact,\n      b2PolyAndEdgeContact = Box2D.Dynamics.Contacts.b2PolyAndEdgeContact,\n      b2PolygonContact = Box2D.Dynamics.Contacts.b2PolygonContact,\n      b2PositionSolverManifold = Box2D.Dynamics.Contacts.b2PositionSolverManifold,\n      b2Body = Box2D.Dynamics.b2Body,\n      b2BodyDef = Box2D.Dynamics.b2BodyDef,\n      b2ContactFilter = Box2D.Dynamics.b2ContactFilter,\n      b2ContactImpulse = Box2D.Dynamics.b2ContactImpulse,\n      b2ContactListener = Box2D.Dynamics.b2ContactListener,\n      b2ContactManager = Box2D.Dynamics.b2ContactManager,\n      b2DebugDraw = Box2D.Dynamics.b2DebugDraw,\n      b2DestructionListener = Box2D.Dynamics.b2DestructionListener,\n      b2FilterData = Box2D.Dynamics.b2FilterData,\n      b2Fixture = Box2D.Dynamics.b2Fixture,\n      b2FixtureDef = Box2D.Dynamics.b2FixtureDef,\n      b2Island = Box2D.Dynamics.b2Island,\n      b2TimeStep = Box2D.Dynamics.b2TimeStep,\n      b2World = Box2D.Dynamics.b2World,\n      b2Color = Box2D.Common.b2Color,\n      b2internal = Box2D.Common.b2internal,\n      b2Settings = Box2D.Common.b2Settings,\n      b2Mat22 = Box2D.Common.Math.b2Mat22,\n      b2Mat33 = Box2D.Common.Math.b2Mat33,\n      b2Math = Box2D.Common.Math.b2Math,\n      b2Sweep = Box2D.Common.Math.b2Sweep,\n      b2Transform = Box2D.Common.Math.b2Transform,\n      b2Vec2 = Box2D.Common.Math.b2Vec2,\n      b2Vec3 = Box2D.Common.Math.b2Vec3,\n      b2AABB = Box2D.Collision.b2AABB,\n      b2Bound = Box2D.Collision.b2Bound,\n      b2BoundValues = Box2D.Collision.b2BoundValues,\n      b2Collision = Box2D.Collision.b2Collision,\n      b2ContactID = Box2D.Collision.b2ContactID,\n      b2ContactPoint = Box2D.Collision.b2ContactPoint,\n      b2Distance = Box2D.Collision.b2Distance,\n      b2DistanceInput = Box2D.Collision.b2DistanceInput,\n      b2DistanceOutput = Box2D.Collision.b2DistanceOutput,\n      b2DistanceProxy = Box2D.Collision.b2DistanceProxy,\n      b2DynamicTree = Box2D.Collision.b2DynamicTree,\n      b2DynamicTreeBroadPhase = Box2D.Collision.b2DynamicTreeBroadPhase,\n      b2DynamicTreeNode = Box2D.Collision.b2DynamicTreeNode,\n      b2DynamicTreePair = Box2D.Collision.b2DynamicTreePair,\n      b2Manifold = Box2D.Collision.b2Manifold,\n      b2ManifoldPoint = Box2D.Collision.b2ManifoldPoint,\n      b2Point = Box2D.Collision.b2Point,\n      b2RayCastInput = Box2D.Collision.b2RayCastInput,\n      b2RayCastOutput = Box2D.Collision.b2RayCastOutput,\n      b2Segment = Box2D.Collision.b2Segment,\n      b2SeparationFunction = Box2D.Collision.b2SeparationFunction,\n      b2Simplex = Box2D.Collision.b2Simplex,\n      b2SimplexCache = Box2D.Collision.b2SimplexCache,\n      b2SimplexVertex = Box2D.Collision.b2SimplexVertex,\n      b2TimeOfImpact = Box2D.Collision.b2TimeOfImpact,\n      b2TOIInput = Box2D.Collision.b2TOIInput,\n      b2WorldManifold = Box2D.Collision.b2WorldManifold,\n      ClipVertex = Box2D.Collision.ClipVertex,\n      Features = Box2D.Collision.Features,\n      IBroadPhase = Box2D.Collision.IBroadPhase;\n\n   Box2D.inherit(b2CircleContact, Box2D.Dynamics.Contacts.b2Contact);\n   b2CircleContact.prototype.__super = Box2D.Dynamics.Contacts.b2Contact.prototype;\n   b2CircleContact.b2CircleContact = function () {\n      Box2D.Dynamics.Contacts.b2Contact.b2Contact.apply(this, arguments);\n   };\n   b2CircleContact.Create = function (allocator) {\n      return new b2CircleContact();\n   }\n   b2CircleContact.Destroy = function (contact, allocator) {}\n   b2CircleContact.prototype.Reset = function (fixtureA, fixtureB) {\n      this.__super.Reset.call(this, fixtureA, fixtureB);\n   }\n   b2CircleContact.prototype.Evaluate = function () {\n      var bA = this.m_fixtureA.GetBody();\n      var bB = this.m_fixtureB.GetBody();\n      b2Collision.CollideCircles(this.m_manifold, (this.m_fixtureA.GetShape() instanceof b2CircleShape ? this.m_fixtureA.GetShape() : null), bA.m_xf, (this.m_fixtureB.GetShape() instanceof b2CircleShape ? this.m_fixtureB.GetShape() : null), bB.m_xf);\n   }\n   b2Contact.b2Contact = function () {\n      this.m_nodeA = new b2ContactEdge();\n      this.m_nodeB = new b2ContactEdge();\n      this.m_manifold = new b2Manifold();\n      this.m_oldManifold = new b2Manifold();\n   };\n   b2Contact.prototype.GetManifold = function () {\n      return this.m_manifold;\n   }\n   b2Contact.prototype.GetWorldManifold = function (worldManifold) {\n      var bodyA = this.m_fixtureA.GetBody();\n      var bodyB = this.m_fixtureB.GetBody();\n      var shapeA = this.m_fixtureA.GetShape();\n      var shapeB = this.m_fixtureB.GetShape();\n      worldManifold.Initialize(this.m_manifold, bodyA.GetTransform(), shapeA.m_radius, bodyB.GetTransform(), shapeB.m_radius);\n   }\n   b2Contact.prototype.IsTouching = function () {\n      return (this.m_flags & b2Contact.e_touchingFlag) == b2Contact.e_touchingFlag;\n   }\n   b2Contact.prototype.IsContinuous = function () {\n      return (this.m_flags & b2Contact.e_continuousFlag) == b2Contact.e_continuousFlag;\n   }\n   b2Contact.prototype.SetSensor = function (sensor) {\n      if (sensor) {\n         this.m_flags |= b2Contact.e_sensorFlag;\n      }\n      else {\n         this.m_flags &= ~b2Contact.e_sensorFlag;\n      }\n   }\n   b2Contact.prototype.IsSensor = function () {\n      return (this.m_flags & b2Contact.e_sensorFlag) == b2Contact.e_sensorFlag;\n   }\n   b2Contact.prototype.SetEnabled = function (flag) {\n      if (flag) {\n         this.m_flags |= b2Contact.e_enabledFlag;\n      }\n      else {\n         this.m_flags &= ~b2Contact.e_enabledFlag;\n      }\n   }\n   b2Contact.prototype.IsEnabled = function () {\n      return (this.m_flags & b2Contact.e_enabledFlag) == b2Contact.e_enabledFlag;\n   }\n   b2Contact.prototype.GetNext = function () {\n      return this.m_next;\n   }\n   b2Contact.prototype.GetFixtureA = function () {\n      return this.m_fixtureA;\n   }\n   b2Contact.prototype.GetFixtureB = function () {\n      return this.m_fixtureB;\n   }\n   b2Contact.prototype.FlagForFiltering = function () {\n      this.m_flags |= b2Contact.e_filterFlag;\n   }\n   b2Contact.prototype.b2Contact = function () {}\n   b2Contact.prototype.Reset = function (fixtureA, fixtureB) {\n      if (fixtureA === undefined) fixtureA = null;\n      if (fixtureB === undefined) fixtureB = null;\n      this.m_flags = b2Contact.e_enabledFlag;\n      if (!fixtureA || !fixtureB) {\n         this.m_fixtureA = null;\n         this.m_fixtureB = null;\n         return;\n      }\n      if (fixtureA.IsSensor() || fixtureB.IsSensor()) {\n         this.m_flags |= b2Contact.e_sensorFlag;\n      }\n      var bodyA = fixtureA.GetBody();\n      var bodyB = fixtureB.GetBody();\n      if (bodyA.GetType() != b2Body.b2_dynamicBody || bodyA.IsBullet() || bodyB.GetType() != b2Body.b2_dynamicBody || bodyB.IsBullet()) {\n         this.m_flags |= b2Contact.e_continuousFlag;\n      }\n      this.m_fixtureA = fixtureA;\n      this.m_fixtureB = fixtureB;\n      this.m_manifold.m_pointCount = 0;\n      this.m_prev = null;\n      this.m_next = null;\n      this.m_nodeA.contact = null;\n      this.m_nodeA.prev = null;\n      this.m_nodeA.next = null;\n      this.m_nodeA.other = null;\n      this.m_nodeB.contact = null;\n      this.m_nodeB.prev = null;\n      this.m_nodeB.next = null;\n      this.m_nodeB.other = null;\n   }\n   b2Contact.prototype.Update = function (listener) {\n      var tManifold = this.m_oldManifold;\n      this.m_oldManifold = this.m_manifold;\n      this.m_manifold = tManifold;\n      this.m_flags |= b2Contact.e_enabledFlag;\n      var touching = false;\n      var wasTouching = (this.m_flags & b2Contact.e_touchingFlag) == b2Contact.e_touchingFlag;\n      var bodyA = this.m_fixtureA.m_body;\n      var bodyB = this.m_fixtureB.m_body;\n      var aabbOverlap = this.m_fixtureA.m_aabb.TestOverlap(this.m_fixtureB.m_aabb);\n      if (this.m_flags & b2Contact.e_sensorFlag) {\n         if (aabbOverlap) {\n            var shapeA = this.m_fixtureA.GetShape();\n            var shapeB = this.m_fixtureB.GetShape();\n            var xfA = bodyA.GetTransform();\n            var xfB = bodyB.GetTransform();\n            touching = b2Shape.TestOverlap(shapeA, xfA, shapeB, xfB);\n         }\n         this.m_manifold.m_pointCount = 0;\n      }\n      else {\n         if (bodyA.GetType() != b2Body.b2_dynamicBody || bodyA.IsBullet() || bodyB.GetType() != b2Body.b2_dynamicBody || bodyB.IsBullet()) {\n            this.m_flags |= b2Contact.e_continuousFlag;\n         }\n         else {\n            this.m_flags &= ~b2Contact.e_continuousFlag;\n         }\n         if (aabbOverlap) {\n            this.Evaluate();\n            touching = this.m_manifold.m_pointCount > 0;\n            for (var i = 0; i < this.m_manifold.m_pointCount; ++i) {\n               var mp2 = this.m_manifold.m_points[i];\n               mp2.m_normalImpulse = 0.0;\n               mp2.m_tangentImpulse = 0.0;\n               var id2 = mp2.m_id;\n               for (var j = 0; j < this.m_oldManifold.m_pointCount; ++j) {\n                  var mp1 = this.m_oldManifold.m_points[j];\n                  if (mp1.m_id.key == id2.key) {\n                     mp2.m_normalImpulse = mp1.m_normalImpulse;\n                     mp2.m_tangentImpulse = mp1.m_tangentImpulse;\n                     break;\n                  }\n               }\n            }\n         }\n         else {\n            this.m_manifold.m_pointCount = 0;\n         }\n         if (touching != wasTouching) {\n            bodyA.SetAwake(true);\n            bodyB.SetAwake(true);\n         }\n      }\n      if (touching) {\n         this.m_flags |= b2Contact.e_touchingFlag;\n      }\n      else {\n         this.m_flags &= ~b2Contact.e_touchingFlag;\n      }\n      if (wasTouching == false && touching == true) {\n         listener.BeginContact(this);\n      }\n      if (wasTouching == true && touching == false) {\n         listener.EndContact(this);\n      }\n      if ((this.m_flags & b2Contact.e_sensorFlag) == 0) {\n         listener.PreSolve(this, this.m_oldManifold);\n      }\n   }\n   b2Contact.prototype.Evaluate = function () {}\n   b2Contact.prototype.ComputeTOI = function (sweepA, sweepB) {\n      b2Contact.s_input.proxyA.Set(this.m_fixtureA.GetShape());\n      b2Contact.s_input.proxyB.Set(this.m_fixtureB.GetShape());\n      b2Contact.s_input.sweepA = sweepA;\n      b2Contact.s_input.sweepB = sweepB;\n      b2Contact.s_input.tolerance = b2Settings.b2_linearSlop;\n      return b2TimeOfImpact.TimeOfImpact(b2Contact.s_input);\n   }\n   Box2D.postDefs.push(function () {\n      Box2D.Dynamics.Contacts.b2Contact.e_sensorFlag = 0x0001;\n      Box2D.Dynamics.Contacts.b2Contact.e_continuousFlag = 0x0002;\n      Box2D.Dynamics.Contacts.b2Contact.e_islandFlag = 0x0004;\n      Box2D.Dynamics.Contacts.b2Contact.e_toiFlag = 0x0008;\n      Box2D.Dynamics.Contacts.b2Contact.e_touchingFlag = 0x0010;\n      Box2D.Dynamics.Contacts.b2Contact.e_enabledFlag = 0x0020;\n      Box2D.Dynamics.Contacts.b2Contact.e_filterFlag = 0x0040;\n      Box2D.Dynamics.Contacts.b2Contact.s_input = new b2TOIInput();\n   });\n   b2ContactConstraint.b2ContactConstraint = function () {\n      this.localPlaneNormal = new b2Vec2();\n      this.localPoint = new b2Vec2();\n      this.normal = new b2Vec2();\n      this.normalMass = new b2Mat22();\n      this.K = new b2Mat22();\n   };\n   b2ContactConstraint.prototype.b2ContactConstraint = function () {\n      this.points = new Vector(b2Settings.b2_maxManifoldPoints);\n      for (var i = 0; i < b2Settings.b2_maxManifoldPoints; i++) {\n         this.points[i] = new b2ContactConstraintPoint();\n      }\n   }\n   b2ContactConstraintPoint.b2ContactConstraintPoint = function () {\n      this.localPoint = new b2Vec2();\n      this.rA = new b2Vec2();\n      this.rB = new b2Vec2();\n   };\n   b2ContactEdge.b2ContactEdge = function () {};\n   b2ContactFactory.b2ContactFactory = function () {};\n   b2ContactFactory.prototype.b2ContactFactory = function (allocator) {\n      this.m_allocator = allocator;\n      this.InitializeRegisters();\n   }\n   b2ContactFactory.prototype.AddType = function (createFcn, destroyFcn, type1, type2) {\n      if (type1 === undefined) type1 = 0;\n      if (type2 === undefined) type2 = 0;\n      this.m_registers[type1][type2].createFcn = createFcn;\n      this.m_registers[type1][type2].destroyFcn = destroyFcn;\n      this.m_registers[type1][type2].primary = true;\n      if (type1 != type2) {\n         this.m_registers[type2][type1].createFcn = createFcn;\n         this.m_registers[type2][type1].destroyFcn = destroyFcn;\n         this.m_registers[type2][type1].primary = false;\n      }\n   }\n   b2ContactFactory.prototype.InitializeRegisters = function () {\n      this.m_registers = new Vector(b2Shape.e_shapeTypeCount);\n      for (var i = 0; i < b2Shape.e_shapeTypeCount; i++) {\n         this.m_registers[i] = new Vector(b2Shape.e_shapeTypeCount);\n         for (var j = 0; j < b2Shape.e_shapeTypeCount; j++) {\n            this.m_registers[i][j] = new b2ContactRegister();\n         }\n      }\n      this.AddType(b2CircleContact.Create, b2CircleContact.Destroy, b2Shape.e_circleShape, b2Shape.e_circleShape);\n      this.AddType(b2PolyAndCircleContact.Create, b2PolyAndCircleContact.Destroy, b2Shape.e_polygonShape, b2Shape.e_circleShape);\n      this.AddType(b2PolygonContact.Create, b2PolygonContact.Destroy, b2Shape.e_polygonShape, b2Shape.e_polygonShape);\n      this.AddType(b2EdgeAndCircleContact.Create, b2EdgeAndCircleContact.Destroy, b2Shape.e_edgeShape, b2Shape.e_circleShape);\n      this.AddType(b2PolyAndEdgeContact.Create, b2PolyAndEdgeContact.Destroy, b2Shape.e_polygonShape, b2Shape.e_edgeShape);\n   }\n   b2ContactFactory.prototype.Create = function (fixtureA, fixtureB) {\n      var type1 = parseInt(fixtureA.GetType());\n      var type2 = parseInt(fixtureB.GetType());\n      var reg = this.m_registers[type1][type2];\n      var c;\n      if (reg.pool) {\n         c = reg.pool;\n         reg.pool = c.m_next;\n         reg.poolCount--;\n         c.Reset(fixtureA, fixtureB);\n         return c;\n      }\n      var createFcn = reg.createFcn;\n      if (createFcn != null) {\n         if (reg.primary) {\n            c = createFcn(this.m_allocator);\n            c.Reset(fixtureA, fixtureB);\n            return c;\n         }\n         else {\n            c = createFcn(this.m_allocator);\n            c.Reset(fixtureB, fixtureA);\n            return c;\n         }\n      }\n      else {\n         return null;\n      }\n   }\n   b2ContactFactory.prototype.Destroy = function (contact) {\n      if (contact.m_manifold.m_pointCount > 0) {\n         contact.m_fixtureA.m_body.SetAwake(true);\n         contact.m_fixtureB.m_body.SetAwake(true);\n      }\n      var type1 = parseInt(contact.m_fixtureA.GetType());\n      var type2 = parseInt(contact.m_fixtureB.GetType());\n      var reg = this.m_registers[type1][type2];\n      if (true) {\n         reg.poolCount++;\n         contact.m_next = reg.pool;\n         reg.pool = contact;\n      }\n      var destroyFcn = reg.destroyFcn;\n      destroyFcn(contact, this.m_allocator);\n   }\n   b2ContactRegister.b2ContactRegister = function () {};\n   b2ContactResult.b2ContactResult = function () {\n      this.position = new b2Vec2();\n      this.normal = new b2Vec2();\n      this.id = new b2ContactID();\n   };\n   b2ContactSolver.b2ContactSolver = function () {\n      this.m_step = new b2TimeStep();\n      this.m_constraints = new Vector();\n   };\n   b2ContactSolver.prototype.b2ContactSolver = function () {}\n   b2ContactSolver.prototype.Initialize = function (step, contacts, contactCount, allocator) {\n      if (contactCount === undefined) contactCount = 0;\n      var contact;\n      this.m_step.Set(step);\n      this.m_allocator = allocator;\n      var i = 0;\n      var tVec;\n      var tMat;\n      this.m_constraintCount = contactCount;\n      while (this.m_constraints.length < this.m_constraintCount) {\n         this.m_constraints[this.m_constraints.length] = new b2ContactConstraint();\n      }\n      for (i = 0;\n      i < contactCount; ++i) {\n         contact = contacts[i];\n         var fixtureA = contact.m_fixtureA;\n         var fixtureB = contact.m_fixtureB;\n         var shapeA = fixtureA.m_shape;\n         var shapeB = fixtureB.m_shape;\n         var radiusA = shapeA.m_radius;\n         var radiusB = shapeB.m_radius;\n         var bodyA = fixtureA.m_body;\n         var bodyB = fixtureB.m_body;\n         var manifold = contact.GetManifold();\n         var friction = b2Settings.b2MixFriction(fixtureA.GetFriction(), fixtureB.GetFriction());\n         var restitution = b2Settings.b2MixRestitution(fixtureA.GetRestitution(), fixtureB.GetRestitution());\n         var vAX = bodyA.m_linearVelocity.x;\n         var vAY = bodyA.m_linearVelocity.y;\n         var vBX = bodyB.m_linearVelocity.x;\n         var vBY = bodyB.m_linearVelocity.y;\n         var wA = bodyA.m_angularVelocity;\n         var wB = bodyB.m_angularVelocity;\n         b2Settings.b2Assert(manifold.m_pointCount > 0);\n         b2ContactSolver.s_worldManifold.Initialize(manifold, bodyA.m_xf, radiusA, bodyB.m_xf, radiusB);\n         var normalX = b2ContactSolver.s_worldManifold.m_normal.x;\n         var normalY = b2ContactSolver.s_worldManifold.m_normal.y;\n         var cc = this.m_constraints[i];\n         cc.bodyA = bodyA;\n         cc.bodyB = bodyB;\n         cc.manifold = manifold;\n         cc.normal.x = normalX;\n         cc.normal.y = normalY;\n         cc.pointCount = manifold.m_pointCount;\n         cc.friction = friction;\n         cc.restitution = restitution;\n         cc.localPlaneNormal.x = manifold.m_localPlaneNormal.x;\n         cc.localPlaneNormal.y = manifold.m_localPlaneNormal.y;\n         cc.localPoint.x = manifold.m_localPoint.x;\n         cc.localPoint.y = manifold.m_localPoint.y;\n         cc.radius = radiusA + radiusB;\n         cc.type = manifold.m_type;\n         for (var k = 0; k < cc.pointCount; ++k) {\n            var cp = manifold.m_points[k];\n            var ccp = cc.points[k];\n            ccp.normalImpulse = cp.m_normalImpulse;\n            ccp.tangentImpulse = cp.m_tangentImpulse;\n            ccp.localPoint.SetV(cp.m_localPoint);\n            var rAX = ccp.rA.x = b2ContactSolver.s_worldManifold.m_points[k].x - bodyA.m_sweep.c.x;\n            var rAY = ccp.rA.y = b2ContactSolver.s_worldManifold.m_points[k].y - bodyA.m_sweep.c.y;\n            var rBX = ccp.rB.x = b2ContactSolver.s_worldManifold.m_points[k].x - bodyB.m_sweep.c.x;\n            var rBY = ccp.rB.y = b2ContactSolver.s_worldManifold.m_points[k].y - bodyB.m_sweep.c.y;\n            var rnA = rAX * normalY - rAY * normalX;\n            var rnB = rBX * normalY - rBY * normalX;\n            rnA *= rnA;\n            rnB *= rnB;\n            var kNormal = bodyA.m_invMass + bodyB.m_invMass + bodyA.m_invI * rnA + bodyB.m_invI * rnB;\n            ccp.normalMass = 1.0 / kNormal;\n            var kEqualized = bodyA.m_mass * bodyA.m_invMass + bodyB.m_mass * bodyB.m_invMass;\n            kEqualized += bodyA.m_mass * bodyA.m_invI * rnA + bodyB.m_mass * bodyB.m_invI * rnB;\n            ccp.equalizedMass = 1.0 / kEqualized;\n            var tangentX = normalY;\n            var tangentY = (-normalX);\n            var rtA = rAX * tangentY - rAY * tangentX;\n            var rtB = rBX * tangentY - rBY * tangentX;\n            rtA *= rtA;\n            rtB *= rtB;\n            var kTangent = bodyA.m_invMass + bodyB.m_invMass + bodyA.m_invI * rtA + bodyB.m_invI * rtB;\n            ccp.tangentMass = 1.0 / kTangent;\n            ccp.velocityBias = 0.0;\n            var tX = vBX + ((-wB * rBY)) - vAX - ((-wA * rAY));\n            var tY = vBY + (wB * rBX) - vAY - (wA * rAX);\n            var vRel = cc.normal.x * tX + cc.normal.y * tY;\n            if (vRel < (-b2Settings.b2_velocityThreshold)) {\n               ccp.velocityBias += (-cc.restitution * vRel);\n            }\n         }\n         if (cc.pointCount == 2) {\n            var ccp1 = cc.points[0];\n            var ccp2 = cc.points[1];\n            var invMassA = bodyA.m_invMass;\n            var invIA = bodyA.m_invI;\n            var invMassB = bodyB.m_invMass;\n            var invIB = bodyB.m_invI;\n            var rn1A = ccp1.rA.x * normalY - ccp1.rA.y * normalX;\n            var rn1B = ccp1.rB.x * normalY - ccp1.rB.y * normalX;\n            var rn2A = ccp2.rA.x * normalY - ccp2.rA.y * normalX;\n            var rn2B = ccp2.rB.x * normalY - ccp2.rB.y * normalX;\n            var k11 = invMassA + invMassB + invIA * rn1A * rn1A + invIB * rn1B * rn1B;\n            var k22 = invMassA + invMassB + invIA * rn2A * rn2A + invIB * rn2B * rn2B;\n            var k12 = invMassA + invMassB + invIA * rn1A * rn2A + invIB * rn1B * rn2B;\n            var k_maxConditionNumber = 100.0;\n            if (k11 * k11 < k_maxConditionNumber * (k11 * k22 - k12 * k12)) {\n               cc.K.col1.Set(k11, k12);\n               cc.K.col2.Set(k12, k22);\n               cc.K.GetInverse(cc.normalMass);\n            }\n            else {\n               cc.pointCount = 1;\n            }\n         }\n      }\n   }\n   b2ContactSolver.prototype.InitVelocityConstraints = function (step) {\n      var tVec;\n      var tVec2;\n      var tMat;\n      for (var i = 0; i < this.m_constraintCount; ++i) {\n         var c = this.m_constraints[i];\n         var bodyA = c.bodyA;\n         var bodyB = c.bodyB;\n         var invMassA = bodyA.m_invMass;\n         var invIA = bodyA.m_invI;\n         var invMassB = bodyB.m_invMass;\n         var invIB = bodyB.m_invI;\n         var normalX = c.normal.x;\n         var normalY = c.normal.y;\n         var tangentX = normalY;\n         var tangentY = (-normalX);\n         var tX = 0;\n         var j = 0;\n         var tCount = 0;\n         if (step.warmStarting) {\n            tCount = c.pointCount;\n            for (j = 0;\n            j < tCount; ++j) {\n               var ccp = c.points[j];\n               ccp.normalImpulse *= step.dtRatio;\n               ccp.tangentImpulse *= step.dtRatio;\n               var PX = ccp.normalImpulse * normalX + ccp.tangentImpulse * tangentX;\n               var PY = ccp.normalImpulse * normalY + ccp.tangentImpulse * tangentY;\n               bodyA.m_angularVelocity -= invIA * (ccp.rA.x * PY - ccp.rA.y * PX);\n               bodyA.m_linearVelocity.x -= invMassA * PX;\n               bodyA.m_linearVelocity.y -= invMassA * PY;\n               bodyB.m_angularVelocity += invIB * (ccp.rB.x * PY - ccp.rB.y * PX);\n               bodyB.m_linearVelocity.x += invMassB * PX;\n               bodyB.m_linearVelocity.y += invMassB * PY;\n            }\n         }\n         else {\n            tCount = c.pointCount;\n            for (j = 0;\n            j < tCount; ++j) {\n               var ccp2 = c.points[j];\n               ccp2.normalImpulse = 0.0;\n               ccp2.tangentImpulse = 0.0;\n            }\n         }\n      }\n   }\n   b2ContactSolver.prototype.SolveVelocityConstraints = function () {\n      var j = 0;\n      var ccp;\n      var rAX = 0;\n      var rAY = 0;\n      var rBX = 0;\n      var rBY = 0;\n      var dvX = 0;\n      var dvY = 0;\n      var vn = 0;\n      var vt = 0;\n      var lambda = 0;\n      var maxFriction = 0;\n      var newImpulse = 0;\n      var PX = 0;\n      var PY = 0;\n      var dX = 0;\n      var dY = 0;\n      var P1X = 0;\n      var P1Y = 0;\n      var P2X = 0;\n      var P2Y = 0;\n      var tMat;\n      var tVec;\n      for (var i = 0; i < this.m_constraintCount; ++i) {\n         var c = this.m_constraints[i];\n         var bodyA = c.bodyA;\n         var bodyB = c.bodyB;\n         var wA = bodyA.m_angularVelocity;\n         var wB = bodyB.m_angularVelocity;\n         var vA = bodyA.m_linearVelocity;\n         var vB = bodyB.m_linearVelocity;\n         var invMassA = bodyA.m_invMass;\n         var invIA = bodyA.m_invI;\n         var invMassB = bodyB.m_invMass;\n         var invIB = bodyB.m_invI;\n         var normalX = c.normal.x;\n         var normalY = c.normal.y;\n         var tangentX = normalY;\n         var tangentY = (-normalX);\n         var friction = c.friction;\n         var tX = 0;\n         for (j = 0;\n         j < c.pointCount; j++) {\n            ccp = c.points[j];\n            dvX = vB.x - wB * ccp.rB.y - vA.x + wA * ccp.rA.y;\n            dvY = vB.y + wB * ccp.rB.x - vA.y - wA * ccp.rA.x;\n            vt = dvX * tangentX + dvY * tangentY;\n            lambda = ccp.tangentMass * (-vt);\n            maxFriction = friction * ccp.normalImpulse;\n            newImpulse = b2Math.Clamp(ccp.tangentImpulse + lambda, (-maxFriction), maxFriction);\n            lambda = newImpulse - ccp.tangentImpulse;\n            PX = lambda * tangentX;\n            PY = lambda * tangentY;\n            vA.x -= invMassA * PX;\n            vA.y -= invMassA * PY;\n            wA -= invIA * (ccp.rA.x * PY - ccp.rA.y * PX);\n            vB.x += invMassB * PX;\n            vB.y += invMassB * PY;\n            wB += invIB * (ccp.rB.x * PY - ccp.rB.y * PX);\n            ccp.tangentImpulse = newImpulse;\n         }\n         var tCount = parseInt(c.pointCount);\n         if (c.pointCount == 1) {\n            ccp = c.points[0];\n            dvX = vB.x + ((-wB * ccp.rB.y)) - vA.x - ((-wA * ccp.rA.y));\n            dvY = vB.y + (wB * ccp.rB.x) - vA.y - (wA * ccp.rA.x);\n            vn = dvX * normalX + dvY * normalY;\n            lambda = (-ccp.normalMass * (vn - ccp.velocityBias));\n            newImpulse = ccp.normalImpulse + lambda;\n            newImpulse = newImpulse > 0 ? newImpulse : 0.0;\n            lambda = newImpulse - ccp.normalImpulse;\n            PX = lambda * normalX;\n            PY = lambda * normalY;\n            vA.x -= invMassA * PX;\n            vA.y -= invMassA * PY;\n            wA -= invIA * (ccp.rA.x * PY - ccp.rA.y * PX);\n            vB.x += invMassB * PX;\n            vB.y += invMassB * PY;\n            wB += invIB * (ccp.rB.x * PY - ccp.rB.y * PX);\n            ccp.normalImpulse = newImpulse;\n         }\n         else {\n            var cp1 = c.points[0];\n            var cp2 = c.points[1];\n            var aX = cp1.normalImpulse;\n            var aY = cp2.normalImpulse;\n            var dv1X = vB.x - wB * cp1.rB.y - vA.x + wA * cp1.rA.y;\n            var dv1Y = vB.y + wB * cp1.rB.x - vA.y - wA * cp1.rA.x;\n            var dv2X = vB.x - wB * cp2.rB.y - vA.x + wA * cp2.rA.y;\n            var dv2Y = vB.y + wB * cp2.rB.x - vA.y - wA * cp2.rA.x;\n            var vn1 = dv1X * normalX + dv1Y * normalY;\n            var vn2 = dv2X * normalX + dv2Y * normalY;\n            var bX = vn1 - cp1.velocityBias;\n            var bY = vn2 - cp2.velocityBias;\n            tMat = c.K;\n            bX -= tMat.col1.x * aX + tMat.col2.x * aY;\n            bY -= tMat.col1.y * aX + tMat.col2.y * aY;\n            var k_errorTol = 0.001;\n            for (;;) {\n               tMat = c.normalMass;\n               var xX = (-(tMat.col1.x * bX + tMat.col2.x * bY));\n               var xY = (-(tMat.col1.y * bX + tMat.col2.y * bY));\n               if (xX >= 0.0 && xY >= 0.0) {\n                  dX = xX - aX;\n                  dY = xY - aY;\n                  P1X = dX * normalX;\n                  P1Y = dX * normalY;\n                  P2X = dY * normalX;\n                  P2Y = dY * normalY;\n                  vA.x -= invMassA * (P1X + P2X);\n                  vA.y -= invMassA * (P1Y + P2Y);\n                  wA -= invIA * (cp1.rA.x * P1Y - cp1.rA.y * P1X + cp2.rA.x * P2Y - cp2.rA.y * P2X);\n                  vB.x += invMassB * (P1X + P2X);\n                  vB.y += invMassB * (P1Y + P2Y);\n                  wB += invIB * (cp1.rB.x * P1Y - cp1.rB.y * P1X + cp2.rB.x * P2Y - cp2.rB.y * P2X);\n                  cp1.normalImpulse = xX;\n                  cp2.normalImpulse = xY;\n                  break;\n               }\n               xX = (-cp1.normalMass * bX);\n               xY = 0.0;\n               vn1 = 0.0;\n               vn2 = c.K.col1.y * xX + bY;\n               if (xX >= 0.0 && vn2 >= 0.0) {\n                  dX = xX - aX;\n                  dY = xY - aY;\n                  P1X = dX * normalX;\n                  P1Y = dX * normalY;\n                  P2X = dY * normalX;\n                  P2Y = dY * normalY;\n                  vA.x -= invMassA * (P1X + P2X);\n                  vA.y -= invMassA * (P1Y + P2Y);\n                  wA -= invIA * (cp1.rA.x * P1Y - cp1.rA.y * P1X + cp2.rA.x * P2Y - cp2.rA.y * P2X);\n                  vB.x += invMassB * (P1X + P2X);\n                  vB.y += invMassB * (P1Y + P2Y);\n                  wB += invIB * (cp1.rB.x * P1Y - cp1.rB.y * P1X + cp2.rB.x * P2Y - cp2.rB.y * P2X);\n                  cp1.normalImpulse = xX;\n                  cp2.normalImpulse = xY;\n                  break;\n               }\n               xX = 0.0;\n               xY = (-cp2.normalMass * bY);\n               vn1 = c.K.col2.x * xY + bX;\n               vn2 = 0.0;\n               if (xY >= 0.0 && vn1 >= 0.0) {\n                  dX = xX - aX;\n                  dY = xY - aY;\n                  P1X = dX * normalX;\n                  P1Y = dX * normalY;\n                  P2X = dY * normalX;\n                  P2Y = dY * normalY;\n                  vA.x -= invMassA * (P1X + P2X);\n                  vA.y -= invMassA * (P1Y + P2Y);\n                  wA -= invIA * (cp1.rA.x * P1Y - cp1.rA.y * P1X + cp2.rA.x * P2Y - cp2.rA.y * P2X);\n                  vB.x += invMassB * (P1X + P2X);\n                  vB.y += invMassB * (P1Y + P2Y);\n                  wB += invIB * (cp1.rB.x * P1Y - cp1.rB.y * P1X + cp2.rB.x * P2Y - cp2.rB.y * P2X);\n                  cp1.normalImpulse = xX;\n                  cp2.normalImpulse = xY;\n                  break;\n               }\n               xX = 0.0;\n               xY = 0.0;\n               vn1 = bX;\n               vn2 = bY;\n               if (vn1 >= 0.0 && vn2 >= 0.0) {\n                  dX = xX - aX;\n                  dY = xY - aY;\n                  P1X = dX * normalX;\n                  P1Y = dX * normalY;\n                  P2X = dY * normalX;\n                  P2Y = dY * normalY;\n                  vA.x -= invMassA * (P1X + P2X);\n                  vA.y -= invMassA * (P1Y + P2Y);\n                  wA -= invIA * (cp1.rA.x * P1Y - cp1.rA.y * P1X + cp2.rA.x * P2Y - cp2.rA.y * P2X);\n                  vB.x += invMassB * (P1X + P2X);\n                  vB.y += invMassB * (P1Y + P2Y);\n                  wB += invIB * (cp1.rB.x * P1Y - cp1.rB.y * P1X + cp2.rB.x * P2Y - cp2.rB.y * P2X);\n                  cp1.normalImpulse = xX;\n                  cp2.normalImpulse = xY;\n                  break;\n               }\n               break;\n            }\n         }\n         bodyA.m_angularVelocity = wA;\n         bodyB.m_angularVelocity = wB;\n      }\n   }\n   b2ContactSolver.prototype.FinalizeVelocityConstraints = function () {\n      for (var i = 0; i < this.m_constraintCount; ++i) {\n         var c = this.m_constraints[i];\n         var m = c.manifold;\n         for (var j = 0; j < c.pointCount; ++j) {\n            var point1 = m.m_points[j];\n            var point2 = c.points[j];\n            point1.m_normalImpulse = point2.normalImpulse;\n            point1.m_tangentImpulse = point2.tangentImpulse;\n         }\n      }\n   }\n   b2ContactSolver.prototype.SolvePositionConstraints = function (baumgarte) {\n      if (baumgarte === undefined) baumgarte = 0;\n      var minSeparation = 0.0;\n      for (var i = 0; i < this.m_constraintCount; i++) {\n         var c = this.m_constraints[i];\n         var bodyA = c.bodyA;\n         var bodyB = c.bodyB;\n         var invMassA = bodyA.m_mass * bodyA.m_invMass;\n         var invIA = bodyA.m_mass * bodyA.m_invI;\n         var invMassB = bodyB.m_mass * bodyB.m_invMass;\n         var invIB = bodyB.m_mass * bodyB.m_invI;\n         b2ContactSolver.s_psm.Initialize(c);\n         var normal = b2ContactSolver.s_psm.m_normal;\n         for (var j = 0; j < c.pointCount; j++) {\n            var ccp = c.points[j];\n            var point = b2ContactSolver.s_psm.m_points[j];\n            var separation = b2ContactSolver.s_psm.m_separations[j];\n            var rAX = point.x - bodyA.m_sweep.c.x;\n            var rAY = point.y - bodyA.m_sweep.c.y;\n            var rBX = point.x - bodyB.m_sweep.c.x;\n            var rBY = point.y - bodyB.m_sweep.c.y;\n            minSeparation = minSeparation < separation ? minSeparation : separation;\n            var C = b2Math.Clamp(baumgarte * (separation + b2Settings.b2_linearSlop), (-b2Settings.b2_maxLinearCorrection), 0.0);\n            var impulse = (-ccp.equalizedMass * C);\n            var PX = impulse * normal.x;\n            var PY = impulse * normal.y;bodyA.m_sweep.c.x -= invMassA * PX;\n            bodyA.m_sweep.c.y -= invMassA * PY;\n            bodyA.m_sweep.a -= invIA * (rAX * PY - rAY * PX);\n            bodyA.SynchronizeTransform();\n            bodyB.m_sweep.c.x += invMassB * PX;\n            bodyB.m_sweep.c.y += invMassB * PY;\n            bodyB.m_sweep.a += invIB * (rBX * PY - rBY * PX);\n            bodyB.SynchronizeTransform();\n         }\n      }\n      return minSeparation > (-1.5 * b2Settings.b2_linearSlop);\n   }\n   Box2D.postDefs.push(function () {\n      Box2D.Dynamics.Contacts.b2ContactSolver.s_worldManifold = new b2WorldManifold();\n      Box2D.Dynamics.Contacts.b2ContactSolver.s_psm = new b2PositionSolverManifold();\n   });\n   Box2D.inherit(b2EdgeAndCircleContact, Box2D.Dynamics.Contacts.b2Contact);\n   b2EdgeAndCircleContact.prototype.__super = Box2D.Dynamics.Contacts.b2Contact.prototype;\n   b2EdgeAndCircleContact.b2EdgeAndCircleContact = function () {\n      Box2D.Dynamics.Contacts.b2Contact.b2Contact.apply(this, arguments);\n   };\n   b2EdgeAndCircleContact.Create = function (allocator) {\n      return new b2EdgeAndCircleContact();\n   }\n   b2EdgeAndCircleContact.Destroy = function (contact, allocator) {}\n   b2EdgeAndCircleContact.prototype.Reset = function (fixtureA, fixtureB) {\n      this.__super.Reset.call(this, fixtureA, fixtureB);\n   }\n   b2EdgeAndCircleContact.prototype.Evaluate = function () {\n      var bA = this.m_fixtureA.GetBody();\n      var bB = this.m_fixtureB.GetBody();\n      this.b2CollideEdgeAndCircle(this.m_manifold, (this.m_fixtureA.GetShape() instanceof b2EdgeShape ? this.m_fixtureA.GetShape() : null), bA.m_xf, (this.m_fixtureB.GetShape() instanceof b2CircleShape ? this.m_fixtureB.GetShape() : null), bB.m_xf);\n   }\n   b2EdgeAndCircleContact.prototype.b2CollideEdgeAndCircle = function (manifold, edge, xf1, circle, xf2) {}\n   Box2D.inherit(b2NullContact, Box2D.Dynamics.Contacts.b2Contact);\n   b2NullContact.prototype.__super = Box2D.Dynamics.Contacts.b2Contact.prototype;\n   b2NullContact.b2NullContact = function () {\n      Box2D.Dynamics.Contacts.b2Contact.b2Contact.apply(this, arguments);\n   };\n   b2NullContact.prototype.b2NullContact = function () {\n      this.__super.b2Contact.call(this);\n   }\n   b2NullContact.prototype.Evaluate = function () {}\n   Box2D.inherit(b2PolyAndCircleContact, Box2D.Dynamics.Contacts.b2Contact);\n   b2PolyAndCircleContact.prototype.__super = Box2D.Dynamics.Contacts.b2Contact.prototype;\n   b2PolyAndCircleContact.b2PolyAndCircleContact = function () {\n      Box2D.Dynamics.Contacts.b2Contact.b2Contact.apply(this, arguments);\n   };\n   b2PolyAndCircleContact.Create = function (allocator) {\n      return new b2PolyAndCircleContact();\n   }\n   b2PolyAndCircleContact.Destroy = function (contact, allocator) {}\n   b2PolyAndCircleContact.prototype.Reset = function (fixtureA, fixtureB) {\n      this.__super.Reset.call(this, fixtureA, fixtureB);\n      b2Settings.b2Assert(fixtureA.GetType() == b2Shape.e_polygonShape);\n      b2Settings.b2Assert(fixtureB.GetType() == b2Shape.e_circleShape);\n   }\n   b2PolyAndCircleContact.prototype.Evaluate = function () {\n      var bA = this.m_fixtureA.m_body;\n      var bB = this.m_fixtureB.m_body;\n      b2Collision.CollidePolygonAndCircle(this.m_manifold, (this.m_fixtureA.GetShape() instanceof b2PolygonShape ? this.m_fixtureA.GetShape() : null), bA.m_xf, (this.m_fixtureB.GetShape() instanceof b2CircleShape ? this.m_fixtureB.GetShape() : null), bB.m_xf);\n   }\n   Box2D.inherit(b2PolyAndEdgeContact, Box2D.Dynamics.Contacts.b2Contact);\n   b2PolyAndEdgeContact.prototype.__super = Box2D.Dynamics.Contacts.b2Contact.prototype;\n   b2PolyAndEdgeContact.b2PolyAndEdgeContact = function () {\n      Box2D.Dynamics.Contacts.b2Contact.b2Contact.apply(this, arguments);\n   };\n   b2PolyAndEdgeContact.Create = function (allocator) {\n      return new b2PolyAndEdgeContact();\n   }\n   b2PolyAndEdgeContact.Destroy = function (contact, allocator) {}\n   b2PolyAndEdgeContact.prototype.Reset = function (fixtureA, fixtureB) {\n      this.__super.Reset.call(this, fixtureA, fixtureB);\n      b2Settings.b2Assert(fixtureA.GetType() == b2Shape.e_polygonShape);\n      b2Settings.b2Assert(fixtureB.GetType() == b2Shape.e_edgeShape);\n   }\n   b2PolyAndEdgeContact.prototype.Evaluate = function () {\n      var bA = this.m_fixtureA.GetBody();\n      var bB = this.m_fixtureB.GetBody();\n      this.b2CollidePolyAndEdge(this.m_manifold, (this.m_fixtureA.GetShape() instanceof b2PolygonShape ? this.m_fixtureA.GetShape() : null), bA.m_xf, (this.m_fixtureB.GetShape() instanceof b2EdgeShape ? this.m_fixtureB.GetShape() : null), bB.m_xf);\n   }\n   b2PolyAndEdgeContact.prototype.b2CollidePolyAndEdge = function (manifold, polygon, xf1, edge, xf2) {}\n   Box2D.inherit(b2PolygonContact, Box2D.Dynamics.Contacts.b2Contact);\n   b2PolygonContact.prototype.__super = Box2D.Dynamics.Contacts.b2Contact.prototype;\n   b2PolygonContact.b2PolygonContact = function () {\n      Box2D.Dynamics.Contacts.b2Contact.b2Contact.apply(this, arguments);\n   };\n   b2PolygonContact.Create = function (allocator) {\n      return new b2PolygonContact();\n   }\n   b2PolygonContact.Destroy = function (contact, allocator) {}\n   b2PolygonContact.prototype.Reset = function (fixtureA, fixtureB) {\n      this.__super.Reset.call(this, fixtureA, fixtureB);\n   }\n   b2PolygonContact.prototype.Evaluate = function () {\n      var bA = this.m_fixtureA.GetBody();\n      var bB = this.m_fixtureB.GetBody();\n      b2Collision.CollidePolygons(this.m_manifold, (this.m_fixtureA.GetShape() instanceof b2PolygonShape ? this.m_fixtureA.GetShape() : null), bA.m_xf, (this.m_fixtureB.GetShape() instanceof b2PolygonShape ? this.m_fixtureB.GetShape() : null), bB.m_xf);\n   }\n   b2PositionSolverManifold.b2PositionSolverManifold = function () {};\n   b2PositionSolverManifold.prototype.b2PositionSolverManifold = function () {\n      this.m_normal = new b2Vec2();\n      this.m_separations = new Vector_a2j_Number(b2Settings.b2_maxManifoldPoints);\n      this.m_points = new Vector(b2Settings.b2_maxManifoldPoints);\n      for (var i = 0; i < b2Settings.b2_maxManifoldPoints; i++) {\n         this.m_points[i] = new b2Vec2();\n      }\n   }\n   b2PositionSolverManifold.prototype.Initialize = function (cc) {\n      b2Settings.b2Assert(cc.pointCount > 0);\n      var i = 0;\n      var clipPointX = 0;\n      var clipPointY = 0;\n      var tMat;\n      var tVec;\n      var planePointX = 0;\n      var planePointY = 0;\n      switch (cc.type) {\n      case b2Manifold.e_circles:\n         {\n            tMat = cc.bodyA.m_xf.R;\n            tVec = cc.localPoint;\n            var pointAX = cc.bodyA.m_xf.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);\n            var pointAY = cc.bodyA.m_xf.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);\n            tMat = cc.bodyB.m_xf.R;\n            tVec = cc.points[0].localPoint;\n            var pointBX = cc.bodyB.m_xf.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);\n            var pointBY = cc.bodyB.m_xf.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);\n            var dX = pointBX - pointAX;\n            var dY = pointBY - pointAY;\n            var d2 = dX * dX + dY * dY;\n            if (d2 > Number.MIN_VALUE * Number.MIN_VALUE) {\n               var d = Math.sqrt(d2);\n               this.m_normal.x = dX / d;\n               this.m_normal.y = dY / d;\n            }\n            else {\n               this.m_normal.x = 1.0;\n               this.m_normal.y = 0.0;\n            }\n            this.m_points[0].x = 0.5 * (pointAX + pointBX);\n            this.m_points[0].y = 0.5 * (pointAY + pointBY);\n            this.m_separations[0] = dX * this.m_normal.x + dY * this.m_normal.y - cc.radius;\n         }\n         break;\n      case b2Manifold.e_faceA:\n         {\n            tMat = cc.bodyA.m_xf.R;\n            tVec = cc.localPlaneNormal;\n            this.m_normal.x = tMat.col1.x * tVec.x + tMat.col2.x * tVec.y;\n            this.m_normal.y = tMat.col1.y * tVec.x + tMat.col2.y * tVec.y;\n            tMat = cc.bodyA.m_xf.R;\n            tVec = cc.localPoint;\n            planePointX = cc.bodyA.m_xf.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);\n            planePointY = cc.bodyA.m_xf.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);\n            tMat = cc.bodyB.m_xf.R;\n            for (i = 0;\n            i < cc.pointCount; ++i) {\n               tVec = cc.points[i].localPoint;\n               clipPointX = cc.bodyB.m_xf.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);\n               clipPointY = cc.bodyB.m_xf.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);\n               this.m_separations[i] = (clipPointX - planePointX) * this.m_normal.x + (clipPointY - planePointY) * this.m_normal.y - cc.radius;\n               this.m_points[i].x = clipPointX;\n               this.m_points[i].y = clipPointY;\n            }\n         }\n         break;\n      case b2Manifold.e_faceB:\n         {\n            tMat = cc.bodyB.m_xf.R;\n            tVec = cc.localPlaneNormal;\n            this.m_normal.x = tMat.col1.x * tVec.x + tMat.col2.x * tVec.y;\n            this.m_normal.y = tMat.col1.y * tVec.x + tMat.col2.y * tVec.y;\n            tMat = cc.bodyB.m_xf.R;\n            tVec = cc.localPoint;\n            planePointX = cc.bodyB.m_xf.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);\n            planePointY = cc.bodyB.m_xf.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);\n            tMat = cc.bodyA.m_xf.R;\n            for (i = 0;\n            i < cc.pointCount; ++i) {\n               tVec = cc.points[i].localPoint;\n               clipPointX = cc.bodyA.m_xf.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y);\n               clipPointY = cc.bodyA.m_xf.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y);\n               this.m_separations[i] = (clipPointX - planePointX) * this.m_normal.x + (clipPointY - planePointY) * this.m_normal.y - cc.radius;\n               this.m_points[i].Set(clipPointX, clipPointY);\n            }\n            this.m_normal.x *= (-1);\n            this.m_normal.y *= (-1);\n         }\n         break;\n      }\n   }\n   Box2D.postDefs.push(function () {\n      Box2D.Dynamics.Contacts.b2PositionSolverManifold.circlePointA = new b2Vec2();\n      Box2D.Dynamics.Contacts.b2PositionSolverManifold.circlePointB = new b2Vec2();\n   });\n})();\n(function () {\n   var b2Body = Box2D.Dynamics.b2Body,\n      b2BodyDef = Box2D.Dynamics.b2BodyDef,\n      b2ContactFilter = Box2D.Dynamics.b2ContactFilter,\n      b2ContactImpulse = Box2D.Dynamics.b2ContactImpulse,\n      b2ContactListener = Box2D.Dynamics.b2ContactListener,\n      b2ContactManager = Box2D.Dynamics.b2ContactManager,\n      b2DebugDraw = Box2D.Dynamics.b2DebugDraw,\n      b2DestructionListener = Box2D.Dynamics.b2DestructionListener,\n      b2FilterData = Box2D.Dynamics.b2FilterData,\n      b2Fixture = Box2D.Dynamics.b2Fixture,\n      b2FixtureDef = Box2D.Dynamics.b2FixtureDef,\n      b2Island = Box2D.Dynamics.b2Island,\n      b2TimeStep = Box2D.Dynamics.b2TimeStep,\n      b2World = Box2D.Dynamics.b2World,\n      b2Mat22 = Box2D.Common.Math.b2Mat22,\n      b2Mat33 = Box2D.Common.Math.b2Mat33,\n      b2Math = Box2D.Common.Math.b2Math,\n      b2Sweep = Box2D.Common.Math.b2Sweep,\n      b2Transform = Box2D.Common.Math.b2Transform,\n      b2Vec2 = Box2D.Common.Math.b2Vec2,\n      b2Vec3 = Box2D.Common.Math.b2Vec3,\n      b2Color = Box2D.Common.b2Color,\n      b2internal = Box2D.Common.b2internal,\n      b2Settings = Box2D.Common.b2Settings,\n      b2CircleShape = Box2D.Collision.Shapes.b2CircleShape,\n      b2EdgeChainDef = Box2D.Collision.Shapes.b2EdgeChainDef,\n      b2EdgeShape = Box2D.Collision.Shapes.b2EdgeShape,\n      b2MassData = Box2D.Collision.Shapes.b2MassData,\n      b2PolygonShape = Box2D.Collision.Shapes.b2PolygonShape,\n      b2Shape = Box2D.Collision.Shapes.b2Shape,\n      b2BuoyancyController = Box2D.Dynamics.Controllers.b2BuoyancyController,\n      b2ConstantAccelController = Box2D.Dynamics.Controllers.b2ConstantAccelController,\n      b2ConstantForceController = Box2D.Dynamics.Controllers.b2ConstantForceController,\n      b2Controller = Box2D.Dynamics.Controllers.b2Controller,\n      b2ControllerEdge = Box2D.Dynamics.Controllers.b2ControllerEdge,\n      b2GravityController = Box2D.Dynamics.Controllers.b2GravityController,\n      b2TensorDampingController = Box2D.Dynamics.Controllers.b2TensorDampingController;\n\n   Box2D.inherit(b2BuoyancyController, Box2D.Dynamics.Controllers.b2Controller);\n   b2BuoyancyController.prototype.__super = Box2D.Dynamics.Controllers.b2Controller.prototype;\n   b2BuoyancyController.b2BuoyancyController = function () {\n      Box2D.Dynamics.Controllers.b2Controller.b2Controller.apply(this, arguments);\n      this.normal = new b2Vec2(0, (-1));\n      this.offset = 0;\n      this.density = 0;\n      this.velocity = new b2Vec2(0, 0);\n      this.linearDrag = 2;\n      this.angularDrag = 1;\n      this.useDensity = false;\n      this.useWorldGravity = true;\n      this.gravity = null;\n   };\n   b2BuoyancyController.prototype.Step = function (step) {\n      if (!this.m_bodyList) return;\n      if (this.useWorldGravity) {\n         this.gravity = this.GetWorld().GetGravity().Copy();\n      }\n      for (var i = this.m_bodyList; i; i = i.nextBody) {\n         var body = i.body;\n         if (body.IsAwake() == false) {\n            continue;\n         }\n         var areac = new b2Vec2();\n         var massc = new b2Vec2();\n         var area = 0.0;\n         var mass = 0.0;\n         for (var fixture = body.GetFixtureList(); fixture; fixture = fixture.GetNext()) {\n            var sc = new b2Vec2();\n            var sarea = fixture.GetShape().ComputeSubmergedArea(this.normal, this.offset, body.GetTransform(), sc);\n            area += sarea;\n            areac.x += sarea * sc.x;\n            areac.y += sarea * sc.y;\n            var shapeDensity = 0;\n            if (this.useDensity) {\n               shapeDensity = 1;\n            }\n            else {\n               shapeDensity = 1;\n            }\n            mass += sarea * shapeDensity;\n            massc.x += sarea * sc.x * shapeDensity;\n            massc.y += sarea * sc.y * shapeDensity;\n         }\n         areac.x /= area;\n         areac.y /= area;\n         massc.x /= mass;\n         massc.y /= mass;\n         if (area < Number.MIN_VALUE) continue;\n         var buoyancyForce = this.gravity.GetNegative();\n         buoyancyForce.Multiply(this.density * area);\n         body.ApplyForce(buoyancyForce, massc);\n         var dragForce = body.GetLinearVelocityFromWorldPoint(areac);\n         dragForce.Subtract(this.velocity);\n         dragForce.Multiply((-this.linearDrag * area));\n         body.ApplyForce(dragForce, areac);\n         body.ApplyTorque((-body.GetInertia() / body.GetMass() * area * body.GetAngularVelocity() * this.angularDrag));\n      }\n   }\n   b2BuoyancyController.prototype.Draw = function (debugDraw) {\n      var r = 1000;\n      var p1 = new b2Vec2();\n      var p2 = new b2Vec2();\n      p1.x = this.normal.x * this.offset + this.normal.y * r;\n      p1.y = this.normal.y * this.offset - this.normal.x * r;\n      p2.x = this.normal.x * this.offset - this.normal.y * r;\n      p2.y = this.normal.y * this.offset + this.normal.x * r;\n      var color = new b2Color(0, 0, 1);\n      debugDraw.DrawSegment(p1, p2, color);\n   }\n   Box2D.inherit(b2ConstantAccelController, Box2D.Dynamics.Controllers.b2Controller);\n   b2ConstantAccelController.prototype.__super = Box2D.Dynamics.Controllers.b2Controller.prototype;\n   b2ConstantAccelController.b2ConstantAccelController = function () {\n      Box2D.Dynamics.Controllers.b2Controller.b2Controller.apply(this, arguments);\n      this.A = new b2Vec2(0, 0);\n   };\n   b2ConstantAccelController.prototype.Step = function (step) {\n      var smallA = new b2Vec2(this.A.x * step.dt, this.A.y * step.dt);\n      for (var i = this.m_bodyList; i; i = i.nextBody) {\n         var body = i.body;\n         if (!body.IsAwake()) continue;\n         body.SetLinearVelocity(new b2Vec2(body.GetLinearVelocity().x + smallA.x, body.GetLinearVelocity().y + smallA.y));\n      }\n   }\n   Box2D.inherit(b2ConstantForceController, Box2D.Dynamics.Controllers.b2Controller);\n   b2ConstantForceController.prototype.__super = Box2D.Dynamics.Controllers.b2Controller.prototype;\n   b2ConstantForceController.b2ConstantForceController = function () {\n      Box2D.Dynamics.Controllers.b2Controller.b2Controller.apply(this, arguments);\n      this.F = new b2Vec2(0, 0);\n   };\n   b2ConstantForceController.prototype.Step = function (step) {\n      for (var i = this.m_bodyList; i; i = i.nextBody) {\n         var body = i.body;\n         if (!body.IsAwake()) continue;\n         body.ApplyForce(this.F, body.GetWorldCenter());\n      }\n   }\n   b2Controller.b2Controller = function () {};\n   b2Controller.prototype.Step = function (step) {}\n   b2Controller.prototype.Draw = function (debugDraw) {}\n   b2Controller.prototype.AddBody = function (body) {\n      var edge = new b2ControllerEdge();\n      edge.controller = this;\n      edge.body = body;\n      edge.nextBody = this.m_bodyList;\n      edge.prevBody = null;\n      this.m_bodyList = edge;\n      if (edge.nextBody) edge.nextBody.prevBody = edge;\n      this.m_bodyCount++;\n      edge.nextController = body.m_controllerList;\n      edge.prevController = null;\n      body.m_controllerList = edge;\n      if (edge.nextController) edge.nextController.prevController = edge;\n      body.m_controllerCount++;\n   }\n   b2Controller.prototype.RemoveBody = function (body) {\n      var edge = body.m_controllerList;\n      while (edge && edge.controller != this)\n      edge = edge.nextController;\n      if (edge.prevBody) edge.prevBody.nextBody = edge.nextBody;\n      if (edge.nextBody) edge.nextBody.prevBody = edge.prevBody;\n      if (edge.nextController) edge.nextController.prevController = edge.prevController;\n      if (edge.prevController) edge.prevController.nextController = edge.nextController;\n      if (this.m_bodyList == edge) this.m_bodyList = edge.nextBody;\n      if (body.m_controllerList == edge) body.m_controllerList = edge.nextController;\n      body.m_controllerCount--;\n      this.m_bodyCount--;\n   }\n   b2Controller.prototype.Clear = function () {\n      while (this.m_bodyList)\n      this.RemoveBody(this.m_bodyList.body);\n   }\n   b2Controller.prototype.GetNext = function () {\n      return this.m_next;\n   }\n   b2Controller.prototype.GetWorld = function () {\n      return this.m_world;\n   }\n   b2Controller.prototype.GetBodyList = function () {\n      return this.m_bodyList;\n   }\n   b2ControllerEdge.b2ControllerEdge = function () {};\n   Box2D.inherit(b2GravityController, Box2D.Dynamics.Controllers.b2Controller);\n   b2GravityController.prototype.__super = Box2D.Dynamics.Controllers.b2Controller.prototype;\n   b2GravityController.b2GravityController = function () {\n      Box2D.Dynamics.Controllers.b2Controller.b2Controller.apply(this, arguments);\n      this.G = 1;\n      this.invSqr = true;\n   };\n   b2GravityController.prototype.Step = function (step) {\n      var i = null;\n      var body1 = null;\n      var p1 = null;\n      var mass1 = 0;\n      var j = null;\n      var body2 = null;\n      var p2 = null;\n      var dx = 0;\n      var dy = 0;\n      var r2 = 0;\n      var f = null;\n      if (this.invSqr) {\n         for (i = this.m_bodyList;\n         i; i = i.nextBody) {\n            body1 = i.body;\n            p1 = body1.GetWorldCenter();\n            mass1 = body1.GetMass();\n            for (j = this.m_bodyList;\n            j != i; j = j.nextBody) {\n               body2 = j.body;\n               p2 = body2.GetWorldCenter();\n               dx = p2.x - p1.x;\n               dy = p2.y - p1.y;\n               r2 = dx * dx + dy * dy;\n               if (r2 < Number.MIN_VALUE) continue;\n               f = new b2Vec2(dx, dy);\n               f.Multiply(this.G / r2 / Math.sqrt(r2) * mass1 * body2.GetMass());\n               if (body1.IsAwake()) body1.ApplyForce(f, p1);\n               f.Multiply((-1));\n               if (body2.IsAwake()) body2.ApplyForce(f, p2);\n            }\n         }\n      }\n      else {\n         for (i = this.m_bodyList;\n         i; i = i.nextBody) {\n            body1 = i.body;\n            p1 = body1.GetWorldCenter();\n            mass1 = body1.GetMass();\n            for (j = this.m_bodyList;\n            j != i; j = j.nextBody) {\n               body2 = j.body;\n               p2 = body2.GetWorldCenter();\n               dx = p2.x - p1.x;\n               dy = p2.y - p1.y;\n               r2 = dx * dx + dy * dy;\n               if (r2 < Number.MIN_VALUE) continue;\n               f = new b2Vec2(dx, dy);\n               f.Multiply(this.G / r2 * mass1 * body2.GetMass());\n               if (body1.IsAwake()) body1.ApplyForce(f, p1);\n               f.Multiply((-1));\n               if (body2.IsAwake()) body2.ApplyForce(f, p2);\n            }\n         }\n      }\n   }\n   Box2D.inherit(b2TensorDampingController, Box2D.Dynamics.Controllers.b2Controller);\n   b2TensorDampingController.prototype.__super = Box2D.Dynamics.Controllers.b2Controller.prototype;\n   b2TensorDampingController.b2TensorDampingController = function () {\n      Box2D.Dynamics.Controllers.b2Controller.b2Controller.apply(this, arguments);\n      this.T = new b2Mat22();\n      this.maxTimestep = 0;\n   };\n   b2TensorDampingController.prototype.SetAxisAligned = function (xDamping, yDamping) {\n      if (xDamping === undefined) xDamping = 0;\n      if (yDamping === undefined) yDamping = 0;\n      this.T.col1.x = (-xDamping);\n      this.T.col1.y = 0;\n      this.T.col2.x = 0;\n      this.T.col2.y = (-yDamping);\n      if (xDamping > 0 || yDamping > 0) {\n         this.maxTimestep = 1 / Math.max(xDamping, yDamping);\n      }\n      else {\n         this.maxTimestep = 0;\n      }\n   }\n   b2TensorDampingController.prototype.Step = function (step) {\n      var timestep = step.dt;\n      if (timestep <= Number.MIN_VALUE) return;\n      if (timestep > this.maxTimestep && this.maxTimestep > 0) timestep = this.maxTimestep;\n      for (var i = this.m_bodyList; i; i = i.nextBody) {\n         var body = i.body;\n         if (!body.IsAwake()) {\n            continue;\n         }\n         var damping = body.GetWorldVector(b2Math.MulMV(this.T, body.GetLocalVector(body.GetLinearVelocity())));\n         body.SetLinearVelocity(new b2Vec2(body.GetLinearVelocity().x + damping.x * timestep, body.GetLinearVelocity().y + damping.y * timestep));\n      }\n   }\n})();\n(function () {\n   var b2Color = Box2D.Common.b2Color,\n      b2internal = Box2D.Common.b2internal,\n      b2Settings = Box2D.Common.b2Settings,\n      b2Mat22 = Box2D.Common.Math.b2Mat22,\n      b2Mat33 = Box2D.Common.Math.b2Mat33,\n      b2Math = Box2D.Common.Math.b2Math,\n      b2Sweep = Box2D.Common.Math.b2Sweep,\n      b2Transform = Box2D.Common.Math.b2Transform,\n      b2Vec2 = Box2D.Common.Math.b2Vec2,\n      b2Vec3 = Box2D.Common.Math.b2Vec3,\n      b2DistanceJoint = Box2D.Dynamics.Joints.b2DistanceJoint,\n      b2DistanceJointDef = Box2D.Dynamics.Joints.b2DistanceJointDef,\n      b2FrictionJoint = Box2D.Dynamics.Joints.b2FrictionJoint,\n      b2FrictionJointDef = Box2D.Dynamics.Joints.b2FrictionJointDef,\n      b2GearJoint = Box2D.Dynamics.Joints.b2GearJoint,\n      b2GearJointDef = Box2D.Dynamics.Joints.b2GearJointDef,\n      b2Jacobian = Box2D.Dynamics.Joints.b2Jacobian,\n      b2Joint = Box2D.Dynamics.Joints.b2Joint,\n      b2JointDef = Box2D.Dynamics.Joints.b2JointDef,\n      b2JointEdge = Box2D.Dynamics.Joints.b2JointEdge,\n      b2LineJoint = Box2D.Dynamics.Joints.b2LineJoint,\n      b2LineJointDef = Box2D.Dynamics.Joints.b2LineJointDef,\n      b2MouseJoint = Box2D.Dynamics.Joints.b2MouseJoint,\n      b2MouseJointDef = Box2D.Dynamics.Joints.b2MouseJointDef,\n      b2PrismaticJoint = Box2D.Dynamics.Joints.b2PrismaticJoint,\n      b2PrismaticJointDef = Box2D.Dynamics.Joints.b2PrismaticJointDef,\n      b2PulleyJoint = Box2D.Dynamics.Joints.b2PulleyJoint,\n      b2PulleyJointDef = Box2D.Dynamics.Joints.b2PulleyJointDef,\n      b2RevoluteJoint = Box2D.Dynamics.Joints.b2RevoluteJoint,\n      b2RevoluteJointDef = Box2D.Dynamics.Joints.b2RevoluteJointDef,\n      b2WeldJoint = Box2D.Dynamics.Joints.b2WeldJoint,\n      b2WeldJointDef = Box2D.Dynamics.Joints.b2WeldJointDef,\n      b2Body = Box2D.Dynamics.b2Body,\n      b2BodyDef = Box2D.Dynamics.b2BodyDef,\n      b2ContactFilter = Box2D.Dynamics.b2ContactFilter,\n      b2ContactImpulse = Box2D.Dynamics.b2ContactImpulse,\n      b2ContactListener = Box2D.Dynamics.b2ContactListener,\n      b2ContactManager = Box2D.Dynamics.b2ContactManager,\n      b2DebugDraw = Box2D.Dynamics.b2DebugDraw,\n      b2DestructionListener = Box2D.Dynamics.b2DestructionListener,\n      b2FilterData = Box2D.Dynamics.b2FilterData,\n      b2Fixture = Box2D.Dynamics.b2Fixture,\n      b2FixtureDef = Box2D.Dynamics.b2FixtureDef,\n      b2Island = Box2D.Dynamics.b2Island,\n      b2TimeStep = Box2D.Dynamics.b2TimeStep,\n      b2World = Box2D.Dynamics.b2World;\n\n   Box2D.inherit(b2DistanceJoint, Box2D.Dynamics.Joints.b2Joint);\n   b2DistanceJoint.prototype.__super = Box2D.Dynamics.Joints.b2Joint.prototype;\n   b2DistanceJoint.b2DistanceJoint = function () {\n      Box2D.Dynamics.Joints.b2Joint.b2Joint.apply(this, arguments);\n      this.m_localAnchor1 = new b2Vec2();\n      this.m_localAnchor2 = new b2Vec2();\n      this.m_u = new b2Vec2();\n   };\n   b2DistanceJoint.prototype.GetAnchorA = function () {\n      return this.m_bodyA.GetWorldPoint(this.m_localAnchor1);\n   }\n   b2DistanceJoint.prototype.GetAnchorB = function () {\n      return this.m_bodyB.GetWorldPoint(this.m_localAnchor2);\n   }\n   b2DistanceJoint.prototype.GetReactionForce = function (inv_dt) {\n      if (inv_dt === undefined) inv_dt = 0;\n      return new b2Vec2(inv_dt * this.m_impulse * this.m_u.x, inv_dt * this.m_impulse * this.m_u.y);\n   }\n   b2DistanceJoint.prototype.GetReactionTorque = function (inv_dt) {\n      if (inv_dt === undefined) inv_dt = 0;\n      return 0.0;\n   }\n   b2DistanceJoint.prototype.GetLength = function () {\n      return this.m_length;\n   }\n   b2DistanceJoint.prototype.SetLength = function (length) {\n      if (length === undefined) length = 0;\n      this.m_length = length;\n   }\n   b2DistanceJoint.prototype.GetFrequency = function () {\n      return this.m_frequencyHz;\n   }\n   b2DistanceJoint.prototype.SetFrequency = function (hz) {\n      if (hz === undefined) hz = 0;\n      this.m_frequencyHz = hz;\n   }\n   b2DistanceJoint.prototype.GetDampingRatio = function () {\n      return this.m_dampingRatio;\n   }\n   b2DistanceJoint.prototype.SetDampingRatio = function (ratio) {\n      if (ratio === undefined) ratio = 0;\n      this.m_dampingRatio = ratio;\n   }\n   b2DistanceJoint.prototype.b2DistanceJoint = function (def) {\n      this.__super.b2Joint.call(this, def);\n      var tMat;\n      var tX = 0;\n      var tY = 0;\n      this.m_localAnchor1.SetV(def.localAnchorA);\n      this.m_localAnchor2.SetV(def.localAnchorB);\n      this.m_length = def.length;\n      this.m_frequencyHz = def.frequencyHz;\n      this.m_dampingRatio = def.dampingRatio;\n      this.m_impulse = 0.0;\n      this.m_gamma = 0.0;\n      this.m_bias = 0.0;\n   }\n   b2DistanceJoint.prototype.InitVelocityConstraints = function (step) {\n      var tMat;\n      var tX = 0;\n      var bA = this.m_bodyA;\n      var bB = this.m_bodyB;\n      tMat = bA.m_xf.R;\n      var r1X = this.m_localAnchor1.x - bA.m_sweep.localCenter.x;\n      var r1Y = this.m_localAnchor1.y - bA.m_sweep.localCenter.y;\n      tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y);\n      r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y);\n      r1X = tX;\n      tMat = bB.m_xf.R;\n      var r2X = this.m_localAnchor2.x - bB.m_sweep.localCenter.x;\n      var r2Y = this.m_localAnchor2.y - bB.m_sweep.localCenter.y;\n      tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y);\n      r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y);\n      r2X = tX;\n      this.m_u.x = bB.m_sweep.c.x + r2X - bA.m_sweep.c.x - r1X;\n      this.m_u.y = bB.m_sweep.c.y + r2Y - bA.m_sweep.c.y - r1Y;\n      var length = Math.sqrt(this.m_u.x * this.m_u.x + this.m_u.y * this.m_u.y);\n      if (length > b2Settings.b2_linearSlop) {\n         this.m_u.Multiply(1.0 / length);\n      }\n      else {\n         this.m_u.SetZero();\n      }\n      var cr1u = (r1X * this.m_u.y - r1Y * this.m_u.x);\n      var cr2u = (r2X * this.m_u.y - r2Y * this.m_u.x);\n      var invMass = bA.m_invMass + bA.m_invI * cr1u * cr1u + bB.m_invMass + bB.m_invI * cr2u * cr2u;\n      this.m_mass = invMass != 0.0 ? 1.0 / invMass : 0.0;\n      if (this.m_frequencyHz > 0.0) {\n         var C = length - this.m_length;\n         var omega = 2.0 * Math.PI * this.m_frequencyHz;\n         var d = 2.0 * this.m_mass * this.m_dampingRatio * omega;\n         var k = this.m_mass * omega * omega;\n         this.m_gamma = step.dt * (d + step.dt * k);\n         this.m_gamma = this.m_gamma != 0.0 ? 1 / this.m_gamma : 0.0;\n         this.m_bias = C * step.dt * k * this.m_gamma;\n         this.m_mass = invMass + this.m_gamma;\n         this.m_mass = this.m_mass != 0.0 ? 1.0 / this.m_mass : 0.0;\n      }\n      if (step.warmStarting) {\n         this.m_impulse *= step.dtRatio;\n         var PX = this.m_impulse * this.m_u.x;\n         var PY = this.m_impulse * this.m_u.y;\n         bA.m_linearVelocity.x -= bA.m_invMass * PX;\n         bA.m_linearVelocity.y -= bA.m_invMass * PY;\n         bA.m_angularVelocity -= bA.m_invI * (r1X * PY - r1Y * PX);\n         bB.m_linearVelocity.x += bB.m_invMass * PX;\n         bB.m_linearVelocity.y += bB.m_invMass * PY;\n         bB.m_angularVelocity += bB.m_invI * (r2X * PY - r2Y * PX);\n      }\n      else {\n         this.m_impulse = 0.0;\n      }\n   }\n   b2DistanceJoint.prototype.SolveVelocityConstraints = function (step) {\n      var tMat;\n      var bA = this.m_bodyA;\n      var bB = this.m_bodyB;\n      tMat = bA.m_xf.R;\n      var r1X = this.m_localAnchor1.x - bA.m_sweep.localCenter.x;\n      var r1Y = this.m_localAnchor1.y - bA.m_sweep.localCenter.y;\n      var tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y);\n      r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y);\n      r1X = tX;\n      tMat = bB.m_xf.R;\n      var r2X = this.m_localAnchor2.x - bB.m_sweep.localCenter.x;\n      var r2Y = this.m_localAnchor2.y - bB.m_sweep.localCenter.y;\n      tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y);\n      r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y);\n      r2X = tX;\n      var v1X = bA.m_linearVelocity.x + ((-bA.m_angularVelocity * r1Y));\n      var v1Y = bA.m_linearVelocity.y + (bA.m_angularVelocity * r1X);\n      var v2X = bB.m_linearVelocity.x + ((-bB.m_angularVelocity * r2Y));\n      var v2Y = bB.m_linearVelocity.y + (bB.m_angularVelocity * r2X);\n      var Cdot = (this.m_u.x * (v2X - v1X) + this.m_u.y * (v2Y - v1Y));\n      var impulse = (-this.m_mass * (Cdot + this.m_bias + this.m_gamma * this.m_impulse));\n      this.m_impulse += impulse;\n      var PX = impulse * this.m_u.x;\n      var PY = impulse * this.m_u.y;\n      bA.m_linearVelocity.x -= bA.m_invMass * PX;\n      bA.m_linearVelocity.y -= bA.m_invMass * PY;\n      bA.m_angularVelocity -= bA.m_invI * (r1X * PY - r1Y * PX);\n      bB.m_linearVelocity.x += bB.m_invMass * PX;\n      bB.m_linearVelocity.y += bB.m_invMass * PY;\n      bB.m_angularVelocity += bB.m_invI * (r2X * PY - r2Y * PX);\n   }\n   b2DistanceJoint.prototype.SolvePositionConstraints = function (baumgarte) {\n      if (baumgarte === undefined) baumgarte = 0;\n      var tMat;\n      if (this.m_frequencyHz > 0.0) {\n         return true;\n      }\n      var bA = this.m_bodyA;\n      var bB = this.m_bodyB;\n      tMat = bA.m_xf.R;\n      var r1X = this.m_localAnchor1.x - bA.m_sweep.localCenter.x;\n      var r1Y = this.m_localAnchor1.y - bA.m_sweep.localCenter.y;\n      var tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y);\n      r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y);\n      r1X = tX;\n      tMat = bB.m_xf.R;\n      var r2X = this.m_localAnchor2.x - bB.m_sweep.localCenter.x;\n      var r2Y = this.m_localAnchor2.y - bB.m_sweep.localCenter.y;\n      tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y);\n      r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y);\n      r2X = tX;\n      var dX = bB.m_sweep.c.x + r2X - bA.m_sweep.c.x - r1X;\n      var dY = bB.m_sweep.c.y + r2Y - bA.m_sweep.c.y - r1Y;\n      var length = Math.sqrt(dX * dX + dY * dY);\n      dX /= length;\n      dY /= length;\n      var C = length - this.m_length;\n      C = b2Math.Clamp(C, (-b2Settings.b2_maxLinearCorrection), b2Settings.b2_maxLinearCorrection);\n      var impulse = (-this.m_mass * C);\n      this.m_u.Set(dX, dY);\n      var PX = impulse * this.m_u.x;\n      var PY = impulse * this.m_u.y;\n      bA.m_sweep.c.x -= bA.m_invMass * PX;\n      bA.m_sweep.c.y -= bA.m_invMass * PY;\n      bA.m_sweep.a -= bA.m_invI * (r1X * PY - r1Y * PX);\n      bB.m_sweep.c.x += bB.m_invMass * PX;\n      bB.m_sweep.c.y += bB.m_invMass * PY;\n      bB.m_sweep.a += bB.m_invI * (r2X * PY - r2Y * PX);\n      bA.SynchronizeTransform();\n      bB.SynchronizeTransform();\n      return b2Math.Abs(C) < b2Settings.b2_linearSlop;\n   }\n   Box2D.inherit(b2DistanceJointDef, Box2D.Dynamics.Joints.b2JointDef);\n   b2DistanceJointDef.prototype.__super = Box2D.Dynamics.Joints.b2JointDef.prototype;\n   b2DistanceJointDef.b2DistanceJointDef = function () {\n      Box2D.Dynamics.Joints.b2JointDef.b2JointDef.apply(this, arguments);\n      this.localAnchorA = new b2Vec2();\n      this.localAnchorB = new b2Vec2();\n   };\n   b2DistanceJointDef.prototype.b2DistanceJointDef = function () {\n      this.__super.b2JointDef.call(this);\n      this.type = b2Joint.e_distanceJoint;\n      this.length = 1.0;\n      this.frequencyHz = 0.0;\n      this.dampingRatio = 0.0;\n   }\n   b2DistanceJointDef.prototype.Initialize = function (bA, bB, anchorA, anchorB) {\n      this.bodyA = bA;\n      this.bodyB = bB;\n      this.localAnchorA.SetV(this.bodyA.GetLocalPoint(anchorA));\n      this.localAnchorB.SetV(this.bodyB.GetLocalPoint(anchorB));\n      var dX = anchorB.x - anchorA.x;\n      var dY = anchorB.y - anchorA.y;\n      this.length = Math.sqrt(dX * dX + dY * dY);\n      this.frequencyHz = 0.0;\n      this.dampingRatio = 0.0;\n   }\n   Box2D.inherit(b2FrictionJoint, Box2D.Dynamics.Joints.b2Joint);\n   b2FrictionJoint.prototype.__super = Box2D.Dynamics.Joints.b2Joint.prototype;\n   b2FrictionJoint.b2FrictionJoint = function () {\n      Box2D.Dynamics.Joints.b2Joint.b2Joint.apply(this, arguments);\n      this.m_localAnchorA = new b2Vec2();\n      this.m_localAnchorB = new b2Vec2();\n      this.m_linearMass = new b2Mat22();\n      this.m_linearImpulse = new b2Vec2();\n   };\n   b2FrictionJoint.prototype.GetAnchorA = function () {\n      return this.m_bodyA.GetWorldPoint(this.m_localAnchorA);\n   }\n   b2FrictionJoint.prototype.GetAnchorB = function () {\n      return this.m_bodyB.GetWorldPoint(this.m_localAnchorB);\n   }\n   b2FrictionJoint.prototype.GetReactionForce = function (inv_dt) {\n      if (inv_dt === undefined) inv_dt = 0;\n      return new b2Vec2(inv_dt * this.m_linearImpulse.x, inv_dt * this.m_linearImpulse.y);\n   }\n   b2FrictionJoint.prototype.GetReactionTorque = function (inv_dt) {\n      if (inv_dt === undefined) inv_dt = 0;\n      return inv_dt * this.m_angularImpulse;\n   }\n   b2FrictionJoint.prototype.SetMaxForce = function (force) {\n      if (force === undefined) force = 0;\n      this.m_maxForce = force;\n   }\n   b2FrictionJoint.prototype.GetMaxForce = function () {\n      return this.m_maxForce;\n   }\n   b2FrictionJoint.prototype.SetMaxTorque = function (torque) {\n      if (torque === undefined) torque = 0;\n      this.m_maxTorque = torque;\n   }\n   b2FrictionJoint.prototype.GetMaxTorque = function () {\n      return this.m_maxTorque;\n   }\n   b2FrictionJoint.prototype.b2FrictionJoint = function (def) {\n      this.__super.b2Joint.call(this, def);\n      this.m_localAnchorA.SetV(def.localAnchorA);\n      this.m_localAnchorB.SetV(def.localAnchorB);\n      this.m_linearMass.SetZero();\n      this.m_angularMass = 0.0;\n      this.m_linearImpulse.SetZero();\n      this.m_angularImpulse = 0.0;\n      this.m_maxForce = def.maxForce;\n      this.m_maxTorque = def.maxTorque;\n   }\n   b2FrictionJoint.prototype.InitVelocityConstraints = function (step) {\n      var tMat;\n      var tX = 0;\n      var bA = this.m_bodyA;\n      var bB = this.m_bodyB;\n      tMat = bA.m_xf.R;\n      var rAX = this.m_localAnchorA.x - bA.m_sweep.localCenter.x;\n      var rAY = this.m_localAnchorA.y - bA.m_sweep.localCenter.y;\n      tX = (tMat.col1.x * rAX + tMat.col2.x * rAY);\n      rAY = (tMat.col1.y * rAX + tMat.col2.y * rAY);\n      rAX = tX;\n      tMat = bB.m_xf.R;\n      var rBX = this.m_localAnchorB.x - bB.m_sweep.localCenter.x;\n      var rBY = this.m_localAnchorB.y - bB.m_sweep.localCenter.y;\n      tX = (tMat.col1.x * rBX + tMat.col2.x * rBY);\n      rBY = (tMat.col1.y * rBX + tMat.col2.y * rBY);\n      rBX = tX;\n      var mA = bA.m_invMass;\n      var mB = bB.m_invMass;\n      var iA = bA.m_invI;\n      var iB = bB.m_invI;\n      var K = new b2Mat22();\n      K.col1.x = mA + mB;\n      K.col2.x = 0.0;\n      K.col1.y = 0.0;\n      K.col2.y = mA + mB;\n      K.col1.x += iA * rAY * rAY;\n      K.col2.x += (-iA * rAX * rAY);\n      K.col1.y += (-iA * rAX * rAY);\n      K.col2.y += iA * rAX * rAX;\n      K.col1.x += iB * rBY * rBY;\n      K.col2.x += (-iB * rBX * rBY);\n      K.col1.y += (-iB * rBX * rBY);\n      K.col2.y += iB * rBX * rBX;\n      K.GetInverse(this.m_linearMass);\n      this.m_angularMass = iA + iB;\n      if (this.m_angularMass > 0.0) {\n         this.m_angularMass = 1.0 / this.m_angularMass;\n      }\n      if (step.warmStarting) {\n         this.m_linearImpulse.x *= step.dtRatio;\n         this.m_linearImpulse.y *= step.dtRatio;\n         this.m_angularImpulse *= step.dtRatio;\n         var P = this.m_linearImpulse;\n         bA.m_linearVelocity.x -= mA * P.x;\n         bA.m_linearVelocity.y -= mA * P.y;\n         bA.m_angularVelocity -= iA * (rAX * P.y - rAY * P.x + this.m_angularImpulse);\n         bB.m_linearVelocity.x += mB * P.x;\n         bB.m_linearVelocity.y += mB * P.y;\n         bB.m_angularVelocity += iB * (rBX * P.y - rBY * P.x + this.m_angularImpulse);\n      }\n      else {\n         this.m_linearImpulse.SetZero();\n         this.m_angularImpulse = 0.0;\n      }\n   }\n   b2FrictionJoint.prototype.SolveVelocityConstraints = function (step) {\n      var tMat;\n      var tX = 0;\n      var bA = this.m_bodyA;\n      var bB = this.m_bodyB;\n      var vA = bA.m_linearVelocity;\n      var wA = bA.m_angularVelocity;\n      var vB = bB.m_linearVelocity;\n      var wB = bB.m_angularVelocity;\n      var mA = bA.m_invMass;\n      var mB = bB.m_invMass;\n      var iA = bA.m_invI;\n      var iB = bB.m_invI;\n      tMat = bA.m_xf.R;\n      var rAX = this.m_localAnchorA.x - bA.m_sweep.localCenter.x;\n      var rAY = this.m_localAnchorA.y - bA.m_sweep.localCenter.y;\n      tX = (tMat.col1.x * rAX + tMat.col2.x * rAY);\n      rAY = (tMat.col1.y * rAX + tMat.col2.y * rAY);\n      rAX = tX;\n      tMat = bB.m_xf.R;\n      var rBX = this.m_localAnchorB.x - bB.m_sweep.localCenter.x;\n      var rBY = this.m_localAnchorB.y - bB.m_sweep.localCenter.y;\n      tX = (tMat.col1.x * rBX + tMat.col2.x * rBY);\n      rBY = (tMat.col1.y * rBX + tMat.col2.y * rBY);\n      rBX = tX;\n      var maxImpulse = 0; {\n         var Cdot = wB - wA;\n         var impulse = (-this.m_angularMass * Cdot);\n         var oldImpulse = this.m_angularImpulse;\n         maxImpulse = step.dt * this.m_maxTorque;\n         this.m_angularImpulse = b2Math.Clamp(this.m_angularImpulse + impulse, (-maxImpulse), maxImpulse);\n         impulse = this.m_angularImpulse - oldImpulse;\n         wA -= iA * impulse;\n         wB += iB * impulse;\n      } {\n         var CdotX = vB.x - wB * rBY - vA.x + wA * rAY;\n         var CdotY = vB.y + wB * rBX - vA.y - wA * rAX;\n         var impulseV = b2Math.MulMV(this.m_linearMass, new b2Vec2((-CdotX), (-CdotY)));\n         var oldImpulseV = this.m_linearImpulse.Copy();\n         this.m_linearImpulse.Add(impulseV);\n         maxImpulse = step.dt * this.m_maxForce;\n         if (this.m_linearImpulse.LengthSquared() > maxImpulse * maxImpulse) {\n            this.m_linearImpulse.Normalize();\n            this.m_linearImpulse.Multiply(maxImpulse);\n         }\n         impulseV = b2Math.SubtractVV(this.m_linearImpulse, oldImpulseV);\n         vA.x -= mA * impulseV.x;\n         vA.y -= mA * impulseV.y;\n         wA -= iA * (rAX * impulseV.y - rAY * impulseV.x);\n         vB.x += mB * impulseV.x;\n         vB.y += mB * impulseV.y;\n         wB += iB * (rBX * impulseV.y - rBY * impulseV.x);\n      }\n      bA.m_angularVelocity = wA;\n      bB.m_angularVelocity = wB;\n   }\n   b2FrictionJoint.prototype.SolvePositionConstraints = function (baumgarte) {\n      if (baumgarte === undefined) baumgarte = 0;\n      return true;\n   }\n   Box2D.inherit(b2FrictionJointDef, Box2D.Dynamics.Joints.b2JointDef);\n   b2FrictionJointDef.prototype.__super = Box2D.Dynamics.Joints.b2JointDef.prototype;\n   b2FrictionJointDef.b2FrictionJointDef = function () {\n      Box2D.Dynamics.Joints.b2JointDef.b2JointDef.apply(this, arguments);\n      this.localAnchorA = new b2Vec2();\n      this.localAnchorB = new b2Vec2();\n   };\n   b2FrictionJointDef.prototype.b2FrictionJointDef = function () {\n      this.__super.b2JointDef.call(this);\n      this.type = b2Joint.e_frictionJoint;\n      this.maxForce = 0.0;\n      this.maxTorque = 0.0;\n   }\n   b2FrictionJointDef.prototype.Initialize = function (bA, bB, anchor) {\n      this.bodyA = bA;\n      this.bodyB = bB;\n      this.localAnchorA.SetV(this.bodyA.GetLocalPoint(anchor));\n      this.localAnchorB.SetV(this.bodyB.GetLocalPoint(anchor));\n   }\n   Box2D.inherit(b2GearJoint, Box2D.Dynamics.Joints.b2Joint);\n   b2GearJoint.prototype.__super = Box2D.Dynamics.Joints.b2Joint.prototype;\n   b2GearJoint.b2GearJoint = function () {\n      Box2D.Dynamics.Joints.b2Joint.b2Joint.apply(this, arguments);\n      this.m_groundAnchor1 = new b2Vec2();\n      this.m_groundAnchor2 = new b2Vec2();\n      this.m_localAnchor1 = new b2Vec2();\n      this.m_localAnchor2 = new b2Vec2();\n      this.m_J = new b2Jacobian();\n   };\n   b2GearJoint.prototype.GetAnchorA = function () {\n      return this.m_bodyA.GetWorldPoint(this.m_localAnchor1);\n   }\n   b2GearJoint.prototype.GetAnchorB = function () {\n      return this.m_bodyB.GetWorldPoint(this.m_localAnchor2);\n   }\n   b2GearJoint.prototype.GetReactionForce = function (inv_dt) {\n      if (inv_dt === undefined) inv_dt = 0;\n      return new b2Vec2(inv_dt * this.m_impulse * this.m_J.linearB.x, inv_dt * this.m_impulse * this.m_J.linearB.y);\n   }\n   b2GearJoint.prototype.GetReactionTorque = function (inv_dt) {\n      if (inv_dt === undefined) inv_dt = 0;\n      var tMat = this.m_bodyB.m_xf.R;\n      var rX = this.m_localAnchor1.x - this.m_bodyB.m_sweep.localCenter.x;\n      var rY = this.m_localAnchor1.y - this.m_bodyB.m_sweep.localCenter.y;\n      var tX = tMat.col1.x * rX + tMat.col2.x * rY;\n      rY = tMat.col1.y * rX + tMat.col2.y * rY;\n      rX = tX;\n      var PX = this.m_impulse * this.m_J.linearB.x;\n      var PY = this.m_impulse * this.m_J.linearB.y;\n      return inv_dt * (this.m_impulse * this.m_J.angularB - rX * PY + rY * PX);\n   }\n   b2GearJoint.prototype.GetRatio = function () {\n      return this.m_ratio;\n   }\n   b2GearJoint.prototype.SetRatio = function (ratio) {\n      if (ratio === undefined) ratio = 0;\n      this.m_ratio = ratio;\n   }\n   b2GearJoint.prototype.b2GearJoint = function (def) {\n      this.__super.b2Joint.call(this, def);\n      var type1 = parseInt(def.joint1.m_type);\n      var type2 = parseInt(def.joint2.m_type);\n      this.m_revolute1 = null;\n      this.m_prismatic1 = null;\n      this.m_revolute2 = null;\n      this.m_prismatic2 = null;\n      var coordinate1 = 0;\n      var coordinate2 = 0;\n      this.m_ground1 = def.joint1.GetBodyA();\n      this.m_bodyA = def.joint1.GetBodyB();\n      if (type1 == b2Joint.e_revoluteJoint) {\n         this.m_revolute1 = (def.joint1 instanceof b2RevoluteJoint ? def.joint1 : null);\n         this.m_groundAnchor1.SetV(this.m_revolute1.m_localAnchor1);\n         this.m_localAnchor1.SetV(this.m_revolute1.m_localAnchor2);\n         coordinate1 = this.m_revolute1.GetJointAngle();\n      }\n      else {\n         this.m_prismatic1 = (def.joint1 instanceof b2PrismaticJoint ? def.joint1 : null);\n         this.m_groundAnchor1.SetV(this.m_prismatic1.m_localAnchor1);\n         this.m_localAnchor1.SetV(this.m_prismatic1.m_localAnchor2);\n         coordinate1 = this.m_prismatic1.GetJointTranslation();\n      }\n      this.m_ground2 = def.joint2.GetBodyA();\n      this.m_bodyB = def.joint2.GetBodyB();\n      if (type2 == b2Joint.e_revoluteJoint) {\n         this.m_revolute2 = (def.joint2 instanceof b2RevoluteJoint ? def.joint2 : null);\n         this.m_groundAnchor2.SetV(this.m_revolute2.m_localAnchor1);\n         this.m_localAnchor2.SetV(this.m_revolute2.m_localAnchor2);\n         coordinate2 = this.m_revolute2.GetJointAngle();\n      }\n      else {\n         this.m_prismatic2 = (def.joint2 instanceof b2PrismaticJoint ? def.joint2 : null);\n         this.m_groundAnchor2.SetV(this.m_prismatic2.m_localAnchor1);\n         this.m_localAnchor2.SetV(this.m_prismatic2.m_localAnchor2);\n         coordinate2 = this.m_prismatic2.GetJointTranslation();\n      }\n      this.m_ratio = def.ratio;\n      this.m_constant = coordinate1 + this.m_ratio * coordinate2;\n      this.m_impulse = 0.0;\n   }\n   b2GearJoint.prototype.InitVelocityConstraints = function (step) {\n      var g1 = this.m_ground1;\n      var g2 = this.m_ground2;\n      var bA = this.m_bodyA;\n      var bB = this.m_bodyB;\n      var ugX = 0;\n      var ugY = 0;\n      var rX = 0;\n      var rY = 0;\n      var tMat;\n      var tVec;\n      var crug = 0;\n      var tX = 0;\n      var K = 0.0;\n      this.m_J.SetZero();\n      if (this.m_revolute1) {\n         this.m_J.angularA = (-1.0);\n         K += bA.m_invI;\n      }\n      else {\n         tMat = g1.m_xf.R;\n         tVec = this.m_prismatic1.m_localXAxis1;\n         ugX = tMat.col1.x * tVec.x + tMat.col2.x * tVec.y;\n         ugY = tMat.col1.y * tVec.x + tMat.col2.y * tVec.y;\n         tMat = bA.m_xf.R;\n         rX = this.m_localAnchor1.x - bA.m_sweep.localCenter.x;\n         rY = this.m_localAnchor1.y - bA.m_sweep.localCenter.y;\n         tX = tMat.col1.x * rX + tMat.col2.x * rY;\n         rY = tMat.col1.y * rX + tMat.col2.y * rY;\n         rX = tX;\n         crug = rX * ugY - rY * ugX;\n         this.m_J.linearA.Set((-ugX), (-ugY));\n         this.m_J.angularA = (-crug);\n         K += bA.m_invMass + bA.m_invI * crug * crug;\n      }\n      if (this.m_revolute2) {\n         this.m_J.angularB = (-this.m_ratio);\n         K += this.m_ratio * this.m_ratio * bB.m_invI;\n      }\n      else {\n         tMat = g2.m_xf.R;\n         tVec = this.m_prismatic2.m_localXAxis1;\n         ugX = tMat.col1.x * tVec.x + tMat.col2.x * tVec.y;\n         ugY = tMat.col1.y * tVec.x + tMat.col2.y * tVec.y;\n         tMat = bB.m_xf.R;\n         rX = this.m_localAnchor2.x - bB.m_sweep.localCenter.x;\n         rY = this.m_localAnchor2.y - bB.m_sweep.localCenter.y;\n         tX = tMat.col1.x * rX + tMat.col2.x * rY;\n         rY = tMat.col1.y * rX + tMat.col2.y * rY;\n         rX = tX;\n         crug = rX * ugY - rY * ugX;\n         this.m_J.linearB.Set((-this.m_ratio * ugX), (-this.m_ratio * ugY));\n         this.m_J.angularB = (-this.m_ratio * crug);\n         K += this.m_ratio * this.m_ratio * (bB.m_invMass + bB.m_invI * crug * crug);\n      }\n      this.m_mass = K > 0.0 ? 1.0 / K : 0.0;\n      if (step.warmStarting) {\n         bA.m_linearVelocity.x += bA.m_invMass * this.m_impulse * this.m_J.linearA.x;\n         bA.m_linearVelocity.y += bA.m_invMass * this.m_impulse * this.m_J.linearA.y;\n         bA.m_angularVelocity += bA.m_invI * this.m_impulse * this.m_J.angularA;\n         bB.m_linearVelocity.x += bB.m_invMass * this.m_impulse * this.m_J.linearB.x;\n         bB.m_linearVelocity.y += bB.m_invMass * this.m_impulse * this.m_J.linearB.y;\n         bB.m_angularVelocity += bB.m_invI * this.m_impulse * this.m_J.angularB;\n      }\n      else {\n         this.m_impulse = 0.0;\n      }\n   }\n   b2GearJoint.prototype.SolveVelocityConstraints = function (step) {\n      var bA = this.m_bodyA;\n      var bB = this.m_bodyB;\n      var Cdot = this.m_J.Compute(bA.m_linearVelocity, bA.m_angularVelocity, bB.m_linearVelocity, bB.m_angularVelocity);\n      var impulse = (-this.m_mass * Cdot);\n      this.m_impulse += impulse;\n      bA.m_linearVelocity.x += bA.m_invMass * impulse * this.m_J.linearA.x;\n      bA.m_linearVelocity.y += bA.m_invMass * impulse * this.m_J.linearA.y;\n      bA.m_angularVelocity += bA.m_invI * impulse * this.m_J.angularA;\n      bB.m_linearVelocity.x += bB.m_invMass * impulse * this.m_J.linearB.x;\n      bB.m_linearVelocity.y += bB.m_invMass * impulse * this.m_J.linearB.y;\n      bB.m_angularVelocity += bB.m_invI * impulse * this.m_J.angularB;\n   }\n   b2GearJoint.prototype.SolvePositionConstraints = function (baumgarte) {\n      if (baumgarte === undefined) baumgarte = 0;\n      var linearError = 0.0;\n      var bA = this.m_bodyA;\n      var bB = this.m_bodyB;\n      var coordinate1 = 0;\n      var coordinate2 = 0;\n      if (this.m_revolute1) {\n         coordinate1 = this.m_revolute1.GetJointAngle();\n      }\n      else {\n         coordinate1 = this.m_prismatic1.GetJointTranslation();\n      }\n      if (this.m_revolute2) {\n         coordinate2 = this.m_revolute2.GetJointAngle();\n      }\n      else {\n         coordinate2 = this.m_prismatic2.GetJointTranslation();\n      }\n      var C = this.m_constant - (coordinate1 + this.m_ratio * coordinate2);\n      var impulse = (-this.m_mass * C);\n      bA.m_sweep.c.x += bA.m_invMass * impulse * this.m_J.linearA.x;\n      bA.m_sweep.c.y += bA.m_invMass * impulse * this.m_J.linearA.y;\n      bA.m_sweep.a += bA.m_invI * impulse * this.m_J.angularA;\n      bB.m_sweep.c.x += bB.m_invMass * impulse * this.m_J.linearB.x;\n      bB.m_sweep.c.y += bB.m_invMass * impulse * this.m_J.linearB.y;\n      bB.m_sweep.a += bB.m_invI * impulse * this.m_J.angularB;\n      bA.SynchronizeTransform();\n      bB.SynchronizeTransform();\n      return linearError < b2Settings.b2_linearSlop;\n   }\n   Box2D.inherit(b2GearJointDef, Box2D.Dynamics.Joints.b2JointDef);\n   b2GearJointDef.prototype.__super = Box2D.Dynamics.Joints.b2JointDef.prototype;\n   b2GearJointDef.b2GearJointDef = function () {\n      Box2D.Dynamics.Joints.b2JointDef.b2JointDef.apply(this, arguments);\n   };\n   b2GearJointDef.prototype.b2GearJointDef = function () {\n      this.__super.b2JointDef.call(this);\n      this.type = b2Joint.e_gearJoint;\n      this.joint1 = null;\n      this.joint2 = null;\n      this.ratio = 1.0;\n   }\n   b2Jacobian.b2Jacobian = function () {\n      this.linearA = new b2Vec2();\n      this.linearB = new b2Vec2();\n   };\n   b2Jacobian.prototype.SetZero = function () {\n      this.linearA.SetZero();\n      this.angularA = 0.0;\n      this.linearB.SetZero();\n      this.angularB = 0.0;\n   }\n   b2Jacobian.prototype.Set = function (x1, a1, x2, a2) {\n      if (a1 === undefined) a1 = 0;\n      if (a2 === undefined) a2 = 0;\n      this.linearA.SetV(x1);\n      this.angularA = a1;\n      this.linearB.SetV(x2);\n      this.angularB = a2;\n   }\n   b2Jacobian.prototype.Compute = function (x1, a1, x2, a2) {\n      if (a1 === undefined) a1 = 0;\n      if (a2 === undefined) a2 = 0;\n      return (this.linearA.x * x1.x + this.linearA.y * x1.y) + this.angularA * a1 + (this.linearB.x * x2.x + this.linearB.y * x2.y) + this.angularB * a2;\n   }\n   b2Joint.b2Joint = function () {\n      this.m_edgeA = new b2JointEdge();\n      this.m_edgeB = new b2JointEdge();\n      this.m_localCenterA = new b2Vec2();\n      this.m_localCenterB = new b2Vec2();\n   };\n   b2Joint.prototype.GetType = function () {\n      return this.m_type;\n   }\n   b2Joint.prototype.GetAnchorA = function () {\n      return null;\n   }\n   b2Joint.prototype.GetAnchorB = function () {\n      return null;\n   }\n   b2Joint.prototype.GetReactionForce = function (inv_dt) {\n      if (inv_dt === undefined) inv_dt = 0;\n      return null;\n   }\n   b2Joint.prototype.GetReactionTorque = function (inv_dt) {\n      if (inv_dt === undefined) inv_dt = 0;\n      return 0.0;\n   }\n   b2Joint.prototype.GetBodyA = function () {\n      return this.m_bodyA;\n   }\n   b2Joint.prototype.GetBodyB = function () {\n      return this.m_bodyB;\n   }\n   b2Joint.prototype.GetNext = function () {\n      return this.m_next;\n   }\n   b2Joint.prototype.GetUserData = function () {\n      return this.m_userData;\n   }\n   b2Joint.prototype.SetUserData = function (data) {\n      this.m_userData = data;\n   }\n   b2Joint.prototype.IsActive = function () {\n      return this.m_bodyA.IsActive() && this.m_bodyB.IsActive();\n   }\n   b2Joint.Create = function (def, allocator) {\n      var joint = null;\n      switch (def.type) {\n      case b2Joint.e_distanceJoint:\n         {\n            joint = new b2DistanceJoint((def instanceof b2DistanceJointDef ? def : null));\n         }\n         break;\n      case b2Joint.e_mouseJoint:\n         {\n            joint = new b2MouseJoint((def instanceof b2MouseJointDef ? def : null));\n         }\n         break;\n      case b2Joint.e_prismaticJoint:\n         {\n            joint = new b2PrismaticJoint((def instanceof b2PrismaticJointDef ? def : null));\n         }\n         break;\n      case b2Joint.e_revoluteJoint:\n         {\n            joint = new b2RevoluteJoint((def instanceof b2RevoluteJointDef ? def : null));\n         }\n         break;\n      case b2Joint.e_pulleyJoint:\n         {\n            joint = new b2PulleyJoint((def instanceof b2PulleyJointDef ? def : null));\n         }\n         break;\n      case b2Joint.e_gearJoint:\n         {\n            joint = new b2GearJoint((def instanceof b2GearJointDef ? def : null));\n         }\n         break;\n      case b2Joint.e_lineJoint:\n         {\n            joint = new b2LineJoint((def instanceof b2LineJointDef ? def : null));\n         }\n         break;\n      case b2Joint.e_weldJoint:\n         {\n            joint = new b2WeldJoint((def instanceof b2WeldJointDef ? def : null));\n         }\n         break;\n      case b2Joint.e_frictionJoint:\n         {\n            joint = new b2FrictionJoint((def instanceof b2FrictionJointDef ? def : null));\n         }\n         break;\n      default:\n         break;\n      }\n      return joint;\n   }\n   b2Joint.Destroy = function (joint, allocator) {}\n   b2Joint.prototype.b2Joint = function (def) {\n      b2Settings.b2Assert(def.bodyA != def.bodyB);\n      this.m_type = def.type;\n      this.m_prev = null;\n      this.m_next = null;\n      this.m_bodyA = def.bodyA;\n      this.m_bodyB = def.bodyB;\n      this.m_collideConnected = def.collideConnected;\n      this.m_islandFlag = false;\n      this.m_userData = def.userData;\n   }\n   b2Joint.prototype.InitVelocityConstraints = function (step) {}\n   b2Joint.prototype.SolveVelocityConstraints = function (step) {}\n   b2Joint.prototype.FinalizeVelocityConstraints = function () {}\n   b2Joint.prototype.SolvePositionConstraints = function (baumgarte) {\n      if (baumgarte === undefined) baumgarte = 0;\n      return false;\n   }\n   Box2D.postDefs.push(function () {\n      Box2D.Dynamics.Joints.b2Joint.e_unknownJoint = 0;\n      Box2D.Dynamics.Joints.b2Joint.e_revoluteJoint = 1;\n      Box2D.Dynamics.Joints.b2Joint.e_prismaticJoint = 2;\n      Box2D.Dynamics.Joints.b2Joint.e_distanceJoint = 3;\n      Box2D.Dynamics.Joints.b2Joint.e_pulleyJoint = 4;\n      Box2D.Dynamics.Joints.b2Joint.e_mouseJoint = 5;\n      Box2D.Dynamics.Joints.b2Joint.e_gearJoint = 6;\n      Box2D.Dynamics.Joints.b2Joint.e_lineJoint = 7;\n      Box2D.Dynamics.Joints.b2Joint.e_weldJoint = 8;\n      Box2D.Dynamics.Joints.b2Joint.e_frictionJoint = 9;\n      Box2D.Dynamics.Joints.b2Joint.e_inactiveLimit = 0;\n      Box2D.Dynamics.Joints.b2Joint.e_atLowerLimit = 1;\n      Box2D.Dynamics.Joints.b2Joint.e_atUpperLimit = 2;\n      Box2D.Dynamics.Joints.b2Joint.e_equalLimits = 3;\n   });\n   b2JointDef.b2JointDef = function () {};\n   b2JointDef.prototype.b2JointDef = function () {\n      this.type = b2Joint.e_unknownJoint;\n      this.userData = null;\n      this.bodyA = null;\n      this.bodyB = null;\n      this.collideConnected = false;\n   }\n   b2JointEdge.b2JointEdge = function () {};\n   Box2D.inherit(b2LineJoint, Box2D.Dynamics.Joints.b2Joint);\n   b2LineJoint.prototype.__super = Box2D.Dynamics.Joints.b2Joint.prototype;\n   b2LineJoint.b2LineJoint = function () {\n      Box2D.Dynamics.Joints.b2Joint.b2Joint.apply(this, arguments);\n      this.m_localAnchor1 = new b2Vec2();\n      this.m_localAnchor2 = new b2Vec2();\n      this.m_localXAxis1 = new b2Vec2();\n      this.m_localYAxis1 = new b2Vec2();\n      this.m_axis = new b2Vec2();\n      this.m_perp = new b2Vec2();\n      this.m_K = new b2Mat22();\n      this.m_impulse = new b2Vec2();\n   };\n   b2LineJoint.prototype.GetAnchorA = function () {\n      return this.m_bodyA.GetWorldPoint(this.m_localAnchor1);\n   }\n   b2LineJoint.prototype.GetAnchorB = function () {\n      return this.m_bodyB.GetWorldPoint(this.m_localAnchor2);\n   }\n   b2LineJoint.prototype.GetReactionForce = function (inv_dt) {\n      if (inv_dt === undefined) inv_dt = 0;\n      return new b2Vec2(inv_dt * (this.m_impulse.x * this.m_perp.x + (this.m_motorImpulse + this.m_impulse.y) * this.m_axis.x), inv_dt * (this.m_impulse.x * this.m_perp.y + (this.m_motorImpulse + this.m_impulse.y) * this.m_axis.y));\n   }\n   b2LineJoint.prototype.GetReactionTorque = function (inv_dt) {\n      if (inv_dt === undefined) inv_dt = 0;\n      return inv_dt * this.m_impulse.y;\n   }\n   b2LineJoint.prototype.GetJointTranslation = function () {\n      var bA = this.m_bodyA;\n      var bB = this.m_bodyB;\n      var tMat;\n      var p1 = bA.GetWorldPoint(this.m_localAnchor1);\n      var p2 = bB.GetWorldPoint(this.m_localAnchor2);\n      var dX = p2.x - p1.x;\n      var dY = p2.y - p1.y;\n      var axis = bA.GetWorldVector(this.m_localXAxis1);\n      var translation = axis.x * dX + axis.y * dY;\n      return translation;\n   }\n   b2LineJoint.prototype.GetJointSpeed = function () {\n      var bA = this.m_bodyA;\n      var bB = this.m_bodyB;\n      var tMat;\n      tMat = bA.m_xf.R;\n      var r1X = this.m_localAnchor1.x - bA.m_sweep.localCenter.x;\n      var r1Y = this.m_localAnchor1.y - bA.m_sweep.localCenter.y;\n      var tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y);\n      r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y);\n      r1X = tX;\n      tMat = bB.m_xf.R;\n      var r2X = this.m_localAnchor2.x - bB.m_sweep.localCenter.x;\n      var r2Y = this.m_localAnchor2.y - bB.m_sweep.localCenter.y;\n      tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y);\n      r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y);\n      r2X = tX;\n      var p1X = bA.m_sweep.c.x + r1X;\n      var p1Y = bA.m_sweep.c.y + r1Y;\n      var p2X = bB.m_sweep.c.x + r2X;\n      var p2Y = bB.m_sweep.c.y + r2Y;\n      var dX = p2X - p1X;\n      var dY = p2Y - p1Y;\n      var axis = bA.GetWorldVector(this.m_localXAxis1);\n      var v1 = bA.m_linearVelocity;\n      var v2 = bB.m_linearVelocity;\n      var w1 = bA.m_angularVelocity;\n      var w2 = bB.m_angularVelocity;\n      var speed = (dX * ((-w1 * axis.y)) + dY * (w1 * axis.x)) + (axis.x * (((v2.x + ((-w2 * r2Y))) - v1.x) - ((-w1 * r1Y))) + axis.y * (((v2.y + (w2 * r2X)) - v1.y) - (w1 * r1X)));\n      return speed;\n   }\n   b2LineJoint.prototype.IsLimitEnabled = function () {\n      return this.m_enableLimit;\n   }\n   b2LineJoint.prototype.EnableLimit = function (flag) {\n      this.m_bodyA.SetAwake(true);\n      this.m_bodyB.SetAwake(true);\n      this.m_enableLimit = flag;\n   }\n   b2LineJoint.prototype.GetLowerLimit = function () {\n      return this.m_lowerTranslation;\n   }\n   b2LineJoint.prototype.GetUpperLimit = function () {\n      return this.m_upperTranslation;\n   }\n   b2LineJoint.prototype.SetLimits = function (lower, upper) {\n      if (lower === undefined) lower = 0;\n      if (upper === undefined) upper = 0;\n      this.m_bodyA.SetAwake(true);\n      this.m_bodyB.SetAwake(true);\n      this.m_lowerTranslation = lower;\n      this.m_upperTranslation = upper;\n   }\n   b2LineJoint.prototype.IsMotorEnabled = function () {\n      return this.m_enableMotor;\n   }\n   b2LineJoint.prototype.EnableMotor = function (flag) {\n      this.m_bodyA.SetAwake(true);\n      this.m_bodyB.SetAwake(true);\n      this.m_enableMotor = flag;\n   }\n   b2LineJoint.prototype.SetMotorSpeed = function (speed) {\n      if (speed === undefined) speed = 0;\n      this.m_bodyA.SetAwake(true);\n      this.m_bodyB.SetAwake(true);\n      this.m_motorSpeed = speed;\n   }\n   b2LineJoint.prototype.GetMotorSpeed = function () {\n      return this.m_motorSpeed;\n   }\n   b2LineJoint.prototype.SetMaxMotorForce = function (force) {\n      if (force === undefined) force = 0;\n      this.m_bodyA.SetAwake(true);\n      this.m_bodyB.SetAwake(true);\n      this.m_maxMotorForce = force;\n   }\n   b2LineJoint.prototype.GetMaxMotorForce = function () {\n      return this.m_maxMotorForce;\n   }\n   b2LineJoint.prototype.GetMotorForce = function () {\n      return this.m_motorImpulse;\n   }\n   b2LineJoint.prototype.b2LineJoint = function (def) {\n      this.__super.b2Joint.call(this, def);\n      var tMat;\n      var tX = 0;\n      var tY = 0;\n      this.m_localAnchor1.SetV(def.localAnchorA);\n      this.m_localAnchor2.SetV(def.localAnchorB);\n      this.m_localXAxis1.SetV(def.localAxisA);\n      this.m_localYAxis1.x = (-this.m_localXAxis1.y);\n      this.m_localYAxis1.y = this.m_localXAxis1.x;\n      this.m_impulse.SetZero();\n      this.m_motorMass = 0.0;\n      this.m_motorImpulse = 0.0;\n      this.m_lowerTranslation = def.lowerTranslation;\n      this.m_upperTranslation = def.upperTranslation;\n      this.m_maxMotorForce = def.maxMotorForce;\n      this.m_motorSpeed = def.motorSpeed;\n      this.m_enableLimit = def.enableLimit;\n      this.m_enableMotor = def.enableMotor;\n      this.m_limitState = b2Joint.e_inactiveLimit;\n      this.m_axis.SetZero();\n      this.m_perp.SetZero();\n   }\n   b2LineJoint.prototype.InitVelocityConstraints = function (step) {\n      var bA = this.m_bodyA;\n      var bB = this.m_bodyB;\n      var tMat;\n      var tX = 0;\n      this.m_localCenterA.SetV(bA.GetLocalCenter());\n      this.m_localCenterB.SetV(bB.GetLocalCenter());\n      var xf1 = bA.GetTransform();\n      var xf2 = bB.GetTransform();\n      tMat = bA.m_xf.R;\n      var r1X = this.m_localAnchor1.x - this.m_localCenterA.x;\n      var r1Y = this.m_localAnchor1.y - this.m_localCenterA.y;\n      tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y);\n      r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y);\n      r1X = tX;\n      tMat = bB.m_xf.R;\n      var r2X = this.m_localAnchor2.x - this.m_localCenterB.x;\n      var r2Y = this.m_localAnchor2.y - this.m_localCenterB.y;\n      tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y);\n      r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y);\n      r2X = tX;\n      var dX = bB.m_sweep.c.x + r2X - bA.m_sweep.c.x - r1X;\n      var dY = bB.m_sweep.c.y + r2Y - bA.m_sweep.c.y - r1Y;\n      this.m_invMassA = bA.m_invMass;\n      this.m_invMassB = bB.m_invMass;\n      this.m_invIA = bA.m_invI;\n      this.m_invIB = bB.m_invI; {\n         this.m_axis.SetV(b2Math.MulMV(xf1.R, this.m_localXAxis1));\n         this.m_a1 = (dX + r1X) * this.m_axis.y - (dY + r1Y) * this.m_axis.x;\n         this.m_a2 = r2X * this.m_axis.y - r2Y * this.m_axis.x;\n         this.m_motorMass = this.m_invMassA + this.m_invMassB + this.m_invIA * this.m_a1 * this.m_a1 + this.m_invIB * this.m_a2 * this.m_a2;\n         this.m_motorMass = this.m_motorMass > Number.MIN_VALUE ? 1.0 / this.m_motorMass : 0.0;\n      } {\n         this.m_perp.SetV(b2Math.MulMV(xf1.R, this.m_localYAxis1));\n         this.m_s1 = (dX + r1X) * this.m_perp.y - (dY + r1Y) * this.m_perp.x;\n         this.m_s2 = r2X * this.m_perp.y - r2Y * this.m_perp.x;\n         var m1 = this.m_invMassA;\n         var m2 = this.m_invMassB;\n         var i1 = this.m_invIA;\n         var i2 = this.m_invIB;\n         this.m_K.col1.x = m1 + m2 + i1 * this.m_s1 * this.m_s1 + i2 * this.m_s2 * this.m_s2;\n         this.m_K.col1.y = i1 * this.m_s1 * this.m_a1 + i2 * this.m_s2 * this.m_a2;\n         this.m_K.col2.x = this.m_K.col1.y;\n         this.m_K.col2.y = m1 + m2 + i1 * this.m_a1 * this.m_a1 + i2 * this.m_a2 * this.m_a2;\n      }\n      if (this.m_enableLimit) {\n         var jointTransition = this.m_axis.x * dX + this.m_axis.y * dY;\n         if (b2Math.Abs(this.m_upperTranslation - this.m_lowerTranslation) < 2.0 * b2Settings.b2_linearSlop) {\n            this.m_limitState = b2Joint.e_equalLimits;\n         }\n         else if (jointTransition <= this.m_lowerTranslation) {\n            if (this.m_limitState != b2Joint.e_atLowerLimit) {\n               this.m_limitState = b2Joint.e_atLowerLimit;\n               this.m_impulse.y = 0.0;\n            }\n         }\n         else if (jointTransition >= this.m_upperTranslation) {\n            if (this.m_limitState != b2Joint.e_atUpperLimit) {\n               this.m_limitState = b2Joint.e_atUpperLimit;\n               this.m_impulse.y = 0.0;\n            }\n         }\n         else {\n            this.m_limitState = b2Joint.e_inactiveLimit;\n            this.m_impulse.y = 0.0;\n         }\n      }\n      else {\n         this.m_limitState = b2Joint.e_inactiveLimit;\n      }\n      if (this.m_enableMotor == false) {\n         this.m_motorImpulse = 0.0;\n      }\n      if (step.warmStarting) {\n         this.m_impulse.x *= step.dtRatio;\n         this.m_impulse.y *= step.dtRatio;\n         this.m_motorImpulse *= step.dtRatio;\n         var PX = this.m_impulse.x * this.m_perp.x + (this.m_motorImpulse + this.m_impulse.y) * this.m_axis.x;\n         var PY = this.m_impulse.x * this.m_perp.y + (this.m_motorImpulse + this.m_impulse.y) * this.m_axis.y;\n         var L1 = this.m_impulse.x * this.m_s1 + (this.m_motorImpulse + this.m_impulse.y) * this.m_a1;\n         var L2 = this.m_impulse.x * this.m_s2 + (this.m_motorImpulse + this.m_impulse.y) * this.m_a2;\n         bA.m_linearVelocity.x -= this.m_invMassA * PX;\n         bA.m_linearVelocity.y -= this.m_invMassA * PY;\n         bA.m_angularVelocity -= this.m_invIA * L1;\n         bB.m_linearVelocity.x += this.m_invMassB * PX;\n         bB.m_linearVelocity.y += this.m_invMassB * PY;\n         bB.m_angularVelocity += this.m_invIB * L2;\n      }\n      else {\n         this.m_impulse.SetZero();\n         this.m_motorImpulse = 0.0;\n      }\n   }\n   b2LineJoint.prototype.SolveVelocityConstraints = function (step) {\n      var bA = this.m_bodyA;\n      var bB = this.m_bodyB;\n      var v1 = bA.m_linearVelocity;\n      var w1 = bA.m_angularVelocity;\n      var v2 = bB.m_linearVelocity;\n      var w2 = bB.m_angularVelocity;\n      var PX = 0;\n      var PY = 0;\n      var L1 = 0;\n      var L2 = 0;\n      if (this.m_enableMotor && this.m_limitState != b2Joint.e_equalLimits) {\n         var Cdot = this.m_axis.x * (v2.x - v1.x) + this.m_axis.y * (v2.y - v1.y) + this.m_a2 * w2 - this.m_a1 * w1;\n         var impulse = this.m_motorMass * (this.m_motorSpeed - Cdot);\n         var oldImpulse = this.m_motorImpulse;\n         var maxImpulse = step.dt * this.m_maxMotorForce;\n         this.m_motorImpulse = b2Math.Clamp(this.m_motorImpulse + impulse, (-maxImpulse), maxImpulse);\n         impulse = this.m_motorImpulse - oldImpulse;\n         PX = impulse * this.m_axis.x;\n         PY = impulse * this.m_axis.y;\n         L1 = impulse * this.m_a1;\n         L2 = impulse * this.m_a2;\n         v1.x -= this.m_invMassA * PX;\n         v1.y -= this.m_invMassA * PY;\n         w1 -= this.m_invIA * L1;\n         v2.x += this.m_invMassB * PX;\n         v2.y += this.m_invMassB * PY;\n         w2 += this.m_invIB * L2;\n      }\n      var Cdot1 = this.m_perp.x * (v2.x - v1.x) + this.m_perp.y * (v2.y - v1.y) + this.m_s2 * w2 - this.m_s1 * w1;\n      if (this.m_enableLimit && this.m_limitState != b2Joint.e_inactiveLimit) {\n         var Cdot2 = this.m_axis.x * (v2.x - v1.x) + this.m_axis.y * (v2.y - v1.y) + this.m_a2 * w2 - this.m_a1 * w1;\n         var f1 = this.m_impulse.Copy();\n         var df = this.m_K.Solve(new b2Vec2(), (-Cdot1), (-Cdot2));\n         this.m_impulse.Add(df);\n         if (this.m_limitState == b2Joint.e_atLowerLimit) {\n            this.m_impulse.y = b2Math.Max(this.m_impulse.y, 0.0);\n         }\n         else if (this.m_limitState == b2Joint.e_atUpperLimit) {\n            this.m_impulse.y = b2Math.Min(this.m_impulse.y, 0.0);\n         }\n         var b = (-Cdot1) - (this.m_impulse.y - f1.y) * this.m_K.col2.x;\n         var f2r = 0;\n         if (this.m_K.col1.x != 0.0) {\n            f2r = b / this.m_K.col1.x + f1.x;\n         }\n         else {\n            f2r = f1.x;\n         }\n         this.m_impulse.x = f2r;\n         df.x = this.m_impulse.x - f1.x;\n         df.y = this.m_impulse.y - f1.y;\n         PX = df.x * this.m_perp.x + df.y * this.m_axis.x;\n         PY = df.x * this.m_perp.y + df.y * this.m_axis.y;\n         L1 = df.x * this.m_s1 + df.y * this.m_a1;\n         L2 = df.x * this.m_s2 + df.y * this.m_a2;\n         v1.x -= this.m_invMassA * PX;\n         v1.y -= this.m_invMassA * PY;\n         w1 -= this.m_invIA * L1;\n         v2.x += this.m_invMassB * PX;\n         v2.y += this.m_invMassB * PY;\n         w2 += this.m_invIB * L2;\n      }\n      else {\n         var df2 = 0;\n         if (this.m_K.col1.x != 0.0) {\n            df2 = ((-Cdot1)) / this.m_K.col1.x;\n         }\n         else {\n            df2 = 0.0;\n         }\n         this.m_impulse.x += df2;\n         PX = df2 * this.m_perp.x;\n         PY = df2 * this.m_perp.y;\n         L1 = df2 * this.m_s1;\n         L2 = df2 * this.m_s2;\n         v1.x -= this.m_invMassA * PX;\n         v1.y -= this.m_invMassA * PY;\n         w1 -= this.m_invIA * L1;\n         v2.x += this.m_invMassB * PX;\n         v2.y += this.m_invMassB * PY;\n         w2 += this.m_invIB * L2;\n      }\n      bA.m_linearVelocity.SetV(v1);\n      bA.m_angularVelocity = w1;\n      bB.m_linearVelocity.SetV(v2);\n      bB.m_angularVelocity = w2;\n   }\n   b2LineJoint.prototype.SolvePositionConstraints = function (baumgarte) {\n      if (baumgarte === undefined) baumgarte = 0;\n      var limitC = 0;\n      var oldLimitImpulse = 0;\n      var bA = this.m_bodyA;\n      var bB = this.m_bodyB;\n      var c1 = bA.m_sweep.c;\n      var a1 = bA.m_sweep.a;\n      var c2 = bB.m_sweep.c;\n      var a2 = bB.m_sweep.a;\n      var tMat;\n      var tX = 0;\n      var m1 = 0;\n      var m2 = 0;\n      var i1 = 0;\n      var i2 = 0;\n      var linearError = 0.0;\n      var angularError = 0.0;\n      var active = false;\n      var C2 = 0.0;\n      var R1 = b2Mat22.FromAngle(a1);\n      var R2 = b2Mat22.FromAngle(a2);\n      tMat = R1;\n      var r1X = this.m_localAnchor1.x - this.m_localCenterA.x;\n      var r1Y = this.m_localAnchor1.y - this.m_localCenterA.y;\n      tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y);\n      r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y);\n      r1X = tX;\n      tMat = R2;\n      var r2X = this.m_localAnchor2.x - this.m_localCenterB.x;\n      var r2Y = this.m_localAnchor2.y - this.m_localCenterB.y;\n      tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y);\n      r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y);\n      r2X = tX;\n      var dX = c2.x + r2X - c1.x - r1X;\n      var dY = c2.y + r2Y - c1.y - r1Y;\n      if (this.m_enableLimit) {\n         this.m_axis = b2Math.MulMV(R1, this.m_localXAxis1);\n         this.m_a1 = (dX + r1X) * this.m_axis.y - (dY + r1Y) * this.m_axis.x;\n         this.m_a2 = r2X * this.m_axis.y - r2Y * this.m_axis.x;\n         var translation = this.m_axis.x * dX + this.m_axis.y * dY;\n         if (b2Math.Abs(this.m_upperTranslation - this.m_lowerTranslation) < 2.0 * b2Settings.b2_linearSlop) {\n            C2 = b2Math.Clamp(translation, (-b2Settings.b2_maxLinearCorrection), b2Settings.b2_maxLinearCorrection);\n            linearError = b2Math.Abs(translation);\n            active = true;\n         }\n         else if (translation <= this.m_lowerTranslation) {\n            C2 = b2Math.Clamp(translation - this.m_lowerTranslation + b2Settings.b2_linearSlop, (-b2Settings.b2_maxLinearCorrection), 0.0);\n            linearError = this.m_lowerTranslation - translation;\n            active = true;\n         }\n         else if (translation >= this.m_upperTranslation) {\n            C2 = b2Math.Clamp(translation - this.m_upperTranslation + b2Settings.b2_linearSlop, 0.0, b2Settings.b2_maxLinearCorrection);\n            linearError = translation - this.m_upperTranslation;\n            active = true;\n         }\n      }\n      this.m_perp = b2Math.MulMV(R1, this.m_localYAxis1);\n      this.m_s1 = (dX + r1X) * this.m_perp.y - (dY + r1Y) * this.m_perp.x;\n      this.m_s2 = r2X * this.m_perp.y - r2Y * this.m_perp.x;\n      var impulse = new b2Vec2();\n      var C1 = this.m_perp.x * dX + this.m_perp.y * dY;\n      linearError = b2Math.Max(linearError, b2Math.Abs(C1));\n      angularError = 0.0;\n      if (active) {\n         m1 = this.m_invMassA;\n         m2 = this.m_invMassB;\n         i1 = this.m_invIA;\n         i2 = this.m_invIB;\n         this.m_K.col1.x = m1 + m2 + i1 * this.m_s1 * this.m_s1 + i2 * this.m_s2 * this.m_s2;\n         this.m_K.col1.y = i1 * this.m_s1 * this.m_a1 + i2 * this.m_s2 * this.m_a2;\n         this.m_K.col2.x = this.m_K.col1.y;\n         this.m_K.col2.y = m1 + m2 + i1 * this.m_a1 * this.m_a1 + i2 * this.m_a2 * this.m_a2;\n         this.m_K.Solve(impulse, (-C1), (-C2));\n      }\n      else {\n         m1 = this.m_invMassA;\n         m2 = this.m_invMassB;\n         i1 = this.m_invIA;\n         i2 = this.m_invIB;\n         var k11 = m1 + m2 + i1 * this.m_s1 * this.m_s1 + i2 * this.m_s2 * this.m_s2;\n         var impulse1 = 0;\n         if (k11 != 0.0) {\n            impulse1 = ((-C1)) / k11;\n         }\n         else {\n            impulse1 = 0.0;\n         }\n         impulse.x = impulse1;\n         impulse.y = 0.0;\n      }\n      var PX = impulse.x * this.m_perp.x + impulse.y * this.m_axis.x;\n      var PY = impulse.x * this.m_perp.y + impulse.y * this.m_axis.y;\n      var L1 = impulse.x * this.m_s1 + impulse.y * this.m_a1;\n      var L2 = impulse.x * this.m_s2 + impulse.y * this.m_a2;\n      c1.x -= this.m_invMassA * PX;\n      c1.y -= this.m_invMassA * PY;\n      a1 -= this.m_invIA * L1;\n      c2.x += this.m_invMassB * PX;\n      c2.y += this.m_invMassB * PY;\n      a2 += this.m_invIB * L2;\n      bA.m_sweep.a = a1;\n      bB.m_sweep.a = a2;\n      bA.SynchronizeTransform();\n      bB.SynchronizeTransform();\n      return linearError <= b2Settings.b2_linearSlop && angularError <= b2Settings.b2_angularSlop;\n   }\n   Box2D.inherit(b2LineJointDef, Box2D.Dynamics.Joints.b2JointDef);\n   b2LineJointDef.prototype.__super = Box2D.Dynamics.Joints.b2JointDef.prototype;\n   b2LineJointDef.b2LineJointDef = function () {\n      Box2D.Dynamics.Joints.b2JointDef.b2JointDef.apply(this, arguments);\n      this.localAnchorA = new b2Vec2();\n      this.localAnchorB = new b2Vec2();\n      this.localAxisA = new b2Vec2();\n   };\n   b2LineJointDef.prototype.b2LineJointDef = function () {\n      this.__super.b2JointDef.call(this);\n      this.type = b2Joint.e_lineJoint;\n      this.localAxisA.Set(1.0, 0.0);\n      this.enableLimit = false;\n      this.lowerTranslation = 0.0;\n      this.upperTranslation = 0.0;\n      this.enableMotor = false;\n      this.maxMotorForce = 0.0;\n      this.motorSpeed = 0.0;\n   }\n   b2LineJointDef.prototype.Initialize = function (bA, bB, anchor, axis) {\n      this.bodyA = bA;\n      this.bodyB = bB;\n      this.localAnchorA = this.bodyA.GetLocalPoint(anchor);\n      this.localAnchorB = this.bodyB.GetLocalPoint(anchor);\n      this.localAxisA = this.bodyA.GetLocalVector(axis);\n   }\n   Box2D.inherit(b2MouseJoint, Box2D.Dynamics.Joints.b2Joint);\n   b2MouseJoint.prototype.__super = Box2D.Dynamics.Joints.b2Joint.prototype;\n   b2MouseJoint.b2MouseJoint = function () {\n      Box2D.Dynamics.Joints.b2Joint.b2Joint.apply(this, arguments);\n      this.K = new b2Mat22();\n      this.K1 = new b2Mat22();\n      this.K2 = new b2Mat22();\n      this.m_localAnchor = new b2Vec2();\n      this.m_target = new b2Vec2();\n      this.m_impulse = new b2Vec2();\n      this.m_mass = new b2Mat22();\n      this.m_C = new b2Vec2();\n   };\n   b2MouseJoint.prototype.GetAnchorA = function () {\n      return this.m_target;\n   }\n   b2MouseJoint.prototype.GetAnchorB = function () {\n      return this.m_bodyB.GetWorldPoint(this.m_localAnchor);\n   }\n   b2MouseJoint.prototype.GetReactionForce = function (inv_dt) {\n      if (inv_dt === undefined) inv_dt = 0;\n      return new b2Vec2(inv_dt * this.m_impulse.x, inv_dt * this.m_impulse.y);\n   }\n   b2MouseJoint.prototype.GetReactionTorque = function (inv_dt) {\n      if (inv_dt === undefined) inv_dt = 0;\n      return 0.0;\n   }\n   b2MouseJoint.prototype.GetTarget = function () {\n      return this.m_target;\n   }\n   b2MouseJoint.prototype.SetTarget = function (target) {\n      if (this.m_bodyB.IsAwake() == false) {\n         this.m_bodyB.SetAwake(true);\n      }\n      this.m_target = target;\n   }\n   b2MouseJoint.prototype.GetMaxForce = function () {\n      return this.m_maxForce;\n   }\n   b2MouseJoint.prototype.SetMaxForce = function (maxForce) {\n      if (maxForce === undefined) maxForce = 0;\n      this.m_maxForce = maxForce;\n   }\n   b2MouseJoint.prototype.GetFrequency = function () {\n      return this.m_frequencyHz;\n   }\n   b2MouseJoint.prototype.SetFrequency = function (hz) {\n      if (hz === undefined) hz = 0;\n      this.m_frequencyHz = hz;\n   }\n   b2MouseJoint.prototype.GetDampingRatio = function () {\n      return this.m_dampingRatio;\n   }\n   b2MouseJoint.prototype.SetDampingRatio = function (ratio) {\n      if (ratio === undefined) ratio = 0;\n      this.m_dampingRatio = ratio;\n   }\n   b2MouseJoint.prototype.b2MouseJoint = function (def) {\n      this.__super.b2Joint.call(this, def);\n      this.m_target.SetV(def.target);\n      var tX = this.m_target.x - this.m_bodyB.m_xf.position.x;\n      var tY = this.m_target.y - this.m_bodyB.m_xf.position.y;\n      var tMat = this.m_bodyB.m_xf.R;\n      this.m_localAnchor.x = (tX * tMat.col1.x + tY * tMat.col1.y);\n      this.m_localAnchor.y = (tX * tMat.col2.x + tY * tMat.col2.y);\n      this.m_maxForce = def.maxForce;\n      this.m_impulse.SetZero();\n      this.m_frequencyHz = def.frequencyHz;\n      this.m_dampingRatio = def.dampingRatio;\n      this.m_beta = 0.0;\n      this.m_gamma = 0.0;\n   }\n   b2MouseJoint.prototype.InitVelocityConstraints = function (step) {\n      var b = this.m_bodyB;\n      var mass = b.GetMass();\n      var omega = 2.0 * Math.PI * this.m_frequencyHz;\n      var d = 2.0 * mass * this.m_dampingRatio * omega;\n      var k = mass * omega * omega;\n      this.m_gamma = step.dt * (d + step.dt * k);\n      this.m_gamma = this.m_gamma != 0 ? 1 / this.m_gamma : 0.0;\n      this.m_beta = step.dt * k * this.m_gamma;\n      var tMat;tMat = b.m_xf.R;\n      var rX = this.m_localAnchor.x - b.m_sweep.localCenter.x;\n      var rY = this.m_localAnchor.y - b.m_sweep.localCenter.y;\n      var tX = (tMat.col1.x * rX + tMat.col2.x * rY);rY = (tMat.col1.y * rX + tMat.col2.y * rY);\n      rX = tX;\n      var invMass = b.m_invMass;\n      var invI = b.m_invI;this.K1.col1.x = invMass;\n      this.K1.col2.x = 0.0;\n      this.K1.col1.y = 0.0;\n      this.K1.col2.y = invMass;\n      this.K2.col1.x = invI * rY * rY;\n      this.K2.col2.x = (-invI * rX * rY);\n      this.K2.col1.y = (-invI * rX * rY);\n      this.K2.col2.y = invI * rX * rX;\n      this.K.SetM(this.K1);\n      this.K.AddM(this.K2);\n      this.K.col1.x += this.m_gamma;\n      this.K.col2.y += this.m_gamma;\n      this.K.GetInverse(this.m_mass);\n      this.m_C.x = b.m_sweep.c.x + rX - this.m_target.x;\n      this.m_C.y = b.m_sweep.c.y + rY - this.m_target.y;\n      b.m_angularVelocity *= 0.98;\n      this.m_impulse.x *= step.dtRatio;\n      this.m_impulse.y *= step.dtRatio;\n      b.m_linearVelocity.x += invMass * this.m_impulse.x;\n      b.m_linearVelocity.y += invMass * this.m_impulse.y;\n      b.m_angularVelocity += invI * (rX * this.m_impulse.y - rY * this.m_impulse.x);\n   }\n   b2MouseJoint.prototype.SolveVelocityConstraints = function (step) {\n      var b = this.m_bodyB;\n      var tMat;\n      var tX = 0;\n      var tY = 0;\n      tMat = b.m_xf.R;\n      var rX = this.m_localAnchor.x - b.m_sweep.localCenter.x;\n      var rY = this.m_localAnchor.y - b.m_sweep.localCenter.y;\n      tX = (tMat.col1.x * rX + tMat.col2.x * rY);\n      rY = (tMat.col1.y * rX + tMat.col2.y * rY);\n      rX = tX;\n      var CdotX = b.m_linearVelocity.x + ((-b.m_angularVelocity * rY));\n      var CdotY = b.m_linearVelocity.y + (b.m_angularVelocity * rX);\n      tMat = this.m_mass;\n      tX = CdotX + this.m_beta * this.m_C.x + this.m_gamma * this.m_impulse.x;\n      tY = CdotY + this.m_beta * this.m_C.y + this.m_gamma * this.m_impulse.y;\n      var impulseX = (-(tMat.col1.x * tX + tMat.col2.x * tY));\n      var impulseY = (-(tMat.col1.y * tX + tMat.col2.y * tY));\n      var oldImpulseX = this.m_impulse.x;\n      var oldImpulseY = this.m_impulse.y;\n      this.m_impulse.x += impulseX;\n      this.m_impulse.y += impulseY;\n      var maxImpulse = step.dt * this.m_maxForce;\n      if (this.m_impulse.LengthSquared() > maxImpulse * maxImpulse) {\n         this.m_impulse.Multiply(maxImpulse / this.m_impulse.Length());\n      }\n      impulseX = this.m_impulse.x - oldImpulseX;\n      impulseY = this.m_impulse.y - oldImpulseY;\n      b.m_linearVelocity.x += b.m_invMass * impulseX;\n      b.m_linearVelocity.y += b.m_invMass * impulseY;\n      b.m_angularVelocity += b.m_invI * (rX * impulseY - rY * impulseX);\n   }\n   b2MouseJoint.prototype.SolvePositionConstraints = function (baumgarte) {\n      if (baumgarte === undefined) baumgarte = 0;\n      return true;\n   }\n   Box2D.inherit(b2MouseJointDef, Box2D.Dynamics.Joints.b2JointDef);\n   b2MouseJointDef.prototype.__super = Box2D.Dynamics.Joints.b2JointDef.prototype;\n   b2MouseJointDef.b2MouseJointDef = function () {\n      Box2D.Dynamics.Joints.b2JointDef.b2JointDef.apply(this, arguments);\n      this.target = new b2Vec2();\n   };\n   b2MouseJointDef.prototype.b2MouseJointDef = function () {\n      this.__super.b2JointDef.call(this);\n      this.type = b2Joint.e_mouseJoint;\n      this.maxForce = 0.0;\n      this.frequencyHz = 5.0;\n      this.dampingRatio = 0.7;\n   }\n   Box2D.inherit(b2PrismaticJoint, Box2D.Dynamics.Joints.b2Joint);\n   b2PrismaticJoint.prototype.__super = Box2D.Dynamics.Joints.b2Joint.prototype;\n   b2PrismaticJoint.b2PrismaticJoint = function () {\n      Box2D.Dynamics.Joints.b2Joint.b2Joint.apply(this, arguments);\n      this.m_localAnchor1 = new b2Vec2();\n      this.m_localAnchor2 = new b2Vec2();\n      this.m_localXAxis1 = new b2Vec2();\n      this.m_localYAxis1 = new b2Vec2();\n      this.m_axis = new b2Vec2();\n      this.m_perp = new b2Vec2();\n      this.m_K = new b2Mat33();\n      this.m_impulse = new b2Vec3();\n   };\n   b2PrismaticJoint.prototype.GetAnchorA = function () {\n      return this.m_bodyA.GetWorldPoint(this.m_localAnchor1);\n   }\n   b2PrismaticJoint.prototype.GetAnchorB = function () {\n      return this.m_bodyB.GetWorldPoint(this.m_localAnchor2);\n   }\n   b2PrismaticJoint.prototype.GetReactionForce = function (inv_dt) {\n      if (inv_dt === undefined) inv_dt = 0;\n      return new b2Vec2(inv_dt * (this.m_impulse.x * this.m_perp.x + (this.m_motorImpulse + this.m_impulse.z) * this.m_axis.x), inv_dt * (this.m_impulse.x * this.m_perp.y + (this.m_motorImpulse + this.m_impulse.z) * this.m_axis.y));\n   }\n   b2PrismaticJoint.prototype.GetReactionTorque = function (inv_dt) {\n      if (inv_dt === undefined) inv_dt = 0;\n      return inv_dt * this.m_impulse.y;\n   }\n   b2PrismaticJoint.prototype.GetJointTranslation = function () {\n      var bA = this.m_bodyA;\n      var bB = this.m_bodyB;\n      var tMat;\n      var p1 = bA.GetWorldPoint(this.m_localAnchor1);\n      var p2 = bB.GetWorldPoint(this.m_localAnchor2);\n      var dX = p2.x - p1.x;\n      var dY = p2.y - p1.y;\n      var axis = bA.GetWorldVector(this.m_localXAxis1);\n      var translation = axis.x * dX + axis.y * dY;\n      return translation;\n   }\n   b2PrismaticJoint.prototype.GetJointSpeed = function () {\n      var bA = this.m_bodyA;\n      var bB = this.m_bodyB;\n      var tMat;\n      tMat = bA.m_xf.R;\n      var r1X = this.m_localAnchor1.x - bA.m_sweep.localCenter.x;\n      var r1Y = this.m_localAnchor1.y - bA.m_sweep.localCenter.y;\n      var tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y);\n      r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y);\n      r1X = tX;\n      tMat = bB.m_xf.R;\n      var r2X = this.m_localAnchor2.x - bB.m_sweep.localCenter.x;\n      var r2Y = this.m_localAnchor2.y - bB.m_sweep.localCenter.y;\n      tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y);\n      r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y);\n      r2X = tX;\n      var p1X = bA.m_sweep.c.x + r1X;\n      var p1Y = bA.m_sweep.c.y + r1Y;\n      var p2X = bB.m_sweep.c.x + r2X;\n      var p2Y = bB.m_sweep.c.y + r2Y;\n      var dX = p2X - p1X;\n      var dY = p2Y - p1Y;\n      var axis = bA.GetWorldVector(this.m_localXAxis1);\n      var v1 = bA.m_linearVelocity;\n      var v2 = bB.m_linearVelocity;\n      var w1 = bA.m_angularVelocity;\n      var w2 = bB.m_angularVelocity;\n      var speed = (dX * ((-w1 * axis.y)) + dY * (w1 * axis.x)) + (axis.x * (((v2.x + ((-w2 * r2Y))) - v1.x) - ((-w1 * r1Y))) + axis.y * (((v2.y + (w2 * r2X)) - v1.y) - (w1 * r1X)));\n      return speed;\n   }\n   b2PrismaticJoint.prototype.IsLimitEnabled = function () {\n      return this.m_enableLimit;\n   }\n   b2PrismaticJoint.prototype.EnableLimit = function (flag) {\n      this.m_bodyA.SetAwake(true);\n      this.m_bodyB.SetAwake(true);\n      this.m_enableLimit = flag;\n   }\n   b2PrismaticJoint.prototype.GetLowerLimit = function () {\n      return this.m_lowerTranslation;\n   }\n   b2PrismaticJoint.prototype.GetUpperLimit = function () {\n      return this.m_upperTranslation;\n   }\n   b2PrismaticJoint.prototype.SetLimits = function (lower, upper) {\n      if (lower === undefined) lower = 0;\n      if (upper === undefined) upper = 0;\n      this.m_bodyA.SetAwake(true);\n      this.m_bodyB.SetAwake(true);\n      this.m_lowerTranslation = lower;\n      this.m_upperTranslation = upper;\n   }\n   b2PrismaticJoint.prototype.IsMotorEnabled = function () {\n      return this.m_enableMotor;\n   }\n   b2PrismaticJoint.prototype.EnableMotor = function (flag) {\n      this.m_bodyA.SetAwake(true);\n      this.m_bodyB.SetAwake(true);\n      this.m_enableMotor = flag;\n   }\n   b2PrismaticJoint.prototype.SetMotorSpeed = function (speed) {\n      if (speed === undefined) speed = 0;\n      this.m_bodyA.SetAwake(true);\n      this.m_bodyB.SetAwake(true);\n      this.m_motorSpeed = speed;\n   }\n   b2PrismaticJoint.prototype.GetMotorSpeed = function () {\n      return this.m_motorSpeed;\n   }\n   b2PrismaticJoint.prototype.SetMaxMotorForce = function (force) {\n      if (force === undefined) force = 0;\n      this.m_bodyA.SetAwake(true);\n      this.m_bodyB.SetAwake(true);\n      this.m_maxMotorForce = force;\n   }\n   b2PrismaticJoint.prototype.GetMotorForce = function () {\n      return this.m_motorImpulse;\n   }\n   b2PrismaticJoint.prototype.b2PrismaticJoint = function (def) {\n      this.__super.b2Joint.call(this, def);\n      var tMat;\n      var tX = 0;\n      var tY = 0;\n      this.m_localAnchor1.SetV(def.localAnchorA);\n      this.m_localAnchor2.SetV(def.localAnchorB);\n      this.m_localXAxis1.SetV(def.localAxisA);\n      this.m_localYAxis1.x = (-this.m_localXAxis1.y);\n      this.m_localYAxis1.y = this.m_localXAxis1.x;\n      this.m_refAngle = def.referenceAngle;\n      this.m_impulse.SetZero();\n      this.m_motorMass = 0.0;\n      this.m_motorImpulse = 0.0;\n      this.m_lowerTranslation = def.lowerTranslation;\n      this.m_upperTranslation = def.upperTranslation;\n      this.m_maxMotorForce = def.maxMotorForce;\n      this.m_motorSpeed = def.motorSpeed;\n      this.m_enableLimit = def.enableLimit;\n      this.m_enableMotor = def.enableMotor;\n      this.m_limitState = b2Joint.e_inactiveLimit;\n      this.m_axis.SetZero();\n      this.m_perp.SetZero();\n   }\n   b2PrismaticJoint.prototype.InitVelocityConstraints = function (step) {\n      var bA = this.m_bodyA;\n      var bB = this.m_bodyB;\n      var tMat;\n      var tX = 0;\n      this.m_localCenterA.SetV(bA.GetLocalCenter());\n      this.m_localCenterB.SetV(bB.GetLocalCenter());\n      var xf1 = bA.GetTransform();\n      var xf2 = bB.GetTransform();\n      tMat = bA.m_xf.R;\n      var r1X = this.m_localAnchor1.x - this.m_localCenterA.x;\n      var r1Y = this.m_localAnchor1.y - this.m_localCenterA.y;\n      tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y);\n      r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y);\n      r1X = tX;\n      tMat = bB.m_xf.R;\n      var r2X = this.m_localAnchor2.x - this.m_localCenterB.x;\n      var r2Y = this.m_localAnchor2.y - this.m_localCenterB.y;\n      tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y);\n      r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y);\n      r2X = tX;\n      var dX = bB.m_sweep.c.x + r2X - bA.m_sweep.c.x - r1X;\n      var dY = bB.m_sweep.c.y + r2Y - bA.m_sweep.c.y - r1Y;\n      this.m_invMassA = bA.m_invMass;\n      this.m_invMassB = bB.m_invMass;\n      this.m_invIA = bA.m_invI;\n      this.m_invIB = bB.m_invI; {\n         this.m_axis.SetV(b2Math.MulMV(xf1.R, this.m_localXAxis1));\n         this.m_a1 = (dX + r1X) * this.m_axis.y - (dY + r1Y) * this.m_axis.x;\n         this.m_a2 = r2X * this.m_axis.y - r2Y * this.m_axis.x;\n         this.m_motorMass = this.m_invMassA + this.m_invMassB + this.m_invIA * this.m_a1 * this.m_a1 + this.m_invIB * this.m_a2 * this.m_a2;\n         if (this.m_motorMass > Number.MIN_VALUE) this.m_motorMass = 1.0 / this.m_motorMass;\n      } {\n         this.m_perp.SetV(b2Math.MulMV(xf1.R, this.m_localYAxis1));\n         this.m_s1 = (dX + r1X) * this.m_perp.y - (dY + r1Y) * this.m_perp.x;\n         this.m_s2 = r2X * this.m_perp.y - r2Y * this.m_perp.x;\n         var m1 = this.m_invMassA;\n         var m2 = this.m_invMassB;\n         var i1 = this.m_invIA;\n         var i2 = this.m_invIB;\n         this.m_K.col1.x = m1 + m2 + i1 * this.m_s1 * this.m_s1 + i2 * this.m_s2 * this.m_s2;\n         this.m_K.col1.y = i1 * this.m_s1 + i2 * this.m_s2;\n         this.m_K.col1.z = i1 * this.m_s1 * this.m_a1 + i2 * this.m_s2 * this.m_a2;\n         this.m_K.col2.x = this.m_K.col1.y;\n         this.m_K.col2.y = i1 + i2;\n         this.m_K.col2.z = i1 * this.m_a1 + i2 * this.m_a2;\n         this.m_K.col3.x = this.m_K.col1.z;\n         this.m_K.col3.y = this.m_K.col2.z;\n         this.m_K.col3.z = m1 + m2 + i1 * this.m_a1 * this.m_a1 + i2 * this.m_a2 * this.m_a2;\n      }\n      if (this.m_enableLimit) {\n         var jointTransition = this.m_axis.x * dX + this.m_axis.y * dY;\n         if (b2Math.Abs(this.m_upperTranslation - this.m_lowerTranslation) < 2.0 * b2Settings.b2_linearSlop) {\n            this.m_limitState = b2Joint.e_equalLimits;\n         }\n         else if (jointTransition <= this.m_lowerTranslation) {\n            if (this.m_limitState != b2Joint.e_atLowerLimit) {\n               this.m_limitState = b2Joint.e_atLowerLimit;\n               this.m_impulse.z = 0.0;\n            }\n         }\n         else if (jointTransition >= this.m_upperTranslation) {\n            if (this.m_limitState != b2Joint.e_atUpperLimit) {\n               this.m_limitState = b2Joint.e_atUpperLimit;\n               this.m_impulse.z = 0.0;\n            }\n         }\n         else {\n            this.m_limitState = b2Joint.e_inactiveLimit;\n            this.m_impulse.z = 0.0;\n         }\n      }\n      else {\n         this.m_limitState = b2Joint.e_inactiveLimit;\n      }\n      if (this.m_enableMotor == false) {\n         this.m_motorImpulse = 0.0;\n      }\n      if (step.warmStarting) {\n         this.m_impulse.x *= step.dtRatio;\n         this.m_impulse.y *= step.dtRatio;\n         this.m_motorImpulse *= step.dtRatio;\n         var PX = this.m_impulse.x * this.m_perp.x + (this.m_motorImpulse + this.m_impulse.z) * this.m_axis.x;\n         var PY = this.m_impulse.x * this.m_perp.y + (this.m_motorImpulse + this.m_impulse.z) * this.m_axis.y;\n         var L1 = this.m_impulse.x * this.m_s1 + this.m_impulse.y + (this.m_motorImpulse + this.m_impulse.z) * this.m_a1;\n         var L2 = this.m_impulse.x * this.m_s2 + this.m_impulse.y + (this.m_motorImpulse + this.m_impulse.z) * this.m_a2;\n         bA.m_linearVelocity.x -= this.m_invMassA * PX;\n         bA.m_linearVelocity.y -= this.m_invMassA * PY;\n         bA.m_angularVelocity -= this.m_invIA * L1;\n         bB.m_linearVelocity.x += this.m_invMassB * PX;\n         bB.m_linearVelocity.y += this.m_invMassB * PY;\n         bB.m_angularVelocity += this.m_invIB * L2;\n      }\n      else {\n         this.m_impulse.SetZero();\n         this.m_motorImpulse = 0.0;\n      }\n   }\n   b2PrismaticJoint.prototype.SolveVelocityConstraints = function (step) {\n      var bA = this.m_bodyA;\n      var bB = this.m_bodyB;\n      var v1 = bA.m_linearVelocity;\n      var w1 = bA.m_angularVelocity;\n      var v2 = bB.m_linearVelocity;\n      var w2 = bB.m_angularVelocity;\n      var PX = 0;\n      var PY = 0;\n      var L1 = 0;\n      var L2 = 0;\n      if (this.m_enableMotor && this.m_limitState != b2Joint.e_equalLimits) {\n         var Cdot = this.m_axis.x * (v2.x - v1.x) + this.m_axis.y * (v2.y - v1.y) + this.m_a2 * w2 - this.m_a1 * w1;\n         var impulse = this.m_motorMass * (this.m_motorSpeed - Cdot);\n         var oldImpulse = this.m_motorImpulse;\n         var maxImpulse = step.dt * this.m_maxMotorForce;\n         this.m_motorImpulse = b2Math.Clamp(this.m_motorImpulse + impulse, (-maxImpulse), maxImpulse);\n         impulse = this.m_motorImpulse - oldImpulse;\n         PX = impulse * this.m_axis.x;\n         PY = impulse * this.m_axis.y;\n         L1 = impulse * this.m_a1;\n         L2 = impulse * this.m_a2;\n         v1.x -= this.m_invMassA * PX;\n         v1.y -= this.m_invMassA * PY;\n         w1 -= this.m_invIA * L1;\n         v2.x += this.m_invMassB * PX;\n         v2.y += this.m_invMassB * PY;\n         w2 += this.m_invIB * L2;\n      }\n      var Cdot1X = this.m_perp.x * (v2.x - v1.x) + this.m_perp.y * (v2.y - v1.y) + this.m_s2 * w2 - this.m_s1 * w1;\n      var Cdot1Y = w2 - w1;\n      if (this.m_enableLimit && this.m_limitState != b2Joint.e_inactiveLimit) {\n         var Cdot2 = this.m_axis.x * (v2.x - v1.x) + this.m_axis.y * (v2.y - v1.y) + this.m_a2 * w2 - this.m_a1 * w1;\n         var f1 = this.m_impulse.Copy();\n         var df = this.m_K.Solve33(new b2Vec3(), (-Cdot1X), (-Cdot1Y), (-Cdot2));\n         this.m_impulse.Add(df);\n         if (this.m_limitState == b2Joint.e_atLowerLimit) {\n            this.m_impulse.z = b2Math.Max(this.m_impulse.z, 0.0);\n         }\n         else if (this.m_limitState == b2Joint.e_atUpperLimit) {\n            this.m_impulse.z = b2Math.Min(this.m_impulse.z, 0.0);\n         }\n         var bX = (-Cdot1X) - (this.m_impulse.z - f1.z) * this.m_K.col3.x;\n         var bY = (-Cdot1Y) - (this.m_impulse.z - f1.z) * this.m_K.col3.y;\n         var f2r = this.m_K.Solve22(new b2Vec2(), bX, bY);\n         f2r.x += f1.x;\n         f2r.y += f1.y;\n         this.m_impulse.x = f2r.x;\n         this.m_impulse.y = f2r.y;\n         df.x = this.m_impulse.x - f1.x;\n         df.y = this.m_impulse.y - f1.y;\n         df.z = this.m_impulse.z - f1.z;\n         PX = df.x * this.m_perp.x + df.z * this.m_axis.x;\n         PY = df.x * this.m_perp.y + df.z * this.m_axis.y;\n         L1 = df.x * this.m_s1 + df.y + df.z * this.m_a1;\n         L2 = df.x * this.m_s2 + df.y + df.z * this.m_a2;\n         v1.x -= this.m_invMassA * PX;\n         v1.y -= this.m_invMassA * PY;\n         w1 -= this.m_invIA * L1;\n         v2.x += this.m_invMassB * PX;\n         v2.y += this.m_invMassB * PY;\n         w2 += this.m_invIB * L2;\n      }\n      else {\n         var df2 = this.m_K.Solve22(new b2Vec2(), (-Cdot1X), (-Cdot1Y));\n         this.m_impulse.x += df2.x;\n         this.m_impulse.y += df2.y;\n         PX = df2.x * this.m_perp.x;\n         PY = df2.x * this.m_perp.y;\n         L1 = df2.x * this.m_s1 + df2.y;\n         L2 = df2.x * this.m_s2 + df2.y;\n         v1.x -= this.m_invMassA * PX;\n         v1.y -= this.m_invMassA * PY;\n         w1 -= this.m_invIA * L1;\n         v2.x += this.m_invMassB * PX;\n         v2.y += this.m_invMassB * PY;\n         w2 += this.m_invIB * L2;\n      }\n      bA.m_linearVelocity.SetV(v1);\n      bA.m_angularVelocity = w1;\n      bB.m_linearVelocity.SetV(v2);\n      bB.m_angularVelocity = w2;\n   }\n   b2PrismaticJoint.prototype.SolvePositionConstraints = function (baumgarte) {\n      if (baumgarte === undefined) baumgarte = 0;\n      var limitC = 0;\n      var oldLimitImpulse = 0;\n      var bA = this.m_bodyA;\n      var bB = this.m_bodyB;\n      var c1 = bA.m_sweep.c;\n      var a1 = bA.m_sweep.a;\n      var c2 = bB.m_sweep.c;\n      var a2 = bB.m_sweep.a;\n      var tMat;\n      var tX = 0;\n      var m1 = 0;\n      var m2 = 0;\n      var i1 = 0;\n      var i2 = 0;\n      var linearError = 0.0;\n      var angularError = 0.0;\n      var active = false;\n      var C2 = 0.0;\n      var R1 = b2Mat22.FromAngle(a1);\n      var R2 = b2Mat22.FromAngle(a2);\n      tMat = R1;\n      var r1X = this.m_localAnchor1.x - this.m_localCenterA.x;\n      var r1Y = this.m_localAnchor1.y - this.m_localCenterA.y;\n      tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y);\n      r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y);\n      r1X = tX;\n      tMat = R2;\n      var r2X = this.m_localAnchor2.x - this.m_localCenterB.x;\n      var r2Y = this.m_localAnchor2.y - this.m_localCenterB.y;\n      tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y);\n      r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y);\n      r2X = tX;\n      var dX = c2.x + r2X - c1.x - r1X;\n      var dY = c2.y + r2Y - c1.y - r1Y;\n      if (this.m_enableLimit) {\n         this.m_axis = b2Math.MulMV(R1, this.m_localXAxis1);\n         this.m_a1 = (dX + r1X) * this.m_axis.y - (dY + r1Y) * this.m_axis.x;\n         this.m_a2 = r2X * this.m_axis.y - r2Y * this.m_axis.x;\n         var translation = this.m_axis.x * dX + this.m_axis.y * dY;\n         if (b2Math.Abs(this.m_upperTranslation - this.m_lowerTranslation) < 2.0 * b2Settings.b2_linearSlop) {\n            C2 = b2Math.Clamp(translation, (-b2Settings.b2_maxLinearCorrection), b2Settings.b2_maxLinearCorrection);\n            linearError = b2Math.Abs(translation);\n            active = true;\n         }\n         else if (translation <= this.m_lowerTranslation) {\n            C2 = b2Math.Clamp(translation - this.m_lowerTranslation + b2Settings.b2_linearSlop, (-b2Settings.b2_maxLinearCorrection), 0.0);\n            linearError = this.m_lowerTranslation - translation;\n            active = true;\n         }\n         else if (translation >= this.m_upperTranslation) {\n            C2 = b2Math.Clamp(translation - this.m_upperTranslation + b2Settings.b2_linearSlop, 0.0, b2Settings.b2_maxLinearCorrection);\n            linearError = translation - this.m_upperTranslation;\n            active = true;\n         }\n      }\n      this.m_perp = b2Math.MulMV(R1, this.m_localYAxis1);\n      this.m_s1 = (dX + r1X) * this.m_perp.y - (dY + r1Y) * this.m_perp.x;\n      this.m_s2 = r2X * this.m_perp.y - r2Y * this.m_perp.x;\n      var impulse = new b2Vec3();\n      var C1X = this.m_perp.x * dX + this.m_perp.y * dY;\n      var C1Y = a2 - a1 - this.m_refAngle;\n      linearError = b2Math.Max(linearError, b2Math.Abs(C1X));\n      angularError = b2Math.Abs(C1Y);\n      if (active) {\n         m1 = this.m_invMassA;\n         m2 = this.m_invMassB;\n         i1 = this.m_invIA;\n         i2 = this.m_invIB;\n         this.m_K.col1.x = m1 + m2 + i1 * this.m_s1 * this.m_s1 + i2 * this.m_s2 * this.m_s2;\n         this.m_K.col1.y = i1 * this.m_s1 + i2 * this.m_s2;\n         this.m_K.col1.z = i1 * this.m_s1 * this.m_a1 + i2 * this.m_s2 * this.m_a2;\n         this.m_K.col2.x = this.m_K.col1.y;\n         this.m_K.col2.y = i1 + i2;\n         this.m_K.col2.z = i1 * this.m_a1 + i2 * this.m_a2;\n         this.m_K.col3.x = this.m_K.col1.z;\n         this.m_K.col3.y = this.m_K.col2.z;\n         this.m_K.col3.z = m1 + m2 + i1 * this.m_a1 * this.m_a1 + i2 * this.m_a2 * this.m_a2;\n         this.m_K.Solve33(impulse, (-C1X), (-C1Y), (-C2));\n      }\n      else {\n         m1 = this.m_invMassA;\n         m2 = this.m_invMassB;\n         i1 = this.m_invIA;\n         i2 = this.m_invIB;\n         var k11 = m1 + m2 + i1 * this.m_s1 * this.m_s1 + i2 * this.m_s2 * this.m_s2;\n         var k12 = i1 * this.m_s1 + i2 * this.m_s2;\n         var k22 = i1 + i2;\n         this.m_K.col1.Set(k11, k12, 0.0);\n         this.m_K.col2.Set(k12, k22, 0.0);\n         var impulse1 = this.m_K.Solve22(new b2Vec2(), (-C1X), (-C1Y));\n         impulse.x = impulse1.x;\n         impulse.y = impulse1.y;\n         impulse.z = 0.0;\n      }\n      var PX = impulse.x * this.m_perp.x + impulse.z * this.m_axis.x;\n      var PY = impulse.x * this.m_perp.y + impulse.z * this.m_axis.y;\n      var L1 = impulse.x * this.m_s1 + impulse.y + impulse.z * this.m_a1;\n      var L2 = impulse.x * this.m_s2 + impulse.y + impulse.z * this.m_a2;\n      c1.x -= this.m_invMassA * PX;\n      c1.y -= this.m_invMassA * PY;\n      a1 -= this.m_invIA * L1;\n      c2.x += this.m_invMassB * PX;\n      c2.y += this.m_invMassB * PY;\n      a2 += this.m_invIB * L2;\n      bA.m_sweep.a = a1;\n      bB.m_sweep.a = a2;\n      bA.SynchronizeTransform();\n      bB.SynchronizeTransform();\n      return linearError <= b2Settings.b2_linearSlop && angularError <= b2Settings.b2_angularSlop;\n   }\n   Box2D.inherit(b2PrismaticJointDef, Box2D.Dynamics.Joints.b2JointDef);\n   b2PrismaticJointDef.prototype.__super = Box2D.Dynamics.Joints.b2JointDef.prototype;\n   b2PrismaticJointDef.b2PrismaticJointDef = function () {\n      Box2D.Dynamics.Joints.b2JointDef.b2JointDef.apply(this, arguments);\n      this.localAnchorA = new b2Vec2();\n      this.localAnchorB = new b2Vec2();\n      this.localAxisA = new b2Vec2();\n   };\n   b2PrismaticJointDef.prototype.b2PrismaticJointDef = function () {\n      this.__super.b2JointDef.call(this);\n      this.type = b2Joint.e_prismaticJoint;\n      this.localAxisA.Set(1.0, 0.0);\n      this.referenceAngle = 0.0;\n      this.enableLimit = false;\n      this.lowerTranslation = 0.0;\n      this.upperTranslation = 0.0;\n      this.enableMotor = false;\n      this.maxMotorForce = 0.0;\n      this.motorSpeed = 0.0;\n   }\n   b2PrismaticJointDef.prototype.Initialize = function (bA, bB, anchor, axis) {\n      this.bodyA = bA;\n      this.bodyB = bB;\n      this.localAnchorA = this.bodyA.GetLocalPoint(anchor);\n      this.localAnchorB = this.bodyB.GetLocalPoint(anchor);\n      this.localAxisA = this.bodyA.GetLocalVector(axis);\n      this.referenceAngle = this.bodyB.GetAngle() - this.bodyA.GetAngle();\n   }\n   Box2D.inherit(b2PulleyJoint, Box2D.Dynamics.Joints.b2Joint);\n   b2PulleyJoint.prototype.__super = Box2D.Dynamics.Joints.b2Joint.prototype;\n   b2PulleyJoint.b2PulleyJoint = function () {\n      Box2D.Dynamics.Joints.b2Joint.b2Joint.apply(this, arguments);\n      this.m_groundAnchor1 = new b2Vec2();\n      this.m_groundAnchor2 = new b2Vec2();\n      this.m_localAnchor1 = new b2Vec2();\n      this.m_localAnchor2 = new b2Vec2();\n      this.m_u1 = new b2Vec2();\n      this.m_u2 = new b2Vec2();\n   };\n   b2PulleyJoint.prototype.GetAnchorA = function () {\n      return this.m_bodyA.GetWorldPoint(this.m_localAnchor1);\n   }\n   b2PulleyJoint.prototype.GetAnchorB = function () {\n      return this.m_bodyB.GetWorldPoint(this.m_localAnchor2);\n   }\n   b2PulleyJoint.prototype.GetReactionForce = function (inv_dt) {\n      if (inv_dt === undefined) inv_dt = 0;\n      return new b2Vec2(inv_dt * this.m_impulse * this.m_u2.x, inv_dt * this.m_impulse * this.m_u2.y);\n   }\n   b2PulleyJoint.prototype.GetReactionTorque = function (inv_dt) {\n      if (inv_dt === undefined) inv_dt = 0;\n      return 0.0;\n   }\n   b2PulleyJoint.prototype.GetGroundAnchorA = function () {\n      var a = this.m_ground.m_xf.position.Copy();\n      a.Add(this.m_groundAnchor1);\n      return a;\n   }\n   b2PulleyJoint.prototype.GetGroundAnchorB = function () {\n      var a = this.m_ground.m_xf.position.Copy();\n      a.Add(this.m_groundAnchor2);\n      return a;\n   }\n   b2PulleyJoint.prototype.GetLength1 = function () {\n      var p = this.m_bodyA.GetWorldPoint(this.m_localAnchor1);\n      var sX = this.m_ground.m_xf.position.x + this.m_groundAnchor1.x;\n      var sY = this.m_ground.m_xf.position.y + this.m_groundAnchor1.y;\n      var dX = p.x - sX;\n      var dY = p.y - sY;\n      return Math.sqrt(dX * dX + dY * dY);\n   }\n   b2PulleyJoint.prototype.GetLength2 = function () {\n      var p = this.m_bodyB.GetWorldPoint(this.m_localAnchor2);\n      var sX = this.m_ground.m_xf.position.x + this.m_groundAnchor2.x;\n      var sY = this.m_ground.m_xf.position.y + this.m_groundAnchor2.y;\n      var dX = p.x - sX;\n      var dY = p.y - sY;\n      return Math.sqrt(dX * dX + dY * dY);\n   }\n   b2PulleyJoint.prototype.GetRatio = function () {\n      return this.m_ratio;\n   }\n   b2PulleyJoint.prototype.b2PulleyJoint = function (def) {\n      this.__super.b2Joint.call(this, def);\n      var tMat;\n      var tX = 0;\n      var tY = 0;\n      this.m_ground = this.m_bodyA.m_world.m_groundBody;\n      this.m_groundAnchor1.x = def.groundAnchorA.x - this.m_ground.m_xf.position.x;\n      this.m_groundAnchor1.y = def.groundAnchorA.y - this.m_ground.m_xf.position.y;\n      this.m_groundAnchor2.x = def.groundAnchorB.x - this.m_ground.m_xf.position.x;\n      this.m_groundAnchor2.y = def.groundAnchorB.y - this.m_ground.m_xf.position.y;\n      this.m_localAnchor1.SetV(def.localAnchorA);\n      this.m_localAnchor2.SetV(def.localAnchorB);\n      this.m_ratio = def.ratio;\n      this.m_constant = def.lengthA + this.m_ratio * def.lengthB;\n      this.m_maxLength1 = b2Math.Min(def.maxLengthA, this.m_constant - this.m_ratio * b2PulleyJoint.b2_minPulleyLength);\n      this.m_maxLength2 = b2Math.Min(def.maxLengthB, (this.m_constant - b2PulleyJoint.b2_minPulleyLength) / this.m_ratio);\n      this.m_impulse = 0.0;\n      this.m_limitImpulse1 = 0.0;\n      this.m_limitImpulse2 = 0.0;\n   }\n   b2PulleyJoint.prototype.InitVelocityConstraints = function (step) {\n      var bA = this.m_bodyA;\n      var bB = this.m_bodyB;\n      var tMat;\n      tMat = bA.m_xf.R;\n      var r1X = this.m_localAnchor1.x - bA.m_sweep.localCenter.x;\n      var r1Y = this.m_localAnchor1.y - bA.m_sweep.localCenter.y;\n      var tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y);\n      r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y);\n      r1X = tX;\n      tMat = bB.m_xf.R;\n      var r2X = this.m_localAnchor2.x - bB.m_sweep.localCenter.x;\n      var r2Y = this.m_localAnchor2.y - bB.m_sweep.localCenter.y;\n      tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y);\n      r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y);\n      r2X = tX;\n      var p1X = bA.m_sweep.c.x + r1X;\n      var p1Y = bA.m_sweep.c.y + r1Y;\n      var p2X = bB.m_sweep.c.x + r2X;\n      var p2Y = bB.m_sweep.c.y + r2Y;\n      var s1X = this.m_ground.m_xf.position.x + this.m_groundAnchor1.x;\n      var s1Y = this.m_ground.m_xf.position.y + this.m_groundAnchor1.y;\n      var s2X = this.m_ground.m_xf.position.x + this.m_groundAnchor2.x;\n      var s2Y = this.m_ground.m_xf.position.y + this.m_groundAnchor2.y;\n      this.m_u1.Set(p1X - s1X, p1Y - s1Y);\n      this.m_u2.Set(p2X - s2X, p2Y - s2Y);\n      var length1 = this.m_u1.Length();\n      var length2 = this.m_u2.Length();\n      if (length1 > b2Settings.b2_linearSlop) {\n         this.m_u1.Multiply(1.0 / length1);\n      }\n      else {\n         this.m_u1.SetZero();\n      }\n      if (length2 > b2Settings.b2_linearSlop) {\n         this.m_u2.Multiply(1.0 / length2);\n      }\n      else {\n         this.m_u2.SetZero();\n      }\n      var C = this.m_constant - length1 - this.m_ratio * length2;\n      if (C > 0.0) {\n         this.m_state = b2Joint.e_inactiveLimit;\n         this.m_impulse = 0.0;\n      }\n      else {\n         this.m_state = b2Joint.e_atUpperLimit;\n      }\n      if (length1 < this.m_maxLength1) {\n         this.m_limitState1 = b2Joint.e_inactiveLimit;\n         this.m_limitImpulse1 = 0.0;\n      }\n      else {\n         this.m_limitState1 = b2Joint.e_atUpperLimit;\n      }\n      if (length2 < this.m_maxLength2) {\n         this.m_limitState2 = b2Joint.e_inactiveLimit;\n         this.m_limitImpulse2 = 0.0;\n      }\n      else {\n         this.m_limitState2 = b2Joint.e_atUpperLimit;\n      }\n      var cr1u1 = r1X * this.m_u1.y - r1Y * this.m_u1.x;\n      var cr2u2 = r2X * this.m_u2.y - r2Y * this.m_u2.x;\n      this.m_limitMass1 = bA.m_invMass + bA.m_invI * cr1u1 * cr1u1;\n      this.m_limitMass2 = bB.m_invMass + bB.m_invI * cr2u2 * cr2u2;\n      this.m_pulleyMass = this.m_limitMass1 + this.m_ratio * this.m_ratio * this.m_limitMass2;\n      this.m_limitMass1 = 1.0 / this.m_limitMass1;\n      this.m_limitMass2 = 1.0 / this.m_limitMass2;\n      this.m_pulleyMass = 1.0 / this.m_pulleyMass;\n      if (step.warmStarting) {\n         this.m_impulse *= step.dtRatio;\n         this.m_limitImpulse1 *= step.dtRatio;\n         this.m_limitImpulse2 *= step.dtRatio;\n         var P1X = ((-this.m_impulse) - this.m_limitImpulse1) * this.m_u1.x;\n         var P1Y = ((-this.m_impulse) - this.m_limitImpulse1) * this.m_u1.y;\n         var P2X = ((-this.m_ratio * this.m_impulse) - this.m_limitImpulse2) * this.m_u2.x;\n         var P2Y = ((-this.m_ratio * this.m_impulse) - this.m_limitImpulse2) * this.m_u2.y;\n         bA.m_linearVelocity.x += bA.m_invMass * P1X;\n         bA.m_linearVelocity.y += bA.m_invMass * P1Y;\n         bA.m_angularVelocity += bA.m_invI * (r1X * P1Y - r1Y * P1X);\n         bB.m_linearVelocity.x += bB.m_invMass * P2X;\n         bB.m_linearVelocity.y += bB.m_invMass * P2Y;\n         bB.m_angularVelocity += bB.m_invI * (r2X * P2Y - r2Y * P2X);\n      }\n      else {\n         this.m_impulse = 0.0;\n         this.m_limitImpulse1 = 0.0;\n         this.m_limitImpulse2 = 0.0;\n      }\n   }\n   b2PulleyJoint.prototype.SolveVelocityConstraints = function (step) {\n      var bA = this.m_bodyA;\n      var bB = this.m_bodyB;\n      var tMat;\n      tMat = bA.m_xf.R;\n      var r1X = this.m_localAnchor1.x - bA.m_sweep.localCenter.x;\n      var r1Y = this.m_localAnchor1.y - bA.m_sweep.localCenter.y;\n      var tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y);\n      r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y);\n      r1X = tX;\n      tMat = bB.m_xf.R;\n      var r2X = this.m_localAnchor2.x - bB.m_sweep.localCenter.x;\n      var r2Y = this.m_localAnchor2.y - bB.m_sweep.localCenter.y;\n      tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y);\n      r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y);\n      r2X = tX;\n      var v1X = 0;\n      var v1Y = 0;\n      var v2X = 0;\n      var v2Y = 0;\n      var P1X = 0;\n      var P1Y = 0;\n      var P2X = 0;\n      var P2Y = 0;\n      var Cdot = 0;\n      var impulse = 0;\n      var oldImpulse = 0;\n      if (this.m_state == b2Joint.e_atUpperLimit) {\n         v1X = bA.m_linearVelocity.x + ((-bA.m_angularVelocity * r1Y));\n         v1Y = bA.m_linearVelocity.y + (bA.m_angularVelocity * r1X);\n         v2X = bB.m_linearVelocity.x + ((-bB.m_angularVelocity * r2Y));\n         v2Y = bB.m_linearVelocity.y + (bB.m_angularVelocity * r2X);\n         Cdot = (-(this.m_u1.x * v1X + this.m_u1.y * v1Y)) - this.m_ratio * (this.m_u2.x * v2X + this.m_u2.y * v2Y);\n         impulse = this.m_pulleyMass * ((-Cdot));\n         oldImpulse = this.m_impulse;\n         this.m_impulse = b2Math.Max(0.0, this.m_impulse + impulse);\n         impulse = this.m_impulse - oldImpulse;\n         P1X = (-impulse * this.m_u1.x);\n         P1Y = (-impulse * this.m_u1.y);\n         P2X = (-this.m_ratio * impulse * this.m_u2.x);\n         P2Y = (-this.m_ratio * impulse * this.m_u2.y);\n         bA.m_linearVelocity.x += bA.m_invMass * P1X;\n         bA.m_linearVelocity.y += bA.m_invMass * P1Y;\n         bA.m_angularVelocity += bA.m_invI * (r1X * P1Y - r1Y * P1X);\n         bB.m_linearVelocity.x += bB.m_invMass * P2X;\n         bB.m_linearVelocity.y += bB.m_invMass * P2Y;\n         bB.m_angularVelocity += bB.m_invI * (r2X * P2Y - r2Y * P2X);\n      }\n      if (this.m_limitState1 == b2Joint.e_atUpperLimit) {\n         v1X = bA.m_linearVelocity.x + ((-bA.m_angularVelocity * r1Y));\n         v1Y = bA.m_linearVelocity.y + (bA.m_angularVelocity * r1X);\n         Cdot = (-(this.m_u1.x * v1X + this.m_u1.y * v1Y));\n         impulse = (-this.m_limitMass1 * Cdot);\n         oldImpulse = this.m_limitImpulse1;\n         this.m_limitImpulse1 = b2Math.Max(0.0, this.m_limitImpulse1 + impulse);\n         impulse = this.m_limitImpulse1 - oldImpulse;\n         P1X = (-impulse * this.m_u1.x);\n         P1Y = (-impulse * this.m_u1.y);\n         bA.m_linearVelocity.x += bA.m_invMass * P1X;\n         bA.m_linearVelocity.y += bA.m_invMass * P1Y;\n         bA.m_angularVelocity += bA.m_invI * (r1X * P1Y - r1Y * P1X);\n      }\n      if (this.m_limitState2 == b2Joint.e_atUpperLimit) {\n         v2X = bB.m_linearVelocity.x + ((-bB.m_angularVelocity * r2Y));\n         v2Y = bB.m_linearVelocity.y + (bB.m_angularVelocity * r2X);\n         Cdot = (-(this.m_u2.x * v2X + this.m_u2.y * v2Y));\n         impulse = (-this.m_limitMass2 * Cdot);\n         oldImpulse = this.m_limitImpulse2;\n         this.m_limitImpulse2 = b2Math.Max(0.0, this.m_limitImpulse2 + impulse);\n         impulse = this.m_limitImpulse2 - oldImpulse;\n         P2X = (-impulse * this.m_u2.x);\n         P2Y = (-impulse * this.m_u2.y);\n         bB.m_linearVelocity.x += bB.m_invMass * P2X;\n         bB.m_linearVelocity.y += bB.m_invMass * P2Y;\n         bB.m_angularVelocity += bB.m_invI * (r2X * P2Y - r2Y * P2X);\n      }\n   }\n   b2PulleyJoint.prototype.SolvePositionConstraints = function (baumgarte) {\n      if (baumgarte === undefined) baumgarte = 0;\n      var bA = this.m_bodyA;\n      var bB = this.m_bodyB;\n      var tMat;\n      var s1X = this.m_ground.m_xf.position.x + this.m_groundAnchor1.x;\n      var s1Y = this.m_ground.m_xf.position.y + this.m_groundAnchor1.y;\n      var s2X = this.m_ground.m_xf.position.x + this.m_groundAnchor2.x;\n      var s2Y = this.m_ground.m_xf.position.y + this.m_groundAnchor2.y;\n      var r1X = 0;\n      var r1Y = 0;\n      var r2X = 0;\n      var r2Y = 0;\n      var p1X = 0;\n      var p1Y = 0;\n      var p2X = 0;\n      var p2Y = 0;\n      var length1 = 0;\n      var length2 = 0;\n      var C = 0;\n      var impulse = 0;\n      var oldImpulse = 0;\n      var oldLimitPositionImpulse = 0;\n      var tX = 0;\n      var linearError = 0.0;\n      if (this.m_state == b2Joint.e_atUpperLimit) {\n         tMat = bA.m_xf.R;\n         r1X = this.m_localAnchor1.x - bA.m_sweep.localCenter.x;\n         r1Y = this.m_localAnchor1.y - bA.m_sweep.localCenter.y;\n         tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y);\n         r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y);\n         r1X = tX;\n         tMat = bB.m_xf.R;\n         r2X = this.m_localAnchor2.x - bB.m_sweep.localCenter.x;\n         r2Y = this.m_localAnchor2.y - bB.m_sweep.localCenter.y;\n         tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y);\n         r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y);\n         r2X = tX;\n         p1X = bA.m_sweep.c.x + r1X;\n         p1Y = bA.m_sweep.c.y + r1Y;\n         p2X = bB.m_sweep.c.x + r2X;\n         p2Y = bB.m_sweep.c.y + r2Y;\n         this.m_u1.Set(p1X - s1X, p1Y - s1Y);\n         this.m_u2.Set(p2X - s2X, p2Y - s2Y);\n         length1 = this.m_u1.Length();\n         length2 = this.m_u2.Length();\n         if (length1 > b2Settings.b2_linearSlop) {\n            this.m_u1.Multiply(1.0 / length1);\n         }\n         else {\n            this.m_u1.SetZero();\n         }\n         if (length2 > b2Settings.b2_linearSlop) {\n            this.m_u2.Multiply(1.0 / length2);\n         }\n         else {\n            this.m_u2.SetZero();\n         }\n         C = this.m_constant - length1 - this.m_ratio * length2;\n         linearError = b2Math.Max(linearError, (-C));\n         C = b2Math.Clamp(C + b2Settings.b2_linearSlop, (-b2Settings.b2_maxLinearCorrection), 0.0);\n         impulse = (-this.m_pulleyMass * C);\n         p1X = (-impulse * this.m_u1.x);\n         p1Y = (-impulse * this.m_u1.y);\n         p2X = (-this.m_ratio * impulse * this.m_u2.x);\n         p2Y = (-this.m_ratio * impulse * this.m_u2.y);\n         bA.m_sweep.c.x += bA.m_invMass * p1X;\n         bA.m_sweep.c.y += bA.m_invMass * p1Y;\n         bA.m_sweep.a += bA.m_invI * (r1X * p1Y - r1Y * p1X);\n         bB.m_sweep.c.x += bB.m_invMass * p2X;\n         bB.m_sweep.c.y += bB.m_invMass * p2Y;\n         bB.m_sweep.a += bB.m_invI * (r2X * p2Y - r2Y * p2X);\n         bA.SynchronizeTransform();\n         bB.SynchronizeTransform();\n      }\n      if (this.m_limitState1 == b2Joint.e_atUpperLimit) {\n         tMat = bA.m_xf.R;\n         r1X = this.m_localAnchor1.x - bA.m_sweep.localCenter.x;\n         r1Y = this.m_localAnchor1.y - bA.m_sweep.localCenter.y;\n         tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y);\n         r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y);\n         r1X = tX;\n         p1X = bA.m_sweep.c.x + r1X;\n         p1Y = bA.m_sweep.c.y + r1Y;\n         this.m_u1.Set(p1X - s1X, p1Y - s1Y);\n         length1 = this.m_u1.Length();\n         if (length1 > b2Settings.b2_linearSlop) {\n            this.m_u1.x *= 1.0 / length1;\n            this.m_u1.y *= 1.0 / length1;\n         }\n         else {\n            this.m_u1.SetZero();\n         }\n         C = this.m_maxLength1 - length1;\n         linearError = b2Math.Max(linearError, (-C));\n         C = b2Math.Clamp(C + b2Settings.b2_linearSlop, (-b2Settings.b2_maxLinearCorrection), 0.0);\n         impulse = (-this.m_limitMass1 * C);\n         p1X = (-impulse * this.m_u1.x);\n         p1Y = (-impulse * this.m_u1.y);\n         bA.m_sweep.c.x += bA.m_invMass * p1X;\n         bA.m_sweep.c.y += bA.m_invMass * p1Y;\n         bA.m_sweep.a += bA.m_invI * (r1X * p1Y - r1Y * p1X);\n         bA.SynchronizeTransform();\n      }\n      if (this.m_limitState2 == b2Joint.e_atUpperLimit) {\n         tMat = bB.m_xf.R;\n         r2X = this.m_localAnchor2.x - bB.m_sweep.localCenter.x;\n         r2Y = this.m_localAnchor2.y - bB.m_sweep.localCenter.y;\n         tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y);\n         r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y);\n         r2X = tX;\n         p2X = bB.m_sweep.c.x + r2X;\n         p2Y = bB.m_sweep.c.y + r2Y;\n         this.m_u2.Set(p2X - s2X, p2Y - s2Y);\n         length2 = this.m_u2.Length();\n         if (length2 > b2Settings.b2_linearSlop) {\n            this.m_u2.x *= 1.0 / length2;\n            this.m_u2.y *= 1.0 / length2;\n         }\n         else {\n            this.m_u2.SetZero();\n         }\n         C = this.m_maxLength2 - length2;\n         linearError = b2Math.Max(linearError, (-C));\n         C = b2Math.Clamp(C + b2Settings.b2_linearSlop, (-b2Settings.b2_maxLinearCorrection), 0.0);\n         impulse = (-this.m_limitMass2 * C);\n         p2X = (-impulse * this.m_u2.x);\n         p2Y = (-impulse * this.m_u2.y);\n         bB.m_sweep.c.x += bB.m_invMass * p2X;\n         bB.m_sweep.c.y += bB.m_invMass * p2Y;\n         bB.m_sweep.a += bB.m_invI * (r2X * p2Y - r2Y * p2X);\n         bB.SynchronizeTransform();\n      }\n      return linearError < b2Settings.b2_linearSlop;\n   }\n   Box2D.postDefs.push(function () {\n      Box2D.Dynamics.Joints.b2PulleyJoint.b2_minPulleyLength = 2.0;\n   });\n   Box2D.inherit(b2PulleyJointDef, Box2D.Dynamics.Joints.b2JointDef);\n   b2PulleyJointDef.prototype.__super = Box2D.Dynamics.Joints.b2JointDef.prototype;\n   b2PulleyJointDef.b2PulleyJointDef = function () {\n      Box2D.Dynamics.Joints.b2JointDef.b2JointDef.apply(this, arguments);\n      this.groundAnchorA = new b2Vec2();\n      this.groundAnchorB = new b2Vec2();\n      this.localAnchorA = new b2Vec2();\n      this.localAnchorB = new b2Vec2();\n   };\n   b2PulleyJointDef.prototype.b2PulleyJointDef = function () {\n      this.__super.b2JointDef.call(this);\n      this.type = b2Joint.e_pulleyJoint;\n      this.groundAnchorA.Set((-1.0), 1.0);\n      this.groundAnchorB.Set(1.0, 1.0);\n      this.localAnchorA.Set((-1.0), 0.0);\n      this.localAnchorB.Set(1.0, 0.0);\n      this.lengthA = 0.0;\n      this.maxLengthA = 0.0;\n      this.lengthB = 0.0;\n      this.maxLengthB = 0.0;\n      this.ratio = 1.0;\n      this.collideConnected = true;\n   }\n   b2PulleyJointDef.prototype.Initialize = function (bA, bB, gaA, gaB, anchorA, anchorB, r) {\n      if (r === undefined) r = 0;\n      this.bodyA = bA;\n      this.bodyB = bB;\n      this.groundAnchorA.SetV(gaA);\n      this.groundAnchorB.SetV(gaB);\n      this.localAnchorA = this.bodyA.GetLocalPoint(anchorA);\n      this.localAnchorB = this.bodyB.GetLocalPoint(anchorB);\n      var d1X = anchorA.x - gaA.x;\n      var d1Y = anchorA.y - gaA.y;\n      this.lengthA = Math.sqrt(d1X * d1X + d1Y * d1Y);\n      var d2X = anchorB.x - gaB.x;\n      var d2Y = anchorB.y - gaB.y;\n      this.lengthB = Math.sqrt(d2X * d2X + d2Y * d2Y);\n      this.ratio = r;\n      var C = this.lengthA + this.ratio * this.lengthB;\n      this.maxLengthA = C - this.ratio * b2PulleyJoint.b2_minPulleyLength;\n      this.maxLengthB = (C - b2PulleyJoint.b2_minPulleyLength) / this.ratio;\n   }\n   Box2D.inherit(b2RevoluteJoint, Box2D.Dynamics.Joints.b2Joint);\n   b2RevoluteJoint.prototype.__super = Box2D.Dynamics.Joints.b2Joint.prototype;\n   b2RevoluteJoint.b2RevoluteJoint = function () {\n      Box2D.Dynamics.Joints.b2Joint.b2Joint.apply(this, arguments);\n      this.K = new b2Mat22();\n      this.K1 = new b2Mat22();\n      this.K2 = new b2Mat22();\n      this.K3 = new b2Mat22();\n      this.impulse3 = new b2Vec3();\n      this.impulse2 = new b2Vec2();\n      this.reduced = new b2Vec2();\n      this.m_localAnchor1 = new b2Vec2();\n      this.m_localAnchor2 = new b2Vec2();\n      this.m_impulse = new b2Vec3();\n      this.m_mass = new b2Mat33();\n   };\n   b2RevoluteJoint.prototype.GetAnchorA = function () {\n      return this.m_bodyA.GetWorldPoint(this.m_localAnchor1);\n   }\n   b2RevoluteJoint.prototype.GetAnchorB = function () {\n      return this.m_bodyB.GetWorldPoint(this.m_localAnchor2);\n   }\n   b2RevoluteJoint.prototype.GetReactionForce = function (inv_dt) {\n      if (inv_dt === undefined) inv_dt = 0;\n      return new b2Vec2(inv_dt * this.m_impulse.x, inv_dt * this.m_impulse.y);\n   }\n   b2RevoluteJoint.prototype.GetReactionTorque = function (inv_dt) {\n      if (inv_dt === undefined) inv_dt = 0;\n      return inv_dt * this.m_impulse.z;\n   }\n   b2RevoluteJoint.prototype.GetJointAngle = function () {\n      return this.m_bodyB.m_sweep.a - this.m_bodyA.m_sweep.a - this.m_referenceAngle;\n   }\n   b2RevoluteJoint.prototype.GetJointSpeed = function () {\n      return this.m_bodyB.m_angularVelocity - this.m_bodyA.m_angularVelocity;\n   }\n   b2RevoluteJoint.prototype.IsLimitEnabled = function () {\n      return this.m_enableLimit;\n   }\n   b2RevoluteJoint.prototype.EnableLimit = function (flag) {\n      this.m_enableLimit = flag;\n   }\n   b2RevoluteJoint.prototype.GetLowerLimit = function () {\n      return this.m_lowerAngle;\n   }\n   b2RevoluteJoint.prototype.GetUpperLimit = function () {\n      return this.m_upperAngle;\n   }\n   b2RevoluteJoint.prototype.SetLimits = function (lower, upper) {\n      if (lower === undefined) lower = 0;\n      if (upper === undefined) upper = 0;\n      this.m_lowerAngle = lower;\n      this.m_upperAngle = upper;\n   }\n   b2RevoluteJoint.prototype.IsMotorEnabled = function () {\n      this.m_bodyA.SetAwake(true);\n      this.m_bodyB.SetAwake(true);\n      return this.m_enableMotor;\n   }\n   b2RevoluteJoint.prototype.EnableMotor = function (flag) {\n      this.m_enableMotor = flag;\n   }\n   b2RevoluteJoint.prototype.SetMotorSpeed = function (speed) {\n      if (speed === undefined) speed = 0;\n      this.m_bodyA.SetAwake(true);\n      this.m_bodyB.SetAwake(true);\n      this.m_motorSpeed = speed;\n   }\n   b2RevoluteJoint.prototype.GetMotorSpeed = function () {\n      return this.m_motorSpeed;\n   }\n   b2RevoluteJoint.prototype.SetMaxMotorTorque = function (torque) {\n      if (torque === undefined) torque = 0;\n      this.m_maxMotorTorque = torque;\n   }\n   b2RevoluteJoint.prototype.GetMotorTorque = function () {\n      return this.m_maxMotorTorque;\n   }\n   b2RevoluteJoint.prototype.b2RevoluteJoint = function (def) {\n      this.__super.b2Joint.call(this, def);\n      this.m_localAnchor1.SetV(def.localAnchorA);\n      this.m_localAnchor2.SetV(def.localAnchorB);\n      this.m_referenceAngle = def.referenceAngle;\n      this.m_impulse.SetZero();\n      this.m_motorImpulse = 0.0;\n      this.m_lowerAngle = def.lowerAngle;\n      this.m_upperAngle = def.upperAngle;\n      this.m_maxMotorTorque = def.maxMotorTorque;\n      this.m_motorSpeed = def.motorSpeed;\n      this.m_enableLimit = def.enableLimit;\n      this.m_enableMotor = def.enableMotor;\n      this.m_limitState = b2Joint.e_inactiveLimit;\n   }\n   b2RevoluteJoint.prototype.InitVelocityConstraints = function (step) {\n      var bA = this.m_bodyA;\n      var bB = this.m_bodyB;\n      var tMat;\n      var tX = 0;\n      if (this.m_enableMotor || this.m_enableLimit) {}\n      tMat = bA.m_xf.R;\n      var r1X = this.m_localAnchor1.x - bA.m_sweep.localCenter.x;\n      var r1Y = this.m_localAnchor1.y - bA.m_sweep.localCenter.y;\n      tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y);\n      r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y);\n      r1X = tX;\n      tMat = bB.m_xf.R;\n      var r2X = this.m_localAnchor2.x - bB.m_sweep.localCenter.x;\n      var r2Y = this.m_localAnchor2.y - bB.m_sweep.localCenter.y;\n      tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y);\n      r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y);\n      r2X = tX;\n      var m1 = bA.m_invMass;\n      var m2 = bB.m_invMass;\n      var i1 = bA.m_invI;\n      var i2 = bB.m_invI;\n      this.m_mass.col1.x = m1 + m2 + r1Y * r1Y * i1 + r2Y * r2Y * i2;\n      this.m_mass.col2.x = (-r1Y * r1X * i1) - r2Y * r2X * i2;\n      this.m_mass.col3.x = (-r1Y * i1) - r2Y * i2;\n      this.m_mass.col1.y = this.m_mass.col2.x;\n      this.m_mass.col2.y = m1 + m2 + r1X * r1X * i1 + r2X * r2X * i2;\n      this.m_mass.col3.y = r1X * i1 + r2X * i2;\n      this.m_mass.col1.z = this.m_mass.col3.x;\n      this.m_mass.col2.z = this.m_mass.col3.y;\n      this.m_mass.col3.z = i1 + i2;\n      this.m_motorMass = 1.0 / (i1 + i2);\n      if (this.m_enableMotor == false) {\n         this.m_motorImpulse = 0.0;\n      }\n      if (this.m_enableLimit) {\n         var jointAngle = bB.m_sweep.a - bA.m_sweep.a - this.m_referenceAngle;\n         if (b2Math.Abs(this.m_upperAngle - this.m_lowerAngle) < 2.0 * b2Settings.b2_angularSlop) {\n            this.m_limitState = b2Joint.e_equalLimits;\n         }\n         else if (jointAngle <= this.m_lowerAngle) {\n            if (this.m_limitState != b2Joint.e_atLowerLimit) {\n               this.m_impulse.z = 0.0;\n            }\n            this.m_limitState = b2Joint.e_atLowerLimit;\n         }\n         else if (jointAngle >= this.m_upperAngle) {\n            if (this.m_limitState != b2Joint.e_atUpperLimit) {\n               this.m_impulse.z = 0.0;\n            }\n            this.m_limitState = b2Joint.e_atUpperLimit;\n         }\n         else {\n            this.m_limitState = b2Joint.e_inactiveLimit;\n            this.m_impulse.z = 0.0;\n         }\n      }\n      else {\n         this.m_limitState = b2Joint.e_inactiveLimit;\n      }\n      if (step.warmStarting) {\n         this.m_impulse.x *= step.dtRatio;\n         this.m_impulse.y *= step.dtRatio;\n         this.m_motorImpulse *= step.dtRatio;\n         var PX = this.m_impulse.x;\n         var PY = this.m_impulse.y;\n         bA.m_linearVelocity.x -= m1 * PX;\n         bA.m_linearVelocity.y -= m1 * PY;\n         bA.m_angularVelocity -= i1 * ((r1X * PY - r1Y * PX) + this.m_motorImpulse + this.m_impulse.z);\n         bB.m_linearVelocity.x += m2 * PX;\n         bB.m_linearVelocity.y += m2 * PY;\n         bB.m_angularVelocity += i2 * ((r2X * PY - r2Y * PX) + this.m_motorImpulse + this.m_impulse.z);\n      }\n      else {\n         this.m_impulse.SetZero();\n         this.m_motorImpulse = 0.0;\n      }\n   }\n   b2RevoluteJoint.prototype.SolveVelocityConstraints = function (step) {\n      var bA = this.m_bodyA;\n      var bB = this.m_bodyB;\n      var tMat;\n      var tX = 0;\n      var newImpulse = 0;\n      var r1X = 0;\n      var r1Y = 0;\n      var r2X = 0;\n      var r2Y = 0;\n      var v1 = bA.m_linearVelocity;\n      var w1 = bA.m_angularVelocity;\n      var v2 = bB.m_linearVelocity;\n      var w2 = bB.m_angularVelocity;\n      var m1 = bA.m_invMass;\n      var m2 = bB.m_invMass;\n      var i1 = bA.m_invI;\n      var i2 = bB.m_invI;\n      if (this.m_enableMotor && this.m_limitState != b2Joint.e_equalLimits) {\n         var Cdot = w2 - w1 - this.m_motorSpeed;\n         var impulse = this.m_motorMass * ((-Cdot));\n         var oldImpulse = this.m_motorImpulse;\n         var maxImpulse = step.dt * this.m_maxMotorTorque;\n         this.m_motorImpulse = b2Math.Clamp(this.m_motorImpulse + impulse, (-maxImpulse), maxImpulse);\n         impulse = this.m_motorImpulse - oldImpulse;\n         w1 -= i1 * impulse;\n         w2 += i2 * impulse;\n      }\n      if (this.m_enableLimit && this.m_limitState != b2Joint.e_inactiveLimit) {\n         tMat = bA.m_xf.R;\n         r1X = this.m_localAnchor1.x - bA.m_sweep.localCenter.x;\n         r1Y = this.m_localAnchor1.y - bA.m_sweep.localCenter.y;\n         tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y);\n         r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y);\n         r1X = tX;\n         tMat = bB.m_xf.R;\n         r2X = this.m_localAnchor2.x - bB.m_sweep.localCenter.x;\n         r2Y = this.m_localAnchor2.y - bB.m_sweep.localCenter.y;\n         tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y);\n         r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y);\n         r2X = tX;\n         var Cdot1X = v2.x + ((-w2 * r2Y)) - v1.x - ((-w1 * r1Y));\n         var Cdot1Y = v2.y + (w2 * r2X) - v1.y - (w1 * r1X);\n         var Cdot2 = w2 - w1;\n         this.m_mass.Solve33(this.impulse3, (-Cdot1X), (-Cdot1Y), (-Cdot2));\n         if (this.m_limitState == b2Joint.e_equalLimits) {\n            this.m_impulse.Add(this.impulse3);\n         }\n         else if (this.m_limitState == b2Joint.e_atLowerLimit) {\n            newImpulse = this.m_impulse.z + this.impulse3.z;\n            if (newImpulse < 0.0) {\n               this.m_mass.Solve22(this.reduced, (-Cdot1X), (-Cdot1Y));\n               this.impulse3.x = this.reduced.x;\n               this.impulse3.y = this.reduced.y;\n               this.impulse3.z = (-this.m_impulse.z);\n               this.m_impulse.x += this.reduced.x;\n               this.m_impulse.y += this.reduced.y;\n               this.m_impulse.z = 0.0;\n            }\n         }\n         else if (this.m_limitState == b2Joint.e_atUpperLimit) {\n            newImpulse = this.m_impulse.z + this.impulse3.z;\n            if (newImpulse > 0.0) {\n               this.m_mass.Solve22(this.reduced, (-Cdot1X), (-Cdot1Y));\n               this.impulse3.x = this.reduced.x;\n               this.impulse3.y = this.reduced.y;\n               this.impulse3.z = (-this.m_impulse.z);\n               this.m_impulse.x += this.reduced.x;\n               this.m_impulse.y += this.reduced.y;\n               this.m_impulse.z = 0.0;\n            }\n         }\n         v1.x -= m1 * this.impulse3.x;\n         v1.y -= m1 * this.impulse3.y;\n         w1 -= i1 * (r1X * this.impulse3.y - r1Y * this.impulse3.x + this.impulse3.z);\n         v2.x += m2 * this.impulse3.x;\n         v2.y += m2 * this.impulse3.y;\n         w2 += i2 * (r2X * this.impulse3.y - r2Y * this.impulse3.x + this.impulse3.z);\n      }\n      else {\n         tMat = bA.m_xf.R;\n         r1X = this.m_localAnchor1.x - bA.m_sweep.localCenter.x;\n         r1Y = this.m_localAnchor1.y - bA.m_sweep.localCenter.y;\n         tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y);\n         r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y);\n         r1X = tX;\n         tMat = bB.m_xf.R;\n         r2X = this.m_localAnchor2.x - bB.m_sweep.localCenter.x;\n         r2Y = this.m_localAnchor2.y - bB.m_sweep.localCenter.y;\n         tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y);\n         r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y);\n         r2X = tX;\n         var CdotX = v2.x + ((-w2 * r2Y)) - v1.x - ((-w1 * r1Y));\n         var CdotY = v2.y + (w2 * r2X) - v1.y - (w1 * r1X);\n         this.m_mass.Solve22(this.impulse2, (-CdotX), (-CdotY));\n         this.m_impulse.x += this.impulse2.x;\n         this.m_impulse.y += this.impulse2.y;\n         v1.x -= m1 * this.impulse2.x;\n         v1.y -= m1 * this.impulse2.y;\n         w1 -= i1 * (r1X * this.impulse2.y - r1Y * this.impulse2.x);\n         v2.x += m2 * this.impulse2.x;\n         v2.y += m2 * this.impulse2.y;\n         w2 += i2 * (r2X * this.impulse2.y - r2Y * this.impulse2.x);\n      }\n      bA.m_linearVelocity.SetV(v1);\n      bA.m_angularVelocity = w1;\n      bB.m_linearVelocity.SetV(v2);\n      bB.m_angularVelocity = w2;\n   }\n   b2RevoluteJoint.prototype.SolvePositionConstraints = function (baumgarte) {\n      if (baumgarte === undefined) baumgarte = 0;\n      var oldLimitImpulse = 0;\n      var C = 0;\n      var tMat;\n      var bA = this.m_bodyA;\n      var bB = this.m_bodyB;\n      var angularError = 0.0;\n      var positionError = 0.0;\n      var tX = 0;\n      var impulseX = 0;\n      var impulseY = 0;\n      if (this.m_enableLimit && this.m_limitState != b2Joint.e_inactiveLimit) {\n         var angle = bB.m_sweep.a - bA.m_sweep.a - this.m_referenceAngle;\n         var limitImpulse = 0.0;\n         if (this.m_limitState == b2Joint.e_equalLimits) {\n            C = b2Math.Clamp(angle - this.m_lowerAngle, (-b2Settings.b2_maxAngularCorrection), b2Settings.b2_maxAngularCorrection);\n            limitImpulse = (-this.m_motorMass * C);\n            angularError = b2Math.Abs(C);\n         }\n         else if (this.m_limitState == b2Joint.e_atLowerLimit) {\n            C = angle - this.m_lowerAngle;\n            angularError = (-C);\n            C = b2Math.Clamp(C + b2Settings.b2_angularSlop, (-b2Settings.b2_maxAngularCorrection), 0.0);\n            limitImpulse = (-this.m_motorMass * C);\n         }\n         else if (this.m_limitState == b2Joint.e_atUpperLimit) {\n            C = angle - this.m_upperAngle;\n            angularError = C;\n            C = b2Math.Clamp(C - b2Settings.b2_angularSlop, 0.0, b2Settings.b2_maxAngularCorrection);\n            limitImpulse = (-this.m_motorMass * C);\n         }\n         bA.m_sweep.a -= bA.m_invI * limitImpulse;\n         bB.m_sweep.a += bB.m_invI * limitImpulse;\n         bA.SynchronizeTransform();\n         bB.SynchronizeTransform();\n      } {\n         tMat = bA.m_xf.R;\n         var r1X = this.m_localAnchor1.x - bA.m_sweep.localCenter.x;\n         var r1Y = this.m_localAnchor1.y - bA.m_sweep.localCenter.y;\n         tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y);\n         r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y);\n         r1X = tX;\n         tMat = bB.m_xf.R;\n         var r2X = this.m_localAnchor2.x - bB.m_sweep.localCenter.x;\n         var r2Y = this.m_localAnchor2.y - bB.m_sweep.localCenter.y;\n         tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y);\n         r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y);\n         r2X = tX;\n         var CX = bB.m_sweep.c.x + r2X - bA.m_sweep.c.x - r1X;\n         var CY = bB.m_sweep.c.y + r2Y - bA.m_sweep.c.y - r1Y;\n         var CLengthSquared = CX * CX + CY * CY;\n         var CLength = Math.sqrt(CLengthSquared);\n         positionError = CLength;\n         var invMass1 = bA.m_invMass;\n         var invMass2 = bB.m_invMass;\n         var invI1 = bA.m_invI;\n         var invI2 = bB.m_invI;\n         var k_allowedStretch = 10.0 * b2Settings.b2_linearSlop;\n         if (CLengthSquared > k_allowedStretch * k_allowedStretch) {\n            var uX = CX / CLength;\n            var uY = CY / CLength;\n            var k = invMass1 + invMass2;\n            var m = 1.0 / k;\n            impulseX = m * ((-CX));\n            impulseY = m * ((-CY));\n            var k_beta = 0.5;\n            bA.m_sweep.c.x -= k_beta * invMass1 * impulseX;\n            bA.m_sweep.c.y -= k_beta * invMass1 * impulseY;\n            bB.m_sweep.c.x += k_beta * invMass2 * impulseX;\n            bB.m_sweep.c.y += k_beta * invMass2 * impulseY;\n            CX = bB.m_sweep.c.x + r2X - bA.m_sweep.c.x - r1X;\n            CY = bB.m_sweep.c.y + r2Y - bA.m_sweep.c.y - r1Y;\n         }\n         this.K1.col1.x = invMass1 + invMass2;\n         this.K1.col2.x = 0.0;\n         this.K1.col1.y = 0.0;\n         this.K1.col2.y = invMass1 + invMass2;\n         this.K2.col1.x = invI1 * r1Y * r1Y;\n         this.K2.col2.x = (-invI1 * r1X * r1Y);\n         this.K2.col1.y = (-invI1 * r1X * r1Y);\n         this.K2.col2.y = invI1 * r1X * r1X;\n         this.K3.col1.x = invI2 * r2Y * r2Y;\n         this.K3.col2.x = (-invI2 * r2X * r2Y);\n         this.K3.col1.y = (-invI2 * r2X * r2Y);\n         this.K3.col2.y = invI2 * r2X * r2X;\n         this.K.SetM(this.K1);\n         this.K.AddM(this.K2);\n         this.K.AddM(this.K3);\n         this.K.Solve(b2RevoluteJoint.tImpulse, (-CX), (-CY));\n         impulseX = b2RevoluteJoint.tImpulse.x;\n         impulseY = b2RevoluteJoint.tImpulse.y;\n         bA.m_sweep.c.x -= bA.m_invMass * impulseX;\n         bA.m_sweep.c.y -= bA.m_invMass * impulseY;\n         bA.m_sweep.a -= bA.m_invI * (r1X * impulseY - r1Y * impulseX);\n         bB.m_sweep.c.x += bB.m_invMass * impulseX;\n         bB.m_sweep.c.y += bB.m_invMass * impulseY;\n         bB.m_sweep.a += bB.m_invI * (r2X * impulseY - r2Y * impulseX);\n         bA.SynchronizeTransform();\n         bB.SynchronizeTransform();\n      }\n      return positionError <= b2Settings.b2_linearSlop && angularError <= b2Settings.b2_angularSlop;\n   }\n   Box2D.postDefs.push(function () {\n      Box2D.Dynamics.Joints.b2RevoluteJoint.tImpulse = new b2Vec2();\n   });\n   Box2D.inherit(b2RevoluteJointDef, Box2D.Dynamics.Joints.b2JointDef);\n   b2RevoluteJointDef.prototype.__super = Box2D.Dynamics.Joints.b2JointDef.prototype;\n   b2RevoluteJointDef.b2RevoluteJointDef = function () {\n      Box2D.Dynamics.Joints.b2JointDef.b2JointDef.apply(this, arguments);\n      this.localAnchorA = new b2Vec2();\n      this.localAnchorB = new b2Vec2();\n   };\n   b2RevoluteJointDef.prototype.b2RevoluteJointDef = function () {\n      this.__super.b2JointDef.call(this);\n      this.type = b2Joint.e_revoluteJoint;\n      this.localAnchorA.Set(0.0, 0.0);\n      this.localAnchorB.Set(0.0, 0.0);\n      this.referenceAngle = 0.0;\n      this.lowerAngle = 0.0;\n      this.upperAngle = 0.0;\n      this.maxMotorTorque = 0.0;\n      this.motorSpeed = 0.0;\n      this.enableLimit = false;\n      this.enableMotor = false;\n   }\n   b2RevoluteJointDef.prototype.Initialize = function (bA, bB, anchor) {\n      this.bodyA = bA;\n      this.bodyB = bB;\n      this.localAnchorA = this.bodyA.GetLocalPoint(anchor);\n      this.localAnchorB = this.bodyB.GetLocalPoint(anchor);\n      this.referenceAngle = this.bodyB.GetAngle() - this.bodyA.GetAngle();\n   }\n   Box2D.inherit(b2WeldJoint, Box2D.Dynamics.Joints.b2Joint);\n   b2WeldJoint.prototype.__super = Box2D.Dynamics.Joints.b2Joint.prototype;\n   b2WeldJoint.b2WeldJoint = function () {\n      Box2D.Dynamics.Joints.b2Joint.b2Joint.apply(this, arguments);\n      this.m_localAnchorA = new b2Vec2();\n      this.m_localAnchorB = new b2Vec2();\n      this.m_impulse = new b2Vec3();\n      this.m_mass = new b2Mat33();\n   };\n   b2WeldJoint.prototype.GetAnchorA = function () {\n      return this.m_bodyA.GetWorldPoint(this.m_localAnchorA);\n   }\n   b2WeldJoint.prototype.GetAnchorB = function () {\n      return this.m_bodyB.GetWorldPoint(this.m_localAnchorB);\n   }\n   b2WeldJoint.prototype.GetReactionForce = function (inv_dt) {\n      if (inv_dt === undefined) inv_dt = 0;\n      return new b2Vec2(inv_dt * this.m_impulse.x, inv_dt * this.m_impulse.y);\n   }\n   b2WeldJoint.prototype.GetReactionTorque = function (inv_dt) {\n      if (inv_dt === undefined) inv_dt = 0;\n      return inv_dt * this.m_impulse.z;\n   }\n   b2WeldJoint.prototype.b2WeldJoint = function (def) {\n      this.__super.b2Joint.call(this, def);\n      this.m_localAnchorA.SetV(def.localAnchorA);\n      this.m_localAnchorB.SetV(def.localAnchorB);\n      this.m_referenceAngle = def.referenceAngle;\n      this.m_impulse.SetZero();\n      this.m_mass = new b2Mat33();\n   }\n   b2WeldJoint.prototype.InitVelocityConstraints = function (step) {\n      var tMat;\n      var tX = 0;\n      var bA = this.m_bodyA;\n      var bB = this.m_bodyB;\n      tMat = bA.m_xf.R;\n      var rAX = this.m_localAnchorA.x - bA.m_sweep.localCenter.x;\n      var rAY = this.m_localAnchorA.y - bA.m_sweep.localCenter.y;\n      tX = (tMat.col1.x * rAX + tMat.col2.x * rAY);\n      rAY = (tMat.col1.y * rAX + tMat.col2.y * rAY);\n      rAX = tX;\n      tMat = bB.m_xf.R;\n      var rBX = this.m_localAnchorB.x - bB.m_sweep.localCenter.x;\n      var rBY = this.m_localAnchorB.y - bB.m_sweep.localCenter.y;\n      tX = (tMat.col1.x * rBX + tMat.col2.x * rBY);\n      rBY = (tMat.col1.y * rBX + tMat.col2.y * rBY);\n      rBX = tX;\n      var mA = bA.m_invMass;\n      var mB = bB.m_invMass;\n      var iA = bA.m_invI;\n      var iB = bB.m_invI;\n      this.m_mass.col1.x = mA + mB + rAY * rAY * iA + rBY * rBY * iB;\n      this.m_mass.col2.x = (-rAY * rAX * iA) - rBY * rBX * iB;\n      this.m_mass.col3.x = (-rAY * iA) - rBY * iB;\n      this.m_mass.col1.y = this.m_mass.col2.x;\n      this.m_mass.col2.y = mA + mB + rAX * rAX * iA + rBX * rBX * iB;\n      this.m_mass.col3.y = rAX * iA + rBX * iB;\n      this.m_mass.col1.z = this.m_mass.col3.x;\n      this.m_mass.col2.z = this.m_mass.col3.y;\n      this.m_mass.col3.z = iA + iB;\n      if (step.warmStarting) {\n         this.m_impulse.x *= step.dtRatio;\n         this.m_impulse.y *= step.dtRatio;\n         this.m_impulse.z *= step.dtRatio;\n         bA.m_linearVelocity.x -= mA * this.m_impulse.x;\n         bA.m_linearVelocity.y -= mA * this.m_impulse.y;\n         bA.m_angularVelocity -= iA * (rAX * this.m_impulse.y - rAY * this.m_impulse.x + this.m_impulse.z);\n         bB.m_linearVelocity.x += mB * this.m_impulse.x;\n         bB.m_linearVelocity.y += mB * this.m_impulse.y;\n         bB.m_angularVelocity += iB * (rBX * this.m_impulse.y - rBY * this.m_impulse.x + this.m_impulse.z);\n      }\n      else {\n         this.m_impulse.SetZero();\n      }\n   }\n   b2WeldJoint.prototype.SolveVelocityConstraints = function (step) {\n      var tMat;\n      var tX = 0;\n      var bA = this.m_bodyA;\n      var bB = this.m_bodyB;\n      var vA = bA.m_linearVelocity;\n      var wA = bA.m_angularVelocity;\n      var vB = bB.m_linearVelocity;\n      var wB = bB.m_angularVelocity;\n      var mA = bA.m_invMass;\n      var mB = bB.m_invMass;\n      var iA = bA.m_invI;\n      var iB = bB.m_invI;\n      tMat = bA.m_xf.R;\n      var rAX = this.m_localAnchorA.x - bA.m_sweep.localCenter.x;\n      var rAY = this.m_localAnchorA.y - bA.m_sweep.localCenter.y;\n      tX = (tMat.col1.x * rAX + tMat.col2.x * rAY);\n      rAY = (tMat.col1.y * rAX + tMat.col2.y * rAY);\n      rAX = tX;\n      tMat = bB.m_xf.R;\n      var rBX = this.m_localAnchorB.x - bB.m_sweep.localCenter.x;\n      var rBY = this.m_localAnchorB.y - bB.m_sweep.localCenter.y;\n      tX = (tMat.col1.x * rBX + tMat.col2.x * rBY);\n      rBY = (tMat.col1.y * rBX + tMat.col2.y * rBY);\n      rBX = tX;\n      var Cdot1X = vB.x - wB * rBY - vA.x + wA * rAY;\n      var Cdot1Y = vB.y + wB * rBX - vA.y - wA * rAX;\n      var Cdot2 = wB - wA;\n      var impulse = new b2Vec3();\n      this.m_mass.Solve33(impulse, (-Cdot1X), (-Cdot1Y), (-Cdot2));\n      this.m_impulse.Add(impulse);\n      vA.x -= mA * impulse.x;\n      vA.y -= mA * impulse.y;\n      wA -= iA * (rAX * impulse.y - rAY * impulse.x + impulse.z);\n      vB.x += mB * impulse.x;\n      vB.y += mB * impulse.y;\n      wB += iB * (rBX * impulse.y - rBY * impulse.x + impulse.z);\n      bA.m_angularVelocity = wA;\n      bB.m_angularVelocity = wB;\n   }\n   b2WeldJoint.prototype.SolvePositionConstraints = function (baumgarte) {\n      if (baumgarte === undefined) baumgarte = 0;\n      var tMat;\n      var tX = 0;\n      var bA = this.m_bodyA;\n      var bB = this.m_bodyB;\n      tMat = bA.m_xf.R;\n      var rAX = this.m_localAnchorA.x - bA.m_sweep.localCenter.x;\n      var rAY = this.m_localAnchorA.y - bA.m_sweep.localCenter.y;\n      tX = (tMat.col1.x * rAX + tMat.col2.x * rAY);\n      rAY = (tMat.col1.y * rAX + tMat.col2.y * rAY);\n      rAX = tX;\n      tMat = bB.m_xf.R;\n      var rBX = this.m_localAnchorB.x - bB.m_sweep.localCenter.x;\n      var rBY = this.m_localAnchorB.y - bB.m_sweep.localCenter.y;\n      tX = (tMat.col1.x * rBX + tMat.col2.x * rBY);\n      rBY = (tMat.col1.y * rBX + tMat.col2.y * rBY);\n      rBX = tX;\n      var mA = bA.m_invMass;\n      var mB = bB.m_invMass;\n      var iA = bA.m_invI;\n      var iB = bB.m_invI;\n      var C1X = bB.m_sweep.c.x + rBX - bA.m_sweep.c.x - rAX;\n      var C1Y = bB.m_sweep.c.y + rBY - bA.m_sweep.c.y - rAY;\n      var C2 = bB.m_sweep.a - bA.m_sweep.a - this.m_referenceAngle;\n      var k_allowedStretch = 10.0 * b2Settings.b2_linearSlop;\n      var positionError = Math.sqrt(C1X * C1X + C1Y * C1Y);\n      var angularError = b2Math.Abs(C2);\n      if (positionError > k_allowedStretch) {\n         iA *= 1.0;\n         iB *= 1.0;\n      }\n      this.m_mass.col1.x = mA + mB + rAY * rAY * iA + rBY * rBY * iB;\n      this.m_mass.col2.x = (-rAY * rAX * iA) - rBY * rBX * iB;\n      this.m_mass.col3.x = (-rAY * iA) - rBY * iB;\n      this.m_mass.col1.y = this.m_mass.col2.x;\n      this.m_mass.col2.y = mA + mB + rAX * rAX * iA + rBX * rBX * iB;\n      this.m_mass.col3.y = rAX * iA + rBX * iB;\n      this.m_mass.col1.z = this.m_mass.col3.x;\n      this.m_mass.col2.z = this.m_mass.col3.y;\n      this.m_mass.col3.z = iA + iB;\n      var impulse = new b2Vec3();\n      this.m_mass.Solve33(impulse, (-C1X), (-C1Y), (-C2));\n      bA.m_sweep.c.x -= mA * impulse.x;\n      bA.m_sweep.c.y -= mA * impulse.y;\n      bA.m_sweep.a -= iA * (rAX * impulse.y - rAY * impulse.x + impulse.z);\n      bB.m_sweep.c.x += mB * impulse.x;\n      bB.m_sweep.c.y += mB * impulse.y;\n      bB.m_sweep.a += iB * (rBX * impulse.y - rBY * impulse.x + impulse.z);\n      bA.SynchronizeTransform();\n      bB.SynchronizeTransform();\n      return positionError <= b2Settings.b2_linearSlop && angularError <= b2Settings.b2_angularSlop;\n   }\n   Box2D.inherit(b2WeldJointDef, Box2D.Dynamics.Joints.b2JointDef);\n   b2WeldJointDef.prototype.__super = Box2D.Dynamics.Joints.b2JointDef.prototype;\n   b2WeldJointDef.b2WeldJointDef = function () {\n      Box2D.Dynamics.Joints.b2JointDef.b2JointDef.apply(this, arguments);\n      this.localAnchorA = new b2Vec2();\n      this.localAnchorB = new b2Vec2();\n   };\n   b2WeldJointDef.prototype.b2WeldJointDef = function () {\n      this.__super.b2JointDef.call(this);\n      this.type = b2Joint.e_weldJoint;\n      this.referenceAngle = 0.0;\n   }\n   b2WeldJointDef.prototype.Initialize = function (bA, bB, anchor) {\n      this.bodyA = bA;\n      this.bodyB = bB;\n      this.localAnchorA.SetV(this.bodyA.GetLocalPoint(anchor));\n      this.localAnchorB.SetV(this.bodyB.GetLocalPoint(anchor));\n      this.referenceAngle = this.bodyB.GetAngle() - this.bodyA.GetAngle();\n   }\n})();\n(function () {\n   var b2DebugDraw = Box2D.Dynamics.b2DebugDraw;\n   b2DebugDraw.b2DebugDraw = function () {\n      this.m_drawScale = 1.0;\n      this.m_lineThickness = 1.0;\n      this.m_alpha = 1.0;\n      this.m_fillAlpha = 1.0;\n      this.m_xformScale = 1.0;\n      var __this = this;\n      //#WORKAROUND\n      this.m_sprite = {\n         graphics: {\n            clear: function () {\n               __this.m_ctx.clearRect(0, 0, __this.m_ctx.canvas.width, __this.m_ctx.canvas.height)\n            }\n         }\n      };\n   };\n   b2DebugDraw.prototype._color = function (color, alpha) {\n      return \"rgba(\" + ((color & 0xFF0000) >> 16) + \",\" + ((color & 0xFF00) >> 8) + \",\" + (color & 0xFF) + \",\" + alpha + \")\";\n   };\n   b2DebugDraw.prototype.b2DebugDraw = function () {\n      this.m_drawFlags = 0;\n   };\n   b2DebugDraw.prototype.SetFlags = function (flags) {\n      if (flags === undefined) flags = 0;\n      this.m_drawFlags = flags;\n   };\n   b2DebugDraw.prototype.GetFlags = function () {\n      return this.m_drawFlags;\n   };\n   b2DebugDraw.prototype.AppendFlags = function (flags) {\n      if (flags === undefined) flags = 0;\n      this.m_drawFlags |= flags;\n   };\n   b2DebugDraw.prototype.ClearFlags = function (flags) {\n      if (flags === undefined) flags = 0;\n      this.m_drawFlags &= ~flags;\n   };\n   b2DebugDraw.prototype.SetSprite = function (sprite) {\n      this.m_ctx = sprite;\n   };\n   b2DebugDraw.prototype.GetSprite = function () {\n      return this.m_ctx;\n   };\n   b2DebugDraw.prototype.SetDrawScale = function (drawScale) {\n      if (drawScale === undefined) drawScale = 0;\n      this.m_drawScale = drawScale;\n   };\n   b2DebugDraw.prototype.GetDrawScale = function () {\n      return this.m_drawScale;\n   };\n   b2DebugDraw.prototype.SetLineThickness = function (lineThickness) {\n      if (lineThickness === undefined) lineThickness = 0;\n      this.m_lineThickness = lineThickness;\n      this.m_ctx.strokeWidth = lineThickness;\n   };\n   b2DebugDraw.prototype.GetLineThickness = function () {\n      return this.m_lineThickness;\n   };\n   b2DebugDraw.prototype.SetAlpha = function (alpha) {\n      if (alpha === undefined) alpha = 0;\n      this.m_alpha = alpha;\n   };\n   b2DebugDraw.prototype.GetAlpha = function () {\n      return this.m_alpha;\n   };\n   b2DebugDraw.prototype.SetFillAlpha = function (alpha) {\n      if (alpha === undefined) alpha = 0;\n      this.m_fillAlpha = alpha;\n   };\n   b2DebugDraw.prototype.GetFillAlpha = function () {\n      return this.m_fillAlpha;\n   };\n   b2DebugDraw.prototype.SetXFormScale = function (xformScale) {\n      if (xformScale === undefined) xformScale = 0;\n      this.m_xformScale = xformScale;\n   };\n   b2DebugDraw.prototype.GetXFormScale = function () {\n      return this.m_xformScale;\n   };\n   b2DebugDraw.prototype.DrawPolygon = function (vertices, vertexCount, color) {\n      if (!vertexCount) return;\n      var s = this.m_ctx;\n      var drawScale = this.m_drawScale;\n      s.beginPath();\n      s.strokeStyle = this._color(color.color, this.m_alpha);\n      s.moveTo(vertices[0].x * drawScale, vertices[0].y * drawScale);\n      for (var i = 1; i < vertexCount; i++) {\n         s.lineTo(vertices[i].x * drawScale, vertices[i].y * drawScale);\n      }\n      s.lineTo(vertices[0].x * drawScale, vertices[0].y * drawScale);\n      s.closePath();\n      s.stroke();\n   };\n   b2DebugDraw.prototype.DrawSolidPolygon = function (vertices, vertexCount, color) {\n      if (!vertexCount) return;\n      var s = this.m_ctx;\n      var drawScale = this.m_drawScale;\n      s.beginPath();\n      s.strokeStyle = this._color(color.color, this.m_alpha);\n      s.fillStyle = this._color(color.color, this.m_fillAlpha);\n      s.moveTo(vertices[0].x * drawScale, vertices[0].y * drawScale);\n      for (var i = 1; i < vertexCount; i++) {\n         s.lineTo(vertices[i].x * drawScale, vertices[i].y * drawScale);\n      }\n      s.lineTo(vertices[0].x * drawScale, vertices[0].y * drawScale);\n      s.closePath();\n      s.fill();\n      s.stroke();\n   };\n   b2DebugDraw.prototype.DrawCircle = function (center, radius, color) {\n      if (!radius) return;\n      var s = this.m_ctx;\n      var drawScale = this.m_drawScale;\n      s.beginPath();\n      s.strokeStyle = this._color(color.color, this.m_alpha);\n      s.arc(center.x * drawScale, center.y * drawScale, radius * drawScale, 0, Math.PI * 2, true);\n      s.closePath();\n      s.stroke();\n   };\n   b2DebugDraw.prototype.DrawSolidCircle = function (center, radius, axis, color) {\n      if (!radius) return;\n      var s = this.m_ctx,\n         drawScale = this.m_drawScale,\n         cx = center.x * drawScale,\n         cy = center.y * drawScale;\n      s.moveTo(0, 0);\n      s.beginPath();\n      s.strokeStyle = this._color(color.color, this.m_alpha);\n      s.fillStyle = this._color(color.color, this.m_fillAlpha);\n      s.arc(cx, cy, radius * drawScale, 0, Math.PI * 2, true);\n      s.moveTo(cx, cy);\n      s.lineTo((center.x + axis.x * radius) * drawScale, (center.y + axis.y * radius) * drawScale);\n      s.closePath();\n      s.fill();\n      s.stroke();\n   };\n   b2DebugDraw.prototype.DrawSegment = function (p1, p2, color) {\n      var s = this.m_ctx,\n         drawScale = this.m_drawScale;\n      s.strokeStyle = this._color(color.color, this.m_alpha);\n      s.beginPath();\n      s.moveTo(p1.x * drawScale, p1.y * drawScale);\n      s.lineTo(p2.x * drawScale, p2.y * drawScale);\n      s.closePath();\n      s.stroke();\n   };\n   b2DebugDraw.prototype.DrawTransform = function (xf) {\n      var s = this.m_ctx,\n         drawScale = this.m_drawScale;\n      s.beginPath();\n      s.strokeStyle = this._color(0xff0000, this.m_alpha);\n      s.moveTo(xf.position.x * drawScale, xf.position.y * drawScale);\n      s.lineTo((xf.position.x + this.m_xformScale * xf.R.col1.x) * drawScale, (xf.position.y + this.m_xformScale * xf.R.col1.y) * drawScale);\n\n      s.strokeStyle = this._color(0xff00, this.m_alpha);\n      s.moveTo(xf.position.x * drawScale, xf.position.y * drawScale);\n      s.lineTo((xf.position.x + this.m_xformScale * xf.R.col2.x) * drawScale, (xf.position.y + this.m_xformScale * xf.R.col2.y) * drawScale);\n      s.closePath();\n      s.stroke();\n   };\n})();\nvar i;\nfor (i = 0; i < Box2D.postDefs.length; ++i) Box2D.postDefs[i]();\n\nmodule.exports = Box2D"]}